向 玲,刘 军
(杭州快电新能源科技有限公司,杭州 310052)
采用单片机PCA捕捉比较模块进行载波侦听的多主RS485通讯系统的设计
向 玲,刘 军
(杭州快电新能源科技有限公司,杭州 310052)
在工业控制和现场仪表的熟知通讯系统中,RS485总线由于其造价低廉,使用简单,而且采用差分信号传输,抗干扰性好,传输可靠,其应用的领域颇多。由于RS485是一种半双工通讯方式,这种通讯方式一般适应于一对多的主从模式系统。如果要实现多主模式通讯,使得每个节点都能主动发起通讯,那么,就需要从硬件和软件上,对原有的RS485总线方式进行改进,这里软件上,我们引入以太网的载波监听多点接入/碰撞检测CSMA/CD的协议算法,这种协议能实现边发送边侦听的多主通讯;在硬件方案的改进上,我们采用最省成本和方便的办法,使用单片机内部的可编程计数器阵列(PCA)捕捉比较模块的功能,对RS485收发器的RX线上的电平进行捕捉,从而侦听到当前总线上的状态。
本文采用的单片机C8051F340中,可编程计数器阵列PCA0有5个16位的捕捉/比较模块,每个捕捉/比较模块都有其自己的I/O线(CEXn)。本文使用的是捕捉/比较模块的边沿触发捕捉工作方式,可以选择正边沿、负边沿、双边沿触发,选择双边沿触发,原因是需要测量RX的高电平时长来判断总线是否空闲。
硬件设计简单,不改变传统的RS485网络拓扑结构,只是将收发器的RX线接入到CEXn中的一个PCA捕捉通道既可以。
图1
3.1 CSMA/CD协议的工作原理介绍
由于RS485是半双工方式,在某时刻只能有一方发送数据,但是如果上下位机都要求能主动发起命令,那么解决485总线控制权的归属以及总线上的冲突处理是个关键的问题,因此,在本通讯系统中借鉴了CSMA/CD(载波监听多路访问/冲突检测)协议进行设计,CSMA/CD介质访问控制过程包括4个处理内容:侦听、发送、检测、冲突处理。具体过程可以参考响应标准,本设计中基本过程如同标准所述,但是出现碰撞后不会发送阻塞信息。强化冲突需要占据一定时间,降低效率,因此省略这个过程。
3.2 “X坚持”算法的介绍
发送前侦听到总线忙,或者发送过程中发生数据碰撞后,我们采用非坚持算法,即侦听到信道忙(即发现有其他站在发送数据),就不再坚持听下去,而是根据协议的退避算法延迟一个随机的时间后重新再监听。若进行载波监听时发现信道空闲,则将准备好的帧发送出去。优点是减少了冲突;其缺点信道利用率降低,不能充分利用信道刚刚转入空闲期的这段时间。因为RS485总线能支持的设备数量是有限的,尽量减少冲突,提高系统的稳定性。二进制指数退避算法也在一定程度上弥补了非坚持算法信道利用率不高的缺点。
3.3 PCA捕捉模块的载波侦听
由于在空闲时,总线会保持高电平,RX也将保持高电平,可以通过检测总线保持高电平的时间长短来确定总线是否空闲。
最小检测时间t0的确定:各站点在发送一包数据帧时,字节间间隔可以忽略不计。每个字节的起始位都是低电平,如果线上有来自其它站点的连续字节在发送,那么线路上保持高电平的时间不会超过一个字节的时间(如图2所示,19200b/s,发送0xff时,线上保持高电平的时间最长),换言说,如果线上保持高电平时间超过一个字节的时间,那说明没有连续字节在发送,即说明总线是没有被占用或者刚被释放。因此检测总线空闲与否,至少要检测1个字节的发送时间。假设:对于19200b/s波特率传输速度,传输1字节需要521μs,取t0=600μs。
图2
利用MCU的PCA双边沿捕捉/比较模块和专用定时器T测量RO线上高电平的脉宽。RO转为低电平时,触发PCA中断,将T清零且停止计时,清零溢出标志。RO转为高电平时,T重新开始计时,T的值等于t0时,将溢出标志置位。这样T的当前值记录了总线为最后一次低电平后保持高电平的脉宽时间。
在准备发送前,先检查溢出标志的值即可。如果溢出标志置位则认为总线是空闲的,可以开始发送数据。反之,认为总线是被其
它站点占用,此时要进行冲突处理。
3.4 退避延时算法
在各站点尝试争用总线而连续遇到冲突时,站点会随机选择一个延时时间,在这个时间内释放总线。这是非坚持算法的要求。
二进制数指数退避算法是按“后进先出”(LIFO)的次序控制的,即未发生冲突或很少发生冲突的数据帧,具有优先发送的概率;而发生过多次冲突的数据帧,发送成功的概率小。这种方法在低负荷时,如总线空闲时,站点要发送数据帧的能立即发送;在重负荷时,仍能保证整个系统的稳定性。
这个优先级概率的控制就是由二进制数指数来控制随时时间M选择的范围来实现的:延时时间M=[(0~2k-1的一个随机数)×(一个确定时基Tbase:0.6ms)(k=5,如果冲突times小于5;k=times,如果冲突times在5~10次之间;K=10,如果冲突times大于10次)。
实现RS485多主通讯,引入CSMA/CD协议,并且采用单片机的PCA捕捉模块进行载波侦听,只需要增加一根PCA线,硬件成本极低,但是软件设计相对来说就稍微复杂,在通讯繁忙的多站点系统中,由于PCA的中断频率太高(每次RX有电平跳变都要产生一次中断),因此要特别对其进行时效分析,关注MCU的处理速度,是否能满足PCA中断任务处理和其它任务的及时处理。
[1] IEEE Std 802.3 Carrier Sense Multiple Access with Collision Detection (CSMA/CD) access method and Physical Layer specifications[S],2008
[2] 吴军辉,林开颜,徐立鸿.RS485总线通信避障及其多主发送的研究[J].测控技术,2002, 21 (8) :41-43
[3] 孙汉卿,吴海波.现场总线技术[M].北京:国防工业出版社,2014
Using PCA’s Capture Comparator Module of MCU to Realize Multi-Master in RS485 Communication System
Xiang Ling, Liu Jun
(Hangzhou Fast Charge New Energy Technology Co., Ltd., Hangzhou, 310052)
10.3969/J.ISSN.1672-7274.2017.06.006
TP336,TN91文献标示码:A
1672-7274(2017)06-0020-02