编程技术分享平台

网站首页 > 技术教程 正文

CAN总线应用基础精华课程系列~第⑧节:CAN位计时

xnh888 2024-11-14 18:47:26 技术教程 15 ℃ 0 评论

CAN位计时

位的布局

出于计时目的,CAN总线上的每个位都划分成至少4个时间成分。时间成分逻辑上划分成四个组或节 –

同步节

传播节

阶段节1

阶段节2

这里是一个CAN数据位的图片:

辅助工具

位计时计算器

为给出的输入频率和给出的总线速度计算所有可能的CAN总线参数集。

进入计算器

同步节始终是一个时间成分长,用于时钟同步。总线上的数据改变时,此处期望一个位边界。

传播节用来补偿总线线路中的延迟。

如有必要,阶段节可以缩短(阶段节1)或延长(阶段节2),以保持时钟同步。

在阶段节1和阶段节2之间的边界上对总线电平进行采样。

大部分CAN控制器还提供选项可以在一个位期间进行三次采样。这种情况中,在采样点之前的两个时间成分的边界上进行采样,结果取决于大数判决译码(至少82527这样)。

时钟同步

为了调整片上总线时钟,CAN控制器可能会缩短会延长位的长度(时间成分的整数倍)。这些位时间调整的最大值称为同步跳变宽度(SJW)。

硬同步在起始位从隐性到显性转换时产生。位时间从该边界重新开始。

重新同步在报文的同步节中不发生位边界时产生。一个阶段节被缩短或延长(缩短值或延长值取决于信号中的阶段错误)。可以使用的最大值由同步跳变宽度参数决定。

位计时寄存器计算

大部分CAN控制器允许程序员使用下列参数设置位计时:

时钟的预分频器值

采样点之前的时间成分数量

采样点之后的时间成分数量

同步跳变宽度(SJW)中的时间成分数量

通常为这个目的提供两个寄存器:btr0和btr1。但是,不同控制器之间略有差异,所以请仔细阅读您的数据清单。

在82c200和SJA1000上(均产自NXP – nee飞利浦),寄存器布局如下:

76543210

btr0SJW1SJW0BRP5BRP4BRP3BRP2BRP1BRP0

btr1SAMTSEG22TSEG21TSEG20TSEG13TSEG12TSEG11TSEG10

BRP0..BRP5设置时钟预分频器值

SJW0..SJW1设置SJW的长度

TSEG10..TSEG13设置采样点之前的时间成分数目(不包含起始位)

TSEG20..TSEG22设置采样点之后的时间成分数目

SAM,如果要获取三个样本,则设置为1。如果一个样本就已足够,则设置为0。

注意:这些参数的实际值比写入寄存器的值大1。

示例:如果提供给SJA1000的振荡器信号是16 MHz,我们想要250 kbit/s的比特率,采样点接近整个位的62%,以及SJW为2个时间成分,那么我们可以设置 –

BRP = 4,指定时间片长度为2 * 4 / 16000000 s = 500纳秒,以及

TSEG1 = 5,指定采样点之前有5个时间片,以及

TSEG2 = 3,指定采样点之后有3个时间片。

这样,每个位都将包含5 + 3 = 8个时间片,最终的比特率为1 / (8 * 500 ns) = 250 kbit/s。寄存器值应该为

btr0 =(SJW – 1) * 64 + (BRP -1) =

(2-1)*64 + (4-1) =

67 =

0×43

btr1 =SAM * 128 + (TSEG2 – 1)* 16 + (TSEG1 – 1) =

0*128 + (3-1)*16 + (4-1) = (“4″ 因为不包含起始位)

35 =

0×23

采样点为一个位的5/8(=62.5%)。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表