一、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总线基础框架。你可以把它当作一个思维导图来用。

CAN总线基础 协议起源 1986年博世公司推出 解决线束复杂问题 多主总线架构 物理层特性 高速CAN: 1Mbps/40m 低速CAN: 125kbps/500m 显性/隐性电平 差分信号原理 CAN_H / CAN_L 共模抑制抗干扰 差分电压2V 总线拓扑结构 主干线结构 终端电阻120Ω 最大节点数110 总线负载率控制 核心:多主通信 + 差分抗干扰 + 总线拓扑 速率、距离、节点数三者需要权衡

1.6 写在最后

CAN总线的基础就这些。说实话,这些东西我在不同项目里反复验证过。比如差分信号的抗干扰能力,在实验室里测和在实际车上测,完全是两码事。我建议你在做设计时,多留一些余量。

嗯,今天就聊到这儿。记住一句话:CAN总线不是万能的,但不懂CAN总线是万万不能的


专注资料整理