RS485 作为工业控制领域中常见的总线之一,在众多工控设备中得到了广泛应用。它采用半双工通信方式,其 CPU 内部本质上是串口通信,而串口通信区分发送(TX)和接收(RX)。在同一对差分信号线上同时传输 TX、RX 信号时,就需要进行方向控制。若方向控制时机不当,数据传送就会出现问题。
例如,在某些情况下,CPU 端的 TX 信号发送完毕后约 100μS,方向引脚拉低切换到接收状态。但如果 TX 信号发送完毕后 60μS 从机就回复了 RX 信号,而此时 RS485 芯片仍处于发送状态,那么接收数据将会被忽略,在系统层面就表现为数据接收丢包。有些读者可能认为,只要让从机晚些回复数据就能避免这个问题。然而,从机通常是客户的机器,我们很难要求对方更改回复时间。比如三菱的 Fx3U PLC 作为从机时,从主机发送数据结束到从机回复数据仅需 60μS,部分控制板的回复时间甚至在 10μS 以内。
研究 RS485 的方向切换,目标是让 RS485 总线空闲时处于接收状态,当有主机发送数据时,置高方向引脚,发送完成后及时切换到接收状态。以下是 5 种常见的 RS485 切换方向的方法及其优劣势分析。
方案 1:使用反相器自动切换
大部分低成本的 RS232 - RS485 转换器采用这种方法。具体实现是将串口的发送信号 TX 作为反相器的输入,反相器的输出控制 RS485 收发器的收发控制引脚,同时在 RS485 收发器的 A/B 输出端加上上拉 / 下拉电阻,具体电路如图所示。

在空闲状态下,串口的发送信号 TXD 为高电平,经反相器后输出低电平,使 485 芯片处于接收状态,RS485 总线由于上下拉电阻的作用处于 A 高 B 低的状态。当发送数据时,TXD 信号线上的低电平比特位使 485 芯片进入发送状态并发送该比特,高电平比特位则使 485 芯片处于接收状态,此时 RS485 总线因上下拉电阻处于 A 高 B 低状态,表示发送了高电平。
优势:只需要增加一个反相器即可实现,无需软件干预,反相器用一个三极管就能实现,成本十分低廉,仅需几分钱。
劣势:由于上下拉电阻不能选值太小,否则会影响正常发送的数据电平,所以这种换向模式在发送高电平时驱动能力较弱。并且理论上要求方向引脚比数据先切换方向,但方向引脚经过反相器后到达芯片的时间变长,比数据晚到,在速率太高的情况下容易丢包。如果需要驱动多个从设备,该方案会显得力不从心,且驱动能力弱,只能短距离传输,传输速度一般使用 9600bps。
方案 2:使用软件控制方向
市面上大部分内置 RS485 的产品基本采用此类方案,如电路中的 RS_EN 引脚。具体实现方式为:在空闲时,RS_EN 为低电平,MCU 处于接收状态;准备发送数据前,MCU 拉高 RS_EN,U1 处于发送状态;发送完毕后,RS_EN 重新变为低电平,U1 处于接收状态。

此类方案的关键在于软件要掌握好 RS_EN 引脚高低电平的时机。若发送完数据后未及时切换到接收状态,而此时从机又回复数据,就会引起丢包,出现文章开头提到的情况。不幸的是,软件工程师的水平参差不齐,特别是在运行操作系统(如 Linux、Windows 等)后,要十分准确地控制方向引脚的高低电平变得非常困难。
优势:无需增加任何硬件成本,且 RS485 的驱动能力不受影响。
劣势:依赖于软件控制方向引脚,如果运行复杂的操作系统,控制引脚的优先级不够高,或者软件优化得不够好,都会导致方向引脚切换不及时,从而造成数据丢包。并且,是否丢包还取决于从机的回复时间,测试过程不一定能检测出来。
方案 3:使用触发器控制方向
为了克服反相器换向的缺点,出现了一种由 RS 触发器控制的自动换向技术。这个电路的关键是反相器和 RS 触发器之间由二极管、电阻、电容组成的充放电电路。在空闲状态下,485 芯片处于接收状态。当 TXD 信号线上发送数据的低电平起始位时,反相器输出高电平,通过二极管为电容迅速充电,使 RS 触发器 R 端为高电平,S 端为低电平,触发器输出高电平,把 ISL3152E 置于发送状态;当 TXD 信号线转换为高电平时,反相器输出低电平,电容通过电阻缓慢放电,使得 R 端暂时仍处于高电平状态,加上 S 端的高电平状态,使触发器的输出保持前面的高电平状态,485 芯片仍处于发送状态。电容经过一段时间放电后,R 端电压转变为低电平,则触发器输出低电平,把 485 芯片置回接收状态。通过选择电阻和电容值,可以控制放电速度,使得一个低电平的起始位足以在整个字节发送。

优势:无需软件干预切换方向,驱动能力强(取决于 RS485 芯片)。
劣势:
增加的器件较多;
不同的波特率需要匹配不同的 RC 参数;
温度、老化、一致性等问题会导致 RC 参数变化,从而使切换时间错乱,导致丢包。
方案 4:max13487 芯片
为了克服软件参与方向控制的不确定性,美信公司发布了宣称首款支持芯片自动换向的 RS485 芯片。对比其他 RS485 芯片,MAX16487 的 / RE 引脚有两个用途:
/RE 为低电平时,打开 RO 方向的接收数据;
/RE 为高电平时,芯片进入自动方向切换模式。
一般使用时将 / RE 连接高电平,即自动换向模式。

由于美信没有公布内部的逻辑原理,只描述内部有一个状态机,我们只能从外部猜测其工作原理:
空闲模式下,数据流方向为 RO 方向,此为状态 1;
当串口端有数据发送时,由于起始位为低电平,经过逻辑功能 D 后,A<B,经过 COM - 逻辑功能且反相后,RI 为高电平,此状态为数据发送状态 2;
经过一系列逻辑运算(以 RI、DI 为输入,但不知道其内部原理),状态机检测到数据发送完毕,芯片变成接收状态 1。
优势:由芯片自动切换方向,无需软件干预,驱动能力强,通信速率高,MAX13488 宣称可以到 16Mbps,与普通的 RS485 芯片性能一样。
劣势:价格比普通的 RS485 芯片贵一倍以上。
方案 5:周立功芯片 RSM (3) 485PHT
周立功公司将 RS485 的三个相关功能模块:DC 电源、隔离、RS485 芯片三合一,封装在同一个芯片内部。由于没有内部资料,我们无法获知其内部的逻辑功能。资料宣称速率可以达到 500Kbps,对于一般的应用足以。

优势:由芯片自动切换方向,无需软件干预,驱动能力强,通信速率高,DC 电源、隔离、RS485 芯片功能三合一,节省板卡空间。
劣势:价格比分立器件搭建 RS485 电路贵,且一旦损坏需要整体更换。