CAN通信的位定时与同步

位定时与同步

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 S 1 , P B S 2 } \le\min\{PBS1,PBS2\} min{PBS1,PBS2}
    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内。

    例子
    在这里插入图片描述
    当总线出现帧起始信号时,某节点检测到帧起始信号不在节点内部时序的SS段范围,所以判断它自己的内部时序与总线不同步,因而这个状态的采样点采集得得数据是不正确的。所以节点以硬同步的方式调整,把字节的为时序中的SS段平移至总线下出现下降沿的部分,获得同步,同步后采样点就可以采集得到正确的数据了。

    从这个例子也可以看出,硬同步只是在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.mzph.cn/news/15275.shtml

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

相关文章

网络编程套接字

网络编程套接字 预备知识理解源IP地址和目的IP地址认识端口号理解 "端口号" 和 "进程ID"理解源端口号和目的端口号认识TCP协议认识UDP协议网络字节序 socket编程接口socket 常见APIsockaddr结构 简单的UDP网络程序UDP通用服务端udp服务端初始化udp服务端启…

自动化运维工具——Ansible

自动化运维工具——Ansible 一、Ansible概述二、ansible 环境安装部署1.管理端安装 ansible2.ansible 目录结构3.配置主机清单4.配置密钥对验证 三、ansible 命令行模块1.command 模块2.shell 模块3.cron 模块4.user 模块5.group 模块6.copy 模块7.file 模块8.hostname 模块9&a…

自定义一个仿拼多多地址选择器

前言 做了一个仿拼多多的地址选择器&#xff0c;但是与拼多多实现方法有些出入&#xff0c;大体效果是差不多的。废话不多说&#xff0c;先上一张效果动图&#xff1a; 开始 先说说本文的一些概念。地区级别&#xff1a;就是比如省级&#xff0c;市级&#xff0c;县级&#x…

map,set的封装(基于改造红黑树)

目录 引言 1.迭代器 2.map的[]重载 3.KeyOfValue模板参数 4.整体代码展示 //改造后的红黑树代码 #include <iostream> using namespace std;enum Colour {RED 0,BLACK, };//为了实现map与set封装使用同一个模板红黑树&#xff0c;前者的value是pair&#xff0c;后者…

WebAgent-基于大型语言模型的代理程序

大型语言模型&#xff08;LLM&#xff09;可以解决多种自然语言任务&#xff0c;例如算术、常识、逻辑推理、问答、文本生成、交互式决策任务。最近&#xff0c;LLM在自主网络导航方面也取得了巨大成功&#xff0c;代理程序助HTML理解和多步推理的能力&#xff0c;通过控制计算…

Spring——更快捷的存储 / 获取Bean对象

文章目录 前言一、存储 Bean 对象类注解为什么有五个类注解使用类注解存储对象配置扫描路径(重中之重)添加注解存储 Bean 对象 方法注解配置扫描路径(重中之重)使用方法注解存储对象 二、获取 Bean 对象Autowired属性注入Setter注入构造方法注入 Resource 总结 前言 本人是一个…

【雕爷学编程】MicroPython动手做(20)——掌控板之三轴加速度6

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

htmlCSS-----定位

目录 前言 定位 分类和取值 定位的取值 1.相对定位 2.绝对位置 元素居中操作 3.固定定位 前言 今天我们来学习html&CSS中的元素的定位&#xff0c;通过元素的定位我们可以去更好的将盒子放到我们想要的位置&#xff0c;下面就一起来看看吧&#xff01; 定位 定位posi…

rust 闭包函数

函数有自己的类型&#xff0c;可以像使用基础类型一样使用函数&#xff0c;包括将函数保存在变量中、保存在 vec 中、声明在结构体成员字段中。闭包函数也是函数&#xff0c;也有自己的类型定义。不过&#xff0c;函数实际上是指针类型&#xff0c;在 rust 所有权中属于借用的关…

Tomcat修改端口号

