DeviceNet现场总线的波特率自动检测
扫描二维码
随时随地手机看文章
随着现代化工业的不断前进,人们对生产过程的控制提出了更高的要求。智能化、网络化、微型化、分散化代表当代自动化控制技术发展的主流方向,而现场总线技术正是促使自动化系统顺应这一发展要求的先进技术。DeviceNet是基于CAN总线的一种开放式现场总线技术,在世界各大供应商的共同努力下,已经成为普及率比较高的现场总线技术之一,在国内外得到较大范围的推广和应用。
DeviceNet网络允许的波特率共有三种:500K、250K、125K。在设备联入网络之前,需要用户根据当前网络的要求选择一种工作波特率。为了满足设备热插拔的要求,很多接入设备除了提供波特率的人工设置之外,还必须具备波特率自动检测的功能。
1 波特率自动检测的前提条件
根据CAN总线的特点,每一个网络上的节点对接收到的报文都具有自动应答机制,根据接收到的信息正确与否发出应答信息和出错信息。在设备联入CAN网络后,根据网络通信安全的要求,在没有得到波特率的正确设置前,不允许发送任何的信息,也就是说,接入节点必须具有“只听”功能。DeviceNet是基于CAN总线的协议规范,要实现接入设备的波特率自动检测,也必须使通讯接口在波特率没有确认前处于“只听”模式。
很多DeviceNet通讯接口在设计上都是采用CAN协议芯片或者内嵌式的CAN接口,为了实现其“只听”功能,可以在其发送接口与总线驱动芯片之间加上一级或门,如图1所示。82C251是CAN总线驱动芯片,Gate就是“只听”模式的门控信号,Tx是发送引脚,Rx是接收引脚。Gate、Tx以及CAN信号的状态表如表1所示。在上电复位或者进行波特率自动检测前,先将Gate设成1,这样就可以封锁Tx引脚,这样,CAN接口的任何错误帧和应答信息都不会被广播出去。当正确的波特率被选择后,将Gate置0,就可以实现CAN信息的正常发送了。
也有一些CAN协议芯片内部具有“只听”功能,例如Philip的CAN控制芯片SJA1000,在其扩展CAN功能中就有对应的模式寄存器,可以在不增加其他外部电路的情况下完成“只听”模式的设置,其模式寄存器的位定义如下所示。
可见,只要将ModeControlReg的D1位设成1,就可以实现“只听”模式。
2.波特率检测的时机
波特率的自动检测,是通过对网络信息的侦听来实现的,也就是说,网络上首先要具有正确传输的报文信息,接入设备才有可能识别出网络的波特率信息。
首先,需要保证接入设备在网络上电前已经加入网络。这时,当上电时,根据DeviceNet网络协议,每一个从站节点都会有自检和应答信息,这给自动波特率检测提供了较好的时机。
根据这一结论,还可以假想出波特率自动检测的比较极端的情况,那就是“孤立节点”的情况,网络上只有接入设备本身这一个节点,这时候网络上没有传输信息,也就无法侦听和识别波特率,这种情况下只有等待,直到有另一节点加入或者主站设备主动发送有效信息。
3.总线定时器值的计算与设定
CAN总线是位仲裁机制,对于位定时有着严格的要求,而波特率的设置是通过对总线定时器的设置来实现的。位定时的要求主要体现在对于每一位的位时间的各个组成部分以及采样次数的确定上。位时间的大小跟波特率有关,设位时间为T,波特率为B,则由式(1)确定。
每一位时间由固定数目的小时间份额组成,小时间份额的长度值是由芯片的晶振频率和波特率的预分频值决定的。设晶振频率是Fosc, 小时间份额的长度为Ts,预分频值为Brp,则:
Brp=Ts×Fosc -1 (2)
位时间可划分为几个互不重叠的时间段,这些时间段的定义如图2所示。
同步段和传播段各为1个时间份额,其余的是相位缓冲段1和相位缓冲段2,而采样点就在这两个缓冲段之间。 DeviceNet是高速CAN网络,采样点的采样次数为1次。根据图2所示,位时间的小时间份额的数目确定了位时间的大小,从而确定了波特率的大小。设小时间份额为Ts,相位缓冲段1的时间份额为N1,相位缓冲段2的时间份额为N2,总的时间份额为N,则可以得出公式(3)。
N=1+1+N1+N2=T/Ts (3)
总线定时参数确定之后,可以根据晶振的误差算出最大允许传播延迟时间:
上式(1+N1)表示从同步点到采样点的时间份额数。
N的值在应用中一般设置成晶振频率的整除数,而N1和N2的大小决定了采样点的位置,具有一定的实验数据支持,根据ODVA公布的参数,当采样点位于位时间的80%处时,采样准确性最大。以16M±1%晶振下,波特率为500K,N为16,则:
T=1/500000=2 uS
Ts=T/N=0.125 uS
根据采样点位于80%的分配比例,
N1=16×80%=12 (取整数)
N2=N-2-N1=2
波特率的预分频值根据式(2),有:
Brp=(0.125×16)-1=1
最大允许传播延时
根据CAN2.0A规范,这个延迟时间是满足要求的。在对于DeviceNet接口三种不同波特率的设置,只要改变预分频值便可达到目的,其他参数可以参考上面的计算。
4.波特率自动检测的软件实现[!--empirenews.page--]
以SJA1000为例来说明波特率自动检测的软件流程。SJA1000在PeliCAN 模式下才支持“只听”模式,所以,在波特率检测时,应该将SJA1000设置成PeliCAN 模式。
软件检测的思想是根据DeviceNet网络的特点确定的。对于 Devicenet网络,只允许3种波特率:125K, 250K, 500K,采用“穷举法”不会花费太多流程。节点可以预先配置成这三种波特率中的一个,当波特率正确时,就会产生接收中断,那么,预置的波特率就是正确的网络波特率;如果产生总线错误中断,则可以认为,波特率设置错误,更换波特率设置重新侦听。在启动时,先将节点波特率设置成125K模式,同时允许接收和错误中断。如果在CAN总线上产生错误,软件就将波特率设成较高的波特率。为了可靠确认,在连续2条信息的成功地接收后,就认为当前预设波特率是正确的,从而转向正常工作模式。
流程图如下:
波特率自动检测是通过对于总线错误或者正确接收的仲裁实现的,在调试过程中,需要开放接收中断和总线错误中断。值得注意的是,在总线预设波特率不对的情况下,总线错误中断相当频繁,如果处理不当,就难于设置正确的波特率。通过调试,得出以下两点体会:
1.切换波特率的依据是总线错误中断,但是一般总线错误中断标志有可能和接收中断一起接收到,这个时候,不能立即切换波特率,而是再观察一帧信息,然后再确定是否找到波特率;如果单纯总线错误,则立即切换波特率。
2.随着波特率的提高,总线错误中断会更加频繁,所以中断的响应要迅速,处理代码要短,不然就会影响其他的程序流程。特别是500K波特率时,自动波特率检测的时序要特别注意,有可能会造成SJA1000复位的情况,这时候有可能损失用于检测波特率的信息。
5.结论
DeviceNet现场总线波特率的自动检测方案可以推广到其他基于CAN总线的网络接入中,只要待接入的网络上具有有效传输的数据报文,另外波特率值在一定的预选值范围内,这个方案都是可行有效的。在实际应用中,该波特率自动检测技术得到较为成功的验证。