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物理层的核心知识点串起来了,你可以对照着理解:

RS485物理层核心知识体系 差分信号原理 共模电压范围 终端电阻匹配 A/B线电压差表示0/1 抗共模干扰能力强 接收器只关心差值 标准范围:-7V ~ +12V 地电位差是主要来源 超出范围可能烧芯片 匹配特性阻抗120Ω 只在总线两端放置 消除信号反射 三者关系:差分信号是基础,共模电压是边界条件 终端电阻保证信号质量,缺一不可

1.5 实际排查要点

最后分享几个我在现场排查RS485物理层问题的经验:

  1. 先测静态电压:总线空闲时,A对地、B对地、A-B之间的电压。正常空闲状态A-B应该在-1.5V到-6V之间。
  2. 看波形:用示波器看A-B差分波形,有没有过冲、振铃、台阶。有反射的话一眼就能看出来。
  3. 检查接地:很多问题都是地没接好。RS485虽然差分,但共模电压范围有限,地还是要连的。
  4. 数节点:标准RS485驱动能力是32个节点,现在很多芯片能做到256个。但别贪多,留余量。

一句话总结:RS485物理层搞定了,后面协议层的问题至少少一半。差分信号、共模电压、终端匹配,这三样吃透了,你就能应付90%的现场问题。