CAN总线波特率计算方法1 .位时间2 .计算公式3 .例4 .参考文章
1 .比特时间
一个比特时间包括四个功能片段:同步片段、传播片段、相位缓冲器片段1和相位缓冲器片段2。 为了便于编程,传播段和相位缓冲器段1可能合并为一个时段。 位时间的数值相当于1/波特率,是1位通过CAN总线的时间。 此位的值(1或0 )由采样点的级别决定。
相关参数定义如下:
Prescaler :分频很容易理解。 如果对控制器的时钟频率进行分频,则得到CAN的时钟。 CAN时钟的一个时间周期是上述最小时间段tscl,也称为时间共享,表示CAN控制器运行的最小时间单位。
SYNC_SEG :同步段用于同步总线上的每个节点,固定长度为一个tscl。 其中应该有跳跃边缘。
PROP_SEG :传播段用于补偿信号通过网络和节点传播的物理延迟,长度应保证信号在总线上的两倍延迟,长度应为1-8个tscl。
PHASE_SEG :相位缓冲器段用于补偿跳跃边缘的相位误差,相位缓冲器段1的末尾是采样点的位置。 相位缓冲器区段1和2的长度都是1到8个tscl。
TSEG1=PROP_SEG PHASE_SEG1。
TSEG2=PHASE_SEG2。
位时间=SYNC_SEG TSEG1 TSEG2,长度为8到25个tscl。
采样点=(sync_segtseg1)位时间。
SJW :同步跳跃宽度定义了重新同步期间可以缩短或延长的最大时钟周期数。 这是因为在重新同步时,相位缓冲段1会延伸,或者相位缓冲段2会变短。 同步跳跃宽度必须介于1和4之间,并且小于或等于PHASE_SEG1的时间共享数。
2 .公式
根据上图,位时间的计算公式如下。
此处的tTSEG1和tTSEG2的定义如下。
TSEG1和TSEG2是在BTR1寄存器中设置的值,并且位时间缩短如下。
那么,CAN总线控制器SJA1000的时间频率和CAN波特率的关系如下。
这里,时钟频率是外部晶体振动xtal的输入频率。 除以2是为了确保预分频处理为偶数,即2*prescalar!
prescalar的定义如下。
其中,BRP是BTR0寄存器中定义的值,因此可以获得:
以ST Mircroelectronics bxCAN为例,计算波特率为500kbit/s时各参数的数值。
从下图中可以看到有两种放置方法。
将参数代入bxCAN的CAN_BTR寄存器中,
可以确定公式
是对的!
最后需要注意的两点:
1.SAM确定:低频时,SAM=1,即采样3次。 高频为100K以上时,SAM=0,即采样一次。
2 .采样点中情局的推荐值如下。
4 .参考文章1 .计算1.STM32中的CAN波特率
2. CAN总线波特率计算
3.can bit时间计算