一文详解汽车电子CAN总线

news2024/11/29 20:34:26

0.什么是CAN总线

CAN总线(控制器区域网络)是一个中央网络系统,连接不同的电子控制单元(ECU)以及车辆中的其他设备。现在的汽车可以有100个ECU,因此CAN总线通信变得非常重要。

1.CAN总线流行的背景

  • 集中式:CAN总线系统允许对连接到网络的ECU进行集中控制,使控制ECU变得容易。

  • 鲁棒性:CAN总线协议具有内置的故障检测机制,因此它具有较好的鲁棒性。当检测到错误时,网络中的所有节点(ECU)都被告知此错误,所有节点丢弃此消息,以保证数据的一致性。CAN总线系统还具有抗电磁干扰的鲁棒性。

  • 低成本和高效率:CAN不需要复杂的布线,因为通信不是通过直接的模拟信号。相反,通过单个CAN接口进行通信,并且是一种非常有效的基于消息的协议。

  • 灵活性:由于CAN使用基于消息的协议,总线上的ECU没有关联的id,因此很容易添加或删除ECU。

  • 速度:数据的传输速度很重要。因此,根据电缆的长度,高速可以支持40 kbps到1 Mbps之间的数据传输速率。

2.CAN总线的历史

Robert Bosch GmbH于1983年开始开发CAN总线协议,但CAN总线协议于1986年在密歇根州底特律汽车工程师协会(SAE)会议上才予以正式发布。

1993年,国际标准化组织(ISO)发布了CAN标准ISO 11898,该标准后来被重组为两个部分:

  • ISO 11898-1应用于数据链路层

  • ISO 11898-2为CAN物理层,用于高速CAN

如上所示,从1983年开始至今,CAN发生了很多的发展变化。博世仍在致力于扩展CAN标准,并于2012年发布了CAN FD或CAN with Flexible Data-Rate。

3.CAN总线的应用

其最常见的应用是车载电子网络,因为CAN是为汽车使用而创建的。然而,多年来CAN已用于许多其他领域,如铁路,工业自动化,电梯,自动扶梯等。

说到汽车行业,由于现代汽车对安全性和舒适性的重视,大多数现代汽车都可以拥有100个电子控制单元(ECU)。ECU主要用于以下方面:

  • 发动机控制

  • 燃油喷射系统

  • 安全气囊、传动系统

  • 防抱死制动系统(ABS)

  • 电子动力转向,音响系统

  • 电动车窗、车门和座椅

  • 电动、混合动力汽车的电池管理系统

  • 其他领域

其中一些ECU与传感器和执行器交互以执行各种操作。下面是一些具体的例子。

  • 燃油喷射系统:ECU计算油门踏板角度,并通过CAN发送信号,以便其他ECU可以在需要时使用它。控制燃油喷射的ECU读取信号,进行计算,并向执行器发送燃油喷射信号。因此CAN总线系统在其中起着重要的作用。

  • 防抱死制动系统(ABS)    ECU通过CAN与传感器、执行器和其他ECU相互作用,从而实现有效制动,防止车轮在制动过程中锁死。

4.CAN总线层

想知道CAN协议是如何工作的?作为第一步,首先需了解CAN层次结构。ISO/OS参考模型指定了以下七个层。

标准的CAN总线实现,忽略了数据链路层与应用层之间的连接。

CAN总线物理层

这一层定义了电平、CAN总线上的信号方案、电缆阻抗等。以下是物理层的主要特点:

  • 双线平衡信令方案由CAN标准(ISO 11898部分)定义,又称高速CAN。

  • 基于ISO标准的低总线速度的双线平衡信令方案11898-3又称低速CAN。

  • 单线接地符合SAE J2411标准。

CAN总线拓扑

下面是一个示例CAN网络,其中节点由两条线连接,CAN High (CAN- h)和CAN Low (CAN- l)。CAN总线端接120欧姆电阻。总线两端的终端电阻是必要的,以消除总线上的任何电反射,并保证正确的直流电平。通常情况下,物理传输采用双绞线共地铜缆。

