1. CAN总线基础:从起源到物理层
大家好,我是你们这趟CAN总线之旅的向导。做嵌入式硬件十几年,CAN总线算是我打交道最多的通信协议之一。今天咱们先打好地基,聊聊CAN的来龙去脉、协议版本差异,以及物理层那些容易被忽略的细节。
1.1 CAN协议的起源:为什么会有它?
上世纪80年代,汽车里的电子设备越来越多。空调、ABS、发动机控制、仪表盘……每个模块都自己拉一堆线,车身线束又重又贵,故障率还高。德国Bosch公司看不下去了,1986年搞出了CAN(Controller Area Network)协议。
说白了,就是让所有电子模块共用两根线来通信。我早年拆过一台老款宝马,那线束粗得跟手臂似的。后来换用CAN总线,线束重量直接减半。这就是CAN诞生的初衷——省钱、减重、可靠。
核心设计目标:
- 多主通信:任何节点都能主动发消息
- 实时性:优先级高的消息不堵车
- 高可靠性:抗干扰、检错能力强
- 低成本:两根线搞定所有节点
1.2 CAN 2.0A vs CAN 2.0B:别搞混了
很多新手拿到芯片手册,看到“CAN 2.0A”和“CAN 2.0B”就懵了。其实区别就一个——ID长度。
| 特性 | CAN 2.0A(标准帧) | CAN 2.0B(扩展帧) |
|---|---|---|
| ID位数 | 11位 | 29位 |
| 最大节点数 | 约30~40个(实际) | 几乎无限制 |
| 兼容性 | 2.0B控制器可收2.0A帧 | 2.0A控制器无法收扩展帧 |
| 典型应用 | 简单系统、老设备 | 复杂网络、车载诊断 |
我遇到过最坑的一次:客户拿了个2.0A的旧控制器,非要接在2.0B的网络上。结果扩展帧一来,控制器直接罢工。所以选型时一定要确认清楚——你的网络里有没有29位ID的节点?有的话,所有节点都得支持2.0B。
我的习惯:新项目一律选2.0B兼容的控制器。多花几毛钱,省去后期兼容性头疼。
1.3 CAN FD:更快、更狠
传统CAN最高1Mbps的速率,在自动驾驶、OTA升级面前越来越吃力。2012年Bosch又推出了CAN FD(Flexible Data-rate)。
CAN FD和CAN 2.0的区别,我总结为三点:
- 速率翻倍:数据段最高8Mbps(仲裁段仍用1Mbps)
- 数据更长:一帧最多带64字节(传统CAN只有8字节)
- 向下兼容:CAN FD控制器可以收传统CAN帧,反之不行
举个例子:传统CAN刷写一个256KB的固件,按1Mbps算,光传输时间就要2秒多。换成CAN FD,64字节一帧、8Mbps速率,时间能压缩到0.3秒以内。做车载诊断的朋友应该深有体会——等那几秒真的很煎熬。
注意:CAN FD不是所有收发器都支持。选型时如果项目有高速率需求,务必确认收发器支持CAN FD(比如TJA1044、SN65HVD230等)。
1.4 CAN总线物理层特性:两根线的艺术
CAN总线物理层就两根线——CAN_H和CAN_L。但别小看这两根线,里面的门道不少。
1.4.1 差分信号
CAN用差分电压传输信号。显性(Dominant)时,CAN_H比CAN_L高2V左右;隐性(Recessive)时,两线电压差接近0V。
为什么用差分?抗干扰。我做过一个实验:在电机驱动器旁边跑CAN总线,单端信号早就被干扰得不成样子了,差分信号纹丝不动。这就是CAN能在工业环境里活下来的原因。
1.4.2 终端电阻
CAN总线两端必须各接一个120Ω电阻。为什么是120Ω?因为双绞线的特性阻抗大约就是120Ω。不接终端电阻,信号会在总线末端反射,导致通信错误。
我曾经犯过一个低级错误:调试时忘了接终端电阻,结果总线一直报错。查了半天,最后发现是电阻没焊。嗯,从那以后我每次画板子都会在原理图上标红“终端电阻必接”。
1.4.3 总线长度与速率
CAN总线的长度和速率成反比。速率越高,能跑的距离越短。我整理了一个经验表格:
| 速率 | 最大总线长度 | 典型场景 |
|---|---|---|
| 1 Mbps | 40 m | 车内网络 |
| 500 kbps | 100 m | 工业控制 |
| 250 kbps | 200 m | 楼宇自动化 |
| 125 kbps | 500 m | 远程监控 |
| 50 kbps | 1000 m | 长距离传感 |
你想想看,如果非要在1Mbps下跑500米,会怎样?信号反射、衰减、位定时错误全来了。所以设计时一定要根据实际距离选速率,别贪快。
1.4.4 共模电压范围
CAN收发器能容忍的共模电压一般在-2V到+7V之间。如果超出这个范围,通信就会出问题。我在一个项目中遇到过:CAN总线跟大功率电机共地,电机启动时地电位瞬间抬升,直接把收发器打坏了。后来加了共模扼流圈和隔离电源才解决。
物理层关键参数速查:
- 显性电平:CAN_H ≈ 3.5V,CAN_L ≈ 1.5V
- 隐性电平:CAN_H ≈ 2.5V,CAN_L ≈ 2.5V
- 终端电阻:120Ω(两端各一个)
- 共模电压范围:-2V ~ +7V
- 最大节点数:取决于收发器驱动能力,通常30~110个
1.5 本章知识体系
下面这张图帮你理清CAN总线基础的核心脉络:
这张图把CAN总线基础拆成了三个维度:协议起源、协议版本、物理层特性。做选型时,你得先搞清楚这三个问题,后面才能对症下药。
1.6 小结
这一章我们聊了CAN的诞生背景、2.0A/B和CAN FD的区别,以及物理层那些关键参数。说白了,CAN总线能活到现在,靠的就是简单、可靠、低成本。下一章我们会深入收发器内部,看看它到底是怎么工作的。
嗯,今天就到这里。记住我一句话:选型之前,先把基础打牢。否则后面踩的坑,都是要花时间填的。