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

五、CAN总线

目录

一、基础知识

1、can介绍

2、CAN硬件电路

3、CAN电平标准

4、CAN收发器芯片介绍

5、CAN帧格式

① CAN帧种类

② CAN数据帧

③ CAN遥控帧​编辑

④ 位填充

⑤ 波形实例

6、接收方数据采样

① 接收方数据采样遇到的问题

② 位时序

③ 硬同步

④ 再同步

⑤ 波特率计算


一、基础知识

1、can介绍

CAN(Controller Area Network),是ISO国际标准化的串行通信协议

为了满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求。

低速CAN(ISO11519)通信速率10~125Kbps,总线长度可达1000米。

高速CAN,经典CAN,(ISO11898)通信速率125Kbps~1Mbps,总线长度≤40米。

CAN FD 通信速率可达5Mbps,并且兼容经典CAN,遵循ISO 11898-1 做数据收发。

主流通信协议对比

UART

IIC

SPI

2、CAN硬件电路

  • 每个设备通过CAN收发器挂载在CAN总线网络上
  • CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连
  • 高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻
  • 低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻

终端电阻(120Ω),用于阻抗匹配,以减少回波反射。

CAN总线由两根线( CANL 和 CANH )组成,允许挂载多个设备节点(低速CAN:20 高速CAN:30)。

3、CAN电平标准

  • CAN总线采用差分信号,即两线电压差(VCAN_H-VCAN_L)传输数据位
  • 高速CAN规定:

            电压差为0V时表示逻辑1(隐性电平)
            电压差为2V时表示逻辑0(显性电平)

  • 低速CAN规定:

            电压差为-1.5V时表示逻辑1(隐性电平)
            电压差为3V时表示逻辑0(显性电平)

  • 显性电平具有优先权。发送方通过使总线电平发生变化,将消息发送给接收方。

4、CAN收发器芯片介绍

        CAN收发器芯片:TJA1050、TJA1042、SIT1050T。

                                     战舰版开发板使用SIT1050T,支持高速CAN,传输速率可达1Mbps。

        D : CAN发送引脚

        R : CAN接收引脚

        Vref : 参考电压输出,可以用

        CANL : 低电位CAN电压输入输出端

        CANH : 高电位CAN电压输入输出端

        RS : 高速 / 静音模式选择(低电平为高速)

5、CAN帧格式

① CAN帧种类

        CAN总线以“帧”形式进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧,其中数据帧最为常用。

帧类型

帧作用