最大CAN总线速度

根据标准,最大CAN总线速度为1mbit /s,并通过CAN高速收发器实现。对于低速CAN,速度可达125 kbit/s。在标准模式下,单线最高可达50 kbit/s。

电缆长度

对于仲裁方案,信号的波前必须到达最远的节点并在采样之前返回,因此可以在1mbit /s的can速度下使用最大40m的长度。

5.CAN总线协议基础—CAN消息

由于CAN总线是一种广播类型的总线,因此CAN总线上的所有节点都可以获得所有的传输信息。因此,我们无法将特定消息发送到特定节点。

CAN使用短消息。具体来说,CAN有以下消息或帧类型:

  • 数据帧:包含要传输的节点数据

  • 远程帧:获取相应数据帧的传输信息

  • 错误帧:节点检测到错误时发送

  • 过载帧:节点过载时发送

CAN协议帧格式

数据帧

数据帧由以下部分组成:

标准CAN

扩展CAN

仲裁域

这决定了当两个节点争用总线时,哪个消息获得优先级。具体来说,

  • 包含了11位标识符和1位远程传输(RTR)位,该位用于数据帧起主导作用,称为标准CAN。

  • 29位标识符(包括两个隐性位:替代远程请求(SRR)和标识符扩展(IDE)以及RTR位),这被称为扩展CAN。

  • 具有0到8字节数据的数据字段循环冗余校验(CRC)字段,它包含一个用于错误校验的15位校验和.

  • CRC 分隔符

  • ACK位

  • ACK 分隔符

  • End-of-frame (EOF)

远程帧

远程帧获取相应数据帧的传输信息,它没有任何数据字段。因此,对于请求-响应类型的总线通信,远程帧是有用的。

错误帧

错误帧消息就是不符合CAN消息格式规则的消息帧。当节点检测到错误时,发送错误帧。错误帧包括

  • ERROR标志(6位相同的值)

  • 错误分隔符(8位隐性分隔符)

过载帧

顾名思义,当节点过于繁忙时传输过载帧。通常,不使用过载帧。

消息仲裁和优先级

仲裁是决定哪个控制器将使用总线的过程。当两个或多个控制器同时开始传输消息时,总线仲裁变得很重要。

如果发送隐性级别的节点找到了主导级别,那么它将停止仲裁并成为接收方。这个过程确保没有延迟到高优先级消息,发送较低优先级消息的节点将在主导消息结束后尝试重传6位时钟。

6.位时钟

CAN上的每个位至少分为4个quanta。quanta具体分为以下几种类型。

  • 同步段——用于时钟同步,是一个quanta

  • 传播段—— 补偿总线上的延迟

  • 相位段1——缩短以保持时钟同步

  • 相位段2——延长以保持时钟同步

时钟同步

CAN控制器可以通过一定的量程缩短或延长一个比特,从而调整片上总线时钟。这被称为同步跳跃宽度(SJW)。

7.错误处理

CAN协议有一个内置的错误处理机制,可以检测CAN消息中的错误,以便尽快检测到错误。

节点一旦检测到错误,就发送错误标志。其他节点一旦检测到错误标志就丢弃当前消息。

每个节点有两个错误计数器,具体而言

  • 传输错误计数器(TEC)

  • 接收错误计数器(REC)

通过这些错误计数器,CAN节点可以检测故障并限制错误。下面是CAN协议中提到的错误检测方法。

  • 一些监控

  • 位填充

  • 帧检查

  • 确认检查

  • 循环冗余校验

一些监控

比特监控确保传输数据的完整性。CAN总线上的每个发送器回读传输的数据,如果传输的数据和实际读取的数据存在差异,则会产生误码。

位填充

比特填充是节点在接收到连续的5个相同极性的比特后插入相反极性的比特的过程。接收器移除插入的额外比特。当CAN总线上出现超过5个连续的极性位时,会引发填充错误。

