第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。如果波形有台阶或者振铃,检查一下终端电阻和线缆质量。