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总线拓扑结构 CAN_H CAN_L 120Ω 120Ω ECU 1 ECU 2 ECU 3 ECU 4 CAN总线拓扑特点 多主总线 · 线性拓扑 · 两端120Ω终端电阻

从图上可以看到:

  • 所有节点都挂在同一对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Ω终端电阻——少了它,总线反射会让你怀疑人生