CAN通信的位定时与同步

news2025/1/18 11:55:40

位定时与同步

1.位时间

1.1相关基本概念

Pasted image 20230730180935.png|625

  • 1)系统时钟:记为 t c l k t_{clk} tclk

  • 2)CAN时钟周期:CAN时钟是由系统时钟分频而来的一个时间长度值,表示CAN控制器的工作时钟,实际上就是一个时间份额 t Q t_Q tQ。可以按照下面的公式计算:

    • 时间份额 t Q t_Q tQ:1. CAN控制器的一个时钟周期
      2. CAN控制器工作的最小时间单位
  • 3)BRP:叫做波特率预分频值(baud rate prescaler);
    由前面的图可知,上述三者存在以下的公式关系:
    t Q = t c l k × B R P t_Q=t_{clk}\times BRP tQ=tclk×BRP
    注意:可以在网络上看到一些博客把上述公式记为: t Q = t c l k × ( B R P + 1 ) t_Q=t_{clk}\times (BRP+1) tQ=tclk×(BRP+1)。实际上分频值是存在一个寄存器里面的,且从0开始,这里是取得BRP的值为该寄存器里面的实际值,也是对的,至于这两种写法谁更标准,可能需要去翻阅相关官方文档。

![[Pasted image 20230730182810.png|575]]

  • 4) 位时间:位时间表示一个二进制位在总线上传输时所需要的时间。如上图所示,在本文中,则指的是CAN通信的位时间。
    • 一个位可以分为四个时间段;
    • 每个段 又由若干个 t Q t_Q tQ构成,位时间大概包含8~25 t Q t_Q tQ
    • 波特率 = 1 位时间 波特率=\frac{1}{位时间} 波特率=位时间1

1.2 位时间分段

  • 1)同步段(Synchronization Segment)

    • 固定长度为一个 t Q t_Q tQ
    • 一个位的传输时从同步开始的;
    • 同步段用于同步总线上的各个节点,多个连接在总线上的单元通过此段实现时序调整,从而能同步进行接收和发送的工作,一个位的跳变沿在此时间段内;
  • 2)传播段(Propagation Segment)(记为 t P r o p t_{Prop} tProp)

    • 传播段时长可编程(1~8个时间份额 t Q t_Q tQ)。
    • 传播段用于补偿报文在总线和节点上传输时所产生的时间延迟;
    • 传播段时长 ≥ 2 × \ge 2 \times 2× 报文在总线和节点上传输时产生的时间延迟;

    传播延时
    ![[Pasted image 20230730202511.png|600]]
    其中,发送单元的输出延迟接收单元的输入延迟分别表示CAN收发器到CAN控制器之间的延时。
    在CAN网络上,两个节点之间进行通信,CAN报文首先从控制节点的控制器发出,经过CAN收发器发送到总线上,再通过一段距离的传输,到达接收节点的CAN收发器CAN控制器,最后接收节点发出ACK显性应答位,重复上述过程到达发送节点,可以看到一次单向传输的延迟包括发送单元的输出延迟,总线上信号传播延迟,接收单元的输入延迟。

  • 3)相位缓冲段1(Phase Buffer Segment1)和 相位缓冲段2(Phase Buffer Segment2)

    • 用于补偿总线上的边沿相位误差;
    • 用于补偿节点间的晶振误差;
    • 允许通过重同步延长PBS1或缩短PBS2从而补偿同步误差(因为时钟的偏差,传送延迟等,各单元会有同步误差);
    • PBS<PBS2
    • 在PBS1时间段的末端进行总线状态的采样;
    • 长度可编程:PBS1为18$t_Q$、PBS2为28 t Q t_Q tQ

    同步跳转宽度SJW(reSynchronization Jump Width)
    a. SJW是相位缓冲段PBS1和PBS2调整的最大值。
    b. SJW的值可以通过编程从1~4中取值。
    c. SJW的值 ≤ min ⁡ { P B 1 , P B 2 } \le\min\{PB1,PB2\} min{PB1,PB2}
    d. 由于PBS1>PBS2,加上前面b和c,进一步可以推导出:1 ≤ \le SJW的值 ≤ min ⁡ { P B S 1 , 4 } \le\min\{PBS1,4\} min{PBS1,4}
    问题:对于SJW的值,为什么只能取1~4,还是很疑惑。

  • 4)采样点(Sample Point)

    • 采样点一般位于相位缓冲段1之后,采样点是读取总线电平,并解释各位的值的一个时间点,采样点对CAN总线来说也非常重要,尤其在组网的时候,多个节点尽量保持同一个采样点,且最好在但不超过7/8位时间点上。

1.3 总线分段

CAN从总线采用的是一部串行通信,为了保证报文的接收节点能在正确的采样点采集到准确的点评,因此采用了总线同步的机制,CAN的同步则包括了硬同步重同步

