一、什么是CAN总线?
CAN(Controller Area Network,控制器局域网)总线是一种高可靠、多主串行通信总线标准,由博世(Bosch)公司于1986年开发,1993年成为ISO 11898国际标准。最初为汽车电子设计,解决车内大量ECU之间的通信问题,后来广泛延伸到工业自动化、医疗器械、船舶和航空航天等领域。
CAN总线的核心设计目标是高可靠性和实时性:
- 多主通信:任何节点都可以主动发送数据,不需要主站轮询
- 非破坏性仲裁:多个节点同时发送时,优先级高的自动赢得总线
- 强大的错误检测能力:CRC、位填充、帧格式检查等多重校验
- 故障自动隔离:故障节点自动脱离总线,不影响其他节点通信
每天有数十亿个CAN节点在运行——从你的汽车到工厂的机器人,CAN总线是嵌入式系统通信的事实标准之一。
二、物理层:差分信号传输
CAN总线物理层采用双线差分信号传输,与RS-485类似但有其特殊性:
| 参数 | CAN (ISO 11898) | 说明 |
|---|---|---|
| 传输线 | CAN_H / CAN_L 双绞线 | 差分信号,抗干扰能力强 |
| 逻辑状态 | 显性(0) / 隐性(1) | 显性: CAN_H≈3.5V, CAN_L≈1.5V;隐性: 两线均≈2.5V |
| 总线电平 | 差分电压 0V(隐性) / ~2V(显性) | 显性驱动覆盖隐性 |
| 最大节点数 | 理论110个(取决于收发器) | 实际通常30~110个 |
| 最大距离 | 40m@1Mbps / 1000m@50kbps | 速率与距离成反比 |
| 线缆要求 | 特征阻抗120Ω双绞线 | 必须使用指定阻抗的线缆 |
显性/隐性机制是CAN仲裁的基础:当多个节点同时驱动总线时,显性电平(逻辑0)会覆盖隐性电平(逻辑1)。这意味着发送隐性位的节点如果读到显性位,就知道有更高优先级的节点在同时发送,会自动退让。
三、CSMA/CD+AMP仲裁机制
CAN采用CSMA/CD+AMP(载波侦听多路访问/冲突检测+仲裁消息优先级)机制解决多主冲突:
仲裁过程
- 所有节点先侦听总线,空闲时开始发送
- 每个节点发送标识符(ID)的同时回读总线电平
- 如果发送隐性位(1)但读到显性位(0),说明有更高优先级的节点在发送
- 被仲裁失败的节点自动停止发送,等总线空闲后重试
- 仲裁不会破坏任何数据——胜出的节点继续正常发送
关键点:ID值越小,优先级越高。因为ID的所有位中,0(显性)越多、出现越早,就越容易在仲裁中胜出。
这就是"非破坏性仲裁"——与以太网的CSMA/CD不同,以太网检测到冲突时双方都退让重发(破坏性),而CAN的仲裁是赢家继续、输家退让(非破坏性),不会浪费总线时间。
四、CAN帧结构
CAN有四种帧类型:
| 帧类型 | 功能 |
|---|---|
| 数据帧 | 携带数据从发送节点到接收节点(最常用) |
| 远程帧 | 请求某个ID的节点发送数据 |
| 错误帧 | 检测到错误时发送,强制当前帧终止 |
| 过载帧 | 请求节点间延迟 |
标准数据帧的结构:
┌──────┬───────────┬──────┬──────────┬─────────────┬───────┬───────┬────────┐ │ 帧起始│ 仲裁段 │控制段 │ 数据段 │ CRC段 │ ACK段 │ 帧结束 │ 帧间隔 │ │ SOF │ ID+RTR │IDE+r │ 0~8字节 │ CRC+SRR+DEL │ ACK+ │ EOF │ IFS │ │ 1位 │ 11/29位 │6位 │ 0~64位 │ 15+1+1位 │2位 │7位 │3位 │ └──────┴───────────┴──────┴──────────┴─────────────┴───────┴───────┴────────┘
五、CAN 2.0A与CAN 2.0B
| 对比项 | CAN 2.0A(标准帧) | CAN 2.0B(扩展帧) |
|---|---|---|
| ID长度 | 11位(标准标识符) | 29位(扩展标识符) |
| 可用ID数 | 2,048个 | 超过5亿个 |
| 适用场景 | 节点少的小型系统 | 节点多的大型系统 |
| 兼容性 | 所有CAN控制器支持 | 需CAN 2.0B兼容控制器 |
实际应用中,CANopen和DeviceNet主要使用11位标准帧,J1939(重型车辆)使用29位扩展帧。
六、CAN FD:灵活数据速率
CAN FD(CAN with Flexible Data Rate)是CAN的升级版本,由博世于2012年发布,2015年成为ISO 11898-1:2015标准:
| 对比项 | 经典CAN | CAN FD |
|---|---|---|
| 数据段长度 | 0~8字节 | 0~64字节 |
| 仲裁段速率 | 最高1 Mbps | 最高1 Mbps(兼容) |
| 数据段速率 | 同仲裁段 | 可达5~8 Mbps |
| CRC长度 | 15位 | 17位(≤16字节) / 21位(>16字节) |
| 实时性 | 8字节/帧,需多次传输 | 64字节/帧,减少协议开销 |
CAN FD的核心优势:在仲裁段保持兼容经典CAN(1Mbps),数据段切换到高速模式(5~8Mbps),单帧数据量增加8倍。这大幅提升了总线吞吐量,同时保持了向后兼容性。
七、终端电阻:不可忽视的关键
CAN总线两端必须各安装一个120Ω终端电阻。这是CAN系统正常工作的前提条件,也是最常见的故障原因之一。
为什么需要终端电阻?
- 匹配线缆特征阻抗(CAN双绞线特征阻抗为120Ω),防止信号反射
- 如果没有终端电阻,信号会在总线两端反射,造成通信错误
- 隐性状态下,两个120Ω电阻并联,总线差分电阻约60Ω
常见终端电阻错误
| 错误类型 | 现象 | 排查方法 |
|---|---|---|
| 两端都未接 | 通信完全失败或频繁出错 | 断电测量总线电阻,应为60Ω |
| 只接了一端 | 近距离通信正常,远距离出错 | 测量电阻为120Ω(应60Ω) |
| 接了三个以上 | 信号幅度不足,偶尔出错 | 测量电阻<60Ω,检查所有节点 |
| 阻值不正确 | 间歇性通信错误 | 使用精密电阻,确保120Ω±1% |
终端电阻是CAN系统的"生命线"。很多CAN通信问题最终排查到的原因都是终端电阻——要么忘了接,要么接多了,要么阻值不对。建议在总线两端的节点内置终端电阻,中间节点不接。
八、CAN总线优点
1. 高可靠性
CRC校验、位填充、帧格式检查、ACK确认机制——四重错误检测手段。CAN的残余错误率低于4.7×10⁻¹¹,在恶劣电磁环境中依然稳定。
2. 多主通信
任何节点都可以主动发送数据,无需等待主站轮询。这对于需要事件触发通信的场景(如报警信号)特别重要。
3. 非破坏性仲裁
优先级高的消息不会被冲突打断,保证关键数据的实时性。ID值小的消息优先级高——工程师可以按紧急程度分配ID。
4. 错误自动隔离
故障节点会经历"错误主动→错误被动→总线关闭"三个状态,自动脱离总线,不影响其他节点正常通信。
5. 成本低
两根线、收发器芯片便宜(几元人民币)、布线简单。大批量应用中成本优势明显。
6. 实时性好
高优先级消息的最坏响应时间可以精确计算,适合硬实时系统。
九、CAN总线缺点与局限
| 局限性 | 详细说明 | 影响程度 |
|---|---|---|
| 带宽有限 | 经典CAN最高1Mbps,CAN FD最高8Mbps,远低于工业以太网 | 高(大数据量场景受限) |
| 数据帧短 | 经典CAN每帧最多8字节,需要分拆大消息 | 中等(CAN FD已改善) |
| 总线长度限制 | 1Mbps时仅40米,50kbps时可达1000米 | 中等 |
| 不能直接连接以太网 | 需要网关转换才能与IT系统对接 | 中等 |
| 安全机制不足 | 原始CAN没有加密和认证,存在安全风险 | 高(汽车信息安全关注点) |
| 无地址概念 | CAN用消息ID而非节点地址,需要上层协议(如CANopen)定义节点标识 | 低 |
十、CAN与其他总线协议对比
| 对比维度 | CAN | RS-485 | Modbus RTU | Profinet |
|---|---|---|---|---|
| 通信模式 | 多主 | 主从 | 主从 | 主从/多主 |
| 仲裁机制 | 非破坏性仲裁 | 无(主站控制) | 无(主站控制) | 无(确定性调度) |
| 最大速率 | 1Mbps / FD 8Mbps | 10Mbps | 115.2kbps | 100Mbps+ |
| 错误检测 | CRC+位填充+格式检查 | CRC(可选) | CRC | 多重校验 |
| 故障隔离 | 自动 | 无 | 无 | 有 |
| 最大节点数 | ~110 | 32~256 | 247 | 数百 |
| 主要领域 | 汽车/工控 | 工控/仪表 | 工控/仪表 | 工业自动化 |
十一、CAN在位移传感器中的应用
1. 汽车测试与测量
汽车测试中大量使用CAN总线传输传感器数据:
- 悬架位移传感器:通过CAN总线实时上传悬架行程数据
- 转向角传感器:CAN总线传输方向盘转角和角速度
- 油门踏板位置传感器:CAN传输踏板行程百分比
- 刹车踏板行程传感器:CAN传输制动行程和力度
2. 工程机械
- 挖掘机油缸行程:磁致伸缩传感器通过CANopen协议传输油缸行程
- 起重机臂架角度:角度传感器通过CAN总线传输臂架角度
- 叉车门架高度:拉绳位移传感器通过CAN传输升降高度
3. 工业自动化
- 多轴同步控制:CANopen DS406规范定义了位移传感器的CAN接口标准
- 机器人关节位置反馈:CAN总线传输关节角度编码器数据
- 生产线高度调整:多个位移传感器通过CAN总线联网上报
位移传感器CAN总线选型建议
| 需求 | 推荐方案 |
|---|---|
| 汽车/工程机械应用 | CAN 2.0B (29位ID),兼容J1939 |
| 工业自动化 | CANopen DS406协议,11位标准帧 |
| 高速数据采集 | CAN FD,64字节/帧,数据段8Mbps |
| 多点网络 | 总线拓扑,两端120Ω终端电阻 |
| 长距离传输 | 降低波特率至50~125kbps,距离可达500~1000m |
十二、常见问题(FAQ)
Q1:CAN总线的终端电阻必须接120Ω吗?能不能用其他阻值?
必须120Ω。这是由CAN双绞线的特征阻抗决定的(标准CAN线缆特征阻抗为120Ω)。终端电阻的作用是匹配线缆阻抗、防止信号反射。如果用其他阻值(如100Ω或150Ω),会造成阻抗不匹配,信号反射加剧,通信出错率升高。使用精密电阻(±1%),两端各一个,中间节点不接。
Q2:CAN和CANopen是什么关系?
CAN是底层总线标准(物理层+数据链路层),定义了信号怎么传。CANopen是建立在CAN之上的应用层协议,定义了设备怎么用CAN通信——包括设备模型、通信对象(PDO/SDO)、设备字典等。简单说:CAN是"公路",CANopen是"交通规则"。使用CANopen能让不同厂商的CAN设备互联互通。
Q3:CAN FD能兼容经典CAN吗?
可以。CAN FD在仲裁段(ID和控制位)保持与经典CAN相同的1Mbps速率,只有在数据段才切换到高速模式。CAN FD控制器可以收发经典CAN帧,经典CAN控制器无法收发CAN FD帧。升级策略:先升级主节点为CAN FD兼容型,从节点逐步替换。
Q4:位移传感器用CAN还是Modbus RTU?
看应用场景:汽车和工程机械优先CAN(与ECU集成方便,多主通信适合事件触发)。工业自动化两者都可以,如果系统已有CAN总线基础(如CANopen网络),选CAN;如果是新建系统且以数据采集为主,Modbus RTU更简单直接。CAN的优势是多主和实时性,Modbus的优势是简单和生态广。
Q5:CAN总线通信不稳定怎么排查?
按顺序排查:(1) 终端电阻——断电测总线电阻应为60Ω(两端120Ω并联);(2) 线缆——必须用120Ω特征阻抗双绞线,不能用普通线;(3) 拓扑——必须是总线拓扑(菊花链),不能用星型;(4) 波特率——所有节点波特率必须一致;(5) 节点数量——超过110个节点需要中继器;(6) 接地——所有节点共地。
相关文章推荐
- 现场总线协议对比:PROFIBUS、DeviceNet、CANopen、CC-Link优缺点与选型 — CANopen作为现场总线四强之一的详解
- CAN总线终端电阻详解 — 终端电阻配置的深度技术说明
- 工业通信协议详解:RS-485、Modbus、TCP、PLC与MQTT的关系及应用 — 分层架构理解各类协议
- 位移传感器通信协议选型指南:从4-20mA到IO-Link — 针对位移传感器的全面选型对比
- OPC UA统一架构与9大工业通信协议综合选型指南 — 9大协议横向对比与选型决策
- 工业物联网网关与协议转换技术详解 — CAN与以太网协议转换方案


客服1