1. RS485物理层基础:差分信号原理、共模电压范围、终端电阻匹配
做嵌入式通信这么多年,我见过太多工程师一上来就调协议、改代码,结果发现根本问题是物理层没搞定。RS485这玩意儿,说简单也简单,说坑也真坑。咱们先从最基础的差分信号讲起。
1.1 差分信号原理
RS485用的是差分信号传输。什么叫差分?说白了就是一对线(A和B)传一个信号,靠两根线之间的电压差来表示逻辑0和逻辑1。
| 逻辑状态 | A线电压 - B线电压 | 典型电压差 |
|---|---|---|
| 逻辑1(空闲/Mark) | A < B | -1.5V ~ -6V |
| 逻辑0(Space) | A > B | +1.5V ~ +6V |
你想想看,为什么不用单端信号?因为差分信号抗共模干扰的能力强太多了。我在一个工厂项目里遇到过,电机一启动,UART就乱码。换成RS485之后,问题直接消失。原因很简单——干扰同时耦合到A和B线上,但差没变,接收器只看差值。
核心要点:RS485接收器只关心V(A) - V(B)的差值,不关心单根线对地的绝对电压。这就是它能在强干扰环境下稳定工作的根本原因。
1.2 共模电压范围
这里有个容易忽略的点:虽然接收器只看差分电压,但每根线对地还是有电压范围的。RS485标准规定,共模电压范围是-7V到+12V。
为什么会这样?因为通信双方的地电位可能不一样。我记得有一次帮客户排查一个485通信时好时坏的问题,测了半天发现两边的地电位差了将近5V。虽然还在范围内,但已经接近极限了。
避坑指南:我曾经遇到过共模电压超出范围导致芯片烧毁的案例。长距离通信时,一定要考虑地电位偏移。建议在总线两端加TVS管保护,必要时用隔离型RS485收发器。
共模电压的来源主要有三个:
- 地电位差:两个设备距离远,大地电阻造成电位不同
- 外部干扰:电机、变频器产生的共模噪声
- 电源差异:不同供电系统之间的电压差
1.3 终端电阻匹配
终端电阻这个话题,我每次培训都要强调。很多人觉得加上就行,其实没那么简单。
RS485总线可以看作一条传输线。信号在线上跑,遇到阻抗不连续的地方就会反射。反射回来的信号叠加在原信号上,轻则波形畸变,重则通信失败。
| 参数 | 典型值 | 说明 |
|---|---|---|
| 双绞线特性阻抗 | 120Ω | 常见RS485专用电缆 |
| 终端电阻 | 120Ω | 与电缆特性阻抗匹配 |
| 电阻功率 | ≥1/4W | 考虑总线驱动能力 |
个人习惯:我一般只在总线两端各放一个120Ω电阻。中间节点不加。如果节点数超过32个,我会重新计算等效负载,必要时调整电阻值。
终端电阻怎么放?记住一个原则:只在物理最远的两端放。我曾经见过有人每个节点都焊了个120Ω电阻,结果总线负载太重,驱动芯片根本拉不动。
什么时候可以不加终端电阻?
- 通信距离很短(<10米)
- 波特率很低(≤9600bps)
- 节点数很少(≤3个)
但说实话,我建议你养成习惯——只要距离超过30米或者波特率超过19200,老老实实加上。
1.4 本章知识结构
下面这张图把RS485物理层的核心知识点串起来了,你可以对照着理解:
1.5 实际排查要点
最后分享几个我在现场排查RS485物理层问题的经验:
- 先测静态电压:总线空闲时,A对地、B对地、A-B之间的电压。正常空闲状态A-B应该在-1.5V到-6V之间。
- 看波形:用示波器看A-B差分波形,有没有过冲、振铃、台阶。有反射的话一眼就能看出来。
- 检查接地:很多问题都是地没接好。RS485虽然差分,但共模电压范围有限,地还是要连的。
- 数节点:标准RS485驱动能力是32个节点,现在很多芯片能做到256个。但别贪多,留余量。
一句话总结:RS485物理层搞定了,后面协议层的问题至少少一半。差分信号、共模电压、终端匹配,这三样吃透了,你就能应付90%的现场问题。