第1章 CAN总线基础:从起源到物理层
大家好,我是你们的BMS嵌入式工程师朋友。
今天咱们聊聊CAN总线的基础。说实话,CAN总线这东西,我入行头三年天天跟它打交道。记得第一次调CAN通信,板子死活发不出数据,我对着示波器看了整整一下午……后来发现是终端电阻没焊。嗯,这种坑,你们以后也会遇到的。
1.1 CAN协议的起源
CAN,全称Controller Area Network,控制器局域网。这玩意儿是1986年由德国博世公司发明的。为什么发明它?说白了,就是为了解决汽车内部线束太多的问题。
你想想看,早期的汽车,每个传感器、每个执行器都要单独拉线。一个豪华车,线束总长度能超过2公里!重得要命,还容易出故障。博世那帮工程师就想:能不能搞一条总线,让所有节点都挂上去通信?
于是,CAN总线诞生了。1986年博世在SAE大会上发布了CAN协议,1993年正式成为国际标准ISO 11898。我最早接触CAN是在2010年做BMS项目,那时候国内做BMS的还不多,CAN协议手册都是英文的,啃得我头大。
核心要点:CAN总线最初是为汽车设计的串行通信协议,目标是减少线束、提高可靠性。现在几乎所有BMS都采用CAN作为主通信方式。
1.2 物理层特性
CAN总线的物理层,说白了就是信号怎么在线上跑。咱们重点说最常用的高速CAN,也就是ISO 11898-2标准。
关键参数:
- 总线电平:CAN_H和CAN_L,静态时都是2.5V左右
- 差分电压:显性位时,CAN_H比CAN_L高2V(约3.5V vs 1.5V)
- 通信速率:最高1Mbps,BMS常用250kbps或500kbps
- 最大节点数:理论上110个,实际建议不超过30个
- 总线长度:1Mbps时最长40米,速率越低距离越远
这里有个坑,我必须要说。我曾经在一个项目中,把CAN总线拉到了100米,速率还设成500kbps。结果呢?通信时好时坏,丢帧严重。后来查资料才发现,速率和距离是成反比的。500kbps下,可靠距离也就100米左右,再长就得降速。
个人经验:BMS项目中,我习惯用250kbps。这个速率下,距离可以到200米以上,足够覆盖整个电池包。而且250kbps的EMC性能比500kbps好很多,不容易被电机控制器干扰。
1.3 差分信号原理
为什么CAN要用差分信号?这个问题我当年面试时被问过。答案很简单:抗干扰。
咱们看看差分信号怎么工作的:
- 隐性位(逻辑1):CAN_H和CAN_L都是2.5V,差分电压为0V
- 显性位(逻辑0):CAN_H升到3.5V,CAN_L降到1.5V,差分电压2V
接收器只看CAN_H和CAN_L的差值,不看绝对电压。这样一来,如果外部有电磁干扰,两根线上会感应出相同的噪声,一相减,噪声就抵消了。这就是共模抑制。
我记得有一次在实验室做EMC测试,旁边一个电机驱动器一启动,我们的CAN通信就乱码。后来发现是CAN_L的线被干扰了,但CAN_H没事。换成双绞线后,两根线同时受干扰,差分信号反而稳了。嗯,从那以后,我所有CAN线都强制要求用双绞线。
避坑指南:我曾经见过有人用普通排线做CAN通信,结果在强干扰环境下完全没法用。记住:CAN线必须用双绞线,绞距越密越好。推荐120欧姆阻抗的双绞屏蔽线。
1.4 CAN总线拓扑结构
CAN总线的拓扑,说白了就是一条直线,所有节点都挂在这条线上。就像晾衣绳上挂衣服一样。
标准拓扑要求:
- 总线型:一条主干线,所有节点通过短支线接入
- 终端电阻:总线两端各接一个120欧姆电阻
- 支线长度:1Mbps时不超过0.3米,250kbps时不超过3米
为什么要有终端电阻?这个问题我经常问新来的同事。其实很简单:防止信号反射。信号在线上跑,到了末端如果没电阻,就会反射回来,跟后面的信号叠加,造成波形畸变。120欧姆刚好跟双绞线的特性阻抗匹配,信号就被吸收了。
我踩过一个坑:有个项目,CAN通信偶尔出错,查了三天没找到原因。最后用示波器一看,总线波形上有个明显的台阶。再一查,总线一端没焊终端电阻。焊上之后,波形干净得像教科书一样。
重要提醒:终端电阻必须放在总线的最两端,不能放在中间。我曾经见过有人把两个120欧电阻都放在控制器端,结果远端节点通信异常。记住:电阻在两端,不在同一端。
1.5 实际BMS中的CAN网络
在BMS项目中,CAN网络通常是这样设计的:
| 节点 | 功能 | 备注 |
|---|---|---|
| BMU(电池管理单元) | 主控制器,负责策略和诊断 | 通常作为网关 |
| CMU(电池采集单元) | 采集电芯电压、温度 | 多个,挂载在CAN总线上 |
| VCU(整车控制器) | 整车控制,发送功率需求 | 外部节点 |
| 充电机 | 充电控制,发送充电参数 | 外部节点 |
我个人习惯,在BMS内部用一路CAN,速率250kbps。跟整车通信用另一路CAN,速率500kbps。两路CAN通过BMU做路由和隔离。这样内部通信不受整车干扰,整车通信也不受内部大数据量影响。
好了,这一章就聊到这儿。CAN总线的基础,说白了就是:差分信号抗干扰,双绞线加终端电阻,总线型拓扑别搞花哨。下一章咱们聊聊CAN的数据帧结构,那个才是真正有意思的部分。
课后小作业:拿示波器看看你手头板子的CAN波形。看看隐性位是不是2.5V,显性位是不是3.5V和1.5V。如果波形有台阶或者振铃,检查一下终端电阻和线缆质量。