第二章 CAN FD 物理层:差分信号、总线电平、终端电阻
做 CAN 或 CAN FD 的工程师,绕不开物理层。很多人一上来就盯着协议帧、位时间、采样点,结果板子一上电磁钳就出错误帧,查半天发现是终端电阻没焊对,或者共模电平漂了。嗯,物理层看着简单,坑不少。咱们这一章就把差分信号、总线电平、终端电阻这三个基础但关键的东西掰开揉碎说清楚。
2.1 为什么物理层这么重要?
打个比方,CAN FD 协议像一套交通规则,物理层就是路面和轮胎。路面不平、轮胎没气,再好的交规也跑不起来。EMI 干扰下,错误帧大量出现,很多时候根因就在物理层:信号幅值不够、边沿变缓、终端不匹配、共模噪声共模抑制比不足。
我个人习惯是先检查物理层再查协议层。节省时间,也少走弯路。
2.2 差分信号——CAN 的抗干扰底牌
CAN 用的是差分信号传输,两根线:CAN_H 和 CAN_L。发 0(显性)时,CAN_H 高、CAN_L 低;发 1(隐性)时,两根线都拉到 2.5 V 左右。接收端看的是两线电压差 Vdiff = V_CAN_H - V_CAN_L。
- 隐性位(Recessive):CAN_H = CAN_L ≈ 2.5 V,Vdiff ≈ 0 V
- 显性位(Dominant):CAN_H ≈ 3.5 V,CAN_L ≈ 1.5 V,Vdiff ≈ 2 V(标准 5 V 供电)
差分信号的好处很明显:共模噪声同时耦合到两根线上,相减后几乎抵消。我曾经在一个变频器项目里,电机启停时 CAN 总线错误帧暴增,最后发现是 CAN_H 和 CAN_L 的 PCB 走线一长一短,共模噪声没有同时到达,变成了差模分量。调整等长走线后问题消失。
2.3 总线电平——别只看电压
很多初学者以为 CAN FD 只认 0 和 1,其实收发器内部有比较器,判定阈值是滞回区间。不同收发器、不同供电电压下,显性/隐性电平会有一点差别。下面是一个典型 5 V 供电下的电平表格:
| 状态 | CAN_H (V) | CAN_L (V) | 差分电压 (V) |
|---|---|---|---|
| 隐性 | 2.5 | 2.5 | 0.0 |
| 显性 | 3.5 | 1.5 | 2.0 |
但要注意,如果总线供电 3.3 V(一些低功耗设计),显性差分会降到 1.5 V 左右,噪声容限也变小。我在一个车载项目里遇到过 3.3 V 收发器与 5 V 收发器混用的场景,显性电平差异导致接收端采样出错,错误帧频发。所以设计前一定要看收发器数据手册中的共模范围和差分阈值。
2.4 终端电阻——总线的“消音器”
终端电阻的作用是吸收信号反射。CAN 总线要求在物理两端各放一个 120 Ω 电阻,并联后等效 60 Ω。为什么是 120 Ω?因为双绞线特征阻抗大约 120 Ω,匹配才能无反射。
- 标准接法:两个 120 Ω 电阻分别挂在总线两端,中间节点不挂终端电阻。
- 如果只挂一个 120 Ω:未接端的一端会严重反射,显性转隐性时信号振荡,导致位错误或 CRC 错误。
- 如果挂太多阻值:总负载拉低差分幅值,影响接收灵敏度。
我测试过一个现场,客户说总线长度只有 5 米,但错误率很高。检查发现他们三个节点各焊了一个 120 Ω,并联等效 40 Ω,显性差分电压只剩 1.0 V,收发器内部比较器时而判对时而判错。拔掉两个电阻后恢复正常。
2.5 物理层结构总览
下面的 SVG 图把 CAN FD 物理要素串起来,方便你脑子里装一个整体视图。
2.6 设计要点的快捷清单
- 终端电阻位置:必须在总线物理两端,不在中间节点。短总线(<2 m)可以尝试用 60 Ω 单电阻但风险高,不推荐批量产品这么干。
- 共模扼流圈:一些收发器内置,外置时选对共模电感值(常见 100 μH ~ 1 mH),否则会滤掉 FD 高速边沿。
- 总线拓扑:尽量是直线型(干线 + 短分支)。分支长度控制在 30 cm 以内,分支越长反射越严重。
- PCB 布局:收发器距离连接器越近越好,差分对无过孔,周围敷接地铜。