车载网络 / CAN 教学

CAN 总线教学实验室

从差分电压和并联铜线开始,逐步理解帧结构、ID、非破坏性仲裁、生产者-消费者模型与典型总线故障。

经典 CAN 2.0B
ECU 在线3 / 3所有节点响应正常
CAN 总线负载18.4%500 kbps · CAN 2.0B
活动 DTC01需要调查
12V 母线12.6 V供电稳定

实时信号监视器

CAN0 · 500 kbps
LIVE · 10 Hz
VBAT · 12.6 V
时间CAN IDECU信号数值状态

ECU 诊断状态

LAST POLL · 14:32:08

当前调查

CASE / 004
12V 低压母线波动ACTIVE

多个 ECU 在点火后出现间歇性通信故障。先确认供电,再判断是否为总线本身问题。

01读取 VCU DTC:U0100
02检查 12V 实时数据:12.6 V
03对比 BMS / MCU 报文周期
04确认根因并清除 DTC 验证
物理层与仲裁动画

看见总线上的电压与竞争

每次只观察一个变化:先看并联收发器如何在铜线上形成“线与”,再沿同一时间轴观察两个节点怎样逐位完成无损仲裁。

CAN-HCAN-L
01

差分总线“线与”硬件动画

三节点并联总线
00三个节点全部发送隐性 1,内部功率管断开,CAN-H 与 CAN-L 都回到约 2.5 V。
总线 1 · 隐性Vdiff 0.0 V
02

CAN 位仲裁与同步差分波形

从最高位逐位比较
00两个节点等待总线空闲,准备从 ID 最高位开始同步发送。
A 就绪B 就绪
经典 CAN 数据帧

一帧 CAN 报文是怎样组成的

从总线由空闲转为显性的 SOF 开始,经过仲裁、控制、数据与完整性校验,最后用 EOF 结束。点击字段查看它的任务。

标准数据帧
时间 / 发送顺序左 → 右
位填充:从 SOF 到 CRC 序列,如果连续出现 5 个相同电平,发送器自动插入 1 个相反位,接收器再移除。它保证同步,不属于原始业务数据。
CAN-ID 教学

CAN-ID:消息编号,不是设备地址

硬件在总线上传输二进制,工程文档用十六进制简写。ID 同时标识报文含义并参与优先级仲裁,数值越小,越早出现显性 0,优先级越高。

ID 越小 · 优先级越高

01 · 进制、位宽与 IDE

输入一个 ID,对照二进制、十六进制和十进制。

二进制00100100000
十六进制0x120
十进制288
标准 ID:0 - 20470x000 - 0x7FF

IDE = 0 表示标准帧,仲裁字段使用 11 位标识符。

02 · 从最高位开始仲裁

比较方向是 Bit 10 → Bit 0,不是从最低位向前。

最高位 · BIT 10最低位 · BIT 0
从最左侧最高位开始。前面相同的位不会决定胜负。
核心:ID 是报文优先级编号,不是 ECU 的设备地址。接收节点依据 ID 判断是否订阅这条消息。

03 · 简化整车 CAN 矩阵

一条报文对应一个生产者和多个消费者;ID 区间由具体车型项目定义。

安全实时业务 → 更小 ID
ID功能域报文名称生产者消费者周期关键信号
0x080动力底盘Brake_StatusESPVCU, MCU, Gateway10 ms制动请求 / 车轮速度
0x120动力底盘VCU_Torque_RequestVCUMCU, BMS, Instrument10 ms目标扭矩 / 就绪
0x220动力能源BMS_Pack_StatusBMSVCU, TMS, Gateway20 msSOC / 电压 / 功率限制
0x340车身控制BCM_Door_StatusBCMInstrument, Gateway100 ms门锁 / 门开状态
0x520舒适系统HVAC_CommandHVACTMS, BCM100 ms温度目标 / 风量
0x6A0娱乐信息Media_StatusInfotainmentInstrument500 ms音源 / 曲目信息

教学示例,并非行业统一分配表。真实车型的 ID、周期、字节与信号定义以 OEM 的 CAN Database / DBC 为准。

04 · 生产者-消费者与同 ID 冲突

正常情况下一个 ID 只有一个生产者,但可以被多个 ECU 同时订阅。

单一生产者VCU 发送一帧 0x120,MCU、BMS 和仪表都能在同一总线上接收,无需为每个接收者重复发送。
技术边界:“ID 完全相同”本身不会立刻产生 CRC 错误。若两个节点连数据也完全一致,总线可能无法察觉;当不同 payload 的某一位发生冲突时,发送隐性 1 的节点读到显性 0,产生 Bit Error 和 Error Frame,部分抓包工具会显示 CRC/Frame Error。
补充实验

CAN 物理层与非破坏性仲裁

从差分电平、总线端接到逐位仲裁,观察 CAN 为什么能在复杂车载电气环境中可靠地让多个 ECU 共享一条总线。

500 kbps · ISO 11898-2
01

显性 0 与隐性 1

观察 CAN-H / CAN-L 差分电平,以及“0 碾压 1”。

3.5 V1.5 V
CAN-H2.5 V
CAN-L2.5 V
Vdiff0.0 V

隐性位 1:两个线都约为 2.5 V,差分电压接近 0 V。节点只监听总线,没有主动拉开电平。

02

120Ω 终端电阻

开关两端终端匹配,对比边沿反射与过冲。

两端各 120Ω · 已接入
差分信号时间 →
等效阻抗 ≈ 60Ω信号质量 稳定

正确端接:总线两端各接 120Ω,并联后断电测得约 60Ω。阻抗匹配吸收信号能量,边沿干净。

03

非破坏性位仲裁

两个节点同时发送,ID 数值更小者优先。

准备就绪。点击下方按钮逐位观察总线仲裁。

12V 低压电路路径

供电 · 保险丝 · 继电器 · ECU
12V 蓄电池静态 12.6 V
点火唤醒电源源头
保险丝 · 主继电器过流保护与负载切换
先测电压,再查通信
ECU 电源脚VCU / BMS / MCU
共地 + CAN_H / CAN_L
VBAT 12.6 VF12 10 A · OKR1 CLOSEDGND 0.08 Ω

低压诊断顺序:蓄电池电压 → 保险丝两端压差 → 继电器输出 → ECU 电源脚 → 公共地。供电异常会制造一串“假通信故障”。

车载网络 & 数据视图

CAN · LIN · 数据分析
  • CAN多 ECU 共享总线;ID 决定优先级。监视报文周期、超时计数和总线负载。
  • LIN低成本主从总线;主节点按调度表轮询,适合车门、座椅和空调执行器。
  • UDS诊断工具与 ECU 的应用层协议;读取 DTC、DID,并支持刷写流程。
  • 可视化Pandas 清洗时序数据,Matplotlib 绘制趋势,区分阈值故障与信号卡滞。