第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的数据链路层,看看帧结构是怎么组织的。到时候我会分享一些抓包分析的经验,保证实用。