2. 物理层基础:RS-485/RS-232/CAN总线电气特性、差分信号原理、终端电阻匹配实战

各位同学,咱们今天聊点硬核的。物理层,说白了就是信号在线上怎么跑的问题。你协议栈写得再漂亮,物理层没搞定,数据就是传不过去。我在逆变器项目里吃过不少这方面的亏,今天把这些经验掰开了揉碎了讲给你听。

2.1 差分信号原理:为什么工业现场都爱用它?

先问大家一个问题:为什么RS-485和CAN总线都用差分信号,而RS-232用单端信号?

嗯,这里有个关键点。单端信号靠一根信号线和地之间的电压差来传数据。比如RS-232,逻辑1是-3V到-15V,逻辑0是+3V到+15V。看起来挺简单,对吧?但问题来了——地线一旦有干扰,信号就完蛋。

我记得有一次在光伏电站调试,逆变器和数据采集器之间距离大概50米。用RS-232怎么都通不了,示波器一看,地线上有2V多的共模噪声。信号直接被淹没了。

差分信号就不一样了。它用两根线,A和B,传的是它们之间的电压差。外界干扰同时作用在两根线上,差值是保持不变的。这就是共模抑制。

核心公式:

V_diff = V_A - V_B

逻辑1:V_diff > +200mV

逻辑0:V_diff < -200mV

你想想看,200mV的阈值,噪声要同时把两根线都拉偏200mV以上才会误判。这在工业现场几乎不可能。所以RS-485和CAN能跑1200米,RS-232最多15米,就是这个道理。

2.2 RS-485:逆变器通信的老黄牛

RS-485是我在逆变器项目里用得最多的接口。没有之一。它成本低、距离远、节点多,一个总线能挂32个节点(用高阻抗芯片可以到256个)。

但RS-485有个坑——它只定义了物理层,没有协议层。所以你会看到Modbus RTU、Profibus、甚至自己定义的协议都跑在RS-485上。

参数 RS-485 RS-232
传输方式 差分(平衡) 单端(非平衡)
最大距离 1200米 15米
最大速率 10Mbps(短距离) 115.2kbps
节点数 32-256 1对1
共模电压范围 -7V ~ +12V ±15V

这里我要强调一点:RS-485的共模电压范围是-7V到+12V。什么意思?就是A线和B线对地的电压不能超出这个范围。我在一个项目中,逆变器和大电机靠得很近,电机启动时地电位瞬间抬升了十几伏,直接把RS-485芯片烧了。后来加了隔离,问题才解决。

实战建议:

逆变器环境干扰大,RS-485一定要用隔离型收发器,比如ADM2483或ISO3082。别省这个钱,烧一片芯片的功夫够你买十片隔离的了。

2.3 CAN总线:实时性才是王道

CAN总线在逆变器里主要用于内部通信,比如DSP和各个模块之间的数据交换。它比RS-485强在哪?

  • 多主架构:任何节点都可以主动发数据,不用等主机轮询
  • 实时性:优先级高的报文优先发送,不会因为总线忙而卡死
  • 错误检测:CRC校验、位填充、格式检查,一应俱全

CAN的物理层也是差分信号,但和RS-485有区别。CAN的显性电平(逻辑0)是CAN_H比CAN_L高1.5V左右,隐性电平(逻辑1)是两者电压相等。这个设计很有意思——多个节点同时发显性位时,总线状态是显性,不会冲突。

CAN总线电平定义:

显性位(Dominant):CAN_H = 3.5V, CAN_L = 1.5V, V_diff = 2.0V

隐性位(Recessive):CAN_H = 2.5V, CAN_L = 2.5V, V_diff = 0V

我个人习惯在逆变器内部用CAN,外部通信用RS-485。为什么?因为CAN的节点数有限(标准帧最多2032个,但实际受驱动能力限制),而且成本比RS-485高。外部通信距离远、节点多,RS-485更合适。

2.4 终端电阻匹配:小电阻,大问题

终端电阻匹配,这个知识点看起来简单,但坑最多。我见过太多工程师在这个问题上翻车。

先讲原理。信号在传输线上跑,遇到阻抗不连续的地方就会反射。反射回来的信号叠加在原信号上,轻则波形畸变,重则数据错误。终端电阻的作用就是吸收信号能量,不让它反射回来。

RS-485和CAN的传输线特性阻抗一般是120Ω。所以终端电阻也要用120Ω。一个在总线最远端,一个在最远端,两个并联起来就是60Ω。为什么是60Ω?因为驱动器的输出阻抗也是60Ω左右,这样阻抗匹配,反射最小。

注意:

终端电阻不是随便加的!

  • 短距离(<10米)可以不加,信号反射不明显
  • 长距离(>100米)必须加,否则数据出错
  • 只加在总线两端,中间节点不要加
  • 电阻值必须精确,120Ω就是120Ω,别用100Ω凑合

我曾经在一个项目中,现场工程师图省事,只在总线一端加了120Ω电阻。结果总线长度300米,数据丢包率高达30%。我过去一看,示波器上波形振铃严重。加上另一端的120Ω电阻后,波形干净得像教科书一样。

还有一个常见问题:终端电阻的功率。一般用1/4W的贴片电阻就够了。但如果总线电压异常高(比如雷击感应),电阻可能会烧。我在一些关键项目里会用1/2W的电阻,留点余量。

2.5 实战:逆变器通信接口设计要点

好了,理论讲完了,咱们来点实际的。如果你现在要设计一个逆变器的通信接口,该注意什么?

  1. 隔离:逆变器内部有高压(几百伏直流),通信接口必须隔离。光耦隔离或磁隔离都行,但别省。
  2. 保护:TVS管、气体放电管、PTC自恢复保险,一个都不能少。雷击、静电、浪涌,随便一个都能让你的通信接口报废。
  3. 终端电阻:用跳线或拨码开关,方便现场配置。别焊死,因为你不知道现场总线长度是多少。
  4. 布线:差分线要等长、要靠近、要远离大电流线。我在一个项目里把RS-485线和功率线走在一起,结果通信时好时坏,查了三天才发现是串扰。

我的经验:

逆变器通信接口的故障,80%是物理层问题。协议栈写得再好,物理层没搞定也是白搭。所以设计时多花点心思在物理层上,后面调试会省很多事。

最后说一句:别迷信理论计算。现场环境千变万化,最好的办法是拿示波器看波形。波形干净了,数据自然就通了。嗯,今天就讲到这里,下一章咱们聊数据链路层,Modbus协议的那些坑。