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总线推荐的是直线型拓扑。说白了,就是一根主干线,所有节点都挂在这根线上,用短支线连接。
我画个图给你看:
这里有个坑,我必须提醒你:支线不能太长。我曾经在项目里偷懒,把某个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。
同步机制分两种:
- 硬同步:每个帧起始时,所有节点检测到下降沿,强制对齐
- 重同步:帧传输过程中,根据边沿误差调整相位缓冲段
我记得有一次调试,发现某个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总线的物理层就聊到这儿。记住一句话:物理层是基础,基础不牢,地动山摇。我见过太多工程师,上来就写应用层代码,结果总线都通不了,白忙活一场。
你先把这些吃透,后面讲数据链路层和仲裁机制时,你会觉得轻松很多。
可可精品资料库