CAN总线协议

CAN(Controller Area Network)总线是一种广泛应用于汽车、工业自动化等领域的串行通信协议,由德国Bosch公司在1980年代开发,主要用于实时、可靠的数据传输。以下是其核心要点:


1. 基本特性

  • 多主通信:所有节点均可主动发送消息,通过仲裁机制避免冲突。
  • 差分信号:使用CAN_H和CAN_L双线传输,抗干扰能力强。
  • 实时性:基于优先级(ID决定)的非破坏性仲裁,高优先级消息优先发送。
  • 速率
    • 标准CAN(CAN 2.0A/B):最高1 Mbps(短距离),常见125 kbps~500 kbps。
    • CAN FD(灵活数据速率):提升至5 Mbps以上,数据段可变长度。

2. 帧类型

  • 数据帧:携带实际数据,结构如下:

    • 仲裁域(ID):11位(标准帧)或29位(扩展帧),决定优先级。
    • 控制域:数据长度(DLC,0~8字节,CAN FD可达64字节)。
    • 数据域:实际传输的数据。
    • CRC域:校验数据完整性。
    • ACK域:接收节点确认。
  • 远程帧:请求发送特定ID的数据(无数据域)。

  • 错误帧:通知总线错误。

  • 过载帧:延迟下一帧传输。


3. 仲裁机制

  • 非破坏性逐位仲裁:发送时同时监听总线,若ID位为隐性(1)但检测到显性(0),则退出仲裁。ID值越小,优先级越高

4. 错误处理

  • 5种错误检测
    • CRC错误、格式错误、应答错误、位错误、填充错误(每5个相同位插入相反位)。
  • 错误状态:节点根据错误计数进入“主动错误”、“被动错误”或“总线关闭”状态。

5. 物理层

  • 终端电阻:总线两端需接120Ω电阻匹配阻抗。
  • 电平
    • 显性电平(0):CAN_H ≈ 3.5V,CAN_L ≈ 1.5V。
    • 隐性电平(1):CAN_H = CAN_L ≈ 2.5V。

6. 应用场景

  • 汽车电子:ECU(发动机控制单元)、传感器、仪表通信。
  • 工业控制:PLC、机器人、传感器网络。
  • 医疗设备:高可靠性要求的设备间通信。

7. CAN变种

  • CAN FD:提升数据段速率和长度(兼容经典CAN)。
  • CAN XL:更高带宽(10+ Mbps),支持更大数据包(仍在发展中)。

8. 协议栈

  • 底层:物理层(ISO 11898)、数据链路层(CAN控制器)。
  • 上层协议
    • CANopen:工业自动化常用。
    • J1939:商用车标准(基于29位ID)。

示例代码(Arduino + CAN)

#include <CAN.h>
void setup() {
  CAN.begin(500E3); // 初始化500 kbps
}

void loop() {
  CAN.beginPacket(0x12); // 标准帧ID=0x12
  CAN.write('A');        // 发送1字节数据
  CAN.endPacket();
  delay(1000);
}

关键优势

  • 可靠性:错误检测与重发机制。
  • 灵活性:支持多节点、动态增减设备。
  • 成本低:简化布线,适合复杂系统。

适用于需要高实时性和抗干扰能力的分布式控制系统。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值