当前位置: 首页 > news >正文

Controller Area Network (CAN) 通信机制简介

目录

1. CAN 概述

2. 物理结构与传输机制

3. 消息格式与仲裁机制

4. 错误检测与总线状态

5. 工业用 CAN 接口

6. 本讲总结


1. CAN 概述

CAN(Controller Area Network)是由德国博世(Bosch)公司于 1983 年提出的串行通信协议,最初用于汽车内部多个电子控制单元(ECU)之间的数据通信。CAN 总线有以下特点:

  • 多主结构:任意节点都可以在总线空闲时发起通信,支持分布式控制系统;

  • 实时性高:通过优先级仲裁机制保证高优先级信息的快速响应;

  • 通信可靠性强:内置多重错误检测机制;

  • 抗干扰性强:差分信号传输 + 双绞线结构;

  • 应用广泛:除汽车外,在工业自动化、电梯、轨道交通、医疗设备等领域被大量采用。

CAN 在工业发展中已经进行过多次的升级和演进。最初的 Classic CAN(标准 CAN)支持最大数据帧为 8 字节。Bosch 在 2012 年推出了 CAN FD(Flexible Data Rate),为标准 CAN 的增强型协议,支持高达 64 字节数据,速率提升到 5Mbps。CANopen SAE J1939 是基于 CAN 的上层协议,提供数据组织和设备管理规范。

2. 物理结构与传输机制

CAN 在物理层采用差分信号传输,即 CAN_H(高线)CAN_L(低线)之间的电压差来表示逻辑状态,理论上用双绞线就可以实现,如下图所示:

差分电压信号分为显性与隐性信号两种,分别代表逻辑 0 和 1,如下表所示:

状态CAN_HCAN_L差值逻辑
显性(Dominant)~3.5V~1.5V~2V逻辑 0
隐性(Recessive)~2.5V~2.5V~0V逻辑 1

CAN 将信号转换成一系列的电压差来进行传送。CAN 通常为 总线型结构,两端会接 120Ω 终端电阻,吸收信号反射,如下图所示:

CAN 总线的最大传输距离是和传输速率(波特率)有直接关系的,下表根据经验给出了一个大概的关系:

波特率最大距离(理论)
1 Mbps40 米
500 kbps100 米
125 kbps500 米

实际应用中,传输距离受很多因素影响。但是我们可以看到速率越高,支持的距离会越短。

3. 消息格式与仲裁机制

CAN 采用 帧格式 来组织通信数据。每一帧都是广播的,所有节点都能接收,根据 ID 来决定是否处理。CAN 常用的帧类型有以下四种:

类型用途
数据帧正常通信的数据负载传输
远程帧请求其他节点发送某类数据
错误帧报告帧错误(由接收/发送节点主动发送)
过载帧通知总线稍等片刻(如缓存溢出)

这里我们重点介绍一下数据帧。数据帧的结构如下图所示:

这里进行一下简单的介绍:

  • 标识符(ID):代表消息类型,也决定优先级(数值越小优先级越高);

  • RTR 位:区分数据帧和远程帧;

  • CRC(校验):检测传输错误;

  • ACK(响应):确认接收响应位。

  • Data(数据): 传输的数据,最高8字节。

CAN(Controller Area Network)总线的仲裁机制是一种非破坏性位仲裁方式。当多个节点几乎同时开始发送数据时,它们会在发送过程中监视总线电平。CAN 使用“优先级”机制:帧的标识符越小,优先级越高。发送过程中,如果某个节点发送的是显性位(0)而检测到的是隐性位(1),说明有更高优先级的消息正在传输,该节点会立即停止发送,从而实现无冲突的仲裁和总线访问控制。

4. 错误检测与总线状态

CAN 协议对错误处理十分严格,具备多级检测与恢复机制。CAN 有五种错误检测机制:

  1. 位错误(Bit Error):发送位与检测到的位不同;

  2. 填充错误(Stuff Error):违反“5 个相同位后自动插入反位”规则;

  3. CRC 错误:校验字段不匹配;

  4. 格式错误(Form Error):帧结构字段异常;

  5. ACK 错误:期望有节点应答却未收到 ACK。

