一、CAN总线基础:从起源到物理层,一个老工程师的实战笔记
大家好,我是老李。在车载芯片这行摸爬滚打了十几年,CAN总线是我打交道最多的协议之一。今天咱们聊聊CAN总线的基础,这些东西看着简单,但真要在项目里用好,还是有不少门道的。
1.1 CAN协议的起源:为什么会有这个东西?
上世纪80年代,汽车里的电子设备越来越多。那时候的通信方式,说白了就是点对点连线。一个传感器连一根线到ECU,一个执行器又连一根线。你想想看,一辆车几十个ECU,线束比人的血管还复杂。
我记得有一次拆解一辆老款车型,光是线束就有几十公斤重。不仅成本高,故障率也高。这时候,德国博世公司站了出来,1986年推出了CAN总线协议。它的核心思想很简单:所有节点共享一条总线,谁想说话谁就说。
核心要点:CAN(Controller Area Network)是一种多主总线协议,任何节点都可以主动发起通信。这在当时是革命性的设计。
1.2 物理层特性:电压、速率、距离
CAN总线的物理层,我习惯把它分成两部分来看:电气特性和传输特性。
| 参数 | 高速CAN(ISO 11898-2) | 低速CAN(ISO 11898-3) |
|---|---|---|
| 最大速率 | 1 Mbps | 125 kbps |
| 总线长度 | 40米 @ 1 Mbps | 500米 @ 125 kbps |
| 显性电平 | CAN_H: 3.5V, CAN_L: 1.5V | CAN_H: 3.5V, CAN_L: 1.5V |
| 隐性电平 | CAN_H: 2.5V, CAN_L: 2.5V | CAN_H: 2.5V, CAN_L: 2.5V |
这里有个坑,我踩过。曾经在一个项目中,我们用了高速CAN芯片,但线束长度超过了60米。结果呢?通信时好时坏,定位问题花了两天。后来发现是信号反射导致的。所以记住:速率和距离是成反比的。
避坑指南:我曾经在一个项目中,把CAN总线布在了大功率电机的旁边。结果干扰严重,丢包率高达30%。后来加了屏蔽双绞线,问题才解决。CAN总线对EMC很敏感,布线时一定要远离干扰源。
1.3 差分信号原理:为什么CAN这么抗干扰?
CAN总线用的是差分信号传输。什么意思呢?就是一根信号用两根线来传:CAN_H和CAN_L。
逻辑1(隐性):CAN_H和CAN_L都是2.5V,差分电压为0V。
逻辑0(显性):CAN_H升到3.5V,CAN_L降到1.5V,差分电压为2V。
为什么差分信号抗干扰?你想想看,如果外部有电磁干扰,它会同时作用在CAN_H和CAN_L上。两根线上的噪声幅度差不多,一相减,噪声就被抵消了。这就是共模抑制的原理。
个人经验:我测试过很多CAN收发器,发现不同厂家的共模抑制能力差别很大。比如在强干扰环境下,TI的SN65HVD230表现就比某些国产芯片好不少。选型时一定要看CMRR(共模抑制比)这个参数。
1.4 总线拓扑结构:怎么连才靠谱?
CAN总线的拓扑结构,说白了就是一条主干线,所有节点都挂在这条线上。两端各有一个120欧姆的终端电阻。
为什么需要终端电阻?因为信号在总线末端会反射。如果没有终端电阻,反射信号会和原始信号叠加,导致误码。120欧姆这个值,是经过计算的最优解——它和双绞线的特性阻抗匹配。
// 典型的CAN总线拓扑
// 节点1 --- 节点2 --- 节点3 --- ... --- 节点N
// | | | |
// 120Ω ECU 传感器 120Ω
// (终端) (节点) (节点) (终端)
这里有个常见的误区:很多人以为节点越多越好。其实不是。CAN总线的最大节点数受限于收发器的驱动能力。标准CAN最多支持110个节点,但实际项目中我建议不要超过30个。节点太多,总线负载会上升,通信延迟也会增加。
实战建议:我一般把总线负载率控制在30%以下。超过这个值,就要考虑用CAN FD或者增加网关来分流了。记住:总线负载率 = 实际数据量 / 最大数据量,这个值超过50%就要警惕了。
1.5 知识体系总览
下面这张图,是我自己总结的CAN总线基础框架。你可以把它当作一个思维导图来用。
1.6 写在最后
CAN总线的基础就这些。说实话,这些东西我在不同项目里反复验证过。比如差分信号的抗干扰能力,在实验室里测和在实际车上测,完全是两码事。我建议你在做设计时,多留一些余量。
嗯,今天就聊到这儿。记住一句话:CAN总线不是万能的,但不懂CAN总线是万万不能的。