Tq
Q的大小与通讯质量是有关系的。个人觉得只要寄存器 TS1 和 TS2 的数值允许,Q 值应该尽量大一点。Q 值越小,本地在同步调整时的变化就越大(不稳定)。
整进去:
CAN总线【5】--CAN通信的位定时与同步_什么是can总线的位定时_无法回到的过去的博客-CSDN博客
CAN总线波特率的设定——以STM32F103为例_can波特率设置_zhengyad123的博客-CSDN博客
①同步段(SS Synchronization Segment)
长度:1Tq
吸收物理网络上的延时,由隐性电平到显性电平的边沿或由显性电平到隐性电平边沿最好出现在此段中。
②传播时间段(PTS Propagation Segment)
长度:1~8Tq
用于吸收网络上的物理延迟的段。
估算:
一次单向传输的延时Tdelay包括3个时间:
发送节点从产生信号到发到总线的时间 Td1;
信号在总线传输的时间Tbus;
接收节点从总线获取信号的时间Td2。
按规范要求,传播段的时间Tps应大于等于2倍Tdelay的时间,即
Tps >= 2 * Tdelay = 2 * (Td1 + Tbus + Td2)
③相位缓冲段1(PBS1 Phase Buffer Segment1)
长度:1~8Tq
④相位缓冲段2(PBS2 Phase Buffer Segment2)
长度:2~8Tq
PBS1、PBS2用于各单元以各自独立的时钟工作,细微的时钟误差会累积起来,PBS 段可用于吸收此误差。
⑤再同步补偿宽度 (SJW)
长度:1~4Tq
因时钟频率偏差、传送延迟等,各单元有同步误差。SJW 为补偿此误差的最大值,加大这个SJW会降低传输数据速度。
根据规则, SJW 最大值为 4 TQ。
然而通常状况下,只有当不同节点的时钟发生不够精确或不稳定(如采用陶瓷谐振器)时,
才需要较大的 SJW。一般情况下,SJW 取值 1 TQ 即可满足要求。
重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,
因此CAN的波特率实际上有一个范围:1/(Tbit+Tsjw) ≤CANbps≤1/(Tbit-Tsjw)
SJW必须小于PBS1和PBS2的最小值
SJW最大值不能超过4
硬同步
在总线刚刚从空闲状态中走出来的时候,在帧头的位置都会进行一次同步。此时所有的节点位时间重新开始,就像所有的运动员都再一次回到了起跑线上。这种同步方式被称作硬同步。
重同步
硬同步时只是在有帧起始信号时起作用,无法确保后续一连串的位时序都是同步的,这个时候重同步就到了发挥作用的时候。具体来说,CAN总线的一个位时间中包含两个缓冲段BS1和BS2:
在两个缓冲段中间的位置,即是读取总线电平的采样点位置,当检测到总线上存在相位差的时候,通过延长BS1段或缩短BS2段来获得同步,这样的方式称为重新同步。
这两个相位缓冲段的延长时间或缩短时间上限由再同步跳转宽度(SJW)给定。采样点是接收节点判断信号逻辑的位置,CAN通讯属于异步通讯,需要通过不断的重新同步才能保证收发节点的采样准确,所以SJW(同步跳转宽度)决定了接收节点是否能有比较好的兼容性。
网友评论:
SJW取大值确实会增大的时钟精度的容限,但也会让采样点位置变化过大。近距传输没有问题,远距传输信号延迟很大,采样点往前移动可能会造成采样出错。我认为SJW不宜超过1/8位宽,波特率精度靠晶振控制在1%,而非SJW,毕竟SJW只是“补救措施”。
其次,SJW修正是判断SS段(1个时基)是否同步确定的,只要偏离就进行4个时基的增减修正的话,其实让控制器处于反复增减状态。所以SJW应该是系统性修正,一次修正后面可以坚持好长时间,做到刚好够用就行。
采样点
采样点是读取总线电平,并将读到的电平作为位值的点
根据CiA(CAN in Automation)的建议是:
(1)一般配置在75-80%的位置
(2)波特率>800K: 75%
波特率>500K: 80%
波特率<=500K: 87.5%
CAN时钟频率、分频值
CAN时钟选择:
1、系统时钟稳定性:确保CAN时钟源的稳定性和精确性。
关于S32K344,建议选择PLL产生的时钟,AIPS_PLAT_CLK。
其中FXOSC_CLK为外部晶振16M太慢,FIRC_CLK为内部RC振荡器,精度太差,
对于CAN FD应用来说可能会产生错误,所以要选择AIPS_PLAT_CLK。
2、支持CAN控制器的最大时钟频率:根据CAN控制器的规格和性能要求,选择合适的CAN时钟频率、分频值。
3、通讯速率越高,通讯的距离就越短
波特率
计算实例: