1. CAN总线技术概述
CAN(Controller Area Network)总线是一种广泛应用于工业控制、汽车电子等领域的串行通信协议。1986年由德国Bosch公司开发,最初用于解决汽车内部电子控制单元(ECU)之间的通信问题。经过30多年的发展,CAN总线已成为工业自动化领域最重要的通信标准之一。
关键特性:CAN总线采用差分信号传输、非破坏性仲裁机制和严格的错误检测机制,使其在恶劣电磁环境下仍能保持高可靠性。典型应用场景包括汽车电子(如发动机控制、车身电子)、工业自动化(如PLC通信)、医疗设备等。
CAN总线协议栈分为物理层和数据链路层:
- 物理层:定义电气特性、信号电平和传输介质
- 数据链路层:包含逻辑链路控制(LLC)和媒体访问控制(MAC)子层
2. CAN物理层深度解析
2.1 差分信号传输原理
CAN总线采用双绞线传输差分信号,通过CAN_H和CAN_L两条线之间的电压差表示逻辑状态:
| 逻辑状态 | CAN_H电压 | CAN_L电压 | 电压差 |
|---|---|---|---|
| 显性(0) | ≈3.5V | ≈1.5V | 2V |
| 隐性(1) | ≈2.5V | ≈2.5V | 0V |
这种差分传输方式具有极强的抗共模干扰能力,即使总线上叠加了电磁干扰,接收端仍能正确识别逻辑状态。
2.2 终端电阻配置
CAN总线两端必须各接一个120Ω终端电阻,主要作用:
- 阻抗匹配:防止信号反射
- 确保总线在隐性状态时能稳定在2.5V
实际工程中常见问题:
- 终端电阻缺失:导致信号反射,通信不稳定
- 终端电阻过多:总线负载过重,信号幅度降低
- 终端电阻值不匹配:信号质量下降
经验法则:使用万用表测量CAN_H和CAN_L之间的电阻应为60Ω左右(两个120Ω电阻并联)。
3. CAN数据链路层核心技术
3.1 帧类型与结构
CAN协议定义了四种帧类型:
- 数据帧:用于节点发送数据
- 远程帧:请求其他节点发送数据
- 错误帧:通知总线错误
- 过载帧:通知节点尚未准备好接收
3.1.1 标准帧与扩展帧对比
| 特性 | 标准帧(CAN 2.0A) | 扩展帧(CAN 2.0B) |
|---|---|---|
| ID长度 | 11位 | 29位(11+18) |
| 最大ID数量 | 2048 | 5.36亿 |
| IDE位 | 显性(0) | 隐性(1) |
| 帧长度 | 44-108位 | 64-128位 |
| 典型应用场景 | 简单控制系统 | 复杂网络系统 |
3.2 非破坏性仲裁机制
CAN总线最核心的创新是其独特的仲裁机制:
- CSMA/CA(