如果发现错误,CAN 还有不同的错误处理机制,比如:

  • 主动错误帧(Active Error Frame):节点发现错误并通知所有节点;

  • 被动错误帧(Passive Error Frame):错误次数过多后被动报告,不再主动干扰总线;

  • 总线关闭(Bus-Off):连续错误严重,节点完全断开,不再参与通信(例如失控 ECU);

CAN 的错误检测与总线状态是个很重要的话题,我们这里不做过多的介绍,之后会单独开一篇教程讲解不同的错误检测机制。

5. 工业用 CAN 接口

虽然 CAN 总线只需要两根信号线(CAN_H 和 CAN_L) 进行通信,但在实际设备或开发板上的CAN 接口会出现多个“插头”或“针脚”,额外的“头”不仅用于信号线,还包括供电、接地、终端电阻控制、备用信号或诊断功能等,见下表:

接口引脚用途说明
CAN_H差分信号:高线
CAN_L差分信号:低线
GND(接地)电源地线,用于参考和抗干扰
V+ / Vbat电源供电(如 12V/24V)
STB / EN芯片工作/待机控制信号(控制 CAN 芯片开关)
RS可调终端电阻设置(如 SN65HVD230 有此功能)
NC预留 / 未接

在使用的时候,要根据具体情况具体分析,并仔细阅读使用手册和文档。

6. 本讲总结

在这篇博文中,我们简单的介绍了 CAN 的基本原理,网络结构,数据传输和仲裁机制,我们在之后的博文中,针对部分内容,进行更深入的解析。

参考文献:

1. can口9针定义_can口定义-CSDN博客

2. 常用通信接口电气特征(六):CAN_can接口-CSDN博客

3. 详解CAN总线:常用CAN连接器的使用方法_dsub9 can-CSDN博客

http://www.lryc.cn/news/571979.html

相关文章:

  • Ubuntu服务器启动jupyter notebook,本地电脑Mobaxterm访问
  • 一个电脑装了多个python哪个生效?在 Windows 系统中修改环境变量 PATH 的优先级
  • Vue.js 按键修饰符详解:提升键盘事件处理效率
  • 筑牢安全防线:电子文件元数据驱动的 AI 知识库可控管理方案
  • TradingAgents:基于多智能体的大型语言模型(LLM)金融交易框架
  • 从零学起VIM
  • 解决sql查询中in查询项过多时很慢的问题
  • django 获取 filter后的某一个属性的list
  • 【Java学习笔记】Java绘图基础
  • 【学习笔记】2.2 Encoder-Decoder
  • Neo4j 入门到精通(Cypher语言详解)
  • 湖北理元理律师事务所小微企业债务重组方案:司法与经营的共生逻辑
  • b站视频如何下载到电脑上
  • jupter 如何修改文件位置
  • 【AI Study】第四天,Pandas(8)- 最佳实践
  • 湖北理元理律师事务所债务优化模型:法律与生活的平衡之道
  • 《汇编语言:基于X86处理器》第2章 x86处理器架构
  • 《仿盒马》app开发技术分享--未完成订单列表展示逻辑优化(61)
  • 机器学习常用评估指标
  • springboot使用nacos注册中心、配置中心的例子
  • C/Fortran多核并行计算
  • (LeetCode 面试经典 150 题 ) 26. 删除有序数组中的重复项 (双指针)
  • A 股无风不起浪!金融吸血科技
  • 黑马python(八)
  • 利用 Nginx 实现灰度环境的 H5 应用发布策略
  • 将iOS上架流程融入DevOps体系:从CI构建到App Store发布的完整实践
  • 嵌入式之硬件学习(三)通信方式、串口通信
  • PostgreSQL的扩展autoinc
  • Mac 安装 VMware Fusion
  • YOLOv11改进系列---Conv篇---2024最新深度可分卷积与多尺度卷积结合的模块MSCB助力yolov11有效涨点