3、CAN总线基础:物理层特性、差分信号、总线拓扑、终端电阻、位时序与同步机制

各位同学,咱们今天聊CAN总线。说实话,这玩意儿在汽车电子里,就跟人的脊柱一样重要。你想想看,车上几十个ECU要互相说话,没有一套靠谱的物理层协议,那不乱套了?

我最早接触CAN总线,是在做车身控制模块的时候。那时候刚入行,觉得不就是两根线嘛,能有多复杂?结果第一次调试就栽了跟头——总线死活不通,示波器一看,波形乱七八糟。后来才发现,是终端电阻没配好。嗯,从那以后,我再也不敢小看物理层了。

3.1 物理层特性:为什么是CAN?

CAN总线是德国BOSCH公司发明的,初衷就是为了解决汽车内部大量线束的问题。它用两根线(CAN_H和CAN_L)就能让多个节点通信,而且抗干扰能力极强。

物理层的关键参数,我列个表给你看:

参数 典型值 说明
总线电平 显性:2.5V±1V / 隐性:2.5V 差分电压决定逻辑状态
最大速率 1 Mbps(ISO 11898-2) 高速CAN,距离越短速率越高
最大节点数 理论110个,实际30-50个 受收发器驱动能力限制
总线长度 40m @ 1Mbps 速率越低,距离越长

我个人习惯,在设计CAN网络时,先算好总线长度和节点数。别贪多,我曾经见过一个项目,硬接了60个节点上去,结果总线负载一高,丢帧丢得没法看。

3.2 差分信号:抗干扰的秘密武器

为什么CAN总线能在发动机舱那种电磁环境恶劣的地方稳定工作?答案就是差分信号。

说白了,就是两根线(CAN_H和CAN_L)同时传输信号,但相位相反。接收端只看它们的电压差:

  • 显性位(逻辑0):CAN_H比CAN_L高2V左右
  • 隐性位(逻辑1):CAN_H和CAN_L电压相等(约2.5V)

你想想看,如果外部有电磁干扰,它同时作用在两根线上,差值是抵消的。这就是共模抑制。我在做EMC测试时,亲眼见过别的总线被干扰得满屏毛刺,CAN总线纹丝不动。

重要概念:CAN总线的“线与”特性。多个节点同时发送显性位时,总线呈现显性状态。这为后面的仲裁机制打下了基础。

3.3 总线拓扑:怎么连才靠谱?

CAN总线推荐的是直线型拓扑。说白了,就是一根主干线,所有节点都挂在这根线上,用短支线连接。

我画个图给你看:

120Ω 120Ω ECU1 ECU2 ECU3 ECU4 CAN总线直线型拓扑(主干线 + 短支线) 支线长度建议 < 0.3m,最长不超过 1m

这里有个坑,我必须提醒你:支线不能太长。我曾经在项目里偷懒,把某个ECU的支线拉到了2米,结果总线反射严重,通信时好时坏。后来老老实实把ECU挪近了,问题才解决。

避坑指南:我曾经见过有人用星型拓扑连接CAN总线,结果总线反射导致通信失败。记住,CAN总线只支持直线型拓扑,不要试图搞花活。

3.4 终端电阻:为什么必须是120Ω?

终端电阻的作用,说白了就是消除信号反射。CAN总线的特性阻抗大约是120Ω,所以在总线两端各接一个120Ω电阻,就能匹配阻抗,让信号不反弹。

你可能会问:为什么是两端?中间不行吗?

嗯,这个问题我当年也困惑过。后来做信号完整性分析才明白:信号在传输线上传播,遇到阻抗不连续的地方就会反射。只有两端都匹配,才能保证信号从一端传到另一端时,不会在末端反弹回来干扰原始信号。

实际项目中,终端电阻通常集成在ECU内部,或者用外接的DB9接头。我建议你养成习惯:设计CAN网络时,先确认哪两个节点负责提供终端电阻。别搞成所有节点都带电阻,那样并联后阻值太小,总线驱动会出问题。

小技巧:如果你不确定终端电阻是否接对了,用万用表量一下CAN_H和CAN_L之间的电阻。正常应该在60Ω左右(两个120Ω并联)。如果测到120Ω,说明只接了一个;如果测到0Ω,说明短路了。

3.5 位时序与同步机制:CAN总线的节拍器

CAN总线没有单独的时钟线,所有节点靠位同步来保持节奏。这就像一群人合唱,没有指挥,但大家听着彼此的节奏来调整。

一个CAN位由以下几个部分组成:

  • 同步段(SS):用于检测边沿,固定为1个Tq
  • 传播段(PTS):补偿物理延迟,1-8个Tq
  • 相位缓冲段1(PS1):用于重同步,1-8个Tq
  • 相位缓冲段2(PS2):用于重同步,2-8个Tq

这里的Tq是时间量子,由晶振分频得到。举个例子,如果晶振是16MHz,你设置分频系数为8,那么Tq = 8/16MHz = 500ns。

同步机制分两种:

  1. 硬同步:每个帧起始时,所有节点检测到下降沿,强制对齐
  2. 重同步:帧传输过程中,根据边沿误差调整相位缓冲段

我记得有一次调试,发现某个ECU总是丢帧,其他节点都正常。查了半天,发现是它的晶振精度不够,导致位时序偏差太大,同步失败。换了高精度晶振后,问题解决。

关键参数:采样点位置通常设置在85%左右。比如一个位有16个Tq,采样点就在第14个Tq处。这个位置要算准,太早或太晚都容易采到错误电平。

最后,我送你一个位时序配置的参考表:

速率 晶振 分频 Tq 位时间 采样点
500 kbps 16 MHz 8 500 ns 16 Tq 87.5%
250 kbps 16 MHz 16 1 μs 16 Tq 87.5%
125 kbps 16 MHz 32 2 μs 16 Tq 87.5%

好了,CAN总线的物理层就聊到这儿。记住一句话:物理层是基础,基础不牢,地动山摇。我见过太多工程师,上来就写应用层代码,结果总线都通不了,白忙活一场。

你先把这些吃透,后面讲数据链路层和仲裁机制时,你会觉得轻松很多。


可可精品资料库