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协议不支持环型,信号会绕圈,死路一条。
- 树型拓扑:支线太长,反射点太多,波形惨不忍睹。
我建议的布线原则:
- 主干线尽量短:1Mbps时,主干线不要超过40米。125kbps时,可以到500米。
- 支线尽量短:1Mbps时,支线不要超过0.3米。实在不行,最长不超过1米。
- 终端电阻在两端:不要放在中间节点上。
- 双绞线:每米至少绞20圈,绞距均匀。
经验数据:我做过一个项目,支线长度达到2米,1Mbps下误码率高达5%。把支线缩短到0.5米后,误码率降到0.01%以下。支线长度真的不能马虎。
还有一个容易被忽略的点:地线。CAN总线虽然是差分信号,但收发器需要共地。如果节点之间地电位差太大,共模电压会超出收发器的承受范围。我建议在CAN总线旁边走一根地线,或者用屏蔽双绞线,屏蔽层单端接地。
嗯,物理层就这些。看似简单,但每一个细节都影响通信质量。下一章咱们聊数据链路层,看看CAN帧是怎么组织的。