同步规则:
a. 一个位时间内只允许一种同步方式;
b. 任何一个“隐性”到“显性”的跳变都可用于同步。

  • 1)硬同步
    ![[Pasted image 20230730205618.png|500]]
    硬同步发生在SOF位,所有接收节点调整各自当前位的同步,调整宽度不限,使其位于发送的SOF内。

    例子
    ![[Pasted image 20230730205848.png|625]]
    由上图可以看到,发送节点在发送SOF位时,SOF位的下降沿在此时位时间的同步段(SS段),此时接收节点发现自己当前位的同步段和发送节点的SOF的同步段并没有同步到同一时间(由上图可知接收节点SOF位的同步段要比发送节点的SOF位的同步段时间快6个 t Q t_Q tQ,为了使得发送节点和接收节点同步,接收节点会令自己的同步段向后调整6个 t Q t_Q tQ,使得自己的同步段与发送节点的同步段同步。

    从这个例子也可以看出,硬同步只是在SOF时起作用,并不能确保后续的CAN帧的位时序都是同步的。那么后续CAN帧的位时序同步都是怎么保证的呢,此时就需要引入重同步了。

  • 2)重同步
    重同步是指,接收节点检测出出了SOF位意外的其他位,通过调整位时序进行的同步调整。重同步会通过加长PBS1或者PBS2来调整同步,从而保证采样点的准确。

    例子1
    ![[Pasted image 20230730212656.png|575]]
    当发送端跳变沿落比接收端跳变沿晚两个 t Q t_Q tQ则接收端节点的PBS1应该延长两个 t Q t_Q tQ,则可使得发送端和接收端的采样点对齐。

    例子2
    ![[Pasted image 20230730212911.png|575]]
    当发送端跳变沿落比接收端跳变沿早两个 t Q t_Q tQ,则接收端节点的PBS2应缩短两个 t Q t_Q tQ,那么接收端的下一个位时间中,采样点可以提前两个 t Q t_Q tQ,从而使得发送和接收端的下一位采样点能够同步。

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

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

相关文章

【前端知识】React 基础巩固(四十二)——React Hooks的介绍

React 基础巩固(四十二)——React Hooks的介绍 一、为什么需要Hook? Hook 是 React 16.8 的新增特性&#xff0c;它可以让我们在不编写class的情况下使用state以及其他的React特性&#xff08;比如生命周期&#xff09;。 class组件 VS 函数式组件&#xff1a; class的优势…

C语言每日一题:9.《数据结构》链表的中间节点+链表的倒数第k个节点。

第一题&#xff1a; 题目链接&#xff1a; >思路一&#xff1a; 1.第一遍遍历链表&#xff0c;直到找到尾结束第一次遍历&#xff0c;遍历的过程中记录链表长度。定义长度为k。 2.确定中间是第几个节点&#xff0c;计算是k/21根据题目要求。 3.再一次去遍历我们的数组&…

iOS开发-格式化时间显示刚刚几分钟前几小时前等

iOS开发-格式化时间显示刚刚几分钟前几小时前等 在开发中经常遇到从服务端获取的时间戳&#xff0c;需要转换显示刚刚、几分钟前、几小时前、几天前、年月日等格式。 主要用到了NSCalendar、NSDateComponents这两个类 NSString *result nil;NSCalendarUnit components (NSC…

minGPT 代码详解(训练 GPT 模型执行两位数加法)

文章目录 1. MinGPT 项目简介2. 相关论文2.1 GPT-12.2 GPT-22.3 GPT-3 3. 代码详解3.1 项目结构3.2 GPT 模型代码详解3.2.1 Transformer block3.2.2 GPT 3.3 两位数加法实验3.3.1 数据集构造3.3.2 训练器3.3.3 模型参数设置3.3.4 训练过程 1. MinGPT 项目简介 MinGPT 是 GPT 模…

【Linux】关于Bad magic number in super-block 当尝试打开/dev/sda1 时找不到有效的文件系统超级块

每个区段与 superblock 的信息都可以使用 dumpe2fs 这个指令来查询的&#xff01; 不过可惜的是&#xff0c;我们的 CentOS 7 现在是以 xfs 为默认文件系统&#xff0c; 所以目前你的系统应该无法使用 dumpe2fs 去查询任何文件系统的。 因为目前两个版本系统的根目录使用的文…

Servlet文件的下载

第一种方法直接在前端使用超链接&#xff0c;也就是a标签 浏览器不能识别会直接下载&#xff08;像压缩文件不能直接下载&#xff09;&#xff0c;浏览器能识别&#xff0c;想要下载加一个download属性。download可以不写任何信息。 首先在web下建一个文件&#xff0c;放需要…

Vue 3:玩一下web前端技术(七)

前言 本章内容为VUE生命周期与相关技术讨论。 上一篇文章地址&#xff1a; Vue 3&#xff1a;玩一下web前端技术&#xff08;六&#xff09;_Lion King的博客-CSDN博客 下一篇文章地址&#xff1a; Vue 3&#xff1a;玩一下web前端技术&#xff08;八&#xff09;_Lion Ki…

