关于CAN总线的位时间/同步段/传播时间段/相位缓冲段/采样点

2023-05-16

根据 CAN 规范的要求,总线上的所有器件都必须使用相同的比特率才能完成通信。然而,并非所有器件都要求具有相同的主振荡器时钟频率。所以,CAN 总线能够在一定的范围内容忍总线上 CAN 节点的通信波特率的偏差,这种机能使得 CAN 总线有很强的容错性,同时也降低了对每个节点的振荡器精度。所以,实际上,CAN 总线的波特率是一个范围。举个例子,假设定义的波特率是 250KB/s,但是实际上根据对寄存器的设置,实际的波特率可能为 200-300KB/s(具体值取决于寄存器的设置)。

首先了解一下 CAN 总线系统中的两个时钟:晶振时钟周期和CAN时钟周期:

  • 晶振时钟周期:是由单片机振荡器的晶振频率决定的,指的是振荡器每震荡一次所消耗的时间长度,也是整个系统中最小的时间单位;
  • CAN时钟周期:CAN时钟是由系统时钟分频而来的一个时间长度值,实际上就是一个时间份额TQ。计算公式:CAN时钟周期 = 2 × 晶振时钟周期 × BRP,其中BRP叫做波特率预分频值(baudrate prescaler);

在这里插入图片描述
如上图所述,根据CAN规范,每一个CAN位时间 (Nominal Bit Time,NBT)被分成4个时间段:同步段(Sync_Seg)、传播时间段(Prop_Seg)、相位缓冲段1(Phase_Seg1)和相位缓冲段2(Phase_Seg2),如下图所示:
在这里插入图片描述
而采样点则设计在相位缓冲段1和相位缓冲段2之间。如下图所示:
在这里插入图片描述
如果用公式来表示,就是:
在这里插入图片描述
上述每个段又由若干个时间份额(time quanta,TQ)组成,时间份额 TQ 是位时间的基本时间单元,下面详细解释一下:

1、同步段(Synchronization Segment)

同步段(SyncSeg)为 NBT 中的首段,用于同步CAN总线上的各个节点。输入信号的跳变沿就发生在同步段,该段持续时间为 1 TQ。同步段用于同步总线上的各个节点,一个位的跳边沿在此时间段内。

2、传播段(Propagation Segment)

传播段(PropSeg)用于补偿各节点之间的物理传输延迟时间。传输延迟时间为信号在总线上传播时间的两倍,包括总线驱动器延迟时间。传播段的长度一般有一个取值范围,不同的控制器不完全一致,典型值为 1 – 8 TQ。

3、相位缓冲段(Phase Buffer Segment1)

相位缓冲段用于补偿节点间的晶振误差,又分为相位缓冲段1(PS1)和相位缓冲段2(PS2),在这个时间段的末端进行总线状态的采样。两个相位缓冲段PS1和PS2用于补偿总线上的边沿相位误差。通过再同步,可以延长 PS1(或缩短PS2)。

同理,不同的控制器,PS1/PS2 的取值范围不完全一致,一般 PS1 为 1 – 8 TQ,PS2 为 2 – 8 TQ。

4、采样点

采样点是位时间内的一个时间点。在该时间点,读取总线电平并进行分析。采样点位于相位缓冲段 PS1 的终点。但当采样模式设置为每位采样 3 次时例外。这种情况下,在 PS1 的终点仍然对某一位进行采样时,前两次的采样时间间隔为 TQ / 2,而该位的值将根据三个采样值中至少两次采样的相同值决定。

5、同步跳转宽度

同步跳转宽度(SJW)可通过编程设定为 1 – 4 TQ,它可对位时钟进行必要的调整来保持与发送报文同步。

例如,假设 FOSC = 20 MHz 时欲实现 125 kHz 的 CAN波特率:

TOSC = 50 ns,选择 BRP<5:0> = 04h,则 TQ = 500 ns。

欲达到 125 kHz,位时间应为 16 TQ。

位的采样时刻取决于系统参数,通常应发生在位时间的 60-70% 处。同时, TDELAY 典型值为 1-2 TQ。

同步段 = 1 TQ,传播段 = 2 TQ,这种情况下设置相位缓冲段 PS1 = 7 TQ,将会在跳变之后的 10 TQ 时进行采样。此时相位缓冲段 PS2 长度为 6 TQ。

