CAN 物理层 -- 差分信号、拓扑与终端电阻
目录
1. 什么是 CAN 总线
CAN(Controller Area Network,控制器局域网)是由 Bosch 公司于 1986 年开发的一种串行通信协议,最初用于汽车内部电子控制单元(ECU)之间的通信。如今已广泛应用于工业自动化、医疗设备、船舶电子等领域。
1.1 为什么需要 CAN?
在汽车中,有数十个甚至上百个 ECU(发动机控制、ABS、空调、仪表盘等)。早期的点对点布线方式需要大量线束,成本高且不可靠。CAN 总线通过共享一根通信线,大幅减少线束数量。
1.2 CAN 与其他总线的对比
| 特性 | CAN | I2C | SPI | UART |
|---|---|---|---|---|
| 通信方式 | 差分信号 | 单端 | 单端 | 单端 |
| 线数 | 2 根(CAN_H + CAN_L) | 2 根(SDA + SCL) | 3+ 根(MOSI/MISO/SCK/CS) | 2 根(TX + RX) |
| 最大速率 | 1 Mbps(经典 CAN) | 3.4 Mbps(高速模式) | 数十 Mbps | 取决于距离 |
| 多主支持 | 是(带仲裁) | 是 | 否(单主) | 否 |
| 抗干扰能力 | 强(差分) | 一般 | 一般 | 弱 |
| 典型应用 | 汽车、工业控制 | 板内低速外设 | 板内高速外设 | 点对点通信 |
2. 物理层详解
2.1 CAN_H 和 CAN_L 差分信号线
CAN 总线使用两根信号线传输数据:
- CAN_H(CAN High):高电平线
- CAN_L(CAN Low):低电平线
接收端通过两根线的电压差来判断逻辑状态,而不是看单根线的绝对电压。这种差分信号方式具有极强的抗干扰能力。
2.2 显性电平 vs 隐性电平
| 状态 | 逻辑值 | CAN_H 电压 | CAN_L 电压 | 差分电压 |
|---|---|---|---|---|
| 显性(Dominant) | 0 | ~3.5V | ~1.5V | ~2.0V |
| 隐性(Recessive) | 1 | ~2.5V | ~2.5V | ~0V |
关键特性:
- 显性电平覆盖隐性电平 —— 这是 CAN 仲裁机制的物理基础
- 当多个节点同时发送时,只要有一个节点发送显性(0),总线上就表现为显性
2.3 位速率
| 速率 | 典型应用 | 最大总线长度 |
|---|---|---|
| 125 kbps | 工业现场 | 500m |
| 250 kbps | 汽车舒适系统 | 250m |
| 500 kbps | 汽车动力系统 | 100m |
| 1 Mbps | 高速工业控制 | 40m |
速率与距离成反比 —— 总线越长,最大可用速率越低。
3. 拓扑结构
3.1 线性总线拓扑
CAN 总线采用线性总线结构:
[节点1]───[节点2]───[节点3]───[节点4]───[节点5]
│ │ │ │ │
└─终端电阻─┘ └─终端电阻─┘
(120Ω) (120Ω)- 所有节点并联在总线上
- 总线两端各有一个 120Ω 终端电阻
- 不支持星型、环型拓扑(除非使用中继器或网关)
3.2 节点数量限制
- 理论:无限制(由 CAN 协议本身不限制)
- 实际:受收发器驱动能力限制,通常最多 110 个节点
- 常见配置:10-30 个节点
3.3 分支长度限制
从主干到节点的分支线(stub)应尽量短:
- 1 Mbps 时:分支 < 0.3m
- 125 kbps 时:分支 < 3m
过长的分支会引起信号反射,导致通信错误。
4. 终端电阻
4.1 为什么需要终端电阻?
终端电阻的作用是消除信号反射。当信号到达总线末端时,如果没有匹配的终端电阻,信号会反射回总线,与后续信号叠加,造成数据错误。
4.2 阻值选择
- 标准值:120Ω
- 等效阻抗:两个 120Ω 并联 = 60Ω(匹配 CAN 总线特性阻抗)
- 位置:总线两端,不是每个节点都加
4.3 如何判断终端电阻是否正常?
用万用表测量 CAN_H 与 CAN_L 之间的电阻:
- 正常值:约 60Ω
- 只接了一个终端电阻:约 120Ω
- 都没有接:开路(无穷大)
5. 关键知识点总结
| 知识点 | 要点 |
|---|---|
| 差分信号 | 抗干扰能力强,显性覆盖隐性 |
| 显性/隐性 | 显性 = 逻辑 0,隐性 = 逻辑 1 |
| 仲裁基础 | 显性覆盖隐性 → ID 越小优先级越高 |
| 终端电阻 | 120Ω × 2,安装在总线两端 |
| 速率与距离 | 速率越高,最大距离越短 |
| 拓扑 | 线性总线,不支持星型/环型 |
★ Insight ─────────────────────────────────────
- CAN 的"显性覆盖隐性"特性是协议设计的精髓 —— 物理层直接实现了仲裁的基础,不需要额外的冲突检测机制。
- 终端电阻看似简单,却是工业现场最常见的故障源之一。实际排查时,第一步就是测量总线两端的电阻是否为 60Ω。
- 差分信号与单端信号的本质区别:差分看的是电压差,而不是对地电压,因此共模噪声(如电磁干扰)会被抵消。
─────────────────────────────────────────────────
下一步
→ 02-can-frame-format.md —— 深入了解 CAN 帧格式和仲裁机制
如果这篇文章对你有帮助,欢迎请我喝杯咖啡 ☕
支付宝
微信