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

相关推荐
武陵悭臾2 小时前
安卓应用开发学习:应用ViewPager2翻页视图实现页面水平切换
android·学习·viewpager2·deepseek·翻页视图
XINVRY-FPGA2 小时前
XC7A100T-2CSG324I 赛灵思 Xilinx AMD Artix-7 FPGA
arm开发·嵌入式硬件·fpga开发·硬件工程·信号处理·dsp开发·fpga
charlie1145141913 小时前
精读C++20设计模式——创造型设计模式:单例模式
c++·学习·单例模式·设计模式·c++20
leo_yu_yty4 小时前
Mysql DBA学习笔记(主从复制)
学习·mysql·dba
2301_1472583694 小时前
STM32 单片机开发 - FreeRTOS 实时操作系统
stm32·单片机·嵌入式硬件
明明真系叻4 小时前
量子计算学习笔记(2)
笔记·学习·量子计算
jianqiang.xue4 小时前
ESP32-S3入门第七天:UART串口通信与设备交互
c语言·单片机·嵌入式硬件·mcu·物联网·51单片机
哲Zheᗜe༘4 小时前
了解学习Nginx反向代理与缓存功能
学习·nginx·缓存
sswithyou5 小时前
TCP的学习
网络协议·学习·tcp/ip