帧检查

有些部分在CAN消息中有固定的格式。如果节点检测到CRC分隔符、ACK分隔符、帧结束、间隔中的无效值,则引发表单错误信号。

确认检查

当节点接收到消息时,期望在消息的确认槽中发送一个主导位。如果ACK槽中缺少主导位,则会引发确认错误。当节点检测到消息中的CRC与它自己计算的CRC不同时,会引发循环冗余校验和(CRC)。

8.CAN总线更高层协议

CAN标准定义了物理层(硬件)和数据链路层(基本通信层)。需要一个更高层的协议来管理系统中的通信。有许多高层协议,其中一些最常用的是,卡诺J1939CAN通信协议MilCAN加拿大王国林克

9.CAN interface and CAN analyzer

想知道如何读取can总线数据?读取CAN总线需要查看硬件信号。需要CAN接口和CAN分析仪。CAN接口是将CAN总线连接到笔记本电脑或PC进行分析的硬件。它将有一个CAN收发器。CAN分析需要使用CAN分析仪软件,通过CAN接口采集CAN数据。

10.结论

本文回顾了CAN总线的历史/由来及应用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1145545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis快速上手篇七(集群-一台虚拟机六个节点)

​​​​​​http://t.csdnimg.cn/S0NpK与上篇六个虚拟机配置基本一样有不懂可以看上篇配置实例 集群搭建 根据上篇文章,本篇只着重于小方面的配置差别 配置集群一般不要设置密码 1.搭建一台虚拟机后再安装目录下新建文件夹 redis_cluster 2.在文件夹内创建六个文…

python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解

这篇文章主要介绍了python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 JDBC Request 这个 Sampler 可以向数据库…

C# 图解教程 第5版 —— 第11章 结构

文章目录 11.1 什么是结构11.2 结构是值类型11.3 对结构赋值11.4 构造函数和析构函数11.4.1 实例构造函数11.4.2 静态构造函数11.4.3 构造函数和析构函数小结 11.5 属性和字段初始化语句11.6 结构是密封的11.7 装箱和拆箱(*)11.8 结构作为返回值和参数11…

AK F.*ing leetcode 流浪计划之delaunay三角化

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 本期话题:给定二维点进行delaunay三角化 参考资料: 算法步骤与框架: https://oi-wiki.org//geometry/triangulation/ 空圆性深入解…

黑客技术(网络安全)—小白自学

目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类&am…

本来打算做功能测试的,但是发现playwright太好玩了,玩了一天,功能测试进度为空

本文是作者的自言自语://todo 未完待续 https://blog.csdn.net/lineuman 微软果然有大牛啊!有能人的公司总是令人敬佩。 playwright这种级别的工具简直就是核弹级别的。 当我开始使用playwright的时候,嘭的一下,我的世界炸了&…

ResNet(CVPR2016)

文章目录 AbstractIntroductionRelated WorkResidual RepresentationsShortcut Connections Deep Residual LearningResidual LearningIdentity Mapping by Shortcuts ExperimentConclusion 原文链接 Abstract 深层的神经网络更难训练,我们提出了一个残差学习框架&…

数据结构与算法--复杂度

目录 1.算法效率 1.1 如何衡量一个算法的好坏 1.2 算法的复杂度 1.3 复杂度在校招中的考察 2.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3常见时间复杂度计算举例 3.空间复杂度 4. 常见复杂度对比 1.算法效率 1.1 如何衡量一个算法的好坏 如何衡量一个算法的…

VirtualBox网络配置

1. 进入虚拟机所在系统的网络设置 2. 网卡1连接方式选择为仅主机网络,界面名称选择自带的网卡 3.自带网卡的配置方式,通常已经配置好了,保持dhcp开启即可 4.网卡2选择nat转换即可,无需添加其他配置 5.启动虚拟机所在系统&#xff…

数组OJ题汇总(一)

