1. 课程导入

大家好,我是你们这门课的老朋友。今天咱们正式开篇,聊聊CAN总线到底是什么东西。

说实话,我入行那会儿,CAN总线还是个挺新鲜的技术。记得第一次调试CAN网络,示波器抓波形抓了一整天,就为了看那几个差分信号对不对。现在回过头来看,CAN总线能活到现在,而且越活越好,是有道理的。

1.1 CAN总线是怎么来的?

上世纪80年代,汽车里的电子设备越来越多。你想想看,发动机要管、刹车要管、车窗也要管。每个模块之间都得拉一堆线,车重上去了,故障率也上去了。

1983年,德国博世公司开始琢磨一个问题:能不能搞一套总线,让所有电子模块共用两根线通信?

1986年,他们正式推出了CAN(Controller Area Network)协议。1987年,Intel造出了第一颗CAN控制器芯片——82526。从那以后,CAN总线就一发不可收拾。

关键时间线:

  • 1983年 — 博世启动CAN研发项目
  • 1986年 — 博世在SAE大会上正式发布CAN协议
  • 1987年 — Intel推出首颗CAN控制器芯片82526
  • 1991年 — 博世发布CAN 2.0规范(A/B两部分)
  • 1993年 — CAN成为国际标准ISO 11898

我个人习惯把CAN的诞生看作汽车电子的一次革命。以前是各干各的,现在是大家坐下来开会,谁有急事谁先说。

3.2 CAN总线有什么特点?

说白了,CAN总线能活到今天,靠的是这几个硬功夫:

特点 说明 我的体会
多主通信 任何节点都可以主动发消息,不需要主机轮询 这在汽车上太重要了,刹车信号必须能随时抢着说
非破坏性仲裁 多个节点同时发消息时,优先级高的自动胜出 我曾经调试过一个项目,仲裁机制帮我们省掉了一堆逻辑判断
差分信号 CAN_H和CAN_L两根线,抗干扰能力强 在工厂里,电机一启动干扰就来了,差分信号就是救命稻草
错误检测与重发 CRC校验、位填充、错误帧,自动重发 嗯,这个机制让我少熬了好几个通宵
实时性 消息响应时间可预测,最坏情况也能算出来 做安全系统时,这个特性是刚需

避坑指南:我曾经在一个项目里忽略了CAN总线的终端电阻。两根线没接120Ω电阻,结果通信时好时坏,查了两天才找到原因。记住:CAN总线两端必须各接一个120Ω电阻,不能省。

1.3 CAN总线用在哪里?

CAN总线的应用领域,比很多人想象的要广得多。

汽车领域

这是CAN的老本行。从发动机控制单元(ECU)、变速箱、ABS,到车窗、座椅、车灯,几乎每个电子模块都挂在CAN总线上。一辆中高端车,CAN节点数量轻松超过50个。

我记得有一次帮朋友修车,他的车仪表盘乱跳。用CAN分析仪一抓,发现是某个车门模块在疯狂发错误帧,把总线堵死了。拔掉那个模块,一切恢复正常。这就是CAN总线的典型故障场景。

工业自动化

工厂里的PLC、传感器、执行器,很多都用CANopen协议(基于CAN的上层协议)。为什么?因为CAN的实时性和确定性,在工业现场太合适了。

医疗设备

CT机、呼吸机、监护仪,这些设备内部也需要可靠通信。CAN总线的错误检测机制,在医疗领域是加分项。

其他领域

  • 机器人 — 关节电机控制
  • 电梯 — 楼层呼叫与轿厢控制
  • 船舶 — 导航与动力系统
  • 农业机械 — 拖拉机、收割机

1.4 CAN与RS485,到底怎么选?

这个问题,我几乎每次培训都会被问到。咱们直接上对比表:

对比项 CAN RS485
通信方式 多主,任意节点可主动发 主从,主机轮询从机
仲裁机制 非破坏性位仲裁,优先级自动处理 无仲裁,靠协议层避免冲突
错误处理 硬件级CRC、错误帧、自动重发 无硬件错误处理,需软件实现
实时性 高,消息延迟可预测 低,取决于主机轮询周期
最大节点数 通常110个(标准帧) 32~256个(取决于驱动芯片)
最大速率 1 Mbps(40米以内) 10 Mbps(短距离)
成本 略高(控制器+收发器) 低(只需收发器)
典型应用 汽车、工业控制、医疗 工业仪表、楼宇自动化

选型建议:如果你的系统需要多个节点随时主动发数据,或者对实时性有硬要求,选CAN。如果只是主机轮询几个从机,成本敏感,RS485也够用。我见过有人用RS485硬扛实时性要求,结果项目延期了三个月。

1.5 CAN总线知识体系总览

下面这张图,是我自己梳理的CAN总线知识体系。你把它看懂了,后面29章学起来就有方向了。

CAN总线知识体系总览 CAN总线 物理层 数据链路层 应用层 差分信号 终端电阻 位时序 总线拓扑 帧格式 仲裁机制 错误处理 位填充 CANopen J1939 DeviceNet 自定义协议 硬件设计 → 软件驱动 → 协议栈移植 → 调试与测试 汽车 工业 医疗 机器人 船舶 本课程将按照:物理层 → 数据链路层 → 应用层 → 硬件设计 → 软件驱动 → 项目实战 的顺序展开

这张图把CAN总线的知识体系分成了三层:物理层、数据链路层、应用层。后面我们会一层一层往下啃。每一层都有坑,也都有技巧。我会把我在项目中踩过的坑、总结的经验,全都抖出来。

好了,第一章就到这里。记住一句话:CAN总线不是万能的,但没有CAN总线,很多场景是万万不能的。