一、为什么需要 RS485?
上一页的 UART 是单端信号:每根线的电压都相对于地来判断。它在板内或几米内很好用,但遇到以下情况就不行了:
- 距离远:线一长,电阻、电容、干扰都会累积,信号变形。
- 干扰强:工厂里有电机、变频器、继电器,它们产生的电磁干扰会直接叠加在信号上。
- 设备多: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 命名与接线请核对具体器件手册
A、B 接反了,通信就不通:多数芯片的标注 A 为"−"、B 为"+",但不同厂家约定可能相反。接线时若完全不通,先交换 A、B 两根线再试。这是现场最常见的问题之一。
五、半双工与收发方向控制
RS485 总线上只有一对 A、B 线,所有设备共用它。因此同一时刻,只能有一个设备发送,其它设备接收。这叫半双工(第9课总览讲过)。
5.1 DE 与 RE:切换收发方向
- DE(Driver Enable):发送使能。为高时,芯片把 DI 的数据驱动到总线上。
- RE(Receiver Enable):接收使能,常为低时允许接收。很多芯片把 DE 与 RE 连在一起,统一由一个 GPIO 控制。
5.2 发送的正确时序
- 单片机拉高 DE,芯片切换为发送状态。
- 通过 UART 发送一帧数据。
- 等待最后一个字节真正发完(查看 UART 的"发送完成"标志,不能只看写入寄存器)。
- 拉低 DE,芯片回到接收状态,准备接收回复。
最常见的坑:数据刚写进 UART 发送缓冲区,就立刻拉低 DE。这时最后几个字节还没发出去,对方收到的数据不完整。一定要等发送完成标志。
六、总线拓扑与分支长度
RS485 的标准拓扑是总线型(菊花链):一根主干线,所有设备依次并接在上面,而不是一个设备拉出一条分叉。
RS485 差分总线与终端 两根主干线,分支尽量短
- 主干线:从主机一直走到最远的设备,中间不要做成星形或树形。
- 分支(短线):每个设备到主干线的连线要尽量短(一般不超过几十厘米,高速时要更短),否则会产生反射。
- 设备数量:标准收发器的负载能力约 32 个单位负载(UL),部分高阻型号可挂 128 或 256 个节点。
七、终端电阻与偏置电阻
7.1 终端电阻:防止信号反射
信号在电缆上传播,遇到末端时如果阻抗不匹配,就会反射回来,与原信号叠加,造成波形畸变。双绞线的特性阻抗约 120 Ω,所以在总线的两端各接一个 120 Ω 电阻,让信号在末端被"吸收"。
终端电阻 ≈ 120 Ω(跨接在 A 和 B 之间)
只在总线的两个最远端接,中间的设备不要再接
终端电阻不要乱加:如果每个设备都接一个 120 Ω,总线的等效阻抗会变得很低,驱动能力下降,信号无法正常摆幅。只在两端接。
7.2 偏置电阻:让总线空闲时有确定的状态
当所有设备都处于接收状态(不发送)时,总线处于"空闲",此时 A、B 之间的电压不确定。它会被噪声扰动,接收端可能误以为收到数据,这就是"空闲误码"。解决办法是加偏置(失效保护)电阻:一个上拉到电源,一个下拉到地,把空闲时的差分电压拉到确定的值。
偏置电阻典型值:A 线经 680 Ω ~ 1 kΩ 上拉到 VCC,B 线经同样阻值下拉到 GND
具体阻值以所用芯片和手册推荐为准;很多现成的模块已经焊好
偏置电阻只需要在总线上加一次,一般放在主机端或者一端。加多了,会增加功耗,并降低总线的驱动能力。
八、距离与速率
RS485 的传输距离和速率是互相制约的:速率越高,允许的距离越短。下面是常见的参考数值(实际受线缆质量、分支长度、终端匹配影响,以设备手册为准):
| 速率 | 参考最大距离 | 适用场景 |
| 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 用 A、B 两根差分线传输,只看两者的差,因此能抵消共模干扰。
- 双绞线让两根线受到的干扰几乎相同,进一步提高抗干扰能力。
- RS485 是半双工,需要 DE/RE 控制收发方向;发送完成后才能切换。
- 总线拓扑为主干线加短分支,两端各接 120 Ω 终端电阻;空闲时需要偏置电阻。
- 速率越高,距离越短:9.6 ~ 100 kbps 可达约 1200 m,10 Mbps 约 15 m。
- 接线时注意 A、B 不要接反,且必须共地。
下一页:第9课(三):SPI,高速的主从通信
上一页:第9课(一):UART 串口