数据帧(Data Frame

用于发送单元向接收单元传输数据的帧

遥控帧(Remote Frame

用于接收单元向具有相同ID的发送单元请求数据的帧

错误帧(Error Frame

用于当检测出错误时向其他单元通知错误的帧

过载帧(Overload Frame

用于接收单元通知其尚未做好接收准备的帧

间隔帧(Inter Frame Space

用于将数据帧 及遥控帧与前面的帧分离开来的帧

② CAN数据帧

        空闲状态:隐形1

        帧起始:表示数据帧开始的段,显性信号。

        仲裁段:表示该帧优先级的段,优先级。

                       其中ID,区分数据的功能。RTR,区分广播式、数据帧(只写),请求式、遥控帧(读取)。

        控制段:DLC,数据段的字节数是可调的。

                      保留位:R0,R1(IDE),IDE表示区分标准格式和扩展格式。

        CRC段:判断数据是否正确传输。发送方将前面,SOF到Data计算校验码,将校验码附在CRC中。接收方收到数据后,也会计算校验码,判断校验码是否一致。

                     CRC界定符:① 隔离CRC和ACK。② 在ACK槽之前,发送方释放总线(发生隐性1就是释放总线),将控制权给接收方发送应答信号。

        ACK段:判断是否有接受方。

                     ACK界定符:接收方释放总线,交出控制权。

        帧结束:表示数据帧结束的段,7个隐性信号。

        注意:发送方每发送一位,接收方就立刻收到这一位。

③ CAN遥控帧

        遥控帧无数据段,RTR为隐性电平1,其他部分与数据帧相同。

        当某个设备发送遥控帧时,代表它想请求这个数据。

        请求方发出遥控帧,遥控帧的ID表示要请求的数据。

        响应请求的一方,通过相同ID的数据帧反馈数据。

        当请求和反馈数据同时发生时,数据帧拥有更高的优先级。

④ 位填充

        位填充规则:发送方每发送5个相同电平后,自动追加一个相反电平的填充位。

                              接收方检测到填充位时,会自动移除填充位,恢复原始数据。

        例如:

                  即将发送:    100000110       10000011110    0111111111110
                  实际发送:    1000001110       1000001111100    011111011111010
                  实际接收:    1000001110       1000001111100    011111011111010
                  移除填充后: 100000110       10000011110    0111111111110

        位填充作用:

                  增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握数据采样时机。

                  将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性。

                  保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲。

⑤ 波形实例

  • 标准数据帧,报文ID为0x555,数据长度1字节,数据内容为0xAA

  • 标准数据帧,报文ID为0x666,数据长度2字节,数据内容为0x12, 0x34

  • 扩展数据帧,报文ID为0x0789ABCD,数据长度1字节,数据内容为0x56

  • 标准遥控帧,报文ID为0x088,数据长度1字节,无数据内容

6、接收方数据采样

  • CAN总线没有时钟线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长
  • 发送方约定的位时长每隔固定时间输出一个数据位。
  • 接收方约定的位时长每隔固定时间采样总线的电平,输入一个数据位。
  • 理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近。

  • 数据位的位时长=1/波特率。

① 接收方数据采样遇到的问题

  • 接收方以约定的位时长进行采样,但是采样点没有对齐数据位中心附近

  • 接收方刚开始采样正确,但是时钟有误差,随着误差积累,采样点逐渐偏离

 ② 位时序

        为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成。

  • SS = 1Tq
  • PTS = 1~8Tq
  • PBS1 = 1~8Tq
  • PBS2 = 2~8Tq

 ③ 硬同步

  • 每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到SOF的下降沿时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步。(接收方将自己的SS段与发送方调节为一致。)
  • 硬同步只在帧的第一个下降沿(SOF下降沿)有效。
  • 经过硬同步后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近。

位时序周期

 ④ 再同步

  • 若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据再同步补偿宽度值(SJW)通过加长PBS1段,或缩短PBS2段,以调整同步。
  • 再同步可以发生在第一个下降沿之后的每个数据位跳变边沿。
  • SJW=1~4Tq。SJW为最大值。

⑤ 波特率计算

波特率 = 1 / 一个数据位的时长 = 1 / (TSS + TPTS + TPBS1 + TPBS2)

相关文章:

五、CAN总线

目录 一、基础知识 1、can介绍 2、CAN硬件电路 3、CAN电平标准 4、CAN收发器芯片介绍 5、CAN帧格式 ① CAN帧种类 ② CAN数据帧 ③ CAN遥控帧​编辑 ④ 位填充 ⑤ 波形实例 6、接收方数据采样 ① 接收方数据采样遇到的问题 ② 位时序 ③ 硬同步 ④ 再同步 ⑤ 波…...

Linux:终端(terminal)与终端管理器(agetty)

终端的设备文件 打开/dev目录可以发现其中有许多字符设备文件,例如对于我的RedHat操作系统,拥有tty0到tty59,它们是操作系统提供的终端设备。对于tty1-tty12使用ctrlaltF*可以进行快捷切换,下面的命令可以进行通用切换。 sudo ch…...

钉钉与MySQL对接集成获取部门列表2.0打通EXECUTE语句

钉钉与MySQL对接集成获取部门列表2.0打通EXECUTE语句 接入系统:钉钉 钉钉是阿里巴巴集团打造的企业级智能移动办公平台,是数字经济时代的企业组织协同办公和应用开发平台。钉钉将IM即时沟通、钉钉文档、钉闪会、钉盘、Teambition、OA审批、智能人事、钉工…...

微信小程序点赞动画特效实现

这里提供两种实现点赞动画特效的方法&#xff1a; 方法一&#xff1a;使用 CSS 动画 wxml 文件: <view class"like-container"><image src"{{isLiked ? likedImg : unlikedImg}}" class"like-icon {{isLiked ? liked : }}" bindta…...

Day25笔记-普通文件读写with上下文二进制文件csv文件

一、文件读写【重点掌握】 常见文件的读写分类&#xff1a; ​ 1.普通文件文件,如txt&#xff0c;py&#xff0c;html等 ​ 2.二进制文件&#xff0c;如图片&#xff0c;音频&#xff0c;视频&#xff0c;压缩包等 ​ 3.csv文件&#xff0c;如csv,需要借助于系统模块csv ​ 4.对…...

MySQL安装教程

MySQL安装教程 如果需要删除原有mysql&#xff0c;然后安装过新的&#xff0c;可以参照如何彻底卸载旧mysql重装测试 1. 准备资源 mysql官网直达&#xff1a;https://dev.mysql.com/downloads/mysql/ CADN&#xff1a;https://download.csdn.net/download/luocong321/89592962 …...

【Windows】快速帮你解决如何找到 Windows 上的 .condarc 文件

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...

『正版软件』XYplorer 专业的 Windows 文件管理工具软件

在数字化时代&#xff0c;我们每天都在与各种文件打交道。无论是工作文档、个人照片还是多媒体资料&#xff0c;管理这些文件的效率直接关系到我们的工作效率和生活体验。今天&#xff0c;我要向大家推荐一款功能强大、操作简便的文件管理软件 —— XYplorer。 XYplorer&#x…...

“吉林一号”宽幅02B系列卫星

离轴四反光学成像系统 1.光学系统参数&#xff1a; 焦距&#xff1a;77.5mm&#xff1b; F/#&#xff1a;7.4&#xff1b; 视场&#xff1a;≥56゜&#xff1b; 光谱范围&#xff1a;400nm&#xff5e;1000nm。 2.说明&#xff1a; 光学系统采用离轴全反射式结构&#xff0c;整…...

我的AI工具箱Tauri版-FasterWhisper音频转文本

本教程基于自研的AI工具箱Tauri版进行FasterWhisper音频转文本服务。 FasterWhisper音频转文本服务 是自研AI工具箱Tauri版中的一款模块&#xff0c;专门用于将音频或视频中的语音内容自动转化为文本或字幕。通过简单的配置&#xff0c;该工具能够批量处理大量音频或视频文件&…...

Java后端中的延迟队列实现:使用Redis与RabbitMQ的不同策略

Java后端中的延迟队列实现&#xff1a;使用Redis与RabbitMQ的不同策略 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在后端开发中&#xff0c;延迟队列&#xff08;Delayed Queue&#xff09…...

Linux中使用cp命令的 -f 选项,但还是提醒覆盖的问题

问题&#xff1a; linux 在执行cp的命令的时候&#xff0c;就算是执行 cp -f 也还是会提醒是否要进行替换。 问题原因&#xff1a; 查看别名&#xff0c;alias命令&#xff0c;看到cp的别名为cp -i&#xff0c;那就是说cp本身就是自带覆盖提醒&#xff0c;就算我们加上-f 的…...

互联网技术的持续演进:从现在到未来

互联网技术的持续演进&#xff1a;从现在到未来 在过去的十年里&#xff0c;互联网技术发生了飞速变化。无论是大数据、人工智能&#xff0c;还是5G网络和物联网&#xff0c;每一种技术的突破都在改变我们的生活方式和工作模式。作为现代社会的核心驱动力&#xff0c;互联网技…...

vscode安装ESLint与Vetur插件后自动修复代码不生效

vscode安装ESLint与Vetur插件后自动修复代码不生效 1、安装ESLint 和 Vuter 2、运行结果 2.1、代码保存时代码中的分号;能被检测出来,但是不会自动修复 2.2、手动运行ESLint 修复命令(在终端中执行 npx eslint . --fix)可以修复问题 3、解决办法 在.vscode目录下setti…...

2848、与车相交的点

2848、[简单] 与车相交的点 1、题目描述 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i&#xff0c;nums[i] [starti, endi] &#xff0c;其中 starti 是第 i 辆车的起点&#xff0c;endi 是第 i 辆车的终点。 返回数轴上被车 任意…...

基于k8s手动部署rabbitmq集群(Manually Deploying RabbitMQ Cluster Based on k8s)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...

mybatis 配置文件完成增删改查(四) :多条件 动态sql查询

文章目录 就是你在接收数据时&#xff0c;有的查询条件不写&#xff0c;也能从查到相应的stauts也可能为空恒等式标签 代替where关键字 就是你在接收数据时&#xff0c;有的查询条件不写&#xff0c;也能从查到相应的 注意是写字段名 还是 属性名 companyName不写也能查出满足…...

先楫HPM6750 Windows下VSCode开发环境配置

用的是EVKmini&#xff0c;ft2232作为调试器jtag接口调试 启动start_gui.exe 以hello_world为例&#xff0c;更改一下build path&#xff0c;可以generate并使用gcc compile 最后会得到这些 点击start_gui里面的命令行&#xff0c;用命令行启动vscode 新建.vscode文件夹&…...

【JavaScript】LeetCode:41-45

文章目录 41 排序链表42 合并k个升序链表43 LRU缓存44 二叉树的中序遍历45 二叉树的最大深度 41 排序链表 递归 归并排序找到链表中心点&#xff0c;从中心点将链表一分为二。奇数个节点找中心点&#xff0c;偶数个节点找中心左边的点作为中心点。快慢指针找中心点&#xff0c…...

数据结构(Day18)

一、周学习内容 1、9.18 数据结构&#xff08;Day15&#xff09;-CSDN博客 2、9.19 数据结构&#xff08;Day16&#xff09;-CSDN博客 3、9.20 链表 目的 插入删除不需要移动任何节点&#xff08;元素&#xff09;。 不需要预估存储空间大小&#xff0c;长度动态增长或减小。…...

error: ‘InsertAtTop‘ was not declared in this scope

Qt编译错误记录&#xff1a; 报错&#xff1a;error: ‘InsertAtTop’ was not declared in this scope ui->comboBoxJob->setInsertPolicy(InsertAtTop);这行代码在Qt中编译就会报这个错误&#xff0c;原因是输入参数需要加类名限定&#xff0c;改为&#xff1a; ui-…...

MySQL缓冲池详解

Buffer Pool 本文参考开源项目&#xff1a;小林coding在线文档&#xff1b; 01-缓冲池概述 ​ 在MySQL查询数据的时候&#xff0c;是通过存储引擎去磁盘做IO来获取数据库中的数据&#xff0c;这样每次查询一条数据都要去做一次或者多次磁盘的IO&#xff0c;无疑是非常慢的。…...

【我的 PWN 学习手札】tcache stash with fastbin double free —— tcache key 绕过

参考看雪课程&#xff1a;PWN 探索篇 前言 tcache key 的引入使得 tcache dup 利用出现了困难。除了简单利用 UAF 覆写 key 或者House Of Karui 之外&#xff0c;还可以利用 ptmalloc 中的其他机制进行绕过。 一、Tcache Stash with Fastbin Double Free 之前是 double free …...

How can I stream a response from LangChain‘s OpenAI using Flask API?

题意&#xff1a;怎样在 Flask API 中使用 LangChain 的 OpenAI 模型流式传输响应 问题背景&#xff1a; I am using Python Flask app for chat over data. In the console I am getting streamable response directly from the OpenAI since I can enable streming with a f…...

什么是慢充优惠话费充值api?如何选择平台

一、话费充值api的定义 话费充值api是一种能够让开发者将话费充值功能集成到自己的平台的接口。通过接入话费充值api接口&#xff0c;就能够实现话费充值平台的搭建&#xff0c;从而为用户提供话费充值服务&#xff0c;这一接口主要适用于对话费充值有长期稳定需求的企业或者商…...

【MySQL 03】表的操作

目录 1.在数据库内创建表 2.表的查询 3.表的插入 往数据库中插入数据 4.表的修改 5.删除表 1.在数据库内创建表 create table 表名(字段1 字段1类型); 这样我们就创建好了一张表&#xff0c;我们可以进入hellosql目录下进行查看&#xff1a;所以在数据库内建立表&#xf…...

3、论文阅读:EnYOLO:一种基于图像增强的水下目标区域自适应实时检测框架

图像增强和目标检测的结合 前言介绍相关工作UIE 水下图像增强UOD 水下目标检测UDA 水下域自适应方法介绍训练过程推理过程网络概述多阶段训练策略Burn-In Stage(预热阶段)Mutual-Learning Stage(相互学习阶段)Domain-Adaptation Stage(领域适应阶段)多阶段训练策略算法介…...

MYSQL面试知识点手册

第一部分&#xff1a;MySQL 基础知识 1.1 MySQL 简介 MySQL 是世界上最流行的开源关系型数据库管理系统之一&#xff0c;它以性能卓越、稳定可靠和易用性而闻名。MySQL 主要应用在 Web 开发、大型互联网公司、企业级应用等场景&#xff0c;且广泛用于构建高并发、高可用的数据…...

排序算法的分析和应用

自己设计一个长度不小于10的乱序数组&#xff0c;用希尔排序&#xff0c;自己设定希尔排序参数 画出每一轮希尔排序的状态 自己设计一个长度不小于10的乱序数组&#xff0c;用堆排序&#xff0c;最终要生成升序数组&#xff0c;画出建堆后的状态 画出每一轮堆排序的状态 自…...

iptables限制网速

1、使用hashlimit来限速 #从eth0网卡进入INPUT链数据&#xff0c;使用模块hashlimit 限制网速为100kb/s或2mb/s,超过限制的数据包会被DROP。OUTPUT链同理&#xff0c;mode为srcip&#xff0c;有4个mode选项: srcip&#xff08;默认匹配每个源地址IP&#xff0c;配置指定源地址…...