目录

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.pswp.cn/diannao/87319.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87319.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/87319.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我有一个想法

我有一个想法 我想为家乡做点事情,但是又不知道从哪里开始。 也许为家乡的教育做点事情是比较靠谱的。 于是,我就想到了,是不是可以在高中学校,设立一个“鸿鹄”奖学金? 这个奖学金怎么使用呢? 在每年9月份…

【Pandas】pandas DataFrame stack

Pandas2.2 DataFrame Reshaping sorting transposing 方法描述DataFrame.droplevel(level[, axis])用于**从 DataFrame 的索引(行或列)中删除指定层级(level)**的方法DataFrame.pivot(*, columns[, index, values])用于重塑 Dat…

Java 自动关闭资源语法糖 - try-with-resources

文章目录 Java 自动关闭资源语法糖 - try-with-resources前言优势1、自动资源管理2、处理多重资源3、异常处理更健壮4、适用条件 总结 Java 自动关闭资源语法糖 - try-with-resources 前言 日常开发中,我们经常会看到如下代码: try (InputStream is …

MyBatis中的动态SQL是什么?

大家好,我是锋哥。今天分享关于【MyBatis中的动态SQL是什么?】面试题。希望对大家有帮助; MyBatis中的动态SQL是什么? 超硬核AI学习资料,现在永久免费了! MyBatis中的动态SQL指的是根据不同的条件&#x…

【Java反射】如何新增对象中的属性,与JavaScript中的直接添加属性有什么区别?

问&#xff1a; Object obj new Object(); //获取一个类的class对象 Class<?> objClass Object.class; try { //通过newInstance方法创建一个新的属性 Field newField Field.class.newInstance(); newField.setAccessible(true); newField.set(obj, “index”); }ca…

java spring boot Swagger安装及使用

https://springdoc.org/ 可能原因分析 &#x1f50d; 原因 1&#xff1a;SpringFox 版本与 Spring Boot 版本不兼容 ❌ SpringFox 3.0.0 不完全兼容 Spring Boot 2.6 及更高版本&#xff0c;可能导致 NullPointerException。 Spring Boot 3.x 完全不支持 SpringFox&#xff0c…

电商云仓/前置仓的物流高效监控、管理、预警系统,快递鸟DMS

在电商行业蓬勃发展的当下&#xff0c;电商云仓和前置仓作为物流配送体系的关键环节&#xff0c;其高效运作直接影响着消费者体验与企业竞争力。快递鸟 DMS 物流交付管理平台&#xff0c;以其卓越的物流监控、管理及预警功能&#xff0c;成为电商企业优化云仓和前置仓物流管理的…

HarmonyOS Next深度解析:高德定位SDK高效集成与实战指南

HarmoyOS Next 实现高德定位SDK 注&#xff1a;作者采用版本为 HarmonyOS 5.0.0 Release SDK和DevEco Studio 5.0.0 Release。 1.获取本地AppID&#xff1a; 在index.pages的abountToAppear( ) 方法中获取appID、并打印在Log日志&#xff0c;即可在程序运行时获取本地项目的…

【技术】记一次 Docker 中的 ES 数据迁移,使用 Reindex API

记一次 Docker 中的 ES 数据迁移&#xff0c;使用 Reindex API 环境背景需求背景开始迁移确认老 ES 的访问地址在新 ES 中创建索引的 Mapping (选配)在新 ES 中配置老 ES 的地址开始迁移数据数据验证 首先声明&#xff0c;是因为环境限制&#xff0c;没有办法使用同步工具&…

yii2基础版本安装记录,实录有点乱看标题即可

因为使用php 安装的是docker环境所有进入到容器安装ridh_mfe_api 为挂载目录 Nginx及PHP挂载配置 因为使用php 安装的是docker环境所有进入到容器安装 ridh_mfe_api 为挂载目录 进入容器 % docker exec -it php sh /var/www/html # ls index.html index.php composer crea…

前端跨域解决方案(3):CORS

1 CORS 核心 CORS&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff0c;即跨域资源共享&#xff0c;是目前最主流的跨域方案&#xff0c;它通过服务器返回的特殊 HTTP 头&#xff0c;允许浏览器放行跨域请求。与传统的 JSONP 相比&#xff0c;CORS 具有明显的优…

SpringBoot源码解析(十五):spring-boot-autoconfigure.jar的模块化设计

前言 SpringBoot的自动配置是其革命性特性的核心&#xff0c;而spring-boot-autoconfigure.jar则是这一机制的物理载体。本文将深入剖析这个JAR包的模块化设计哲学&#xff0c;从包结构划分、条件注解体系到自动配置加载机制&#xff0c;全方位解析SpringBoot如何通过精妙的模…

学习笔记九:docker容器日志问题

docker容器日志问题 背景如何处理日志问题主要通过日志轮询方式处理。修改 Docker 配置日志快速清理 背景 Docker 默认使用的是 json-file 日志驱动。日志会一直写&#xff0c;一直写&#xff0c;没有限制、没有轮转、没有清理&#xff01; 日志默认位置&#xff1a; /var/lib…

低成本同屏方案:电脑 + 路由器实现 50 台安卓平板实时同屏

引言 在教育机构、小型培训场景或企业简易会议中&#xff0c;常面临以最低成本实现多设备同屏的需求。本文针对 "电脑 路由器 50 台安卓平板" 的极简硬件组合&#xff0c;详细剖析实时同屏的实现路径&#xff0c;从问题分析到技术落地提供全流程解决方案&#xff0…

Unity ECS DOTS技术实现50000个cube随机循环移动流程

前言 之前使用过ECS面向组件开发&#xff0c;一直想试一下Unity的ECS DOTS技术&#xff0c;但是苦于入门门槛太高&#xff0c;下载官方的Demo&#xff0c;发现代码哪哪儿都看不懂&#xff0c;一大堆API闻所未闻&#xff0c;而且没有一个入门的流程&#xff0c;导致无法进行下去…

设计模式精讲 Day 3:抽象工厂模式(Abstract Factory Pattern)

【设计模式精讲 Day 3】抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09; 文章简述 在软件开发中&#xff0c;随着业务复杂度的提升&#xff0c;系统需要支持多种产品族的创建。抽象工厂模式正是为了解决这一问题而诞生的设计模式之一。本文作为“设计模式精讲”…

Kafka消息零丢失架构设计:从原理到实战的全方位保障

引言 在构建高可靠分布式系统时&#xff0c;Kafka作为核心消息中间件被广泛应用于数据管道、实时流处理等关键场景。然而&#xff0c;分布式环境下的网络波动、节点故障等因素可能导致消息丢失&#xff0c;如何确保Kafka实现端到端的消息零丢失成为架构设计的关键挑战。本文将…

Python学习笔记:错误和异常处理

1. 什么是错误和异常 在Python中&#xff0c;错误可以分为两类&#xff1a; 语法错误(Syntax Errors)&#xff1a;代码不符合Python语法规则异常(Exceptions)&#xff1a;语法正确的代码在运行时发生的错误 # 语法错误示例 print("Hello World" # 缺少右括号# 异…

为什么要进行行为验证,行为验证方式有哪些?

进行行为验证的主要目的是提高账户安全性、防范自动化攻击、增强用户身份确认精准度、优化用户体验。其中&#xff0c;提高账户安全性最为关键。行为验证能通过分析用户的行为模式&#xff0c;如操作习惯、设备使用特点等&#xff0c;识别出非正常或恶意活动&#xff0c;迅速采…

主流Java Redis客户端(Jedis、Lettuce、Redisson)差异对比

主流Java客户端对比&#xff1a;Jedis采用阻塞I/O&#xff0c;需连接池支持&#xff1b;Lettuce/Redisson基于Netty非阻塞I/O。Jedis轻量但并发能力弱&#xff0c;Lettuce支持10K并发且为SpringBoot默认&#xff0c;Redisson提供分布式功能但性能稍逊。 Redisson Lettuce 在 …