本专栏内容为:leetcode刷题专栏,记录了leetcode热门题目以及重难点题目的详细记录 💓博主csdn个人主页:小小unicorn ⏩专栏分类:Leetcode 🚚代码仓库:小小unicorn的代码仓库🚚 &…

MSQL系列(十) Mysql实战-Join驱动表和被驱动表区分

Mysql实战-Join驱动表和被驱动表区分 前面我们讲解了Mysql的查询连接Join的算法原理, 我发现大家都知道小表驱动大表,要让小表作为驱动表, 现在有2个问题 查询多表, 到底哪个是驱动表?哪个是被驱动表, 如何区分?索引如何优化,到底是加在驱动表上,还是被驱动表上? 今天我们…

[Leetcode] 0108. 将有序数组转换为二叉搜索树

108. 将有序数组转换为二叉搜索树 题目描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1&#xff1a…

【Android内存优化】内存泄露优化之强引用变弱引用完全详解

内存泄露背景 什么是内存泄露 内存空间使用完毕后无法被释放的现象,对于还保持着引用, 该内存不能再被分配使用,逻辑上却已经不会再用到的对象,垃圾回收器不会回收它们。 所以逻辑不再使用的对象,需要释放强引用,以便GC进行回收。 JVM 工作原理 JVM 垃圾回收原理,点…

vlc打开网络流(如rtmp),并查看媒体信息(如编码格式等编码信息)

打开vlc 选择媒体,打开网络串流 输入rtmp地址,点击播放 选择工具-编解码信息 可以查看节目的编码信息什么的

HBuilderX代码变量名称翻译插件

对于许多开发者而言,怎么规范的命名变量是一个非常痛苦的事,而在HBuilderX中有一个的插件可以快速的帮助你完成中文转带格式的变量名,格式可以选择小驼峰、大驼峰、下划线、常量、CSS类名等。 以下为添加此插件的步骤 1、打开插件安装 选择…

Android 类似淘宝的吸顶特效 NestedScrollView+RecycleView

运行图 布局的设计 要实现上面的效果需要搞定NestedScrollView和RecycleView的滑动冲突。有人要问RecycleView为何要滑动自动撑大不就好了么?这个问题其实对于有限的资源加载来说是很好的解决方案,但是如果涉及到的是图文结合的并且有大批量的数据的时候…

牛客题霸 -- HJ52 计算字符串的编辑距离

解题步骤&#xff1a; 参考代码&#xff1a; int main() {string s1;string s2;while (cin >> s1 >> s2){int ms1.size();int ns2.size();//增加空白字符&#xff0c;修正下标的映射关系s1 s1;s2 s2;//多卡一行&#xff0c;多开一列vector<vector<int&…

从零开始开发图床工具:使用 Gitee 和 Electron 实现上传、管理和分享

说在前面 平时写文章或写代码的时候&#xff0c;都少不了需要将本地图片转成在线图片链接&#xff0c;大家都是使用什么工具进行转换的呢&#xff1f;相信很多人都有自己的图床工具&#xff0c;今天来给大家介绍一下&#xff0c;怎么基于Gitee和Electron来开发一个便捷的图床工…

22、Python -- 创建对象和使用对象

目录 构造方法类的作用创建对象操作对象的实例变量操作对象的实例方法增加方法调用方法添加方法删除方法 方法与实例变量总结 构造方法 创建对象 操作实例变量 操作方法 构造方法 构造方法是一个特殊的实例方法&#xff0c;方法名为__init__ 创建对象时&#xff0c;自动调用构…

【手把手教vue会员管理系统】篇四之登录界面

一、登录界面路由配置 1.将view目录下的about、home组件删除&#xff0c;再新建login文件夹&#xff0c;在login文件夹下新建index.vue组件&#xff0c;并添加如下图所示的代码&#xff1a; 2.将App.vue更改成下图所示&#xff0c;删掉不必要的代码。 3.在router的index.js文件…