第二章:CAN FD物理层基础

各位工程师朋友,今天我们来聊聊CAN FD的物理层。说实话,很多做CAN开发的朋友,往往把精力都放在协议层、软件层,对物理层不太上心。但我个人的经验是——物理层出问题,排查起来最头疼。你想想看,软件逻辑错了能仿真,协议栈错了能抓包,但物理层的问题,示波器一挂上去,波形乱七八糟,你都不知道从哪下手。

所以这一章,咱们把物理层的基础打扎实。我会结合自己在项目里踩过的坑,把差分信号、总线拓扑、终端电阻这些核心概念讲透。

2.1 差分信号原理:为什么CAN要用两根线?

CAN总线用两根线——CAN_H和CAN_L,传输信号。很多人刚接触时会问:为什么不用单端信号?一根线传数据,地线回流,多简单。

嗯,这里要注意。车载环境非常恶劣。发动机点火、电机驱动、继电器吸合,到处都是电磁干扰。单端信号在这种环境里,就像在菜市场里小声说话——根本听不清。

差分信号就不一样了。它用两根线传同一个信号,但相位相反。接收端只看两根线的电压差。外部干扰来了,两根线上同时被叠加同样的噪声,但差值不变。说白了,就是共模抑制。

关键公式:

CAN总线隐性电平(逻辑1):CAN_H ≈ 2.5V,CAN_L ≈ 2.5V,差分电压 ≈ 0V

CAN总线显性电平(逻辑0):CAN_H ≈ 3.5V,CAN_L ≈ 1.5V,差分电压 ≈ 2V

我在项目中遇到过一件事。有个同事调试CAN通信,发现偶尔丢帧。他查了三天软件,没找到问题。后来我让他用示波器看波形,发现CAN_H和CAN_L的共模电压漂到了6V。原来是地线接触不良,导致共模电压超出收发器范围。差分信号虽然抗干扰,但共模范围是有限度的。这一点很多人会忽略。

3.2 CAN FD总线拓扑结构

CAN FD的总线拓扑,说白了就是一条主干线,上面挂多个节点。主干线两端各接一个终端电阻。节点通过短的支线(stub)连接到主干线上。

为什么必须是这种结构?

我打个比方。总线就像一根水管,每个节点就像从水管上接出来的水龙头。如果水龙头接得太远(支线太长),水压就会不够,信号反射也会严重。CAN FD的速率比传统CAN高很多,对支线长度更敏感。

我个人习惯的拓扑设计原则:

  • 主干线尽量走直线,避免直角拐弯
  • 支线长度控制在30cm以内,CAN FD建议更短
  • 节点间距尽量均匀,不要一头密一头疏
  • 避免星型拓扑,除非你用了CAN hub

我记得有一次做ADAS域控制器项目,客户要求支持8个摄像头节点。他们想用星型拓扑,每个节点直接连到中央控制器。我说不行,CAN FD不支持这种结构。后来加了CAN hub,才解决问题。你想想看,如果当时没坚持,等装车了再改,那成本就大了。

2.3 终端电阻匹配

终端电阻,标准值是120Ω。为什么是120Ω?因为CAN总线的特性阻抗大约是120Ω。终端电阻的作用就是吸收信号能量,防止反射。

很多人觉得终端电阻就是焊两个120Ω电阻上去完事。其实没那么简单。

首先,终端电阻必须放在总线的最两端。不是随便哪个节点上都放。我见过一个项目,工程师在每个节点上都焊了120Ω电阻,结果总线负载太重,信号幅值被拉低,通信直接失败。

其次,终端电阻的精度有要求。普通5%的电阻能用,但我建议用1%的。为什么?因为电阻值偏差大了,反射系数就会变大。CAN FD速率高,对反射更敏感。

电阻精度 适用场景 我的建议
5% 低速CAN(125kbps以下) 能用,但不推荐
1% CAN FD(2Mbps以上) 强烈推荐
0.1% 高速CAN FD(5Mbps+) 成本允许的话,上这个

警告:千万不要用0Ω电阻或者跳线代替终端电阻!我曾经在一个样机上看到有人这么干,结果总线信号反射得一塌糊涂,误码率高达30%。

2.4 总线长度与速率的关系

CAN FD的速率和总线长度是成反比的。速率越高,能跑的距离越短。这个道理其实很简单——信号在总线上传输需要时间,速率高了,位时间就短了。如果总线太长,信号还没传到另一端,下一个位就已经发出去了,冲突就来了。

具体来说,CAN FD在2Mbps时,总线长度一般不超过40米。到了5Mbps,长度要控制在20米以内。如果是8Mbps,我建议别超过10米。

为什么会这样?

这里有个概念叫「位时间」。CAN FD的位时间包括同步段、传播段、相位缓冲段等。传播段就是为了补偿信号在总线上的传输延迟。总线越长,传播延迟越大,需要的传播段就越长。但传播段长了,采样点就往后移,容错空间就小了。

经验公式(仅供参考):

最大总线长度 ≈ (传播段时间 × 信号传播速度) / 2

信号在双绞线上的传播速度 ≈ 0.7倍光速 ≈ 2.1×10⁸ m/s

我在一个商用车项目里,客户要求CAN FD跑4Mbps,总线长度50米。我说不可能,物理层就不支持。后来我们折中了一下,在中间加了一个CAN中继器,把总线分成两段,每段25米。这才跑起来。

所以,做CAN FD设计时,一定要先算好总线长度和速率的关系。不要等到测试了才发现跑不动,那时候改硬件就晚了。

避坑指南:

我曾经在一个项目里,为了省成本,用了劣质的双绞线。结果同样的长度和速率,误码率比用正规线缆高了一个数量级。线缆的质量直接影响信号完整性,这个钱不能省。

好了,这一章的内容就到这里。物理层是CAN FD通信的基石,差分信号、拓扑结构、终端电阻、长度速率关系,这四个点一定要吃透。下一章我们讲CAN FD的帧结构和位时序,到时候会用到今天讲的知识。

记住一句话:物理层稳了,上层才能跑得欢。