CAN位时序

要理清采样点的问题,首先需要理解CAN的位时序,即每个位的组成。CAN的通信时序不同于SPI、I2C等常见通信协议,在学习这些通信协议时未曾接触到一个位还分好几段的情况,由此也可见CAN通信的复杂性。

在CAN通信中,一个位可分为 4 段:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)。

这些段又由称为 Time Quantum(以下称为 Tq)的最小时间单位构成。

一个位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,基于此可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。各段的作用和 Tq 数如表所示:
在这里插入图片描述

CAN采样点

采样点是指读取总线电平,并将读到的电平作为位值的点。位置在 PBS1 段结束处。
在这里插入图片描述

CAN采样点一般设置在75%—80%之间,具体根据CAN通信波特率大小配置。
当CAN 通信波特率大于等于 800 kbit/s 时,采样点推荐位置是在位时间段的 75%;
当CAN 通信波特率大于 500 kbit/s,小于 800 kbit/s 时,采样点推荐位置是在位时间段的 80%;
当CAN 通信波特率小于等于 500 kbit/s 时,采样点推荐位置是在位时间段的87.5%;

CAN通信中,当延迟或干扰较大时,且各设备采样点位置不一样时,就容易产生通信错误,建议各节点的采样点应该设置为一致,尤其在CAN组网应用中。

CAN采样点计算

采样点位置 = (SS + PTS + PBS1) / (SS + PTS + PBS1 + PBS2)
即:同步段+传播段+相位缓冲段1 / 总位时间

以STM32F103的参考手册为例,对采样点有如下解释:
在这里插入图片描述
在这里插入图片描述
由于STM32F103中传播段和相位缓冲段合并为BS1
因此其采样点计算公式简化为:
在这里插入图片描述
用寄存器值表示:采样点位置 = (1 + TS1[3:0]+1) / (1 + TS1[3:0]+1 + TS2[2:0]+1) × 100%

设置STM32的采样点需要注意TS1[3:0] 和 TS2[2:0]寄存器的值要+1才是实际的Tq个数

STM32有一个官方推荐使用的CAN波特率计算器,如下图所示:
填写好时钟频率,波特率,采样点等相关信息就能计算出推荐的设置
在这里插入图片描述
1Tq等于以APB时钟分频后的CAN时钟的一个时钟周期
取SS = 1Tq,CAN_BS1 = 4Tq,CAN_BS2 = 1Tq为例,时钟12分频,则1Tq = 12×(1/36 MHz)
CAN每一个bit位时间为:
1Tq + 4Tq + 1Tq= 6Tq=6×12×(1/36 MHz)

根据位时序,就可以计算 CAN 通信的波特率。f=1/T 其中T=1个bit位时间
CAN 通信波特率为:
1/(6×12×(1/36 MHz)) = 500 Kbit/s 注:比特率=波特率*单个调制状态对应的二进制位数。在CAN通信中单个调制状态对应的二进制位数=1,因此比特率=波特率

采样点=(1+4) / (1+4+1)=83.3%,采样点位置是在位时间段的 83.3%。

参考:

https://blog.csdn.net/m0_38045338/article/details/137793381

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