2、CAN总线基础:CAN协议起源、CAN 2.0A/B标准、CAN总线物理层特性(差分信号)
好,咱们正式开始聊CAN总线。说实话,我最早接触CAN总线是在做车身控制模块的时候。那时候刚入行,看到两根绞在一起的线就能让几十个ECU通信,觉得挺神奇的。后来自己动手调过几次波形,踩过几次坑,才算真正理解了它。
这一节,咱们把CAN总线的基础打牢。我会从它的起源讲起,再到协议标准,最后落到物理层的差分信号上。嗯,这些内容看着基础,但你要是真搞懂了,后面做胎压监测的集成就会顺手很多。
2.1 CAN协议的起源:为什么会有CAN?
上世纪80年代,汽车里的电子设备越来越多。你想想看,发动机、变速箱、ABS、仪表盘……每个模块都有自己的线束。那时候的车,线束比人的胳膊还粗。不仅重,而且容易出故障。
1983年,德国博世公司开始琢磨一个问题:能不能用两根线,让所有电子模块都互相通信?于是,1986年,CAN(Controller Area Network)协议正式诞生。说白了,就是给汽车装了个“局域网”。
我个人觉得,CAN协议最聪明的地方在于:它不要求所有节点时间同步,而是靠“仲裁”机制来决定谁先说话。这个设计在当时是非常超前的。
核心要点:CAN总线最初是为了解决汽车线束过多、通信复杂的问题而设计的。它用两根线实现了多主从、实时、可靠的通信。
2.2 CAN 2.0A/B标准:你该用哪个?
CAN协议后来被标准化为ISO 11898。但咱们工程师更常说的,是CAN 2.0A和CAN 2.0B这两个版本。它们有什么区别呢?我直接给你列个表,一目了然。
| 特性 | CAN 2.0A | CAN 2.0B |
|---|---|---|
| 标识符长度 | 11位(标准帧) | 11位或29位(扩展帧) |
| 最大节点数 | 受限于11位ID,约2032个 | 受限于29位ID,约5.3亿个 |
| 兼容性 | 只能发标准帧 | 可发标准帧和扩展帧 |
| 应用场景 | 简单系统(如门窗控制) | 复杂系统(如动力总成、ADAS) |
我在项目中遇到过一个问题:一个老款ECU只支持CAN 2.0A,结果新换的网关默认发扩展帧。两边直接“失联”了。后来我查了半天,才发现是ID长度不匹配。所以,选型时一定要确认所有节点都支持同一种帧格式。
我的建议:如果你在做新设计,直接上CAN 2.0B。29位ID的扩展帧虽然看着浪费,但以后扩展起来方便。别像我当年那样,为了省几个字节给自己挖坑。
2.3 CAN总线物理层特性:差分信号
好,到了最核心的部分——物理层。CAN总线为什么能在汽车这种强干扰环境下稳定工作?答案就是差分信号。
差分信号,说白了就是用两根线(CAN_H和CAN_L)的电压差来表示逻辑电平。而不是像普通串口那样,用一根线对地电压。
具体来说:
- 显性电平(逻辑0):CAN_H比CAN_L高2V左右。CAN_H约3.5V,CAN_L约1.5V,差分电压约2V。
- 隐性电平(逻辑1):CAN_H和CAN_L电压相同,约2.5V,差分电压为0V。
为什么会这样设计?你想想看,汽车发动机点火时,会产生巨大的电磁干扰。如果只用单端信号,干扰会直接叠加在信号线上。但差分信号不一样——干扰同时作用在两根线上,它们的差值基本不变。这就是共模抑制。
避坑指南:我曾经在调试时发现CAN通信偶尔丢帧。用示波器一看,CAN_H和CAN_L的波形不对称。后来发现是终端电阻没焊好。记住,CAN总线两端必须各接一个120Ω的终端电阻,用来消除信号反射。
另外,CAN总线的物理层还有一些硬性要求:
- 总线长度:和波特率有关。比如125kbps时,最长能到500米;1Mbps时,最好别超过40米。
- 节点数量:理论上最多110个,但实际建议不超过30个。节点太多,总线负载会变重,通信延迟也会增加。
- 线缆类型:推荐使用双绞线。绞距越密,抗干扰能力越强。
嗯,这里还要提一句。CAN收发器(比如TJA1050、SN65HVD230)是物理层的核心。它负责把控制器输出的逻辑电平转换成差分信号。选型时要注意:
- 工作电压(5V还是3.3V)
- 速率支持(最高1Mbps)
- 是否带保护(如过压、过热保护)
警告:千万不要把CAN_H和CAN_L接反!虽然有些收发器有极性保护,但大部分没有。接反了,整个总线都会瘫痪。我见过一个同事,因为接反了线,查了两天才找到问题。
2.4 小结:CAN总线基础,你掌握了吗?
这一节的内容,说白了就是三件事:
- CAN的起源:为了解决汽车线束过多的问题,博世在1986年搞出来的。
- CAN 2.0A vs 2.0B:11位ID和29位ID的区别。新设计建议用2.0B。
- 差分信号:用两根线的电压差表示数据,抗干扰能力强。记得加终端电阻。
下一节,咱们会深入CAN的数据帧结构。到时候我会拿一个实际的胎压监测报文,带你一行一行地拆解。嗯,那才是真正有意思的地方。
公众号:蓝海资料掘金营,微信deep3321