第9课(二):RS485,远距离、多点、抗干扰的总线

硬件学习路线 · 通信接口之二 · 用差分信号对抗干扰,一根总线可以挂很多设备,是工业现场的常客

一、为什么需要 RS485?

上一页的 UART 是单端信号:每根线的电压都相对于地来判断。它在板内或几米内很好用,但遇到以下情况就不行了:

RS485正是为了解决这三个问题:它用差分信号传输,抗干扰能力强;允许一根总线挂很多设备;传输距离可达上千米。

类比:UART 像在吵闹的菜市场里大声喊话,周围的噪音很容易盖过你的声音。RS485 像两个人耳语,各自说一句"相反的话"(一个说"是",一个说"否"),听的人只比较两者的差别。周围的噪声同时打在两个人身上,比较差别时就被抵消了。

二、差分信号:抗干扰的秘密

RS485 使用两根线,分别叫 A 和 B。它们传输的是互为反相的信号(或者说,它们之间的电压差)。接收端不关心 A 或 B 的绝对电压,只看两者的差:

差分电压 Vdiff = V(A) − V(B) 判决规则:|Vdiff| ≥ 200 mV 才有效;极性决定 0 或 1(具体约定以芯片手册为准) 干扰通常会同时作用在两根线上(称为共模干扰),它在相减时被抵消,留下的仍是有用的差分信号

2.1 共模干扰为什么会被抵消?

假设一个干扰电压 Vn 同时加在 A 和 B 上,那么:

V(A)' = V(A) + Vn,V(B)' = V(B) + Vn Vdiff' = (V(A) + Vn) − (V(B) + Vn) = V(A) − V(B) = Vdiff 共模的 Vn 在相减时完全消失,差分信号不受影响
双绞线的作用:RS485 通常用双绞线(两根线缠绕在一起)。这样两根线离干扰源的距离几乎一样,受到的共模干扰也几乎相同,抗干扰效果更好。

三、动手试一试:噪声越大,差分越稳

下面的图中,A 与 B 是两根互为反相的信号,叠加了同样的共模噪声。拖动噪声滑块,观察两条线(单端看)被扰乱的程度,以及差分信号的变化。

A 线(单端) B 线(单端) 差分 A−B
单端 A 线的最大误差-
差分信号的误差-
差分判决是否正确-

四、接线:A、B、GND

RS485 的标准接口是三根线:A、B、GND。注意不是 TX/RX,而是两根差分线。收发由芯片(如 MAX485、SP3485)完成,单片机一般通过 UART 把数据送给这颗收发芯片。

UART 到 RS485 收发器 A/B 命名与接线请核对具体器件手册
MCUUART 与 GPIORS485 收发器半双工总线差分线对TXDIRXROGPIODE / REABGND
A、B 接反了,通信就不通:多数芯片的标注 A 为"−"、B 为"+",但不同厂家约定可能相反。接线时若完全不通,先交换 A、B 两根线再试。这是现场最常见的问题之一。

五、半双工与收发方向控制

RS485 总线上只有一对 A、B 线,所有设备共用它。因此同一时刻,只能有一个设备发送,其它设备接收。这叫半双工(第9课总览讲过)。

5.1 DE 与 RE:切换收发方向

5.2 发送的正确时序

  1. 单片机拉高 DE,芯片切换为发送状态。
  2. 通过 UART 发送一帧数据。
  3. 等待最后一个字节真正发完(查看 UART 的"发送完成"标志,不能只看写入寄存器)。
  4. 拉低 DE,芯片回到接收状态,准备接收回复。
最常见的坑:数据刚写进 UART 发送缓冲区,就立刻拉低 DE。这时最后几个字节还没发出去,对方收到的数据不完整。一定要等发送完成标志。

六、总线拓扑与分支长度

RS485 的标准拓扑是总线型(菊花链):一根主干线,所有设备依次并接在上面,而不是一个设备拉出一条分叉。

RS485 差分总线与终端 两根主干线,分支尽量短
AB120 Ω120 Ω节点 1短支线节点 2短支线节点 3短支线两端终端电阻按线阻抗和总线条件选用

七、终端电阻与偏置电阻

7.1 终端电阻:防止信号反射

信号在电缆上传播,遇到末端时如果阻抗不匹配,就会反射回来,与原信号叠加,造成波形畸变。双绞线的特性阻抗约 120 Ω,所以在总线的两端各接一个 120 Ω 电阻,让信号在末端被"吸收"。

终端电阻 ≈ 120 Ω(跨接在 A 和 B 之间) 只在总线的两个最远端接,中间的设备不要再接
终端电阻不要乱加:如果每个设备都接一个 120 Ω,总线的等效阻抗会变得很低,驱动能力下降,信号无法正常摆幅。只在两端接。

7.2 偏置电阻:让总线空闲时有确定的状态

当所有设备都处于接收状态(不发送)时,总线处于"空闲",此时 A、B 之间的电压不确定。它会被噪声扰动,接收端可能误以为收到数据,这就是"空闲误码"。解决办法是加偏置(失效保护)电阻:一个上拉到电源,一个下拉到地,把空闲时的差分电压拉到确定的值。

偏置电阻典型值:A 线经 680 Ω ~ 1 kΩ 上拉到 VCC,B 线经同样阻值下拉到 GND 具体阻值以所用芯片和手册推荐为准;很多现成的模块已经焊好
偏置电阻只需要在总线上加一次,一般放在主机端或者一端。加多了,会增加功耗,并降低总线的驱动能力。

八、距离与速率

RS485 的传输距离和速率是互相制约的:速率越高,允许的距离越短。下面是常见的参考数值(实际受线缆质量、分支长度、终端匹配影响,以设备手册为准):

参考最大距离(双绞线)-
单位 bit 的时间-
-
速率参考最大距离适用场景
9.6 kbps ~ 100 kbps约 1200 m工业现场、远距离传感器、仪表
1 Mbps约 130 m短距离的较快数据
10 Mbps约 15 m机柜内、设备之间的高速通信
选速率的原则:在满足数据量和响应时间的前提下,尽量选低速率。低速率抗干扰更好,距离更远,对线缆和布线的要求也更低。工业现场 9600 或 19200 bps 是最常见的选择。

九、常见问题排查

现象最可能的原因怎么查
完全不通A、B 接反;没有共地;DE 没有使能交换 A、B 试一次;用万用表测 GND 是否连通;看 DE 波形
偶尔错误,离主机近的好、远的差缺少终端电阻,信号反射在两端加 120 Ω,观察误码是否减少
空闲时总线上出现乱码没有偏置电阻,空闲状态不确定加偏置电阻,让空闲时 A、B 有确定的差分电压
回复的数据不完整发送完还没等到就切换了收发方向等待发送完成标志后再拉低 DE
多个设备同时发送,总线混乱没有收发协议(主从轮询),或发送时机冲突采用主机轮询的方式,每次只允许一个从机回复
设备多时通信越来越差分支太长,或超过设备负载数量缩短分支;减少节点或换高阻型号收发器
现场的通用思路:先确认接线(A、B、GND),再确认方向控制(DE 时序),然后看终端和偏置电阻,最后检查速率与线缆。按这个顺序,大部分问题很快能找到。

十、小测验:RS485

十一、本节小结

下一页:第9课(三):SPI,高速的主从通信

上一页:第9课(一):UART 串口