3、RS485组网基础:差分信号、半双工与终端匹配
各位同学,今天我们来聊聊RS485。说实话,RS485在工业现场的地位,就像水电煤一样基础又关键。你想想看,一个工厂里几十台设备要互相通信,距离几百米甚至上千米,用RS232肯定不行——电平摆幅大、抗干扰差、还不能多机。这时候,RS485就是那个最靠谱的选择。
我个人习惯把RS485看作“工业现场的总线脊梁”。它不花哨,但皮实耐用。这一章,我们就把它最核心的三个东西讲透:差分信号怎么工作的、半双工怎么切换的、组网时终端电阻到底要不要加。
3.1 差分信号原理:为什么RS485能抗干扰?
RS485最核心的武器,就是差分信号传输。它不像RS232那样用一根信号线对地传输,而是用两根线——A和B——来传一个信号。
说白了,就是“两根线一起干活”。发送端在A线上输出一个正电压,在B线上输出一个负电压。接收端只看A和B之间的电压差,不看它们各自对地的电压。
关键点:RS485的差分电压范围是 ±1.5V ~ ±6V。逻辑“1”是A比B高(A-B > +200mV),逻辑“0”是A比B低(A-B < -200mV)。
我在项目中遇到过一件事:一个设备在电机旁边,用RS232通信,数据经常乱码。换成RS485后,同样的线缆、同样的距离,通信稳如泰山。为什么?因为差分信号对共模噪声有天然的抑制能力——噪声同时耦合到A和B线上,但差值不变。
来看一个简单的对比表格,你就明白了:
| 特性 | RS232(单端) | RS485(差分) |
|---|---|---|
| 信号线数量 | 1根(TX/RX各1) | 2根(A、B) |
| 抗共模干扰 | 弱 | 强 |
| 最大通信距离 | 约15米 | 约1200米 |
| 逻辑电平 | ±3V ~ ±15V | ±1.5V ~ ±6V(差分) |
| 多节点能力 | 点对点 | 最多256节点 |
嗯,这里要注意:差分信号虽然抗干扰强,但也不是无敌的。如果A、B两根线走线不对称,或者双绞线绞距不均匀,共模抑制效果就会打折扣。所以,一定要用双绞线,而且绞距越密越好。
3.2 半双工通信机制:收发不能同时干
RS485是半双工的。什么意思?就是同一时刻,总线上只能有一个设备在发送,其他设备都在接收。你不能像RS232那样同时收发。
为什么会这样?因为RS485的A、B两根线是共享的。所有设备的发送器和接收器都挂在这两根线上。如果两个设备同时往线上怼数据,那结果就是——信号打架,谁也收不到。
我刚开始做RS485项目时,就犯过这个错。写代码时没注意收发切换的时序,发送完数据后立刻切到接收模式,结果最后几个字节被自己吞掉了。后来我养成了一个习惯:发送完最后一个字节后,必须等一个“安全间隔”再切接收。
我的经验:这个安全间隔至少是发送一个字节的时间。比如波特率9600,一个字节约1ms,那就等1ms再切。如果总线负载重,建议等2~3ms。
半双工通信的典型流程是这样的:
- 主机发送:主机使能发送器,往总线上发数据帧。
- 从机接收:所有从机都在监听总线,接收数据。
- 主机切接收:主机发送完毕,关闭发送器,使能接收器。
- 从机应答:目标从机使能发送器,回复数据。
- 主机接收:主机收到应答,完成一次通信。
你看,整个过程就像“对讲机”——你说完了,我再说。谁也不能抢话。
3.3 多点组网拓扑:总线型才是王道
RS485支持多点组网,最多可以挂256个节点(标准驱动下)。但拓扑结构有讲究——必须用总线型,也就是所有设备都挂在一根主干线上。
我见过有人用星型拓扑接RS485,结果通信时好时坏。为什么?因为星型拓扑会产生信号反射,分支线越长,反射越严重。RS485对信号完整性要求高,分支线一长,波形就畸变了。
避坑指南:我曾经在一个项目中,为了布线方便,把RS485接成了星型。结果调试了三天,数据就是不稳定。最后改成总线型,问题立刻解决。记住:RS485只认总线型,分支线越短越好,最好不超过30cm。
总线型拓扑的要点:
- 主干线:一根双绞线贯穿所有节点,A、B线不能交叉。
- 分支线(stub):从主干线到设备接口的引线,越短越好。
- 节点间距:没有严格限制,但建议均匀分布。
- 终端电阻:只在主干线两端各加一个120Ω电阻。
下面这张图,就是RS485标准的总线型组网结构:
3.4 终端电阻匹配:120Ω不是随便选的
终端电阻,说白了就是在总线两端各并一个120Ω的电阻。它的作用是吸收信号能量,防止信号在总线末端反射回来,造成波形畸变。
为什么是120Ω?因为RS485用的双绞线,特性阻抗大约是120Ω。阻抗匹配了,信号就不会反射。你想想看,如果总线末端是开路,信号走到头没地方去,就会反弹回来,跟后面的信号叠加,数据就乱了。
我遇到过一种情况:一个系统里只加了一个终端电阻,结果通信距离超过500米后,数据偶尔出错。后来加上第二个终端电阻,问题消失。所以记住:终端电阻必须成对出现,而且只在总线两端加。
什么时候可以不加终端电阻?
- 短距离低速:通信距离小于10米,波特率低于9600,可以不加。
- 节点数少:只有2~3个设备,且距离很近。
- 但我的建议:只要距离超过30米,或者波特率高于19200,就老老实实加上。省一个电阻的钱,可能换来几天的调试时间。
终端电阻的接法也很简单:
- A线对地:不接电阻。
- B线对地:不接电阻。
- A线和B线之间:并一个120Ω电阻。
有些RS485收发器芯片(比如MAX485)内部已经集成了终端电阻,但大多数需要外部加。我习惯在PCB上预留120Ω电阻的焊盘,调试时根据实际情况决定焊不焊。
3.5 本章小结
好了,这一章的内容就这些。我们讲了RS485的三大基石:
- 差分信号:两根线传一个信号,抗干扰强,距离远。
- 半双工通信:收发不能同时进行,注意切换时序。
- 总线型拓扑 + 终端电阻:组网必须用总线型,两端各加一个120Ω电阻。