RS-485串行总线接口标准以差分平衡方式传输信号,具有很强的抗共模干扰的能力,允许一对双绞线上一个发送器驱动多个负载设备。
工业现场控制系统中一般都采用该总线标准进行数据传输,而且一般采用RS-485串行总线接口标准的系统都使用8044芯片作为通信控制器或各分机的CPU。
8044芯片内部集成了SDLC,HDLC等通信协议,并且集成了相应的硬件电路,通过硬件电路和标准协议的配合,使系统的通讯准确、可靠、快速。
8044在市场上日渐稀少,虽然有8344可替代,但几百元的价位与普通单片机几元至几十元的价位相差甚远,用户在开发一般的单片机应用系统时,都希望能用简单的电路和简单的通信协议完成数据交换。
譬如:利用单片机本身所提供的简单串行接口,加上总线驱动器如SN75176等组合成简单的RS-485通讯网络。
本文所述的方法已成功地应用于工程项目,一台主机与60台从机通讯,通讯波特率达64KBPS。
2总线驱动器芯片SN75176常用的RS-485总线驱动芯片有SN75174,SN75175,SN75176。
SN75176芯片有一个发送器和一个接收器,非常适合作为RS-485总线驱动芯片。
SN75176及其逻辑如图1所示。
图1SN75176芯片及其逻辑关系3RS-485方式构成的多机通信原理在由单片机构成的多机串行通信系统中,一般采用主从式结构:从机不主动发送命令或数据,一切都由主机控制。
并且在一个多机通信系统中,只有一台单机作为主机,各台从机之间不能相互通讯,即使有信息交换也必须通过主机转发。
采用RS-485构成的多机通讯原理框图,如图2所示。
图2采用RS-485构成的多机通讯原理框图在总线末端接一个匹配电阻,吸收总线上的反射信号,保证正常传输信号干净、无毛刺。
匹配电阻的取值应该与总线的特性阻抗相当。
当总线上没有信号传输时,总线处于悬浮状态,容易受干扰信号的影响。
将总线上差分信号的正端A+和+5电源间接一个10K的电阻;正端A+和负端B-间接一个10K的电阻;负端B-和地间接一个10K的电阻,形成一个电阻网络。
当总线上没有信号传输时,正端A+的电平大约为3.2V,负端B-的电平大约为1.6V,即使有干扰信号,却很难产生串行通信的起始信号0,从而增加了总线抗干扰的能力。
4通信规则由于RS-485通讯是一种半双工通讯,发送和接收共用同一物理信道。
在任意时刻只允许一台单机处于发送状态。
因此要求应答的单机必须在侦听到总线上呼叫信号已经发送完毕,并且没有其它单机发出应答信号的情况下,才能应答。
半双工通讯对主机和从机的发送和接收时序有严格的要求。
如果在时序上配合不好,就会发生总线冲突,使整个系统的通讯瘫痪,无法正常工作。
要做到总线上的设备在时序上的严格配合,必须要遵从以下几项原则:1) 复位时,主从机都应该处于接收状态。
SN75176芯片的发送和接收功能转换是由芯片的RE*,DE端控制的。
RE*=1,DE=1时,SN75176发送状态;RE*=0,DE=0时,SN75176处于接收状态。
一般使用单片机的一根口线连接RE*,DE端。
在上电复位时,由于硬件电路稳定需要一定的时间,并且单片机各端口复位后处于高电平状态,这样就会使总线上各个分机处于发送状态,加上上电时各电路的不稳定,可能向总线发送信息。
因此,如果用一根口线作发送和接收控制信号,应该将口线反向后接入SN75176的控制端,使上电时SN75176处于接收状态。
另外,在主从机软件上也应附加若干处理措施,如:上电时或正式通讯之前,对串行口做几次空操作,清除端口的非法数据和命令。
2) 控制端RE*,DE的信号的有效脉宽应该大于发送或接收一帧信号的宽度。
在RS-232,RS-422等全双工通讯过程中,发送和接收信号分别在不同的物理链路上传输,发送端始终为发送端,接收端始终为接收端,不存在发送、接收控制信号切换问题。
在RS -485半双工通讯中,由于SN75176的发送和接收都由同一器件完成,并且发送和接收使用同一物理链路,必须对控制信号进行切换。
控制信号何时为高电平,何时为低电平,一般以单片机的TI,RI信号作参考。
发送时,检测TI是否建立起来,当TI为高电平后关闭发送功能转为接收功能;接收时,检测RI是否建立起来,当RI为高电平后,接收完毕,又可以转为发送。
在理论上虽然行得通,但在实际联调中却出现传输数据时对时错的现象。
根据查证有关资料,并在联调中借助存储示波器反复测试,才发现一个值得注意的问题,我们可以查看单片机的时序:图3串行口模式3时序图单片机在串行口发送数据时,只要将8位数据位传送完毕,TI标志即建立,但此时应发送的第九位数据位(若发送地址帧时)和停止位尚未发出。
如果在这是关闭发送控制,势必造成发送帧数据不完整。
如果单片机多机通讯采用较高的波特率,几条操作指令的延时就可能超过2位(或1位)数据的发送时间,问题或许不会出现。
但是如果采用较低波特率,如9600,发送一位数据需100μs左右,单靠几条操作指令的延时远远不够,问题就明显地暴露出来。
接收数据时也同样如此,单片机在接收完8个数据位后就建立起RI信号,但此时还未接收到第九位数据位(若接收地址帧时)和停止位。
所以,接收端必须延时大于2位数据位的时间(1位数据位时间=1/波特率),再作应答,否则会发生总线冲突。
3) 总线上所连接的各单机的发送控制信号在时序上完全隔开。
为了保证发送和接收信号的完整和正确,避免总线上信号的碰撞,对总线的使用权必须进行分配才能避免竞争,连接到总线上的单机,其发送控制信号在时间上要完全隔离。
总之,发送和接收控制信号应该足够宽,以保证完整地接收一帧数据,任意两个单机的发送控制信号在时间上完全分开,避免总线争端。
程序流程框图,参见图4。
其中:a)为发送流程图;b)为接收流程图。
RS-485协议简介及MAX485芯片介绍由于RS-232的种种缺点,新的串行通讯接口标准RS-449被制定出来,与之相对应的是RS-485的电气标准。
RS-485是美国电气工业联合会(EIA)制定的利用平衡双绞线作传输线的多点通讯标准。
它采用差分信号进行传输;最大传输距离可以达到1.2 km;最大可连接32个驱动器和收发器;接收器最小灵敏度可达±200 mV;最大传输速率可达2.5 Mb/s。
由此可见,RS-485协议正是针对远距离、高灵敏度、多点通讯制定的标准。
MAX485接口芯片是Maxim公司的一种RS-485芯片。
采用单一电源+5 V工作,额定电流为300 μA,采用半双工通讯方式。
它完成将TTL电平转换为RS -485电平的功能。
其引脚结构图如图1所示。
从图中可以看出,MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。
RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。
在与单片机连接时接线非常简单。
只需要一个信号控制MAX485的接收和发送即可。
同时将A和B端之间加匹配电阻,一般可选100Ω的电阻。
2用PC机实现与8031单片机的多点通讯用8031单片机实现与PC机之间的通讯时,必须使用电平转换接口芯片,因为单片机输出的是TTL电平,必须经过电平转换才能和PC机的一致。
本文中采用的是RS-485协议,所以单片机需要采用RS-485接口;而在PC机侧使用的是RS-232与RS-485的电平转换接口。
在本文中采用的是武汉新特电子公司的电平转换接口,该接口使用简便、无需外加电源、数据传输速率最高可达10 Mb/s,而且不用任何软件初始化和修改。
另外实现多点通讯还需要了解器件的驱动能力,当器件的驱动能力足够大时,我们就可以根据需要加入所需要的节点。
本文中所举的例子就是利用一台PC控制64块单片机的工作,采用多点通讯形式。
通过发送控制字和工作方式字给相应的单片机,使其进行相应的操作。
单片机在接收到数据后,进行数据的采集工作,等到PC机再发指令,将采集到的数据反馈给PC机,PC机对数据进行分析和计算。
PC机的程序可以采用Windows下任何一种面向对象的高级语言来编写,它比在DOS下的利用串口中断的方式进行更加简便,应用程序将控制权交向串口的驱动程序,接收和发送的中断完全由串口驱动程序来控制,减轻了编写过程中的很多麻烦。
本程序中选用的是Delphi的串口通讯控件Spcomm来实现。
参数的设置可以自动完成。
单片机采用中断工作方式,用汇编语言编写,通讯波特率为1 2 kb/s,由于要和PC机进行通讯,选用11 0592 MHz的晶振,保证和PC机的波特率完全一致,避免由于波特率不同引起的收发错误。
为了配合多机工作方式,选用工作方式3。
单片机的通讯流程图如图3所示。
下面给出用Delphi编制的通讯程序和单片机的接收和发送程序。
单片机初始化子程序:单片机接收子程序:REPT:CLRRIMOVA,SBUFMOV@R0,ARET在程序编写过程中,为了保证接收和发送数据的正确性,我们加入了CRC校验程序,另外PC机发送给单片机的是ASCII码形式的数据,同样需要经过简单的变换,在此均作了省略。
利用RS-485协议进行串行通讯,可以保证快速、稳定远距离地传输数据。
在目前以及以后的工业控制和其他方面必将得到越来越多的应用。