由于相位缓冲段 PS2 长度为 6 TQ,根据规则, SJW 最大值为 4 TQ。然而通常状况下,只有当不同节点的时钟发生不够精确或不稳定(如采用陶瓷谐振器)时,才需要较大的 SJW。一般情况下,SJW 取值 1 TQ 即可满足要求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于CAN总线的位时间/同步段/传播时间段/相位缓冲段/采样点 的相关文章

  • 子类以private方式继承父类

    子类以private方式继承父类 xff0c 则父类的pubic protected接口在子类变为private接口 xff0c 而父类的private接口在子类变为不可访问的接口 xff0c 而且不存在子类到父类的转换 所以子类以priv
  • CNN实战之如何分析影评-好看又有趣的讲解

    CNN实战之如何分析影评 好看又有趣的讲解 前言认识影评数据集了解TextCNN模型获取影评数据生成文本数据集生成TextCNN模型评估模型 前言 话说老王买了两张电影票打算请女神小丽去看电影 xff0c 老王希望看完电影趁着热度可以和小丽
  • 无人驾驶时代的室外组网技术研究

    无人驾驶时代的室外组网技术研究 车载自组网车载自组网简介车载自组网特点车载自组网组成及建构 主流自组网通信方式ZigBeeWIFIBlue ToothWiMAXDSRC4G 5G 参考文献 车载自组网 车辆通信网络就是在汽车上装载移动通信设
  • 这本关于机器学习的书---牛XXX

    机器学习好书推荐 如图所示 xff0c 这是一本可读性非常强 xff0c 非常有趣的一本介绍机器学习概率论的书 xff0c 让人看了会上瘾 看到这里 xff0c 作者摊牌了 本书作者即本人
  • ROS下运行rqt报错

    解决方案 xff1a 从上面可以看到ROS是通过python2 7编译 xff0c 查看自己python版本 xff0c 修改为对应版本即可成功运行rqt和rqt graph
  • zed2相机SDK安装及ROS安装

    一 安装相机SDK 相机SDK即相机的软件开发工具包 1 查看CUDA版本 xff1a nvcc version 2 相机SDK xff08 Software Development Kit xff09 下载网址 xff1a ZED SDK
  • zed2相机标定

    一 标定相机 1 刷新ros工作空间 source devel setup bash 2 打开相机ros节点 roslaunch zed wrapper zed2 launch 3 准备棋盘格标定板 xff0c 修改标定板checkboar
  • zed2相机标定(IMU)

    二 IMU标定 陀螺仪模型 xff1a 其中 xff0c 为陀螺仪测量值 xff1b 为陀螺仪真实值 xff1b 为陀螺仪零偏 xff08 也叫偏置 xff09 xff1b 为陀螺随机噪声项 xff08 包括白噪声和随机游走噪声 xff09
  • zed2相机标定(相机+imu)

    相机和imu单独标定请参考前面的博客 1 准备文件 checkboard yaml相机标定文件camera calibration yamlimu标定文件imu calibration yaml IMU标定文件格式需要改为如下 xff1a
  • Opencv中三个光流跟踪函数

    在slam里 xff0c 光流跟踪判断图像中某一物体的动态性 xff0c 主要包括3个函数 xff1a 1 goodFeaturesToTrack函数 作用 xff1a 提取输入图像中像素级别的角点 xff0c 支持harris角点和Shi
  • 算法:二分查找

    给定一个n个元素有序的 xff08 升序 xff09 整型数组 nums 和一个目标值 target xff0c 写一个函数搜索 nums 中的 target xff0c 如果目标值存在返回下标 xff0c 否则返回 1 1 条件 查找的数
  • 一行代码解决selenium进入抖音出现验证滑块

    我正常从浏览器进入抖音是不出现验证滑块的 xff0c 然后用selenium进入抖音网站发现会出现滑块验证 如下如这是原代码 xff1a 运行代码后就会发现浏览器出现验证滑块 xff0c 这是是因为网站识别出你是使用selenium 这个时
  • 激光点云有关目标检测与目标跟踪的消息定义

    1 jsk recognition msgs BoundingBoxArray msg 安装jsk recognition msgs xff1a sudo apt get install ros melodic jsk recognitio
  • Linefit_ground_segmention文章梳理及代码阅读

    2013年专门针对地面分割的文章 xff1a Fast segmentation of 3D point clouds for ground vehicles 代码链接 xff1a https github com lorenwel lin
  • 使用MFC+GDI编写地图编辑器补充

    使用MFC 43 GDI编写地图编辑器补充 小宝乱猜 在编写MapEdit时我遇到一个问题 xff0c 那就是在程序开始时一切正常 xff0c 但在打开一个地图文件后 xff0c 程序就会因找不到资源文件而画面混乱 调试了半天才发现是相对路
  • 基于select模型的TCP服务器

    之前的一篇博文是基于TCP的服务器和客户机程序 xff0c 今天在这我要实现一个基于select模型的TCP服务器 xff08 仅实现了服务器 xff09 socket套接字编程提供了很多模型来使服务器高效的接受客户端的请求 xff0c s
  • 路由器端口介绍

    路由器所在的网络位置比较复杂 xff0c 既可是内部子网边缘 xff0c 也可位于内 外部网络边缘 同时为了实现强大的适用性 xff0c 它需要连接各种网络 xff0c 这样 xff0c 它的接口也就必须多种多样 对于这些 xff0c 不要
  • 光流(Optical Flow)

    光流的概念 光流是一种描述像素随时间在图像之间运动的方法 随着时间流逝 同一个像素会在图像中运动 我们希望追踪他的运动过程 稀疏光流 计算部分像素 稠密光流 计算全部像素 稀疏光流以Lucas Kanade光流为代表 简称LK光流 光流的两
  • 模块化程序 点与圆的关系 类中成员函数的声明和实现分开写入头文件和源文件中

    64 TOC 模块化程序 点和圆的关系 在黑马程序员课程4 1 3成员属性设置为私有 课后案例 点和圆的关系中 谈到了文件的封装 此案例是判断点与圆的关系 xff0c 重点是以另外一个类作为本类中的成员 xff1b 在比较大的开发中 xff
  • c++模板类/模板函数的声明与定义应该放在头文件里

    如果函数模板按照普通的函数声明放在头文件的 xff0c 定义放在 cpp文件 xff0c 会出现错误 xff1a 模板函数声明 定义 引用有什么要注意的问题么 xff1f xff1f mylib h template lt class T

