新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 一种实现载波监听多点接入/冲突检测的多主RS485总线

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

作者:时间:2012-04-18来源:网络收藏


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协议,实现,边发送边监听。也可以在此函数的基础上进行诸如定义不同数据包的实时性级别、定义总线超时判断等高级编程。

  该函数的主要流程如图6。

  判断总线状态就是简单地读取总线状态判断电路的输出,高为空闲,低为总线已被占用。为了减少误判,通常在判断总线状态为空闲后还要继续判断一段时间,具体的总线状态判断策略要根据通信协议进行调整。

  如果判断总线空闲,即可进行数据发送。在发送过程中可以方便地继续读取总线状态以进行边发送边监听的。一旦发现冲突发生,发送方放弃本次数据传输而转入强化冲突流程(继续发送几个0x00以使各方都确认发生了总线冲突),然后再进入总线侦听流程。以往的处理机制是通过对自己所发送的数据进行监听接收,然后比较接收到的数据与发送的数据是否相符,判断是否发生总线冲突,在软件实现上比较复杂。而本系统的非常简单:发送完一个字节就读取一次总线状态指示管脚的状态,如果发现总线被占用,就是发生了总线冲突。

  接收程序方面,因为接收器常开,所以仍然可以使用串行接收器的中断服务程序,将接收到的数据放入缓冲区,然后由命令解释程序处理接收到的命令。本质上与RS232的串口通信程序完全一样,只是如果接收器是常开的话,在自己发送数据时,要记住将串行接收器中断关闭,发送完毕后再打开,以避免运行不必要的中断服务程序。

  另外,还可以结合驱动器和总线状态判断逻辑对总线进行开路和短路的检测/报警。具体说就是某一个节点使能总线驱动器,然后判断总线状态,如果仍然显示总线空闲,说明总线短路或者总线到总线状态判断逻辑之间开路了。


2.5 存在的不足之处

  该方法中的总线状态判断逻辑对逻辑0状态的要求比较高,需要B线电平比A线高约1.1V才能得到低电平。如果采用总线判断电路中的正向接收器的输出端(OUT+)作为RXD信号,就会因为对逻辑0的要求而不满足RS485的-200mV门限电平标准。若采用另一个具有故障保护功能的接收器并联的话,固然能满足-200mV门限电平标准,但整个节点的输入阻抗将降低到6kΩ。

  以上不足之处都在于无法完全满足标准标准,但在特定条件下是不会影响工作效果的。例如阻抗虽然降低了,但是当节点数不超过16时,是能够很好地工作的。

  实验表明,这种实现了CSMA/CD的多主式工作稳定,可靠性高,大大提高了实时性。特别适合于强调实时性的分布式控制系统,能够方便地实现点与点之间的控制信息实时交换。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