基于W77E58双串口通信的监控系统
扫描二维码
随时随地手机看文章
引 言:
Winbond公司的新型单片机W77E58,内含2个增强型串口和 32KB大容量Flash存储器。指令集与51系列单片机完全兼容,非常适合在智能化监控系统中使用。本系统将3台单相逆变器联接成令牌网,采用标准 RS485接口与逆变系统及上位机同时进行串行通信,能够实时地在液晶屏或上位机上显示逆变系统的运行状态,并可以方便地对系统参数进行修改。
1 系统硬件设计
图1所示为W77E58监控系统单机双串口通信的硬件框图。该电路符合最简单的RS485总线接口标准。其中逆变系统采用Motorola公司的电机控制专用芯片68HC908MR16(以下简称MR16)作为主控芯片。该芯片内含一个标准的可编程串行通信接口SCI模块,通过RS485接口芯片 MAX3082与W77E58的串行口0进行通信。同时,W77E58串行口1通过MAX3082传输的数据,经过一个RS485到RS232的电平转换器与上位机进行通信。通信电路都采用了光耦隔离。
图1中使用Maxim公司的MAX3082作为RS485接口芯片,适用于半双工通信。它采用平衡驱动和差分接收,具有抑制共模干扰的能力,可用于恶劣环境中,最大通信距离达1200m。它具有发送使能和接收使能控制。当使能无效时,发送和接收的输出端呈高阻状态。使用MAX3082构成通信系统时,最大通信速率为0.125Mb/s,传输线上最多可挂128个收发器。
本系统采用非编码键盘,拟用四个键:OK键、CANCEL键、UP键、DOWN键。采用一键复用技术使这四个键完成系统设定、参数修改、运行状态显示等功能。
这里使用的液晶显示器LCD为CAG1264-4点阵式液晶。该液晶内带亮度可调的背光源,轻盈超薄、编程灵活,整屏可以显示8×4个国标汉字或16×4个ASCII码。硬件接口采用8位并行数据格式,握手协议简单可靠。
由于工业上常用到三相交流电,所以本系统还具有将三台单相逆变器经过组网,自同步实现三相交流输出的功能。如图2所示,三台单相逆变器串行口输出经过连接,组成一个简单的令牌网,然后通过RS485到RS232的电平转换器统一由上位机进行管理控制。
2 串行口介绍及初始化设置
本通信系统中,我们规定,每1帧数据为10位:1位起始位,8位数据位,1位停止位。波特率均设置为9600bps。
2.1 W77E58串口
W77E58单片机其串口增强型特征在于特有的地址自动识别和帧出错诊断功能。需要注意的是,串口0可以使用定时器T1或定时器T2作为波特率发生器;而串口1只能使用定时器T1作为其波特率发生器。下面以串口0为例,对W77E58串口的工作过程进行简单介绍。
串口0通过引脚RXD(串行数据接收端)和TXD(串行数据发送端)进行串行通信,可同时发送和接收数据,具有两个物理上独立的接收、发送缓冲器 SBUF,它们占用同一地址。串行口的发送和接收都是以特殊功能寄存器SBUF的名义进行读或写的,发送数据完毕或接收到数据都会由硬件置位发送中断标志 TI或接收中断标志RI。值得注意的是,中断标志TI、RI均需由软件来清零。串口1的工作过程和串口0相类似,只需对其相应的寄存器及标志位进行类似操作即可。W77E58串行口是可编程接口,对它初始化编程只需对特殊功能寄存器SCON或SCON1和电源控制寄存器PCON写入相应的控制字即可。这里使用定时器T2作为串口0的波特率发送器,使用定时器T1作为串口1的波特率发生器。波特率均设为9600bps。
2.2 MR16串口
MR16带有的1个可编程串行通信接口SCI模块,支持MCU与外设之间采用全双工、异步、NRZ(非归零)格式进行串行通信。它具有2个I/O引脚 RXD和TXD;有2个物理上独立的,但占用同一地址的SCI数据寄存器SCDR。SCI模块为接收器和发送器提供独立的中断请求和中断向量。如果 SCRIE位被置位,当SCI接收到一个完整的数据帧,并将数据传送到SCDR,就会置位SCRF标志并启动一个接收中断;如果SCTIE位被置位,并将数据由SCDR传送至发送移位寄存器时,就会置位标志SCTE产生一个发送中断。在读取SCDR中的数据或写入SCDR新的数据后,SCRF和SCTE会被自动清零,无需软件操作。SCI模块具有一个可编程的波特率发生器,可产生32种不同的波特率,只需对波特率寄存器SCBR进行设置即可。
2.3 上位机串口
由于上位机串口采用的是RS232标准接口,所以需要1个RS485与RS232的电平转换器才能实现与下位机的通信。这里,采用的电平转换器件是牛顿-7520,输入电压范围为10 ~ 30V,允许的频率范围为300Hz ~ 115kHz。
3 通信协议
本系统中MR16与W77E58及上位机三方都既是发送方又是接收方,都工作在半双工模式。MR16和上位机的发送和接收均采用查询方式,W77E58 的串口0和串口1发送均采用查询方式,接收均采用中断方式。要想保证通信准确可靠,通信双方除规定好字符格式和波特率外,还要定义好通信协议。通过分析和实验,最后确定了MR16和W77E58之间通信以77E58为主。W77E58和上位机之间通信以上位机为主的“主从通信法”通信协议。下面以 W77E58串口0和上位机为例,将这种通信协议介绍如下。
◆ W77E58串行口0通信协议(以W77E58为主机)
发送(查询方式):
fe+fe+fe+代码 ......请求回发相应代码的数据包
fe+fe+ef+代码+高字节+低字节+校验和 厖 ......发送要修改的数据包
接收(中断方式):
fe+fe+aa+故障代码 ......接收故障代码
fe+fe+fe+代码+高字节+低字节+校验和 厖
......接收要显示的数据包
◆ 上位机通信协议(以上位机为主机)
发送(查询方式):
fe+fe+站号 ......查询相应站点
fe+fe+fe ......请求回发要显示的数据包
接收(查询方式):
fe+fe+站号 ......接收回发校验站号
fe+fe+高字节+低字节+校验和
......接收要显示的数据包
协议里的斜体为包头码,黑体加下划线为命令码,站号即为多机通信时用于选择单相逆变器的令牌,每台单相逆变器的站号均不相同。数据包的包头均是 0xfe,0xfe。以W77E58串口0为例,当W77E58使用命令0xfe向MR16请求回发相应代码的数据包后,若接收到命令0xaa,则表明有故障,然后根据收到的故障代码进行相应的故障显示;若收到命令0xfe,则把收到的参数值送给液晶显示器进行显示。
从数据包格式可以看出,MR16和W77E58之间通信以W77E58为主,W77E58和上位机之间通信以上位机为主,MR16的发送和接收都是由W77E58串口0来控制的,而W77E58串口1的发送和接收又都是由上位机来控制的,这种主从方式是RS485标准中常采用的模式。这里通过发送包头的办法来实现数据同步,发送方每次都必须先发送包头,然后再发送数据;接收方只有在正确接收包头后才开始接收数据。当接收数据出错或发送的数据丢失时就放弃本次接收,在下个主循环重新通信。这样可以在一次通信出错后自动恢复,同时避免“死机”现象的发生。
4 软件实现
基于对该监控通信系统通用性的考虑,我们采用了模块化设计方法,将通信程序作为主程序的一个模块来处理。因为BCD码是以数字“0”到“9”开头的,而控制命令则以字母“A”到“F”开头,在发送端将数据转化成BCD码发送。这样可区分这两类信号,在接收端分别将它们解码处理。
MR16通信模块包括查询接收程序和查询发送程序,程序流程类似于图3;W77E58串口1通信模块包括中断接收程序和查询发送程序,程序流程与串口0相类似,这里都不再给出。
参考文献
1 WINBOND electronics corp. 8-Bit Microcontroller——W77E58. 2001.7
2 Fail-Safe, High-Speed (10Mbps), Slew-Rate-Limited RS-485/RS-422 Transceivers,MAXIM Document , 1997
3 Advance Information. MC68HC908MR16/MC68HC908MR32?Rev. 4.0. MOTOROLA Document, 2000
4 李朝青. PC机及单片机数据通信技术. 北京:北京航空航天大学出版社,2000