大佬们怎么用eeprom记录流水灯程序的运行状态呢?就是能够实现断电了以后再次上电之后还能从原来断电了

位移传感器在火车上的车轮缘状检测中有什么应用?-电子发烧友网
火车轮缘的几何状态参数影响着列车运行的速度与平稳度,对列车的安全运行十分重要。传统的检测手段较为复杂,通常是用带有游标的专用尺子来进行测量,对数据的人工读取造成测量的误差比较大,同时不能实现检测数据的数字化管理。随着我国铁路事业的发展,列车运行速度越来越快,火车轮缘状态参数的精确快速检修和数字化管理变得十分重要。轮缘检测仪采用现代传感器技术、单片机处理系统和简洁稳定的机械结构,可方便精确的对几何状态参数进行连续快速测量,实现了轮缘高度、轮辋厚度等参数测量的数字化。
轮缘高度、宽度、轮辋厚度等方面的检测用到很多传感器,而最为关注的是位移传感器,位移传感器有很多种,用在火车上车轮缘状检测是目前新型传感器技术叫做激光位移传感器,激光位移传感器可精确非接触测量被测物体的位置、位移等变化,主要应用于检测物的位移、厚度、振动、距离、直径等几何量的测量。目前用在火车轮缘上检测是的激光三角测量法,短距离的测量精度很高。可以直接把位移传感器安装在轨道上进行检测,同样也可以采用激光反射式位移传感器为测量器件激光传感器模沿直线方向扫描轮缘形状,同时记录整个轮缘数据。通过微处理器即可得出整个轮缘轮廓曲线,进而求得轮缘宽度、轮缘高度、70mm磨损量和磨损面积等。并且能把测量的数据上传计算机,生成数据库,利用先进的后处理软件对火车轮缘进行数字化管理。它不仅可以对在线运行列车测量轮对的磨损,还可以在生产线上对轮对尺寸是否合格进行分选。
交通运输的发展离不开检测技术,而仪器仪表以及传感器技术才是检测技术的核心。高速动力发展的今天,人们不仅仅希望体验到是的舒适和享受,而且跟多的希望得到是安全。传感器技术的发展会给人们生活交通带来更多的安全,我国传感器技术的发展也将带动交通运输方面在国际上拥有的一流先进技术发展。
文章来源栏目
加载更多评论
后参与评论豆丁微信公众号
君,已阅读到文档的结尾了呢~~
【doc】用ATmega16设计简单流水灯电路
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
【doc】用ATmega16设计简单流水灯电路
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口EPS系统的工作原理是什么?如何设计一个基于单片机的EPS系统驱动电路?-电子发烧友网
1 EPS系统基本结构及工作原理
电动助力转向系统(EPS,EleCTRIC Power Steering)是未来转向系统的发展方向。该系统由电动机直接提供转向助力,具有调整简单、装置灵活以及无论在何种工况下都能提供转向助力的特点。EPS最为突出的是该系统可在不更换系统硬件的情况下,通过改变控制器软件的设计,十分方便地调节系统的助力特性,使汽车能在不同车速下获得不同的助力特性,以满足不同工况下驾驶员对路感的要求。
电动助力转向系统(EPS)主要包括传感器、控制器和执行器三大部件。传感器将采集到的信号经过相应处理后输人到控制器,控制器运行内部控制算法,向执行器发出指令,控制执行器的动作,系统结构如图1所示。其工作原理为:在操纵方向盘时,转矩传感器根据输人转向力矩的大小,产生出相应的电压信号,由此电动式动力系统就可以检测出操纵力的大小,同时,根据车速传感器产生的脉冲信号又可测出车速,再控制电动机的电流,形成适当的转向助力。
2 EPS控制系统硬件电路设计
2.1 微控制器的选择
MOTOROLA公司的MC9S12系列单片机是基于16位HCS12 CPU及0.5&m制造工艺的高速、高性能5.0V FLASH微控制器,是根据当前汽车的要求设计出来的一个系列。它使用了锁相环技术或内部倍频技术,使内部总线速度大大高于时钟产生器的频率,在同样速度下所使用的时钟频率较同类单片机低很多,因而高频噪声低,抗干扰能力强,更适合于汽车内部恶劣的环境。设计方案采用MC9S12DP256单片机,其主频高达25 MHz,同时片上还集成了许多标准模块,包括2个异步串行通信口SCI,3个同步串行通信口SPI,8通道输人捕捉/输出比较定时器、2个10位8通道A/D转换模块、1个8通道脉宽调制模块、49个独立数字I/0口(其中20个具有外部中断及唤醒功能)、兼容CAN2.OA/B协议的5个CAN模块以及一个内部IC总线模块;片内拥有256 KB的Flash EEPROM,12KB的RAM及4KB的EEPROM,资源十分丰富。
2.2 硬件电路总体框架
电动助力转向系统的硬件电路主要包括以下模块:MC9S12DP256微控制器、电源电路、信号处理电路、直流电机功率驱动模块、故障诊断模块与显示模块、车速传感器、扭矩传感器、发动机点火信号、电流及电流传感器等接人处理电路,另外还有电磁离合器等,EPS系统的硬件逻辑框架如图2所示。
2.3 电机控制电路设计
直流电动机是EPS系统的执行元件,电机的控制电路在系统设计中有着特殊的地位。在本系统中采用脉宽调制(PWM)控制H桥电路实施对直流电动机的控制,由4个功率MOSFET组成,如图3所示。采用PWM伺服控制方式,MOSFET功率管的驱动电路简单,工作频率高,可工作在上百千赫的开关状态下。系统采用4个International Reetifier公司生产的IRF3205型MOSFET功率管组成H桥路的4个臂。IRF3205具有8 m&O导通电阻、功耗小、耐压达55V、最大直流电流110A、满足EPS系统对MOSFET功率管低压(正常工作不超过15V)大电流(额定电流30 A)的要求。
2.3.1 H桥上侧桥臂MOSFET功率管驱动电路设计
上侧桥臂的MOSFET功率管驱动电路如图4所示,其中Qa/Qb为上侧桥臂的功率MOSFET a管或b管,vdble为倍压电源电路提供的电源电压。当MOSFET的控制信号a(b)为高电平时,Q1和Q2导通,电源通过Q2,D1以及R5与C1的并联电路向Qa充电,直至Qa完全导通,Q3截止。当Qa导通时,忽略Qa的漏极和源极之间的电压降,则Qa的源极电压等于蓄电池电源电压。此时,Qa的栅-源极电压降VGS=( Vdble-VCE-VF-Vbat),其中VCE为2N2907的集一射极饱和导通电压,其典型值为0.4V,VF为D1的正向导通压降,其典型值为0.34V,Vbat为蓄电池电压。为保证器件可靠导通,降低器件的直流导通损耗,VGS不低于l0V。因此需设计高效的倍压电源电路,以保证Vdble的值足够大,满足功率MOSFET的驱动要求。如果蓄电池电压为12V时,Vdble&12V+0.34V+0.4V+10V=22.74V。
当MOSFET的控制信号a(b)管为低电平时,Q1和Q2均截止,Q3导通,Qa的栅-源极电压通过R5与C1的并联电路及Q3迅速释放,直至Qa关断。Qa关断时,连接其栅-源之间的电阻R6使其栅-源电压为零。IRF3205的导通门限电压为2~4V,OV的栅-源极电压能够使其关断。
2.3.2 下侧桥臂的功率MOSFET管驱动电路
下侧桥臂的功率MOSFET驱动电路如图5所示,其中Qc/Qd为下侧桥臂的功率MOSFET的c管或d管。当MOSFET的控制信号c(d)为高电平时,Q1导通,Q2截止,Q1的栅极电压通过R3与C1组成的并联电路、D1及Q1迅速释放,Qc/Qd关断。
当MOSFET的控制信号c(d)低电平时, Q1截止,Q2导通,电源通过Q2以及R3与C,组成的并联电路对Qc的栅极充电,直至Qc完全导通。当Qc导通时,其栅-源极电压等于电源电压减去Q2的集-射极饱和导通电压,而电源电压又等于蓄电池电压减去1N5819二极管的正向导通电压。所以,Qc的栅-源极电压VGS=(Vbat-VCE-VF),当蓄电池电压为12V,取各参数为典型值得Qc的栅-源极电压为11.26V,满足IRF3205的栅极驱动(10V)所需的电压
2.4 蓄电池倍压工作电源
由于上侧桥臂的MOSFET功率管的栅-源电压必需大于22.74V,而蓄电池电压只有12V。因此需要设计蓄电池倍压电源,产生二倍于蓄电池电压的电源电压,提供给H桥a、b功率管的驱动电路,保证高侧MOSFET功率管能够完全导通。
电源倍压电路如图6所示,NE555定时器工作于多谐振荡器模式,于引脚3产生幅值等于NE555的供电电压,频率为1/0.7(R2+2R1)C1的矩形波。C3、C4,Dl和D2构成电荷泵电路。当NE555引脚3输出高电平时,由于电容电压不能突变,C3正极电压为24V或接近24V,并通过D2向C4充电,使C4电压为24V或接近24V。由于受电路的工作效率、二极管D1和D2上的正向电压降以及负载能力的限制,使得系统输出电压低于供电电压的2倍。
3 电机驱动电路台架试验
根据电动转向控制系统对稳定性和跟踪性的需要,采用最优H二控制器编制电动转向系统控制程序,并在汽车电动转向试验台上进行台架模拟试验,车速信号用模拟车速传感器发出的脉冲信号代替网。图7为中等车速转向助力时,测量的方向盘转矩(T)和助力电动机电流(I)变化曲线。从图7中可以看出,在转向过程中,助力电动机电流随着方向盘转矩的变化而变化,电动机电流的变化趋势和方向盘转矩的变化趋势相吻合,表明电动机的助力转矩对方向盘转矩有良好的跟踪性能。转向操作时,无助力滞后感,转向平稳,表明转向系统具有良好的跟踪性能和操纵稳定性。
MC9S12系列16位单片机片内资源丰富,对于一般的简单应用,只需一片单片机加少量围电路即可。开发的直流电机电路经初步试验,性能良好,可基本满足电动助力系统转向系统的需要。文中只介绍电动助力转向系统硬件电路设计的基本框架,为获取良好的控制效果,电动助力转向系统将不仅仅局限于依据车速和扭矩这2个基本的信号进行电动助力转向系统的研制,转向角、转向速度、横向加速度及前轴重力等多种信号在未来的电动助力转向系统中可能都是要考虑的因素。
文章来源栏目
加载更多评论
后参与评论51单片机 EEPROM 24c02 I2C代码封装保存实现流水灯
> 51单片机 EEPROM 24c02 I2C代码封装保存实现流水灯
51单片机 EEPROM 24c02 I2C代码封装保存实现流水灯
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC>_<:i2c.c本文引用地址:1 /*--2 名称:IIC协议 3 内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本例是1us机器4 周期,即晶振频率要小于12MHZ)5 */
6 #include "i2c.h"7 #define
//定义空指令8
//应答标志位9 sbit SDA=P2^1;10 sbit SCL=P2^0;11 /*12 uS延时函数,含有输入参数 unsigned char t,无返回值13 unsigned char 是定义无符号字符变量,其值的范围是14 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时15 长度如下 T=tx2+5 uS 16 */17 void DelayUs2x(unsigned char t)18 {
while(--t);20 }21 /*22 mS延时函数,含有输入参数 unsigned char t,无返回值23 unsigned char 是定义无符号字符变量,其值的范围是24 0~255 这里使用晶振12M,精确延时请使用汇编25 */26 void DelayMs(unsigned char t)27 {28
while(t--)29
//大致延时1mS31
DelayUs2x(245);32
DelayUs2x(245);33
}34 }35 /*36 启动总线37 */38 void Start_I2c()39 {40
//发送起始条件的数据信号41
//起始条件建立时间大于4.7us,延时44
//发送起始信号49
//起始条件锁定时间大于4&50
//钳住I2C总线,准备发送或接收数据55
_Nop();57 }58 /*59 结束总线60 */61 void Stop_I2c()62 {63
//发送结束条件的数据信号64
//发送结束条件的时钟信号65
//结束条件建立时间大于4&66
//发送I2C总线结束信号72
_Nop();76 }77 /*-78 字节数据传送函数
79 函数原型: void
SendByte(unsigned char c);80 功能:
将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对81 此状态位进行操作.(不应答或非应答都使ack=0 假)
82 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。83 */84 void
SendByte(unsigned char c)85 {86
unsigned char BitC87
for(BitCnt=0;BitCnt<8;BitCnt++)
//要传送的数据长度为8位88
if((c<<BitCnt)&0x80)SDA=1;
//判断发送位90
//置时钟线为高,通知被控器开始接收数据位93
_Nop(); 94
//保证时钟高电平周期大于4&95
_Nop();101
_Nop();102
//8位发送完后释放数据线,准备接收应答位103
_Nop();104
_Nop();107
_Nop();108
_Nop();109
if(SDA==1)ack=0;
else ack=1;
//判断是否接收到应答信号SCL=0;112
_Nop();113
_Nop();114 }115 /*-116 字节数据传送函数
117 函数原型: unsigned char
RcvByte();118 功能:
用来接收从器件传来的数据,并判断总线错误(不发应答信号),119 发完后请用应答函数。
121 unsigned char
RcvByte()122 {123
unsigned char BitC125 126
retc=0; 127
//置数据线为输入方式128
for(BitCnt=0;BitCnt<8;BitCnt++)129
//置时钟线为低,准备接收数据位132
_Nop();133
//时钟低电平周期大于4.7us134
_Nop();135
_Nop();136
_Nop();137
//置时钟线为高使数据线上数据有效138
_Nop();139
_Nop();140
retc=retc<<1;141
if(SDA==1)retc=retc+1; //读数据位,接收的数据位放入retc中142
_Nop();143
_Nop(); 144
_Nop();147
_Nop();148
return(retc);149 }150 /*-151 应答子函数152 原型:
void Ack_I2c(void);153 -*/154 void Ack_I2c(void)155 {156
_Nop();158
_Nop();159
_Nop();162
//时钟低电平周期大于4&163
_Nop();164
_Nop();165
//清时钟线,钳住I2C总线以便继续接收167
_Nop();168
169 }170 /*-171 非应答子函数172 原型:
void NoAck_I2c(void);173 -*/174 void NoAck_I2c(void)175 {176
_Nop();178
_Nop();179
_Nop();182
//时钟低电平周期大于4&183
_Nop();184
_Nop();185
//清时钟线,钳住I2C总线以便继续接收187
_Nop();188
189 }190 /*-191 向无子地址器件发送字节数据函数
192 函数原型: bit
ISendByte(unsigned char sla,ucahr c);
从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.194 如果返回1表示操作成功,否则操作有误。195 注意:
使用前必须已结束总线。196 -*/197 /*bit ISendByte(unsigned char sla,unsigned char c)198 {199
Start_I2c();
//启动总线200
SendByte(sla);
//发送器件地址201
if(ack==0)return(0);202
SendByte(c);
//发送数据203
if(ack==0)return(0);204
Stop_I2c();
//结束总线205
return(1);206 }207 */208 /*-209 向有子地址器件发送多字节数据函数
210 函数原型: bit
ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);
从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件212 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。213 如果返回1表示操作成功,否则操作有误。214 注意:
使用前必须已结束总线。215 -*/216 bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)217 {218219
for(i=0;i<i++)220
Start_I2c();
//启动总线SendByte(sla);
//发送器件地址223
if(ack==0)return(0);224
SendByte(suba);
//发送器件子地址225
if(ack==0)return(0); 226
SendByte(*s);
//发送数据228
if(ack==0)return(0);230
Stop_I2c();
//结束总线231
DelayMs(2);
//必须延时等待芯片内部自动处理数据完毕232
suba++;234
return(1);236 }237 238 /*-239 向无子地址器件读字节数据函数
240 函数原型: bit
IRcvByte(unsigned char sla,ucahr *c);
从启动总线到发送地址,读数据,结束总线的全过程,从器件地242 址sla,返回值在c.243 如果返回1表示操作成功,否则操作有误。244 注意:
使用前必须已结束总线。245 -*/246 /*bit IRcvByte(unsigned char sla,unsigned char *c)247 {248
Start_I2c();
//启动总线249
SendByte(sla+1);
//发送器件地址250
if(ack==0)return(0);251
*c=RcvByte();
//读取数据252
NoAck_I2c();
//发送非就答位253
Stop_I2c();
//结束总线254
return(1);255 }256 */257 /*-258 向有子地址器件读取多字节数据函数
259 函数原型: bit
ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);
从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件261 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。262 如果返回1表示操作成功,否则操作有误。263 注意:
使用前必须已结束总线。264 -*/265 bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)266 {267268
Start_I2c();
//启动总线270
SendByte(sla);
//发送器件地址271
if(ack==0)return(0);272
SendByte(suba);
//发送器件子地址273
if(ack==0)return(0);274
Start_I2c();276
SendByte(sla+1);277
if(ack==0)return(0);278
for(i=0;i<no-1;i++)280
*s=RcvByte();
//发送数据282
Ack_I2c();
//发送就答位 283
*s=RcvByte();286
NoAck_I2c();
//发送非应位287
Stop_I2c();
//结束总线288
return(1);289 }>_<:i2c.h1 /*--2
名称:IIC协议 头文件3 */
4 #ifndef __I2C_H__5 #define __I2C_H__
6 #include
//头文件的包含7 #include 8 #define
//定义空指令9 /*--10
uS延时函数,含有输入参数 unsigned char t,无返回值11
unsigned char 是定义无符号字符变量,其值的范围是12
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时13
长度如下 T=tx2+5 uS 14 */15 void DelayUs2x(unsigned char t);16 /*17
mS延时函数,含有输入参数 unsigned char t,无返回值18
unsigned char 是定义无符号字符变量,其值的范围是19
0~255 这里使用晶振12M,精确延时请使用汇编20 */21 void DelayMs(unsigned char t);22 /*23
启动总线24 */25 void Start_I2c();26 /*27
结束总线28 */29 void Stop_I2c();30 /*-31
字节数据传送函数
32 函数原型: void
SendByte(unsigned char c);33 功能:
将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对34
此状态位进行操作.(不应答或非应答都使ack=0 假)
发送数据正常,ack=1; ack=0表示被控器无应答或损坏。36 */37 void
SendByte(unsigned char c);38 /*-39
字节数据传送函数
40 函数原型: unsigned char
RcvByte();41 功能:
用来接收从器件传来的数据,并判断总线错误(不发应答信号),42
发完后请用应答函数。
44 unsigned char
RcvByte();45 /*-46
应答子函数47 原型:
void Ack_I2c(void);48 -*/49 void Ack_I2c(void);50 /*-51
非应答子函数52 原型:
void NoAck_I2c(void);53 -*/54 void NoAck_I2c(void);55 /*-56
向无子地址器件发送字节数据函数
57 函数原型: bit
ISendByte(unsigned char sla,ucahr c);
从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.59
如果返回1表示操作成功,否则操作有误。60 注意:
使用前必须已结束总线。61 -*/62 bit ISendByte(unsigned char sla,unsigned char c);63 64 /*-65
向有子地址器件发送多字节数据函数
66 函数原型: bit
ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);
从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件68
地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。69
如果返回1表示操作成功,否则操作有误。70 注意:
使用前必须已结束总线。71 -*/72 bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no);73 /*-74
向无子地址器件读字节数据函数
75 函数原型: bit
IRcvByte(unsigned char sla,ucahr *c);
从启动总线到发送地址,读数据,结束总线的全过程,从器件地77
址sla,返回值在c.78
如果返回1表示操作成功,否则操作有误。79 注意:
使用前必须已结束总线。80 -*/81 bit IRcvByte(unsigned char sla,unsigned char *c);82 /*-83
向有子地址器件读取多字节数据函数
84 函数原型: bit
ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);
从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件86
地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。87
如果返回1表示操作成功,否则操作有误。88 注意:
使用前必须已结束总线。89 -*/90 bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no);91 #endif>_<:下面是main函数中如何调用封装好的函数来实现流水灯的效果的:>_<:流水灯8个的连线这里用的是P11 /*--2 名称:IIC协议 24c02存储花样灯程序3 内容:将表格内容写入24c02,然后批量删除这些数据,4 并从24c02中读取数据并显示5 */
6 #include
7 #include "i2c.h"8 /*9 花样灯表格10 */11 unsigned char
dat[]={0x7f,0xbf,0xdf,0xef,12 0xf7,0xfb,0xfd,0xfe,13 0xff,0xff,0x00,0x00,14 0x55,0x55,0xaa,0xaa15 };//ram允许情况可以无限添加16 /*17
主函数18 */19 main()20 {21
ISendStr(0xae,80,dat,16);
//写入24c0224
DelayMs(1);
//写入后必须延时等待24c02内部25
//烧录数据处理完毕方可继续其他操作26
for(i=0;i<16;i++)
//清除数据27
dat[i]=0;28
IRcvStr(0xae,80,dat,16);
//从24c02读出数据 29
while(1)30
for(i=0;i<16;i++)
DelayMs(200);34
P1=dat[i];35
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一怎样设计一个以单片机多机串行通信原理为核心的电子开关?-电子发烧友网
目前是通信控制领域的主流通信方式,数据通信、计算机网络、分布式工业控制系统及其测控领域中,经常采用串行通信来达到信息交换的目的。多机串行通信控制网络是物理层采用RS 485通信接口所组成的多机串行通信工控设备网络,RS 485既是物理层的协议标准,也是串行通信接口的电气标准。这种通信接口可以十分方便地将许多设备组成一个控制网络。RS 485通信方式有很多优点,首先它的通信距离比较远,通常可以做到数百米甚至千米以上,而且还可以实现多点通信方式,从而可以建立一个小范围内的局域网,因而更有实用价值。RS 485采用差模信号传输方式,与地电平关系不大,因而它抗干扰的能力比较好,即便在信号电压比较小的情况下也能获得稳定的传输。
1 总体方案及硬件设计
该系统的设计要求主机能够与从机之间进行地址确认并相互通信,从机能够准确检测到被测信号,主机能够接收从机传来的数据信号,并通过液晶显示器和发光二极管显示,同时采用RS 485总线主从机可以实现长距离通信。主从机采用的主要核心芯片均为,考虑单片机性能及实际运行环境的需要,选用AT89S51单片机,串行通信网络结构如图1所示。
(1)主机使用主要器件:AT89S51 MAX4851602LCD LED RESISTORS CAP CRYSTAL;
(2)从机使用主要器件:AT89S51 MAX485 RESISTORS CAP CRYSTAL
主机主要功能:
(1)与从机之间进行地址确认。
(2)查询从机是否有信号(从机检测被测量时产生的相应的数据信号)发送到主机。
(3)通过液晶显示发送信号的从机地址,同时可以通过发光二极管显示信号的级别(这里两个发光二极管分别代表两个行程开关的亮灭)。
从机主要功能:
(1)与主机之间进行地址确认。
(2)检测被测量,并将被测信号数据发送给主机。
主机主要有两大功能模块:液晶显示模块用来显示从机地址编号,所使用的器件为1602LCD,RS 485串行通信模块用来实现与从机之间的远距离串行通信,使用MAX485芯片来实现。
从机的主要功能模块为RS 485串行通信模块用来完成与主机之间数据的发送和接收。
2 设计实现原理
主从机均采用的是AT89S51单片机,它是一个低功耗,高性能CMOS 8位单片机,片内含4 KB的可反复擦写1 000次的FLASH只读程序存储器。单片机的XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。本电子开关设计外接12MHz晶振。
主从机均使用单片机2个全双工串行通信口外接MAX485芯片来完成与从机之间的串行通信,由串行口控制寄存器SCON设置串行口的工作方式、监视串行口工作状态、发送与接收的状态控制等。P3.0/RXD为串行通信接收端,P3.1/TXD为串行通信发送端。
主机端口P0.0~P0.7作为液晶显示器的数据线,P0口上拉10 k&O电阻与1602液晶的D0~D7数据端相连,P3.7与使能端E相连,P3.6与读/写信号线RW相连,P3.5与寄存器选择端RS相连。P1.0和P1.1引脚接两个发光二极管,用来显示从机发送信号的级别。
从机P1.0和P1.1引脚分别接到一级行程开关和二级行程开关,用来检测两个开关的状态,最终由从机P1.0和P1.1这两个引脚将行程开关的状态发送到主机,主机读取状态值并且显示。
主机通过轮询的方式,当主机查询n号从机时,与n号从机进行地址确认,并判断n号从机是否有信号产生,如果没有,主机将查询n-1号从机,如果有信号产生,主机接收到信号并存储该从机的主机编号,分别通过发光二极管和液晶显示出来,如果n-1号从机继续有信号产生,主机继续接收,直到接收完毕,主机将查询n-2号从机,如此往复。从机的个数可以在主机程序中对从机个数n值进行设定。
2.1 多机串行通信及通信协议
电子开关的设计核心主要通过单片机的多机串行通信来实现。
2.1.1 发送器和接收器
AT89S51串行口主要由发送器、接收器和串行控制寄存器组成。发送器主要由发送缓冲寄存器SBUF和发送控制器组成。接收器主要由接收缓冲寄存器SBUF,接收移位寄存器和接收控制器组成。
2.1.2 串行口控制寄存器
串行口控制寄存器SCON用于设置串行口的工作方式、监视串行口工作状态、发送与接收的状态控制等。它是一个既可字节寻址又可位寻址的特殊功能寄存器。控制寄存器SCON的格式如下:
电子开关中单片机串行口控制寄存器SCON各位设置如下:
主机SCON设置:1 0 0 1 1 0 0 0 =#98H
从机SCON设置:1 0 1 1 0 0 0 0 =#0B0H
2.1.3 工作方式的选择
本电子开关单片机串行通信工作方式选择为工作方式2,在方式2下,串行口工作在11位异步通信方式。一帧信息包含一个起始位&0&,八个数据位,一个可编程第九数据位和一个停止位&1&。其中可编程位是SCON中的TB8位,在八个数据位之后,可作奇偶校验位或地址/数据帧的标志位使用,由使用者确定。
波特率的选择:方式2的波特率是固定的。
若PCON中SMOD=0,速率=fosc/32
若PCON中SMOD=1,速率=fosc/64
该设计中:波特率为9 600 b/s。
2.1.4 实现原理及流程
多机通信主要靠主、从机之间正确地设置与判断多机通信控制位SM2和发送或接收的第9数据位(D8)。
电子开关多机串行通信的实现流程:
(1)主从机均初始化工作方式2,主机置SM2=0,允许中断,从机置SM2=1,REN=1。
(2)主机置REN=1,TB8=1,将地址信息发送给从机,并等待是否发送完毕,从机等待主机发送地址。
(3)从机接收到地址与本机地址核对,核对正确,置SM2=0,向主机发送应答地址并等待发送完毕,主机接收之后进行地址确认,并置TB8=0。
(4)从机地址发送完毕后,接着发送信号数据并等待发送完毕。
(5)主机接收到数据将从机编号发送到液晶显示,将信号数据发到发光二极管显示信号级别。
2.1.5 主从机之间地址确认
主从机在进行数据通信之前,首先进行地址确认,其目的就是让主机知道哪号从机向主机发送数据。主机首先发送n号从机地址编号#0FFH,所有从机接收到主机发送的地址后与各自的地址进行核对,地址不是#OFFH的从机将继续等待主机的呼叫,核对正确的从机向主机发送本机的应答地址,主机收到从机的应答地址后进一步做出判断,确认是否是n号从机的地址。地址确认正确之后,主机与n号从机进行数据通信,直到数据通信完毕,主机将呼叫下一号从机。
2.1.6 避免多从机与主机通信产生数据冲突
一个主机与多个从机进行串行通信的时候,如果当某一从机有数据时向主机发送,这时可能出现两个,三个或者更多从机同时产生数据,需要同时向主机发送,这样就会导致数据通信的冲突问题。该电子开关的设计采用主机轮询从机的方式,从而有效避免了主从机数据通信冲突的问题,主机先呼叫n号从机,地址确认之后,是n号的从机应答并与主机进行通信,其余从机处于等待状态,主机接收n号从机数据,并判断该从机是否继续有数据发送,此时其他从机若有数据只能处于排队等待中,不会对主机产生干扰,主机接收完毕后将n号从机地址减1,呼叫n-1号从机,如此反复轮询各个从机。主机轮询的过程是很快的,从机检测到被测信号的时候也能得到及时的处理。如图2所示。
2.2 多RS 485串行通信模块
RS 485采用平衡发送和差分接收方式来实现通信:在发送端TXD将串行口的TTL电平信号转换成差分信号A,B两路输出,经传输后在接收端将差分信号还原成TTL电平信号。两条传输线通常使用双绞线,又是差分传输,因此有极强的抗共模干扰的能力,接收灵敏度也相当高。如果以10 Kb/s速率传输数据时传输距离可达12 m,而用100 Kb/s速率传输数据时传输距离可达1.2 km。如果降低波特率,传输距离还可进一步提高。
实现RS 485串行通信只需给主机和每个从机接各接一片MAX485芯片,其接收器的输出端RO和驱动器的输入端DI,只需分别与单片机的RXD和TXD相连即可;和DE端分别为接收和发送的使能端,当为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;在主机电子开关中使用单片机的P3.4引脚控制MAX485的和DE两端,如图3所示。
A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。在与单片机连接时接线非常简
A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。在与单片机连接时接线非常简单。只需要一个信号控制MAX485的接收和发送即可。
可靠性措施如下:
复位时,主从机都应该处于接收状态。
控制端,DE的信号的有效脉宽应该大于发送或接收一帧信号的宽度。
同时将A和B端之间加匹配电阻,一般可选120 &O的电阻,吸收总线上的反射信号,保证正常传输信号干净、无毛刺。匹配电阻的取值应与总线的特性阻抗相当。
接收和发送的使能端和DE的引脚控制在程序中的实现,主机部分程序如下:
2.3 液晶显示模块
液晶显示模块选用1602液晶,1602液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。电子开关上使用1602液晶显示,是用来显示发送信号数据的从机编号,某一从机检测到信号时将会显示:
Fault Machine is:***(001号,002号,003号&&)
1602主要引脚定义如下:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,RS为高电平RW为低电平时可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。D0~D7为8位双向数据线。
主机接收到某一从机发来的一级或二级信号时,将此从机的编号发送至液晶显示出该从机的编号。主机首先对地址编号值进行百十个位分离,然后在液晶上逐位显示。
百十个位分离程序如下:
主机RS 485通信与液晶显示电路原理图如图3所示。
3 电子开关的功能及应用
该电子开关从功能上主要分为主机和从机电子开关两部分。
主机主要完成数据的接收和处理,以及将最终结果状态显示出来,从机电子关主要完成信号的检测,同时将数据发送给主机,整个系统的搭建由一个主机和一个或多个从机电子开关组成,从机电子开关的数量可以根据实际情况的需要而定。
因该电子开关要应用到传送带位置跑偏的检测中,从机电子开关要安装在一个档杆机构(如图4,图5所示)中,每个档杆机构中内部都有两个行程开关,根据所要求的信号级别,分别将它们设置为一级行程开关和二级行程开关,档杆通过凸轮机构与行程开关相连,从机电子开关的两个数据输入线接到两个行程开关上即可。
该电子开关主要针对大中型传送带传送过程中位置跑偏的检测而设计完成,同样也可以应用到其他相关的设备及场合的位移量及跑偏量的检测。在传送带两侧已确定位置放置从机电子开关,当传送带传送过程中某处有一定量的位置跑偏,会通过档杆触动一级行程开关,产生一级触发信号,并将信号传送到从机电子开关,从机电子开关检测到并将其发送到主机处理,主机负责显示产生故障的从机编号及故障级别,以供工作人员了解到传送带何处产生一级跑偏,并对传送带做出相应调整,同理传送带某处产生二级跑偏量的时候,将会由从机电子开关将二级信号发给主机显示。
传送带上的安装结构示意图如图5所示。
4 运行状态及结果
当1号从机所连接的行程开关档杆机构中1级行程开关被按下时,1号从机检测到一级故障信号,与主机进行地址确认之后,并向主机发送数据,此时主机上液晶显示器上显示:Fault Machine is:001(故障从机编号为001),同时发光二级管有一个显示灯熄灭(正常状态下两个发光二极管处于发光状态),同理若是2号从机检测到故障信号时,运行结果如图6所示。
该电子开关采用了单片机多机串行通信原理而设计,由RS 485模块和1602液晶显示模块组建的小型电子开关系统,在工业控制中,多机串行通信的应用越来越广泛,可以在此电子开关设计的基础上开发功能更强的基于RS 485总线的多机串行通信的电子开关相关产品,以应用于工业控制,检测等及其他领域中。
文章来源栏目
加载更多评论
后参与评论

我要回帖

更多关于 51单片机流水灯编程 的文章

 

随机推荐