随机推荐

  • checksum-8位和16位校验和代码示例

    span class hljs comment linux 系统编译通过 span span class hljs comment gcc filename c o filename span span class hljs comment
  • 安卓鉴权方式的总结

    HTTP Basic Authentication 这种授权方式是浏览器遵守http协议实现的基本授权方式 HTTP协议进行通信的过程中 xff0c HTTP协议定义了基本认证认证允许HTTP服务器对客户端进行用户身份证的方法 效果 xff
  • 手把手教你使用Vue搭建注册登录界面及前端源码

    文章目录 一 前言二 概况三 搭建注册页面四 改造登录页面四 整体效果动画演示五 前端源码下载六 后续 一 前言 本文将在vue admin template模板基础上完成搭建注册与登录页面 文末处有完整的前端源码下载 环境准备 浏览器 x
  • 从传感器和算法原理讲起,机器人是如何避障的

    导语 xff1a 本文内容来自大道智创CTO邢志伟在雷锋网硬创公开课的分享 xff0c 由雷锋网旗下栏目 新智造 整理 编者按 xff1a 本文内容来自大道智创CTO邢志伟在雷锋网 公众号 xff1a 雷锋网 硬创公开课的分享 xff0c
  • or1200处理器中的特殊寄存器

    以下内容摘自 步步惊芯 软核处理器内部设计分析 一书 OR1200中的寄存器分为两类 xff1a 通用寄存器r0 r31 特殊寄存器 特殊寄存器又分为11组 xff0c 在本书第1 3 3节简单地列出了所有的特殊寄存器组 从列表中可以发现除
  • 基础面试题 :大端、小端及转换方式

    理解网络中大端和小端往往是一道基础面试题 xff0c 这里作为记录和整理 xff0c 希望能帮到大家 目录 前言 一 字节序 二 什么小端顺序 三 什么大端顺序 四 处理器体系所属网络字节顺序 五 大小端转换 1 大端整形转换为小端 2 小
  • RS485——A与B波形与电路分析

    一 理论知识 发送端 AB间的电压差 xff0b 2 xff5e xff0b 6v 逻辑1 xff0d 2 xff5e xff0d 6v 逻辑0 xff1b 接收端 AB间的电压差 大于 xff0b 200mv 逻辑1 小于 xff0d 2
  • vsCode软件安装code runner插件,运行shell脚本,terminal终端不显示运行结果数据

    问题 vsCode软件安装code runner插件 xff0c 运行shell脚本 xff0c terminal终端不显示运行结果数据 原因分析 运行shell脚本 xff0c 没有指定运行的bash环境 解决办法 在Code runne
  • Microsoft Visual C++ Redistributable 与 Visual C++ 的区别与联系?

    Visual Studio xff1a 是一款开发软件 xff0c 即我们俗称的 IDE xff0c 有很多版本 xff0c 如 Visual Studio 2010 Visual C 43 43 xff1a Visual C 43 43
  • ROS下采用camera_calibration进行单目相机标定

    参考 xff1a https blog csdn net learning tortosie article details 79901255https blog csdn net learning tortosie article det
  • C++使用libcurl做HttpClient

    当使用C 43 43 做HTTP客户端时 xff0c 目前通用的做法就是使用libcurl 其官方网站的地址是http curl haxx se xff0c 该网站主要提供了Curl和libcurl Curl是命令行工具 xff0c 用于完
  • ROS小车打造(十一)--arduino订阅/发布Topic

    1 安装arduino Software Arduino 选择对应的版本下载 xff0c 下载后解压安装运行 sudo tar xvf arduino 1 8 18 linux64 tar tar sudo mv arduino 1 8 1
  • 简单谈谈5G/C-V2X技术与自动驾驶的关系

    一 什么叫自动驾驶 自动驾驶分为 6 个等级 xff1a Level 0 xff1a 人工驾驶 xff0c 无驾驶辅助系统 xff0c 仅提醒 Level 1 xff1a 辅助人工驾驶 xff0c 可实现单一的车速或转向控制自动化 xff0
  • axios详解

    文章目录 axios是干啥的原生XMLHttpRequest实现axios介绍 发送并发请求 axios API 创建一个实例Config配置选项默认设置 全局默认设置实例中自定义默认值设置的优先级 响应信息 response schema
  • 浅谈一下汽车行业中的OTA/FOTA/SOTA

    首先来一个背景知识铺垫 xff1a 被誉为汽车界 苹果 的特斯拉 xff0c 从它的第一款ModelS上市开始 xff0c 截止到2017年3月份的5年时间里 xff0c 总计对车辆推送了25次远程升级 特斯拉每次发布新系统新功能就可以通过
  • 三分钟看懂什么是边缘计算和云计算

    随着科技的发展 xff0c 社会的进步 xff0c 各种尖端科技层出不穷 xff0c 各种新概念和课题也是百花齐放 xff0c 前几年如雨后春笋般涌现出来的大数据 云计算这些个高科技 xff0c 左查右问 xff0c 花了好大工夫好不容易才
  • 如何提升github的clone速度(简单粗暴,亲测有效)

    今天在github上看上了一个项目 xff0c 想要clone到本地来 项目比较大 xff0c clone速度很慢 xff0c 一开始还有50 60k的速度在跑 xff0c 到后来居然给我降到了4K s xff0c 看得实在是蛋疼 于是去百
  • CAN总线数据帧/标准帧/扩展帧/远程帧/错误帧的组成格式对比

    最近在研究CAN总线的驱动 xff0c 需要详细了解数据帧 标准帧 扩展帧 远程帧 错误帧这几种帧的详细组成格式 xff0c 于是收集了一下 xff0c 统一放在这里进行对比和记录 xff0c 以便日后需要时查阅 1 数据帧 标准帧 CAN
  • 图解CAN总线数据的组成和帧格式

    CAN 是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 在汽车产业中 xff0c 出于对安全性 舒适性 方便性 低公害 低成本的要求 xff0c
  • 关于CAN总线的位时间/同步段/传播时间段/相位缓冲段/采样点

    根据 CAN 规范的要求 xff0c 总线上的所有器件都必须使用相同的比特率才能完成通信 然而 xff0c 并非所有器件都要求具有相同的主振荡器时钟频率 所以 xff0c CAN 总线能够在一定的范围内容忍总线上 CAN 节点的通信波特率的