9、测试Service组件和使用模拟组件辅助测试

测试Service组件和使用模拟组件辅助测试 测试Service组件 测试Service组件无需启动Web服务器&#xff0c;所以使用SpringBootTest(webEnvironment WebEnvironment.NONE)修饰测试用例类即可 &#xff08;用NONE表示不启动Web服务器&#xff09;。 Service组件其实就是一个普…

【002 操作系统】进程的状态及状态转换图?

一、进程的状态 1. 创建状态 2. 就绪状态 3. 运行状态 4. 阻塞状态 5. 终止状态 图源&#xff1a;进程、线程基础知识全家桶&#xff0c;30 张图一套带走_Linux_小林coding_InfoQ写作社区 NULL -> 创建状态&#xff1a;一个新进程被创建时的第一个状态&#xff1b; 创建状态…

python+django+mysql项目实践一(环境准备)

python项目实践 环境说明: Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 创建Pycharm项目 安装Django 在pycharm文件—设置进行安装 新建Django项目 注意项目创建目录 项目默认目录文件说明: __init__.py asgi.py 【异步接受网络…

Qt 5. QSerialPort串口收发

1. 代码 //ex2.cpp #include "ex2.h" #include "ui_ex2.h" #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo>int static cnt 0;Ex2::Ex2(QWidget *parent): QDialog(parent), ui(new Ui::Ex2) {ui->setupUi…

Win11的dev通道更新Build23493版本后启用Windows Copilot的解决办法

博客嘛&#xff0c;多偷懒少打字&#xff0c;先上图&#xff1a; 首先是微软宣布了对dev通道版本推送了Windows Copilot for Windows 11&#xff0c;但是相信像我这样的小白想体验又对win一窍不通的人应该也有不少&#xff0c;经历了一次重装&#xff0c;五次版本的回退再更新后…

opencv rtsp 硬件解码

讨论使用opencv的reader 硬件解码的方案有太多种&#xff0c;如果使用ffmpeg硬件解码是最方便的&#xff0c;不方便的是把解码过后的GPU 拉到 CPU 上&#xff0c;再使用opencv的Mat 从cpu 上上载到gpu上&#xff0c;是不是多了两个过程&#xff0c;应该是直接从GPU mat 直接去…

从Bean的生命周期分析Dubbo的源码

写作目的 Dubbo作为RPC中的经典落地实践&#xff0c;作为阿里内部目前还是大规模使用的基础框架&#xff0c;作为CRUD的底层。无论从什么角度来看简单的阅读一下Dubbo的源码还是有必要的。 前提&#xff1a;要了解Bean的生命周期 源码下载 gitee源码下载 源码分析 开启Dub…

《MySQL 实战 45 讲》课程学习笔记(四)

深入浅出索引 索引的出现其实就是为了提高数据查询的效率&#xff0c;就像书的目录一样。 索引的常见模型 哈希表 哈希表是一种以键 - 值&#xff08;key-value&#xff09;存储数据的结构&#xff0c;我们只要输入待查找的值即 key&#xff0c;就可以找到其对应的值即 Val…

时序分析:曲线分解

以下仅为博主个人观点&#xff0c;如有错误欢迎批评指正。 前言后记都挺重要建议还是看一下吧。 文章目录 前言经验模态分解EMDEEMDCEEMDAN 变分模态分解VMD 奇异谱分析SSA 后记 前言 本篇文章将会介绍常用曲线分解方法(经验模态分解及其变种&#xff0c;变分模态分解&#x…

集团企业网站建设开发

为集团提供一个互联网上的形象宣传和信息发布、收集的重要平台 利用最新的互联网动态数据库交互能力&#xff0c;建立一套在互联网上具有领先地位的集团网站&#xff0c;将集团和子公司网站做到有机的统一。集团网站不但要把集团的企业、产品等相关信息展示给我们的客户、合作…

RabbitMQ 教程 | 第2章 RabbitMQ 入门

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

1,复杂度和简单排序算法【p2-p3】

复杂度和简单排序算法 1&#xff0c;时间复杂度1.1选择排序1.2冒泡排序1.3异或运算1.3.1性质&#xff1a;1.3.2案例例1例2 1.4插入排序1.5二分法1.5.1在一个有序数组中&#xff0c;找某个数是否存在1.5.2在一个有序数组中&#xff0c;找>某个数最左侧的位置1.5.3局部最小值问…

linux系统编程重点复习--守护进程和线程

复习目标 说出守护进程的特点独立完成守护进程的创建独立实现多个线程的创建独立实现线程的退出和资源回收理解线程同步的思想 1 守护进程 1.1 守护进程介绍 Daemon(精灵)进程&#xff0c;是Linux中的后台服务进程&#xff0c;通常独立于控制终端并且周期性地执行某种任务或…