根据 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 即可满足要求。

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

  1. Autosar通信入门系列01-CAN通信位时间、Tq及采样点同步

    本文框架 1.前言 2. 位时间 2.1 位时间定义 2.2 位时间计算 3. Tq 3.1 Tq的计算 3.1.1 举个例子 3.2 位时间与Tq的换算 4. 采样点同步 4.1 硬同步 4.2 重 ...

  2. NXP MCU CAN波特率(位时间)配置详解

    1. 概述 本文将会详细讲解如何设置NXP MCU的CAN波特率.位时间.采样点等属性. 波特率即CAN总线传输频率,位时间是波特率的倒数,例如波特率是500K,那么位时间 = 1 / 500000 ...

  3. 位时间(Tbit) 时间份额(TQ) CAN波特率

    MCP2515芯片得CAN波特率计算 先确定BRP(CAN波特率预分频器)BRP该设置为多少不太确定–哈哈哈 再根据公式:TQ = 2*(BRQ + 1)/Fosc 计算出TQ 注意:BRQ为啥加一, ...

  4. CAN总线的位时序与参数设置

    CAN总线的位时序与参数设置 CAN的位时序构成 CAN总线的每个位(Bit)的周期 Tbit = 1 / Baudrate.根据CAN规范,每个位的时间内又可细分成4段: 同步段(Synchroni ...

  5. 开发板 时间 同步_近万字试用报告!RISCV开发板GD32VF103

    作者:yinwuqing 来源:EEPW论坛 01开箱测评 周六继续上班,明天调班接着上,今天来给大家秀一下开箱靓照.开发板是昨天下班收到的,顺丰快递包装还是挺周到的,里面装好了空气袋,防止运输中撞坏 ...

  6. 【计算机网络】传输层 : TCP 协议 ( TCP 协议特点 | TCP 报文段首部格式 | TCP 报文段控制位 )

    文章目录 一.TCP 协议 特点 二.TCP 报文段首部格式 三.TCP 报文段首部 666 控制位 一.TCP 协议 特点 TCP 协议 特点 : ① 面向连接 : TCP 协议的连接是 " ...

  7. [一个经典的多线程同步问题]解决方案一:关键段CS

    前面提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题. 本文先介绍如何使用关键段,然后再深层次的分析下关键段的实现机制和原理. 关键段CRITICA ...

  8. 单片机c语言有org吗,哪位大佬能帮在下翻译一下这段单片机的代码,顺便告诉我是用的什...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 哪位大佬能帮在下翻译一下这段单片机的代码,顺便告诉我是用的什么语言 是c语言吗 org 0000h ajmp main org 000bh ajmp in ...

  9. 数字电子技术课程设计之基于触发器的三位二进制同步减法计数器无效态000/110

    基于触发器的三位二进制同步减法计数器无效态000/110 1 课程设计的目的与作用 掌握用multisim 的电路仿真程序 熟悉同步计数器工作原理和逻辑功能 熟悉计数器电路的分析和设计方法 掌握161 ...

最新文章

  1. 核方法---径向基函数网络
  2. 有关增强现实技术的过去、现在和未来的发展
  3. symmetric-tree
  4. JavaScript快速入门-ECMAScript本地对象(RexExp)
  5. find命令查找某些文件并将其拷贝到指定目录
  6. ACM-ICPC 2018 沈阳赛区网络预赛 Spare Tire(容斥+公式推)
  7. 出现Too many connections错误,怎样解决?
  8. leetcode 500. 键盘行(Java版)
  9. 1500Vdc的光伏系统距离大规模应用还有多远?
  10. COM 组件设计与应用(七)
  11. C# WPF MVVM模式Prism框架下事件发布与订阅
  12. 多维柔性作业调用_摆脱困境:从预定作业中调用安全方法
  13. 技术面试问项目难题如何解决的_同轴线如何当网线使用?解决改造项目中难题...
  14. Android导入第三方静态库.a编译成动态库.so
  15. node mysql 事件循环_nodejs事件和事件循环详解
  16. 斐讯N1盒子 TTL救砖教程
  17. 2018年,Windows Phone 8.1还能做什么
  18. 初探强化学习(7)基于模型的强化学习的应用综述
  19. Realm学习(二)
  20. 【钛媒体】人人不死,只是凋零

热门文章

  1. 走线画直线_画画教程,只用1支铅笔,教你画一幅毛绒小熊
  2. mysql多线程查询_MySQL 利用多线程提升查询性能的一种思路
  3. thinkphp5如何使用ajax(变化的核心,也就是ajax作用的核心是什么)
  4. linux查看端口所占用的进程号
  5. **bootstrap常见常用样式总结
  6. 如何真正提高ASP.NET网站的性能
  7. 如何向 Microsoft 管理控制台添加证书管理器
  8. c语言处理字符串函数的头文件,C语言字符处理函数 - 20131125的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. python变量贡献率排序_3.2.5 贡献度分析
  10. 如何在log4j.properties文件中使用相对路径