4. 物理层基础:传输介质、差分信号与电平特性
各位工程师朋友,欢迎来到第4章。物理层往往是大家最容易忽视的部分——总觉得协议栈才是核心,线嘛,能通就行。
但我在项目里吃过这个亏。有一次CAN FD通信在高温环境下频繁丢帧,查了三天,最后发现是双绞线的绞距不对,共模扼流圈也没选合适。从那以后,我对物理层再也不敢马虎了。
这一章咱们就聊透物理层的三个核心:传输介质、差分信号和电平特性。理解这些,你才能把CAN FD网络设计得既稳又可靠。
4.1 物理层在CAN FD协议栈中的位置
先看一张整体架构图,帮你建立全局感。物理层在最底下,直接和线束打交道。它决定了信号怎么发出去、怎么抗干扰、怎么在总线仲裁时分出胜负。
物理层的职责一句话总结:把协议层的0/1变成总线上的差分电压,同时保证所有节点能“听”到彼此的声音。
4.2 传输介质:双绞线
CAN FD最常用的传输介质就是双绞线。你想想看,为什么叫“双绞”?两根线按一定节距互相缠绕,目的只有一个——消除共模干扰。
干扰信号在两根线上产生的感应电流方向相反,互相抵消。绞距越密,抗干扰能力越强,但信号衰减也会稍微大一点。
我的选型建议:对于CAN FD(最高8 Mbps),推荐使用绞距在25–35 mm之间的双绞线。我习惯用AWG 22或AWG 24规格的屏蔽双绞线(STP),尤其在电机驱动器附近,屏蔽层能帮你挡掉不少麻烦。
双绞线有非屏蔽(UTP)和屏蔽(STP)两种。UTP便宜,但EMC环境复杂的场合,我建议你老老实实用STP。
有一次我在一个光伏逆变器项目里用了UTP,结果通信距离超过100米后,误码率飙升到1%。换回STP并做好单点接地,问题立刻消失。
双绞线的关键参数
| 参数 | 推荐值 / 范围 | 说明 |
|---|---|---|
| 特性阻抗 | 120 Ω ± 10% | CAN总线标准阻抗,需与终端电阻匹配 |
| 绞距 | 25–50 mm | 绞距越小,抗共模干扰越强 |
| 线径 (AWG) | 22 / 24 / 26 | 粗线适合长距离,细线适合短距离分支 |
| 电容 (pF/m) | ≤ 50 pF/m | 电容过大会拉慢信号边沿 |
注意:千万不要用普通平行线代替双绞线!差分信号的共模抑制能力全靠绞合结构实现。平行线在干扰下会变成“天线”,让你查错查到怀疑人生。
4.3 传输介质:光纤
光纤在CAN FD里用得少,但某些场景非它不可。比如:
- 超远距离(> 1 km)—— 双绞线到不了。
- 强电磁干扰环境—— 比如变电站、焊接车间。
- 电气隔离要求高—— 光纤天然隔离,不用额外加隔离器。
使用光纤时,两端需要加光电转换模块(PHY + 光收发器)。协议层面不用改,物理层把电信号转成光信号,接收端再转回来。
我个人不太建议在普通工业现场无脑用光纤——成本高、施工麻烦、接头易脏。但如果环境实在恶劣,光纤是唯一的可靠选择。
4.4 差分信号原理
好,现在聊核心中的核心——差分信号。CAN FD用两根线传输:CAN_H 和 CAN_L。信号不是单端对地,而是两根线的电压差。
数学表达式很简单:
V_diff = CAN_H - CAN_L
为什么用差分?抗共模干扰。外部干扰对两根线的影响几乎一样,差分一减,干扰互相抵消。你想想看,单端信号如果被耦合进1V噪声,接收端根本无法区分;但差分信号里,两根线同时被抬升1V,差值不变,信号完整无损。
关键记忆点:CAN总线在隐性状态时,CAN_H 和 CAN_L 都接近 2.5 V,差分电压 ≈ 0 V;在显性状态时,CAN_H 升到 3.5 V,CAN_L 降到 1.5 V,差分电压 ≈ 2 V。
我踩过一个坑:有个项目中CAN_H和CAN_L在PCB上走了不等长,差了大概3 cm。结果信号边沿出现共模到差模转换,导致总线在1 Mbps以上就频繁CRC错误。后来强制等长走线,问题解决。
布局建议:CAN_H和CAN_L的走线长度差不要超过5 mm,且必须紧耦合(线间距≤ 2倍线宽)。差分对的周围不要走高速数字信号。
4.5 电平特性:显性与隐性
CAN/CAN FD的总线逻辑不是简单的“高=1,低=0”。它用显性(Dominant)和隐性(Recessive)表示逻辑电平。
- 隐性(Recessive):逻辑“1”。CAN_H = 2.5 V,CAN_L = 2.5 V,差分电压 ≈ 0 V。总线处于“放松”状态。
- 显性(Dominant):逻辑“0”。CAN_H = 3.5 V,CAN_L = 1.5 V,差分电压 ≈ 2 V。总线被某个节点“拉”到确定状态。
仲裁的奥秘就在这里:多个节点同时发数据时,显性位会覆盖隐性位。谁先发显性位,谁就赢得仲裁。这就是CAN总线无破坏性位仲裁的物理基础。
| 特性 | 隐性 (Recessive) | 显性 (Dominant) |
|---|---|---|
| 逻辑值 | 1 | 0 |
| CAN_H 电压 | 2.5 V | 3.5 V |
| CAN_L 电压 | 2.5 V | 1.5 V |
| 差分电压 | ≈ 0 V | ≈ 2 V |
| 总线优先级 | 低 | 高 |
| 谁控制总线 | 无节点驱动(上拉电阻维持) | 某个节点主动驱动 |
显性/隐性的核心意义:它让总线在没有中央调度器的情况下,通过硬件自动完成冲突检测和优先级裁决。这是CAN/CAN FD在实时控制领域不可替代的原因之一。
4.6 终端电阻与信号完整性
提到物理层,终端电阻必须带一笔。CAN总线两端各接一个120 Ω电阻,作用有两个:
- 阻抗匹配—— 防止信号反射。
- 提供隐性电平—— 没有节点发送时,电阻把CAN_H和CAN_L拉到2.5 V。
终端电阻一定要加在总线的最远端。我见过有人把电阻装在控制器旁边,总线末端反而没接,结果信号反射在线上来回弹,通信根本跑不起来。
注意:CAN FD速率更高(最高8 Mbps),对终端匹配更敏感。如果总线拓扑中有长分支,建议用主动终端或可调终端,否则边沿反射会让你抓狂。
4.7 避坑指南与经验总结
讲了这么多,最后给你几条实在的建议:
- 差分对等长走线 —— 长度差 ≤ 5 mm,越短越好。
- 双绞线绞距别乱选 —— 25–35 mm 是安全区。
- 终端电阻别省 —— 两端各一个120 Ω,不要只加一个。
- 屏蔽层单点接地 —— 避免地环路引入低频干扰。
- 分支长度越短越好 —— CAN FD建议分支 ≤ 0.3 m,否则信号反射严重。
曾经有一个项目,我把终端电阻装在了分支末端而不是总线末端,结果总线波形像心电图一样乱七八糟。那次之后我养成了个习惯:每次布线完,先用示波器看总线波形——显性/隐性电平是否标准?边沿是否干净?反射是否在合理范围?波形会告诉你一切。
物理层就这么些东西,但恰恰是这些“简单”的东西,决定了你的CAN FD网络能不能在恶劣环境下稳定跑上几年。下一层咱们要钻进协议栈的肚子里了,不过在这之前,先把物理层焊牢。