1. CAN协议基础:从起源到物理层
大家好,我是你们的讲师。今天咱们正式开讲CAN协议。说实话,我最早接触CAN总线是在2008年做车身控制模块的时候,那时候还被CAN的差分信号折腾过几回。嗯,咱们就从最基础的东西聊起。
1.1 CAN总线的起源——为什么会有它?
上世纪80年代,汽车里的电子设备越来越多。空调、ABS、发动机控制、变速箱……每个模块都独立工作,线束却越来越重。我记得有份资料说,当时一辆豪华车的线束总长能超过2公里,重量接近50公斤。这显然不是办法。
1983年,德国Bosch公司开始研发一种新的串行通信协议。1986年,CAN(Controller Area Network)正式发布。它的目标很明确:
- 减少线束——用两根线代替几十根信号线
- 高可靠性——能在电磁干扰严重的汽车环境中稳定工作
- 实时性——关键消息必须在确定时间内送达
说白了,CAN就是给汽车电子系统装了一套“共享语言”,让各个ECU(电子控制单元)能高效地聊天。
核心要点:CAN不是最快的总线,但它是最“皮实”的车载总线之一。我做过一个项目,发动机舱温度85°C,CAN照样跑得稳稳的。
1.2 物理层特性——CAN长什么样?
CAN的物理层,说白了就是两根线:CAN_H(高线)和CAN_L(低线)。这两根线绞在一起,形成双绞线结构。为什么绞在一起?后面讲差分信号时会说。
咱们先看几个关键参数:
| 参数 | 高速CAN(ISO 11898-2) | 低速CAN(ISO 11898-3) |
|---|---|---|
| 最大速率 | 1 Mbps | 125 kbps |
| 总线长度(@最大速率) | 40 m | 500 m |
| 显性电平(Dominant) | CAN_H ≈ 3.5V, CAN_L ≈ 1.5V | CAN_H ≈ 4V, CAN_L ≈ 1V |
| 隐性电平(Recessive) | CAN_H ≈ 2.5V, CAN_L ≈ 2.5V | CAN_H ≈ 1.75V, CAN_L ≈ 3.25V |
| 终端电阻 | 120 Ω(两端各一个) | 不强制 |
我的经验:做高速CAN设计时,终端电阻一定要焊对位置。我曾经见过一个项目,终端电阻焊在了中间节点上,结果总线反射严重,丢包率飙升到30%。排查了整整两天才找到原因。
1.3 差分信号——CAN的“抗干扰秘籍”
为什么CAN能在发动机旁边、点火线圈附近稳定工作?答案就是差分信号。
咱们看看差分信号的工作原理:
- 隐性(Recessive):CAN_H和CAN_L都是2.5V,差分电压 = 0V。此时总线处于“空闲”状态。
- 显性(Dominant):CAN_H拉到3.5V,CAN_L拉到1.5V,差分电压 = 2V。此时总线被某个节点“占用”。
你想想看,如果外部有电磁干扰,它会同时作用在两根线上。假设干扰信号是+1V,那么CAN_H变成4.5V,CAN_L变成2.5V,差分电压仍然是2V。接收器只看差分电压,干扰就被抵消了。
关键公式:V_diff = V(CAN_H) - V(CAN_L)
接收器只关心V_diff:V_diff > 0.9V 判为显性,V_diff < 0.5V 判为隐性。
这就是双绞线的意义——两根线绞在一起,受到的电磁干扰几乎相同,共模噪声被完美抑制。
避坑指南:我曾经在一个项目中,PCB布线时CAN_H和CAN_L没有等长走线,结果差分信号出现了相位差,导致误码率升高。记住:CAN差分对必须等长、等距、紧耦合。
1.4 CAN总线拓扑结构——节点怎么连?
CAN总线采用多主总线拓扑结构。什么意思?就是总线上没有“老大”,每个节点都可以主动发消息。
咱们画个图看看:
从图上可以看到:
- 所有节点都挂在同一对CAN_H/CAN_L线上
- 总线两端各有一个120Ω终端电阻
- 节点通过“T型”连接方式接入总线
这里有个重要概念——多主访问。任何节点检测到总线空闲(隐性电平)时,都可以开始发送消息。如果两个节点同时发送,CAN控制器会通过非破坏性逐位仲裁来决定谁继续发送。这个机制咱们后面章节会详细讲。
实际项目中的注意事项:
- 总线上的节点数量一般不超过30个(高速CAN)
- 每个节点的“T型”分支线(stub)长度不要超过0.3m
- 终端电阻必须精确到120Ω ± 1%
1.5 总结一下
这一章咱们聊了CAN总线的起源、物理层特性、差分信号原理和拓扑结构。说白了,CAN就是靠两根线、差分信号和终端电阻,实现了在恶劣环境下的可靠通信。
我个人觉得,理解差分信号是掌握CAN协议的第一步。你想想看,为什么RS232传不远?因为它用的是单端信号,抗干扰能力差。而CAN的差分信号,天生就是为工业环境设计的。
本章核心记忆点:
- CAN_H - CAN_L = 差分电压,接收器只看这个差值
- 显性电平覆盖隐性电平——这是仲裁的基础
- 两端120Ω终端电阻——少了它,总线反射会让你怀疑人生