第2章:物理层基础 — RS-232/RS-485/RS-422电气特性对比、差分信号原理、终端电阻匹配
各位工程师朋友,咱们今天聊聊物理层。说实话,很多做嵌入式开发的朋友,一上来就怼着协议栈写代码,结果硬件上频频翻车。我见过太多项目,软件调通了,一接上长电缆就乱码,最后发现是终端电阻没焊。嗯,物理层这东西,看着基础,但坑是真不少。
2.1 三种串行接口的电气特性对比
先看一张对比表,这是我个人习惯,把关键参数列出来,心里有个谱。
| 参数 | RS-232 | RS-422 | RS-485 |
|---|---|---|---|
| 传输方式 | 单端(不平衡) | 差分(平衡) | 差分(平衡) |
| 最大传输距离 | 约15米(@20kbps) | 约1200米(@100kbps) | 约1200米(@100kbps) |
| 最大速率 | 约115.2kbps(典型) | 10Mbps(短距离) | 10Mbps(短距离) |
| 驱动方式 | 单端驱动 | 平衡驱动 | 平衡驱动 |
| 接收器数量 | 1个 | 最多10个 | 最多32个(标准) |
| 驱动器数量 | 1个 | 1个 | 多个(半双工) |
| 逻辑电平 | ±5V ~ ±15V | 差分±2V ~ ±6V | 差分±1.5V ~ ±6V |
| 共模电压范围 | 无严格要求 | ±7V | -7V ~ +12V |
| 典型接口芯片 | MAX232, SP3232 | MAX488, SN75179 | MAX485, SN75176 |
这张表我建议你存下来。为什么?因为选型的时候,看一眼就知道能不能用。
2.2 RS-232:老当益壮的单端通信
RS-232是最早的串行接口标准之一。它的信号是单端对地的,说白了就是一根信号线对地线。逻辑1用-3V到-15V表示,逻辑0用+3V到+15V表示。注意,是负逻辑,跟TTL电平正好反着。
关键点:RS-232的电压摆幅大,抗干扰能力其实还行,但传输距离一长就不行了。为什么?因为地线压降。你想想看,两地之间如果有几伏的电位差,信号就乱套了。
我在项目中遇到过一件事:一台工控机和一台PLC用RS-232通信,距离也就10米,但老是丢数据。查了半天,发现两个设备的地电位差了将近2V。后来加了光耦隔离,问题才解决。所以,RS-232只适合短距离、同一配电柜内的设备。
2.3 差分信号原理:为什么RS-485能传1200米?
RS-422和RS-485的核心技术是差分信号传输。说白了,就是不用地线做参考,而是用两根线(A和B)之间的电压差来表示数据。
举个例子:A线比B线高200mV,表示逻辑1;B线比A线高200mV,表示逻辑0。接收器只看差值,不看绝对值。
个人经验:差分信号最大的好处是抗共模干扰。外部噪声同时耦合到A和B线上,差值不变。这就好比两个人同时被推了一下,但相对位置没变。我做过一个测试,在电机变频器旁边跑RS-485,距离50米,数据一点没丢。换成RS-232,5米就挂了。
差分信号的另一个优势是低电压摆幅。RS-485只需要200mV的差分电压就能可靠识别,所以功耗低、速率高。你想想看,从±12V降到±200mV,功耗差了多少?
2.4 RS-422 vs RS-485:一字之差,天壤之别
很多人分不清RS-422和RS-485。我刚开始做设计时也搞混过,直到有一次把RS-422芯片当RS-485用,结果多机通信死活调不通。
区别其实就两点:
- 驱动方式不同:RS-422是单工驱动,一个发送器可以带最多10个接收器。RS-485是半双工驱动,多个发送器可以挂在同一总线上,但同一时间只能有一个发送。
- 使能控制不同:RS-422的发送器一直使能,不需要控制。RS-485的发送器需要DE(Driver Enable)信号控制,不发送时要置为高阻态,否则会冲突。
避坑指南:我曾经在一个项目中,用RS-422芯片做多机通信,结果发现从机无法主动发送数据。查了三天资料,才发现RS-422的从机只能接收,不能主动发送。后来全部换成RS-485,加了个DE控制引脚,问题才解决。记住:RS-422是一主多从,RS-485是多主多从(通过协议仲裁)。
2.5 终端电阻匹配:为什么必须焊?
终端电阻匹配,说白了就是防止信号反射。信号在电缆中传输时,如果遇到阻抗不连续的地方,就会产生反射波。反射波叠加到原信号上,就会造成波形畸变,导致误码。
为什么会这样?因为电缆有特性阻抗(通常120Ω),而接收器的输入阻抗很高(几kΩ到几十kΩ)。信号到了电缆末端,相当于撞上了一堵墙,一部分能量就弹回来了。
终端电阻的作用,就是在电缆末端并联一个电阻,阻值等于电缆的特性阻抗,把信号能量吸收掉,不让它反射。
计算公式:终端电阻RT = 电缆特性阻抗Z0。对于RS-485/RS-422,标准电缆特性阻抗为120Ω,所以终端电阻通常选120Ω,精度1%或5%都可以。
我个人的习惯是:
- 短距离(< 10米):可以不加终端电阻,但建议预留焊盘。
- 中距离(10-100米):在总线两端各加一个120Ω电阻。
- 长距离(> 100米):必须加,而且要用1%精度的电阻。
- 高速率(> 1Mbps):即使距离短,也建议加,否则波形会振铃。
这里有个常见的误区:很多人只在总线一端加电阻。其实,终端电阻应该加在总线的两端,而不是中间。为什么?因为信号是从发送端往两端传播的,两端都需要吸收能量。如果只加一端,另一端还是会反射。
实测经验:我曾经用示波器看过不加终端电阻的波形。在100米电缆末端,信号过冲能达到50%以上,持续振荡好几个微秒。加上120Ω电阻后,波形干净得像教科书一样。所以,别省那几分钱的电阻钱。
2.6 偏置电阻:让总线保持确定状态
除了终端电阻,RS-485总线还经常需要偏置电阻。为什么?因为RS-485接收器的输入阻抗很高,当总线上没有设备发送时(所有发送器都处于高阻态),总线电压是不确定的。这时候,接收器可能输出随机数据,造成误触发。
偏置电阻的作用,就是在总线上拉一个固定的差分电压,让接收器在空闲时输出确定的状态(通常是逻辑1)。
偏置电阻的计算方法:
假设:
- VCC = 5V
- 终端电阻 RT = 120Ω(两端各一个,并联后60Ω)
- 需要的偏置电压 Vbias = 200mV(差分)
计算:
- 偏置电阻 R1(上拉)和 R2(下拉)串联,中间点接A/B线
- 总偏置电流 I = Vbias / RT = 0.2V / 60Ω ≈ 3.3mA
- R1 + R2 = (VCC - Vbias) / I = (5 - 0.2) / 0.0033 ≈ 1454Ω
- 取 R1 = R2 = 720Ω(常用值)
实际电路中,我常用 680Ω 或 750Ω 的电阻,效果都不错。
注意:偏置电阻会增加功耗,也会降低总线能挂载的设备数量。标准RS-485最多挂32个节点,加了偏置电阻后,可能只能挂20个左右。如果节点数多,可以考虑用带故障保护功能的接收器芯片(如MAX3082),它内部集成了偏置电路。
2.7 接地问题:差分信号也需要地线
很多人以为差分信号不需要地线,这是个误解。差分信号虽然不依赖地线做参考,但收发器芯片的共模电压范围是有限的。如果两地之间的电位差超过了收发器的共模范围(RS-485是-7V到+12V),芯片就会损坏。
我建议的做法是:
- 短距离(< 100米):在A、B线之外,再加一根地线,三线制连接。
- 长距离(> 100米):除了地线,还要考虑使用隔离型收发器(如ISO3082),或者加光耦隔离。
- 极端环境(雷击、大电流干扰):使用带TVS管的保护电路,或者用光纤转换器。
个人教训:有一次在工厂里布RS-485总线,距离300米,没接地线。结果夏天打雷,烧了三个从站的收发器。后来全部换成隔离型,加TVS管,再也没出过问题。记住:地线不是可选项,是必选项。
2.8 实战选型建议
最后,给各位一个选型速查表,是我多年总结的:
| 应用场景 | 推荐接口 | 理由 |
|---|---|---|
| 同一机柜内,距离< 5米 | RS-232 | 简单、便宜、不需要终端电阻 |
| 同一车间,距离< 100米,一主多从 | RS-485 | 多节点、抗干扰、成本低 |
| 高速数据采集,距离< 10米 | RS-422 | 全双工、速率高、不需要使能控制 |
| 跨建筑,距离> 500米 | RS-485 + 中继器 | 中继器可以延长距离,最多4级 |
| 强干扰环境(变频器、电机) | RS-485 + 隔离 | 隔离型收发器+TVS管,保平安 |
好了,物理层的基础就聊到这儿。下一章咱们讲数据链路层,看看数据是怎么打包成帧的。记住一句话:物理层搞不定,上层协议再牛也白搭。嗯,这话是我自己说的,但绝对是真理。