1、CAN总线基础:从起源到应用
大家好,我是老张。做嵌入式这行二十年了,CAN总线算是我打交道最多的协议之一。今天咱们聊聊CAN总线的基础,这部分内容虽然基础,但很多坑都埋在这里。我个人习惯,讲任何协议都得先搞清楚它从哪来、物理上怎么跑的、能用在哪。不然你后面调时序、调采样点,心里没底。
1.1 CAN协议的起源:一场汽车电子革命
上世纪80年代,汽车电子开始爆发。那时候一辆车里的ECU(电子控制单元)越来越多,每个ECU之间要通信,线束变得又重又复杂。我记得有个老工程师跟我吐槽过,说当年一辆豪华车的线束总长能超过2公里,重量几十公斤。这显然不是长久之计。
1983年,德国博世公司开始研发一种新的串行通信协议。目标很明确:
- 减少线束数量
- 提高可靠性
- 支持实时通信
1986年,CAN(Controller Area Network)协议正式发布。说白了,它就是一个让多个ECU共用两根线通信的方案。你想想看,原来每个传感器都要单独拉线到控制器,现在大家挂到同一根总线上,谁有话谁说,多清爽。
关键里程碑:
- 1986年:博世发布CAN 2.0规范
- 1991年:CAN 2.0B发布,引入29位扩展标识符
- 1993年:ISO 11898标准正式采纳CAN协议
- 2003年:CAN FD(灵活数据速率)开始研发
嗯,这里要注意。CAN协议从诞生那天起,就不是为了追求高速。它的核心设计哲学是可靠、实时、低成本。我见过不少新手一上来就问"CAN能跑多快",其实问偏了。你应该问"CAN能多可靠地跑完这帧数据"。
2.2 CAN总线物理层特性:两根线的艺术
CAN总线的物理层,说白了就是两根线:CAN_H和CAN_L。但这两根线的设计,藏着不少门道。
差分信号传输
CAN用的是差分信号。什么意思?就是信号不是靠一根线对地电压来传递,而是靠两根线之间的电压差。这样做的好处很明显:抗干扰能力强。你想想,如果外界有电磁干扰,两根线上受到的干扰基本一样,差值不变,信号就保住了。
我在项目中遇到过一件事。有个客户说他们的CAN通信偶尔丢帧,查了半天发现是线束和电机电源线绑在一起走的。后来把CAN线单独走,问题就解决了。这就是差分信号的局限性——它抗共模干扰,但扛不住差模干扰。
总线电平状态
CAN总线有两种逻辑状态:
| 状态 | CAN_H电压 | CAN_L电压 | 电压差 |
|---|---|---|---|
| 显性(Dominant) | 3.5V | 1.5V | 2.0V |
| 隐性(Recessive) | 2.5V | 2.5V | 0V |
显性位对应逻辑0,隐性位对应逻辑1。这里有个重要特性:显性位会覆盖隐性位。这就是CAN总线仲裁的基础。多个节点同时发送时,谁先发0谁赢。我曾经调试过一个多节点系统,有个节点老是发不出数据,最后发现它的CAN收发器驱动能力不够,显性位电压差只有1.6V,其他节点根本识别不了。
避坑指南:
我曾经因为终端电阻选型吃过亏。CAN总线两端必须各接一个120Ω电阻,这是为了匹配传输线阻抗,防止信号反射。但很多人不知道,这个电阻的精度和功率也有讲究。在长距离总线(比如超过100米)上,电阻误差超过5%就会明显影响信号质量。
总线拓扑与终端
CAN总线推荐用直线拓扑,也就是一根主干线,所有节点用短支线挂上去。支线长度一般不超过0.3米,总线上节点数最多110个(实际受驱动能力限制)。
终端电阻为什么是120Ω?因为CAN总线用的双绞线特性阻抗大约是120Ω。匹配了,信号就不反射。我见过有人图省事只在一端接电阻,结果总线在高速率下波形乱七八糟。
3.3 CAN总线应用领域:不止于汽车
很多人以为CAN总线只用在汽车上。其实它的应用范围比你想的广得多。
汽车电子(传统主战场)
这是CAN的老本行。从发动机控制、变速箱控制,到ABS、安全气囊、车身控制,再到信息娱乐系统,CAN总线几乎无处不在。一辆现代汽车上可能有3-5条CAN总线,分别跑不同速率和不同安全等级的数据。
工业自动化
工业现场对可靠性的要求不比汽车低。CANopen协议就是基于CAN总线的工业通信协议,广泛应用于PLC、传感器、执行器之间的通信。我做过一个产线项目,用CANopen控制几十个伺服驱动器,跑了三年没出过问题。
医疗设备
CT机、超声诊断仪、病人监护仪,这些设备内部都有多个模块需要实时通信。CAN总线的确定性延迟和错误检测机制,非常适合医疗场景。我记得有个做呼吸机的客户,选型时在CAN和RS485之间犹豫,最后选了CAN,因为CAN的CRC校验更可靠。
航空航天与轨道交通
飞机上的飞行控制、高铁上的制动系统,这些对安全性要求极高的场合,CAN总线也有应用。不过这些领域通常会用CAN的增强版本,比如TTCAN(时间触发CAN)或者CAN FD。
个人经验:
如果你在选型时纠结用CAN还是RS485,我建议你考虑三点:
- 节点数量超过10个?选CAN
- 需要实时响应?选CAN
- 数据量不大但要求高可靠?选CAN
RS485的优势在于速率可以更高(最高10Mbps以上),但它的多主通信机制远不如CAN成熟。
小结
这一章我们聊了CAN总线的起源、物理层特性和应用领域。说白了,CAN总线就是为可靠而生。它的差分信号、显性隐性电平、非破坏性仲裁,每一个设计都指向同一个目标:在恶劣环境下稳定通信。
下一章我们会深入位时序和采样点调优。这部分才是真正考验功力的地方。你想想看,同样是1Mbps的速率,为什么有的系统跑得稳,有的系统跑着跑着就丢帧?答案就在位时序里。
好,今天就到这里。有什么问题欢迎交流。