一文详解汽车电子CAN总线

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.mzph.cn/news/122252.shtml

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

相关文章

Android开发知识学习——HTTP基础

文章目录 学习资源来自:扔物线HTTPHTTP到底是什么HTTP的工作方式URL ->HTTP报文List itemHTTP的工作方式请求报文格式:Request响应报文格式:ResponseHTTP的请求方法状态码 HeaderHostContent-TypeContent-LengthTransfer: chunked (分块传…

el-table多选表格 实现默认选中 删除选中列表取消勾选等联动效果

实现效果如下&#xff1a; 代码如下&#xff1a; <template><div><el-tableref"multipleTable":data"tableData"tooltip-effect"dark"style"width: 100%"selection-change"handleSelectionChange"><…

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(下)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart吉祥物Dash 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/arti…

JVM常见的垃圾回收器(详细)

1、Young为年轻代出发的垃圾回收器。 2、Old为老触发的垃圾回收器。 3、连线代表的是垃圾回收器的组合。CMS 和Serial Old连线代表CMS一旦不行了&#xff0c;Serial Old上场。 首先了解一个概念&#xff1a;STW 1、什么是STW&#xff1f; STW是Stop-The-World缩写: 是在垃圾回…

即时编译器JIT

类编译加载执行过程 如下图所示&#xff0c;一个Java代码从编译到运行大抵会经历以下几个过程。具体每个过程笔者会在下文站展开讨论。 类编译 首先是类编译阶段&#xff0c;这个阶段会将Java文件变为class文件&#xff0c;这个class文件包含一个常量池和方法表集合&#xf…

【100天精通Python】Day72:Python可视化_一文掌握Seaborn库的使用《二》_分类数据可视化,线性模型和参数拟合的可视化,示例+代码

目录 1. 分类数据的可视化 1.1 类别散点图&#xff08;Categorical Scatter Plot&#xff09; 1.2 类别分布图&#xff08;Categorical Distribution Plot&#xff09; 1.3 类别估计图&#xff08;Categorical Estimate Plot&#xff09; 1.4 类别单变量图&#xff08;Cat…

深入了解 Elasticsearch 8.1 中的 Script 使用

一、什么是 Elasticsearch Script&#xff1f; Elasticsearch 中的 Script 是一种灵活的方式&#xff0c;允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 二、支持的脚本语言有哪些 支持多种脚本…

《HelloGitHub》第 91 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

nodejs+vue+elementui+express外卖数据分析python

在上述需求分析的基础上&#xff0c;通过深入研究&#xff0c;将系统使用人员划分为信息采集编辑、信息维护编辑、信息发布编辑三个角色。 本论文的研究目的是为了给采编者提供一套完善、高效的智能信息收集解决方案&#xff0c;并利用一系列的程序设计与开发&#xff0c;为采…

公司电脑禁用U盘的方法

公司电脑禁用U盘的方法 安企神U盘管理系统下载使用 在这个复杂的数据时代&#xff0c;保护公司数据的安全性至关重要。其中&#xff0c;防止未经授权的数据泄露是其中的一个关键环节。U盘作为一种常用的数据传输工具&#xff0c;也成为了潜在的安全风险。因此&#xff0c;公司…

NSS [鹤城杯 2021]EasyP

NSS [鹤城杯 2021]EasyP 直接给了源码 <?php include utils.php;if (isset($_POST[guess])) {$guess (string) $_POST[guess];if ($guess $secret) {$message Congratulations! The flag is: . $flag;} else {$message Wrong. Try Again;} }if (preg_match(/utils\.p…

【MATLAB源码-第58期】基于蛇优化算法(SO)和粒子群优化算法(PSO)的栅格地图路径规划最短路径和适应度曲线对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 粒子群算法 (Particle Swarm Optimization, PSO) 1. 算法概述 粒子群算法是一种基于群体智能的优化算法&#xff0c;模拟鸟群觅食的行为。算法中的每个粒子代表问题的一个可能解&#xff0c;并且具有位置和速度两个属性。粒…

Vue3:将表格数据下载为excel文件

需求 将表格数据或者其他形式的数据下载为excel文件 技术栈 Vue3、ElementPlus、 实现 1、安装相关的库 下载xlsx 和 file-saver 库 npm install -S file-saver npm install -S xlsx引入XLSX库和FileSaver库 import XLSX from xlsx; import FileSaver from file-saver;…

vue3响应式对象:ref和reactive

ref() <template><button click"changeMsg">改变信息</button><div>{{ msg }}</div><div>{{ man }}</div> </template><script lang"ts"> import { defineComponent,ref,Ref } from vueexport def…

【SEC 学习】美化 Linux 终端

一、步骤 1. 进入 /etc/bash.bashrc vim /etc/bash.bashrc2. 重新加载 bash.bashrc source /etc/bash.bashrc二、各参数指标 符号含义\u当前用户的账号名称\h仅取主机的第一个名字&#xff0c;如上例&#xff0c;则为fc4&#xff0c;.linux则被省略\H完整的主机名称。例如&…

C++STL---Vector、List所要掌握的基本知识

绪论​ 拼着一切代价&#xff0c;奔你的前程。 ——巴尔扎克&#xff1b;本章主要围绕vector和list的使用&#xff0c;以及容器底层迭代器失效问题&#xff0c;同时会有对原码的分析和模拟实现其底层类函数。​​​​话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑…

Mac电脑配置Dart编程环境

1.安装Dart SDK 官网地址&#xff1a;https://dart.dev/get-dart $brew tap dart-lang/dart$brew install dart 安装后&#xff0c;用命令检测一下是否安装正常。 $brew info dart 2.VS Code配置Dart环境 1).安装VS Code 官网地址&#xff1a;https://code.visualstudio.c…

Python环境下LaTeX数学公式转图像方案调研与探讨

目录 引言方案一&#xff1a;基于LaTeX环境方案二&#xff1a;基于KaTeX(推荐) 方案三&#xff1a;基于Matplotlib写在最后 引言 近来&#xff0c;涉及到一些公式识别的项目&#xff0c;输入是公式的图像&#xff0c;输出是LaTeX格式的数学公式字符串。 这类项目一般都采用深…

pgsql 分组查询,每组取10条

需求&#xff1a; 按照表的字段分组&#xff0c;然后每组取10条结果&#xff0c;返回即可 sql 如下&#xff1a; SELECT* FROM (SELECT chk_id,feature_id,task_id, ROW_NUMBER () OVER (PARTITION BY chk_id ORDER BY chk_id) AS row_num FROM ics_check_report WHERE task…

Ubuntu 23.10(Mantic Minotaur)正式发布,支持Linux 6.5和GNOME 45

导读Canonical 近日正式发布了 Ubuntu 23.10&#xff08;Mantic Minotaur&#xff09;操作系统&#xff0c;其中包含一些最新的 GNU/Linux 技术、改进的硬件支持以及许多其他变化。 Ubuntu 23.10 采用了最新的 Linux 6.5 内核系列&#xff0c;并为 Ubuntu 桌面和服务器增强了 z…