第4章:串口进阶——多机通信原理、RS485标准与差分信号、RS485组网与终端匹配
各位同学,咱们今天聊点硬核的。上一章我们把UART的基本原理捋了一遍,那是点对点的玩法。但实际工程中,你经常需要一台主机挂一堆从机,比如工业现场采集温度、压力、流量,总不能每个传感器都拉一根独立的线到PLC吧?那成本受不了,布线也乱成一锅粥。
所以,多机通信就来了。而RS485,就是串口多机通信领域里,最经典、最皮实、最常用的物理层标准。没有之一。
4.1 多机通信的基本原理
多机通信,说白了就是「一根总线上挂多个设备,大家共用这条线来传数据」。但问题来了:如果两个设备同时往线上发数据,信号就打架了,谁的数据都收不到。这就像一群人同时说话,谁也听不清。
怎么解决?核心思路就四个字:分时复用。每个设备都有自己的地址,主机点名,谁被点到谁说话,其他人闭嘴听着。
我早年做楼宇自控项目时,就遇到过这种场景。一个网关下面挂了32个温湿度传感器,用的就是RS485总线。主机轮询每个传感器的地址,传感器收到自己的地址后,才把数据发回来。如果地址对不上,就保持高阻态,不干扰总线。
多机通信的典型流程是这样的:
- 主机发送地址帧:总线上所有从机都收到这个地址,但只有地址匹配的那个从机才会响应。
- 从机应答数据帧:被点名的从机把数据发回给主机,其他从机保持沉默。
- 主机继续轮询下一个地址:如此循环,完成所有从机的数据采集。
这里有个关键点:地址帧和数据帧怎么区分? 在UART的帧格式里,我们通常用第9位(也就是奇偶校验位的位置)来做标识。比如,第9位为1表示地址帧,第9位为0表示数据帧。这样从机硬件就能自动识别,不需要软件去猜。
核心要点:多机通信的本质是「地址寻址 + 分时响应」。硬件上通过第9位区分地址和数据,软件上通过轮询或中断机制完成调度。
4.2 RS485标准与差分信号
好了,多机通信的逻辑讲完了。但逻辑信号怎么在物理线上传输?这就轮到RS485登场了。
RS485和RS232最大的区别是什么?RS232用的是单端信号,RS485用的是差分信号。
单端信号,就是一根信号线对地(GND)的电压差。比如RS232里,-3V到-15V表示逻辑1,+3V到+15V表示逻辑0。这种方式的缺点是抗干扰能力差,因为干扰信号会同时叠加在信号线和地上,导致电压差变化。
差分信号就不一样了。它用两根线(A和B)来传输,逻辑状态由A和B之间的电压差决定:
- A - B > +200mV:表示逻辑1
- A - B < -200mV:表示逻辑0
为什么差分信号抗干扰能力强?因为干扰信号会同时耦合到A和B两根线上,但它们的差值基本不变。你想想看,两根线走在一起,受到的电磁干扰几乎是一样的,一减就抵消了。这就是共模抑制。
我记得有一次在工厂调试,现场有大功率电机启停,RS232的通信直接乱码。换成RS485后,稳如老狗。从那以后,我对差分信号就特别信任。
个人经验:RS485的传输距离可以到1200米(在9600bps速率下),而RS232通常只有15米。如果你需要长距离、多节点、高可靠的通信,选RS485准没错。
RS485标准还规定了电气特性:
| 参数 | RS485 | RS232 |
|---|---|---|
| 传输方式 | 差分(平衡) | 单端(不平衡) |
| 最大节点数 | 32个(标准),可扩展至256个 | 1收1发 |
| 最大距离 | 1200米 | 15米 |
| 最大速率 | 10Mbps(短距离) | 115.2kbps |
| 共模电压范围 | -7V ~ +12V | ±15V |
4.3 RS485组网与终端匹配
组网这件事,看着简单,其实坑不少。我见过太多工程师在实验室调得好好的,一到现场就出问题。为什么?因为现场有长线、有干扰、有地电位差。
RS485组网,通常采用总线型拓扑。就是一根主干线,所有设备都挂在这根线上,像葡萄串一样。注意,不要搞成星型拓扑,那会导致信号反射,通信质量急剧下降。
组网时要注意以下几点:
- 双绞线是标配:A和B线要用双绞线,绞距越密越好。双绞线能有效抑制共模干扰。
- 屏蔽层单端接地:如果使用屏蔽双绞线,屏蔽层只在主机端单点接地,不要两端都接,否则会形成地环路。
- 偏置电阻:在总线空闲时,A和B之间没有电压差,从机可能误判。所以需要在总线上加偏置电阻,让空闲时A比B高200mV以上。
避坑指南:我曾经在一个项目中,因为偷懒没加偏置电阻,结果总线空闲时从机随机收到乱码,导致整个系统误动作。排查了两天才找到原因。从那以后,偏置电阻成了我的标配。
4.3.1 终端匹配电阻
这是RS485组网里最容易被忽视,但又最关键的一环。
为什么需要终端匹配?因为信号在长线上传输时,如果遇到阻抗不连续的地方,就会发生反射。反射回来的信号叠加在原信号上,会造成波形畸变,导致误码。
RS485的典型特性阻抗是120Ω。所以我们在总线的两端各接一个120Ω的电阻,让信号到达末端时被吸收掉,而不是反射回来。
什么时候需要加?
- 传输距离 > 300米:必须加
- 传输速率 > 100kbps:必须加
- 节点数较多(> 16个):建议加
什么时候可以不加?
- 短距离(< 10米)、低速(< 9600bps)、节点少(< 4个)的情况下,不加也能工作。但为了可靠性,我建议还是加上。
终端匹配电阻的位置很讲究:只在总线的物理两端各加一个,中间节点不要加。加了反而会破坏阻抗匹配。
4.3.2 组网示意图
下面我用一张SVG图来展示典型的RS485多机通信组网结构。这张图包含了主机、多个从机、双绞线、终端匹配电阻和偏置电阻。
从这张图可以看得很清楚:主机和从机都挂在A/B双绞线上,总线两端各有一个120Ω的终端匹配电阻,主机端还加了偏置电阻来保证空闲时的电平稳定。
4.4 实战中的几个坑
最后,我把自己这些年踩过的坑总结一下,希望能帮大家少走弯路。
- 地电位差:不同设备的地电位可能不一样,如果相差太大,会超出RS485的共模电压范围(-7V~+12V),导致通信失败。解决办法是加隔离,比如用ADI的ADM2483隔离型RS485收发器。
- 热插拔:RS485不支持热插拔。带电插拔设备时,会产生很大的浪涌电流,可能烧毁收发器。我建议在设备上电前就把线接好,或者加TVS管做保护。
- 总线冲突:如果两个从机同时响应,总线就冲突了。软件上要做好超时重试机制,硬件上可以用带使能控制的收发器(比如MAX485),平时处于接收状态,需要发送时才切换到发送状态。
一个小技巧:调试RS485时,先用示波器看A和B之间的波形。正常通信时,波形应该是清晰的方法,幅值在±200mV以上。如果波形圆润、幅值小,说明信号衰减严重,可能是距离太长或终端匹配没做好。
好了,这一章的内容就到这里。RS485是个好东西,用好了能解决很多实际问题。下一章我们会聊更高速的接口,但RS485作为工业通信的基石,值得你花时间吃透。
可可精品资料库