第1章:CANFD物理层基础
各位工程师朋友,咱们今天聊聊CANFD的物理层。说实话,很多人在调试CANFD时遇到问题,最后发现根源都在物理层。我见过太多人花几天时间查软件,结果只是终端电阻没焊好。所以这一章,咱们把物理层的基础打扎实。
1.1 差分信号原理
CANFD用的是差分信号传输。说白了,就是两根线一起干活,而不是一根线对地传信号。
为什么用差分?我举个例子。你在车间里调试设备,旁边有电机启动、变频器工作,电磁干扰特别大。如果是单端信号,比如UART的TX对GND,干扰信号叠加在线上,接收端根本分不清是数据还是噪声。
差分信号就不一样了。CAN_H和CAN_L两根线,干扰同时作用在两根线上。接收端只看两根线的电压差,干扰就被抵消掉了。这就是共模抑制。
核心公式:
CAN总线差分电压 = V(CAN_H) - V(CAN_L)
逻辑1(隐性):差分电压 ≈ 0V
逻辑0(显性):差分电压 ≈ 2V
嗯,这里要注意:CANFD的显性电平比传统CAN稍微高一点,但原理一样。我刚开始做CANFD项目时,用示波器只看单根线,死活看不出问题。后来老工程师提醒我:看差分!用数学通道做CAN_H减CAN_L,波形一下子就清楚了。
1.2 CAN_H与CAN_L电平定义
咱们直接看数据。CANFD的物理层电平定义如下:
| 状态 | CAN_H电压 | CAN_L电压 | 差分电压 |
|---|---|---|---|
| 隐性(Recessive) | 2.5V | 2.5V | 0V |
| 显性(Dominant) | 3.5V | 1.5V | 2.0V |
你想想看,隐性状态时两根线都是2.5V,差分电压为0。显性状态时CAN_H拉到3.5V,CAN_L拉到1.5V,差分2V。这就是CAN总线仲裁的基础——显性位覆盖隐性位。
个人经验:我在调试时习惯用示波器同时抓CAN_H和CAN_L,然后做数学运算看差分。如果差分电压低于1.2V,总线可能就通信不稳定了。曾经有个项目,线束太长导致信号衰减,差分电压只有1.0V,节点时不时掉线。后来加了中继器才解决。
1.3 终端电阻的作用与匹配
终端电阻,说白了就是防止信号反射的。CAN总线两端各需要一颗120Ω电阻。为什么是120Ω?因为CAN双绞线的特性阻抗大约是120Ω。
我遇到过最典型的故障:有人只在一端焊了120Ω,另一端没焊。结果总线阻抗变成60Ω(两个120Ω并联),信号反射严重,波形上全是振铃。通信距离稍微远一点就丢帧。
避坑指南:我曾经在一个项目中,发现总线偶尔通信失败。查了两天,最后发现终端电阻用的是100Ω。虽然也能工作,但信号质量很差。记住:CANFD对信号质量要求比传统CAN更高,终端电阻必须精确匹配120Ω,误差不要超过1%。
终端电阻的计算很简单:
总线等效阻抗 = R_term1 || R_term2
如果两端都是120Ω:120 || 120 = 60Ω
如果只有一端:120Ω(另一端开路)
如果两端都没有:无穷大(信号全反射)
我个人习惯在调试时先测一下CAN_H和CAN_L之间的电阻。断电状态下,正常应该是60Ω左右。如果测到120Ω,说明只有一端有电阻;如果测到开路,说明两端都没有。这个方法百试百灵。
1.4 总线拓扑结构
CANFD推荐用直线型拓扑,也叫总线型。所有节点都挂在同一条主干线上,每个节点用短支线连接。
为什么不能用星型或树型?因为信号反射。分支太长,信号走到分支末端会反射回来,干扰主干线上的信号。CANFD速率更高,对分支长度更敏感。
| 拓扑类型 | 推荐 | 最大分支长度 | 说明 |
|---|---|---|---|
| 直线型(总线型) | ✅ 强烈推荐 | 无分支 | 最可靠,信号质量最好 |
| 星型 | ❌ 不推荐 | — | 反射严重,仅低速可用 |
| 树型 | ⚠️ 谨慎使用 | ≤0.3m | 分支越短越好 |
我记得有个项目,客户把CANFD接成了星型,五个节点从中心点引出。2Mbps速率下完全没法用,降到500kbps才勉强工作。后来改成直线型,2Mbps稳稳的。
实际布线建议:
- 主干线两端各放一个120Ω终端电阻
- 每个节点的支线长度不超过0.3米
- CAN_H和CAN_L用双绞线,绞距越密越好
- 总线总长度:CANFD 2Mbps时建议不超过40米
- 节点数量:建议不超过30个(实际看收发器驱动能力)
你想想看,物理层就像房子的地基。地基没打好,上层软件写得再好也没用。我见过太多人一上来就调软件,结果发现是终端电阻没焊、线序接反、分支太长这些低级问题。所以,先把物理层搞明白,后面调试会省很多时间。
调试小技巧:用万用表测CAN_H和CAN_L之间的电阻,正常是60Ω。如果测到120Ω,检查是不是只有一端有终端电阻。如果测到0Ω,可能是CAN_H和CAN_L短路了。如果测到无穷大,两端电阻都没焊。这个方法我在现场排查时用了无数次,非常实用。
好了,物理层基础就讲到这里。下一章咱们聊聊CANFD的数据链路层,看看帧结构是怎么组织的。到时候我会分享一些抓包分析的经验,保证实用。