在工控行业中,RS485 凭借其抗噪音抗干扰能力强、传输距离远以及支持多点通信等显著优势,成为了的串行接口。RS485 规定采用两线制进行半双工多点通信,通过两线差分信号传输数据,具备出色的抗共模干扰能力。不过,由于其半双工模式的特性,在通讯时需要进行收发状态的切换。下面,我们将详细探讨目前常用的几种 RS485 收发切换方案。
- 传统 RS485 电路(带收发控制脚非隔离 RS - 485 电路)
传统的 485 应用电路采用 3 线控制,分别为 UART_RXD、UART_TXD 和收发控制端 UART_CON。其控制策略明确:当 UART_CON 为低电平时,485 处于接收状态;当 UART_CON 为高电平时,485 处于发送状态。通过灵活切换 UART_CON 的电平,即可实现 485 收发状态的切换。这种电路虽然原理简单,但在编程时需要对控制端电平进行切换,增加了程序的复杂度。

- 硬件自收发切换非隔离 RS - 485 电路
为了简化编程,人们常常将电路改进为自动收发电路。这种采用分立元件搭建的非隔离自动收发 RS485 电路,其优点在于控制简单,收发控制脚无需程序干预。然而,它也存在一定的局限性。受三极管切换速度、收发器内部接口阻抗等因素的影响,分立元件搭建的自动收发切换电路会降低系统稳定运行的波特率。

- 收发切换隔离 RS485 电路
带有隔离电路的 485 设计是为稳定的方案,但需要选择隔离 485 芯片以及隔离电源,因此成本相对前两种方案会高很多。不过,从系统的稳定性和可靠性角度来看,这种方案在一些对稳定性要求极高的场合具有不可替代的优势。

这里介绍一个采用 MAX485 芯片的 485 硬件收发切换电路实例。该电路使用 NPN 三极管进行收发切换。控制原理如下:
MCU 的 UART 的 TX 和 RX 引脚需要连上拉电阻(TX 和 RX 在没有通信时均为高电平),这样可以防止刚上电时 TX 和 RX 引脚电平不稳定,从而避免收到扰乱数据。同时,A 上拉电阻、B 下拉电阻,终端并联 120 欧姆电阻,D10、D11、D12 为三个防雷防浪涌的 TVS 管,起到保护电路的作用。
- 接收过程:默认没有数据时,UART_TX 为高电平,三极管导通,MAX485 芯片 RE 低电平使能,RO 接收数据使能。此时,从 485AB 口收到的数据会通过 RO 通道传到 MCU,完成数据接收过程。
- 发送过程:当发送数据时,UART_TX 会有一个下拉的电平,表示开始发送数据,此时三极管截止,DE 为高电平发送使能。当发送数据‘0’时,由于 DI 口连接地,数据‘0’就会传输到 AB 口,A - B <0,完成低电平的传输。当发送‘1’时,三极管导通,按理说 RO 使能,但由于此时还处在发送数据中,MAX485 处于高阻态,此时的状态由 A 上拉 B 下拉电阻决定,A - B> 0,完成高电平的传输。这里可能会有人疑惑,发送数据‘1’时,三极管导通 RE 低电平有效,应该是接收使能,为什么芯片会是高阻状态呢?这是因为 UART 发送数据有一定的格式,数据以 “位” 为单位进行传输。在收发数据之前,UART 之间要约定好数据的传输速率(即每位所占据的时间,其倒数为波特率)、数据的传输格式(有多少数据位、是否有校验位、奇校验还是偶校验、是否有停止位)。平时数据线处于 “空闲状态”(1 状态),当发送数据时,TX 由‘1’变为‘0’维持 1 位的时间,接收方检测到开始位后,再等待 1.5 位时间就开始一位一位地进行数据传输。也就是说,已经确定好发送状态,电路发送‘1’时 RE 虽然有效,但由于处于发送阶段,芯片不会接收数据,即处于高阻状态。
- 基本的 RS485 电路
基本的 RS485 电路采用 3 线控制,R/D 为低电平时,发送禁止,接收有效;R/D 为高电平时,则发送有效,接收截止。上拉电阻 R7 和下拉电阻 R8 用于保证无连接的 SP485R 芯片处于空闲状态,提供网络失效保护,提高 RS485 节点与网络的可靠性。R7、R8、R9 这三个电阻的大小需要根据实际应用进行调整,特别是使用 120 欧或更小的终端电阻时,R9 可以省略,此时 R7、R8 使用 680 欧电阻。正常情况下,一般 R7 = R8 = 4.7K,R9 可不使用。图中钳位于 6.8V 的管 V4、V5、V6 用于保护 RS485 总线,避免受外界干扰,也可以选择集成的总线保护原件。另外,L1、L2、C1、C2 为可选安装原件,用于提高电路的 EMI 性能。 - 带隔离的 RS485 电路
带隔离的 RS485 电路根本原理与基本电路相似,但使用 DC - DC 器件可以产生一组与微处理器电路完全隔离的电源输出,用于向 RS485 收发器提供 + 5V 电源。不过,电路中的光耦器件速率会影响 RS485 电路的通信速率。例如,选用 NEC 的光耦 PS2501 时,该电路的通讯速率需控制在 19200bps 以下。 - 自动切换电路
自动切换电路中,TX、RX 引脚均需要上拉电阻。接收时,默认没有数据,TX 为高电平,三极管导通,RE 为低电平使能,RO 收数据有效,MAX485 为接收态。发送时,TX 会先有一个下拉的电平(起始位 - 由高向低),表示开始发送数据,此时三极管截止,DE 为高电平发送使能。当发送数据 “0” 时,由于 DI 接口相当于接地,数据 “0” 就会传输到 AB 口,A - B < 0,完成低电平传输;当发送 “1” 时,三极管导通,按理说 RO 会使能,但由于还处于发送数据中,MAX485 处于高阻态,此时的状态由 A 上拉、B 下拉电阻决定,A - B > 0,完成高电平的传输。同样,这里发送数据 “1” 时芯片处于高阻态的原因也是由于 UART 发送数据的格式规定。
- 节点故障影响其他节点通信
问题表现为 485 总线在通讯中,当某一节点出现故障时,其他一些节点会受到影响,出现通信故障。解决方法是在每个节点的 AB 线上串入一个 22 欧姆左右的电阻,同时在协议的编制上一定要考虑到故障侦测和报警功能,以便及时发现和处理问题。 - 总线处于不确定状态
当 485 总线处于开路(485 收发器与总线断开)或者空闲状态(485 收发器全部处于接收状态,总线没有收发器进行驱动)时,485 总线的差分电压基本为 0,此时总线就处于一个不确定的状态。解决方法是在 485 总线上增加上下拉电阻(通常 A 接上拉电阻,B 总线下拉电阻,一般为 1K 左右)。其理论依据是,根据 RS - 485 标准,当 485 总线差分电压大于 + 200mV 时,485 收发器输出高电平;当 485 总线差分电压小于 - 200mV 时,485 收发器输出低电平;当 485 总线上的电压在 - 200mV ~ + 200mV 时,485 收发器可能输出高电平也可能输出低电平,但一般总处于一种电平状态。若 485 收发器的输出低电平,对于 UART 通信来说是一个起始位,此时通信会不正常。