一种实现载波监听多点接入/冲突检测的多主RS485总线

时间:2012-04-25来源:网络

2.1 系统框图

系统由总线状态判断逻辑、驱动器自动切换逻辑两部分组成,如图3所示。系统资源只占用CPU的3个管脚:RXD、TXD、总线状态指示脚,不占用任何中断。在软件实现方面由于采用了硬件判断总线状态而变得非常简单,只需要对标准的232通信程序做微小修改即可。

2.2 总线状态判断逻辑

该电路由双RS485总线接收器构成,两个接收器的输出相与后得到总线状态信号。偏置电阻网络的对称形式使得在总线没有被驱动的情况下,两条总线的电平相等。总线状态判断逻辑如图4所示。由于接收器的两个接入点电平不同,所以当总线处于高阻状态或者总线被短路时,两个接收器都是高电平输出,总线状态为高电平。因为A、B线通过6.8kΩ电阻分别接入两个接收器的不同接收端,所以当总线出现任何一个确定的逻辑状态时,都将引起其中一个接收器的输出变为低电平,这样总线状态就变为低电平,表明总线被占用。经过理论计算和EWB仿真,该网络从A、B点看接入阻抗为12.2kΩ,恰好满足RS485协议的接收器输入阻抗要求。

2.3 驱动器无延迟自动切换逻辑

为了实现驱动器的无延迟自动切换,TXD信号反相后接到驱动器使能,而驱动器输入直接接地,如图5所示。这样处理使驱动器只在数据为0时打开,把数据0发出去。而当数据为1或者无数据时立刻关闭,缩短了切换时间。但是这样做,使得数据1无法被正常发送出去。为使串行数据能被正确地接收,有两个办法产生数据中的1。第一个办法,使用总线判断电路中的正向接收器的输出端?穴OUT+?雪作为RXD信号,该信号在总线空闲、开路和短路时输出逻辑1,并且与RXD信号同相。第二个办法,使用类似MAX3080自带故障保护(fail-safe)功能的芯片作为接收器。MAX3080将接收器的触发门限电压从-200mv~+200mv调整为-200mv~-50mv,也能够在总线空闲、开路和短路时输出逻辑1。如果总线上的每一个节点都使用这些方法,那么所有节点都可以实现驱动器无延迟自动切换而不必担心数据中的1不能被正确接收。

2.4 软件的实现

发送数据方面,只需将标准串口函数putc()封装成一个函数RS485PutString()发送数据即可。在RS485PutString()函数中,能够方便地实现各种总线状态判断策略,甚至是CSMA/CD协议,实现载波监听,边发送边监听。也可以在此函数的基础上进行诸如定义不同数据包的实时性级别、定义总线超时判断等高级编程。

1 2 3

关键词: RS485总线 半双工 载波监听 冲突检测

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版