CAN总线的数据采样和同步问题

一、CAN总线接收方数据采样

开始时所有设备都默认是接收方,当需要发送数据时变为发送发方。

CAN总线没有时钟线,总线上的所有设备通过约定 波特率 的方式确定每一个数据数据位的时长。

发送方以约定的位时长每隔固定时间输出一个数据位。

接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位。

理想状况下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近。但CAN总线没有时钟线,会出现因为硬件差异导致的时钟不准的问题。

二、CAN总线位时序的同步

已知CAN总线没有时钟线,会因为硬件差异导致的时钟不准,影响CAN的数据传递,为此CAN总线有 硬同步再同步的两种应对方式。但在此之前我们还需了解位时序。

a、位时序

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

采样点位于PBS1和PBS2之间,调节他们的Tq数可以改变采样点的采样时机。

b、硬同步

硬同步主要解决的是采样点没有对齐数据位中心附近,即太靠近上升下降沿了。

每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到SOF的下降沿时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步。

硬同步只在帧的第一个下降沿(SOF下降沿)有效。

经过硬同步后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近。

c、再同步

再同步主要解决MCU之间的时钟存在略微差异,随着时钟误差的累积,采样点逐渐偏离。

若发送方或接收方的时钟有误差,随着误差累积,数据位边沿逐渐偏离SS段,则此时接收方根据再同步补偿宽度值(SJW),SJW的宽度可以指定为1-4Tq ,通过加长PBS1段,或缩小PBS2段,以调整同步。

再同步可以发生在第一个下降沿之后的每个数据位跳变边沿。

注意:SJW是误差补偿的最大值,具体补偿多少是误差大小和SJW共同决定的,只是不能超过最大值而已,若超过按最大值补偿。

三、波特率的计算

参考

1-3 位同步_哔哩哔哩_bilibili

相关推荐
casual~10 小时前
模逆元计算方法详解:扩展欧几里得算法与费马小定理
学习·算法·逆元
@Mike@10 小时前
06-数据库学习笔记(存储模型与数据压缩)
数据库·笔记·学习
我的xiaodoujiao11 小时前
快速学习Python基础知识详细图文教程14--模块
开发语言·python·学习·测试工具
wdfk_prog11 小时前
嵌入式面试真题学习笔记系列
笔记·学习·面试
懿路向前11 小时前
【HarmonyOS学习笔记】2026-07-30 | 小艺开放平台智能体接入实战
笔记·学习·harmonyos
吃好睡好便好11 小时前
MATLAB中图像的线性变换
开发语言·图像处理·学习·计算机视觉·matlab
YUS云生11 小时前
大模型学习·第41天:LangChain进阶——提示词模板与Chain链式调用
学习·langchain·c#
Freak嵌入式11 小时前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则
boppu11 小时前
酒店毛巾浴巾洗涤后手感评判标准
学习
wuyk55511 小时前
77.嵌入式 C 语言中 enum 枚举的工程化实践:告别魔法数字,提升代码可维护性
c语言·开发语言·stm32·单片机·嵌入式硬件