1. CAN总线基础:从起源到物理层
各位同学,咱们今天正式开讲CAN总线。说实话,每次带新人做车载项目,我第一件事就是让他们把CAN总线的底子打牢。为什么?因为你在车上看到的每一个ECU——发动机控制器、变速箱、ABS、车身域控制器——它们之间怎么聊天?靠的就是CAN总线。这玩意儿要是搞不明白,后面做诊断、做标定、做网络管理,全得翻车。
1.1 CAN协议的起源——为什么会有CAN?
上世纪80年代,汽车电子开始爆发。每个功能加一个ECU,ECU之间用一堆点对点的线连着。你想想看,一辆车几十个ECU,线束比人的血管还密。重、贵、难装配,而且故障率极高。
1983年,德国Bosch公司开始琢磨:能不能搞一套总线,让所有ECU都挂在一对线上通信?1986年,CAN(Controller Area Network)协议正式发布。1993年,它成了国际标准ISO 11898。
CAN协议的核心设计目标:
- 实时性:消息优先级仲裁,高优先级报文不等待
- 可靠性:差分信号抗干扰,CRC校验防错
- 低成本:两根线,所有节点共享
- 灵活性:增减节点不用改硬件
我个人习惯:每次跟新人讲CAN起源,我都会说——你想想,如果没有CAN,一辆现代汽车里的线束重量能超过100公斤。CAN总线把线束减到十几公斤,这就是它存在的意义。
1.2 物理层特性——差分信号与总线电平
CAN总线的物理层,说白了就是一对双绞线:CAN_H和CAN_L。它用的是差分信号传输。为什么用差分?因为车上的电磁环境太恶劣了——发动机点火、电机驱动、各种开关动作,全是噪声源。差分信号能共模抑制,抗干扰能力比单端信号强得多。
1.2.1 差分信号原理
差分信号就是:信息不靠一根线对地的电压来表达,而是靠两根线之间的电压差。
- 显性电平(Dominant):CAN_H ≈ 3.5V,CAN_L ≈ 1.5V,差分电压 ≈ 2V。代表逻辑"0"。
- 隐性电平(Recessive):CAN_H ≈ 2.5V,CAN_L ≈ 2.5V,差分电压 ≈ 0V。代表逻辑"1"。
这里有个关键点:显性电平会覆盖隐性电平。也就是说,只要有一个节点拉出显性电平,总线就是显性。这就是CAN总线仲裁的物理基础——谁先发0,谁就赢。
避坑指南:我曾经在一个项目中,发现总线偶尔出现通信中断。排查了半天,最后发现是CAN_H和CAN_L线接反了。差分信号虽然抗干扰,但极性反了,接收器读到的电压差是负的,直接判成错误帧。所以,布线时一定注意双绞线的颜色标记——我习惯用CAN_H=黄色,CAN_L=绿色。
1.2.2 总线电平与逻辑关系
| 信号状态 | CAN_H电压 | CAN_L电压 | 差分电压 | 逻辑值 |
|---|---|---|---|---|
| 显性(Dominant) | 3.5V | 1.5V | ≈ 2.0V | 0 |
| 隐性(Recessive) | 2.5V | 2.5V | ≈ 0V | 1 |
为什么会这样设计?你想想看,总线空闲时所有节点都是隐性,这时候总线是"1"。一旦有节点要发数据,它先拉出显性"0"——这就相当于在总线上喊了一声"我要说话"。其他节点听到显性,就知道有人占线了。
1.3 CAN总线拓扑结构
CAN总线采用多主总线拓扑。什么意思?就是总线上没有"老大",每个节点都能主动发消息。谁先抢到总线,谁就发。
标准的CAN总线拓扑长这样:
这张图里,几个关键点我得强调一下:
- 终端电阻:总线两端各一个120Ω电阻。作用是吸收信号反射,防止波形畸变。没有这两个电阻,高速通信时信号会来回弹,误码率飙升。
- 支线长度:每个节点通过一段支线接到主干。支线越长,信号反射越严重。我建议支线控制在30厘米以内,超过这个数,高速CAN(1Mbps)就容易出问题。
- 节点数量:理论上CAN总线可以挂110个节点,但实际受收发器驱动能力限制。我做过一个项目挂了32个节点,总线负载一高,隐性电平就被拉偏了。后来加了中继器才解决。
注意:CAN总线拓扑必须是直线型,不能搞成星型或环型。我曾经见过一个团队把CAN总线接成星型,结果终端电阻不知道放哪,通信一塌糊涂。记住——直线拓扑,两端端接,这是铁律。
1.4 物理层关键参数速查
| 参数 | 高速CAN(ISO 11898-2) | 低速CAN(ISO 11898-3) |
|---|---|---|
| 最大速率 | 1 Mbps | 125 kbps |
| 最大总线长度 | 40 m @ 1 Mbps | 500 m @ 125 kbps |
| 显性电平 | CAN_H=3.5V, CAN_L=1.5V | CAN_H=3.5V, CAN_L=1.5V |
| 隐性电平 | CAN_H=2.5V, CAN_L=2.5V | CAN_H=2.5V, CAN_L=2.5V |
| 终端电阻 | 120Ω × 2 | 可选 |
| 典型应用 | 动力总成、底盘 | 车身控制、舒适系统 |
这里有个经验值:速率和总线长度成反比。1Mbps时最多跑40米,125kbps时可以跑500米。为什么?速率越高,信号边沿越陡,反射越敏感。所以,动力总成CAN(高速)通常只在发动机舱内,车身CAN(低速)可以绕整车一圈。
1.5 小结
这一章我们聊了CAN总线的起源、物理层的差分信号原理、总线电平逻辑,以及拓扑结构。说白了,CAN总线就是一对双绞线,靠电压差传数据,所有节点挂在一根线上,谁先拉显性谁就赢。这些基础概念,后面每一章都会用到。