3、CAN总线物理层:差分信号、位时序、终端电阻、总线拓扑

好,咱们进入CAN总线物理层。这一层是CAN通信的基石,说白了就是信号怎么在线上跑起来的。很多刚入行的工程师觉得物理层简单,不就是两根线嘛。但我跟你说,恰恰是物理层出问题,排查起来最头疼。我见过太多项目,应用层协议写得天衣无缝,结果一上实车就乱码,最后发现是终端电阻焊错了位置。

3.1 差分信号:为什么CAN要用两根线?

CAN总线用两根线,CAN_H和CAN_L。为什么不用单根线?抗干扰。

你想想看,汽车发动机舱里电磁环境多恶劣。火花塞点火、电机启停,全是强干扰源。单端信号在这种环境里,就像在菜市场里小声说话,根本听不清。

差分信号的原理很简单:

  • 显性电平(Dominant):CAN_H比CAN_L高2V左右。逻辑上代表"0"。
  • 隐性电平(Recessive):CAN_H和CAN_L电压相等,约2.5V。逻辑上代表"1"。

接收器只看两根线的电压差。外界干扰同时作用在两根线上,差值不变。这就是共模抑制。

关键点:显性电平会"覆盖"隐性电平。也就是说,只要有一个节点发显性,总线就是显性。这是CAN总线仲裁的基础。

我在一个项目中遇到过,某供应商的收发器在高温下共模电压漂移,导致差分信号判断错误。排查了三天,最后用示波器抓波形才发现。嗯,从那以后我选型时必看收发器的共模输入范围。

3.2 位时序:同步是怎么做到的?

CAN总线没有单独的时钟线。所有节点靠什么同步?靠位时序。

每个CAN位被分成几个时间段:

段名称 作用 典型长度
同步段(Sync_Seg) 检测跳变沿 1个时间量子
传播段(Prop_Seg) 补偿物理延迟 1-8个时间量子
相位缓冲段1(Phase_Seg1) 采样点前调整 1-8个时间量子
相位缓冲段2(Phase_Seg2) 采样点后调整 1-8个时间量子

采样点通常设置在Phase_Seg1和Phase_Seg2之间。我个人习惯把采样点设在87.5%左右,也就是Phase_Seg1比Phase_Seg2长一点。为什么?因为总线延迟主要影响信号到达时间,采样点靠后能容忍更大的延迟。

避坑指南:我曾经把采样点设在50%,结果总线长度超过10米就丢帧。后来改成87.5%,问题解决。记住,采样点不是随便设的,要根据总线长度和波特率计算。

位时序还有一个重要机制:硬同步重同步

  • 硬同步:帧起始时,所有节点强制对齐到下降沿。
  • 重同步:帧传输中,如果检测到边沿偏移,调整Phase_Seg1或Phase_Seg2的长度。

说白了,就是每个节点都在不断"校准"自己的时钟,确保采样点准确。

3.3 终端电阻:为什么是120欧姆?

终端电阻,每个CAN工程师都绕不开的话题。标准CAN总线两端各接一个120欧姆电阻。为什么是120?

因为CAN总线用的双绞线,特性阻抗大约是120欧姆。终端电阻的作用就是匹配阻抗,防止信号反射。

你想想看,信号在线上跑,遇到阻抗突变就会反射。反射回来的信号和原始信号叠加,波形就畸变了。严重的时候,一个位变成两个位,通信直接崩溃。

注意:终端电阻必须接在总线的最两端。如果接在中间,反射照样存在。我见过一个案例,工程师把电阻焊在ECU内部,结果总线两端没有终端电阻,通信时好时坏。排查了整整一周。

有些设计会用分立的60欧姆电阻,或者用共模扼流圈加电容的组合。但最可靠的还是两个120欧姆。

测量总线电阻的方法:断电,用万用表量CAN_H和CAN_L之间。正常应该在60欧姆左右(两个120欧姆并联)。如果测到120欧姆,说明只接了一个终端电阻。如果测到无穷大,一个都没接。

3.4 总线拓扑:怎么连才靠谱?

CAN总线推荐用直线型拓扑。也就是一根主干线,所有节点通过短支线连接上去。

为什么不能随便连?

  • 星型拓扑:中心节点故障,全挂。而且阻抗不连续,反射严重。
  • 环型拓扑:CAN协议不支持环型,信号会绕圈,死路一条。
  • 树型拓扑:支线太长,反射点太多,波形惨不忍睹。

我建议的布线原则:

  1. 主干线尽量短:1Mbps时,主干线不要超过40米。125kbps时,可以到500米。
  2. 支线尽量短:1Mbps时,支线不要超过0.3米。实在不行,最长不超过1米。
  3. 终端电阻在两端:不要放在中间节点上。
  4. 双绞线:每米至少绞20圈,绞距均匀。

经验数据:我做过一个项目,支线长度达到2米,1Mbps下误码率高达5%。把支线缩短到0.5米后,误码率降到0.01%以下。支线长度真的不能马虎。

还有一个容易被忽略的点:地线。CAN总线虽然是差分信号,但收发器需要共地。如果节点之间地电位差太大,共模电压会超出收发器的承受范围。我建议在CAN总线旁边走一根地线,或者用屏蔽双绞线,屏蔽层单端接地。

嗯,物理层就这些。看似简单,但每一个细节都影响通信质量。下一章咱们聊数据链路层,看看CAN帧是怎么组织的。