网上的教程都比较老&#xff0c;今天用tomcat9.0记录一下 conf文件夹下server.xml文件 刚开始改了打红叉的地方&#xff0c;发现没用&#xff0c;改了上面那行

SpringBoot百货超市商城系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBoot框架开发的百货超市系统。首先&#xff0c;这是一个很适合SpringBoot初学者学习的项目&#xff0c;代…

Beyond Compare和git merge、git rebase

文章目录 各个分支线将dev1 rebase进 dev2将dev1 merge进dev2 各个分支线 将dev1 rebase进 dev2 gitTest (dev2)]$ git rebase dev1local: 是rebase的分支dev1remote&#xff1a;是当前的分支dev2base&#xff1a;两个分支的最近一个父节点 将dev1 merge进dev2 gitTest (dev…

json-server创建静态服务器2

上次写的 nodejs创建静态服务器 这次再来个v2.0 利用json-server很方便就可以实现。 vscode打开文件夹&#xff0c;文件夹所在终端&#xff1a; json-server.cmd --watch db.json 这里视频教程是没有上述命令标红的&#xff0c;但是会报错&#xff0c;具体不详&#xff0c…

uniapp小程序自定义loding,通过状态管理配置全局使用

一、在项目中创建loding组件 在uniapp的components文件夹下创建loding组件&#xff0c;如图&#xff1a; 示例代码&#xff1a; <template><view class"loginLoading"><image src"../../static/loading.gif" class"loading-img&q…

SpringBoot环境标识设置及nacos匹配配置

本地环境标识设置 本地父类maven配置 可以看到相关的分类&#xff0c;设置环境标识主要需要用到profiles; <profiles><profile><id>dev</id><properties><!-- 环境标识&#xff0c;需要与配置文件的名称相对应 --><profiles.active&…

用html+javascript打造公文一键排版系统9:主送机关排版

一、主送机关的规定 公文一般在标题和正文之间还有主送机关&#xff0c;相关规定为&#xff1a; 主送机关 编排于标题下空一行位置&#xff0c;居左顶格&#xff0c;回行时仍顶格&#xff0c;最后一个机关名称后标全角冒号。如主送机关名称过多导致公文首页不能显示正文时&…

c刷题(一)

目录 1.输出100以内3的倍数 2.将3个数从大到小输出 3.打印100~200素数 方法一 方法二 4.显示printf的返回值 最大公约数 试除法 辗转相除法 九九乘法表 求十个数的最大值 1.输出100以内3的倍数 法一&#xff1a; int n 0; while (n*3 < 100){printf("%d &q…

基于物联网、视频监控与AI视觉技术的智慧电厂项目智能化改造方案

一、项目背景 现阶段&#xff0c;电力行业很多企业都在部署摄像头对电力巡检现场状况进行远程监控&#xff0c;但是存在人工查看费时、疲劳、出现问题无法第一时间发现等管理弊端&#xff0c;而且安全事件主要依靠人工经验判断分析、管控&#xff0c;效率十分低下。 为解决上述…

基于双 STM32+FPGA 的桌面数控车床控制系统设计

桌 面数控 设 备 对 小 尺寸零件加工在成 本 、 功 耗 和 占 地 面 积等方 面有 着 巨 大 优 势 。 桌 面数控 设 备 大致 有 3 种 实 现 方 案 : 第 一种 为 微 型 机 床搭 配 传统 数控系 统 &#xff0c; 但 是 桌 面数控 设 备 对 成 本 敏感 ; 第二 种 为 基 于 PC…

使用Flutter的image_picker插件实现设备的相册的访问和拍照

文章目录 需求描述Flutter插件image_picker的介绍使用步骤1、添加依赖2、导入 例子完整的代码效果 总结 需求描述 在应用开发时&#xff0c;我们有很多场景要使用到更换图片的功能&#xff0c;即将原本的图像替换设置成其他的图像&#xff0c;从设备的相册或相机中选择图片或拍…