CAN总线位时序计算

时间:2019-01-30 14:06:34

标签: embedded can-bus

我对CAN总线位时序计算有点困惑,因此从250 kbps和8 MHz时钟的数据表中我已经计算出了这些:

SJW=3, BRP=0, SEG1PH = 6, PRSEG=5, PHSEG2=4.

但是,当我使用CAN总线位定时计算器程序时,它会给出以下结果:

SJW =1; BRP =2; PHSEG1 = 1; PHSEG2 = 2; PROPSEG = 4;

这是完全不同的结果,似乎两者都给了我大约50 kbps而不是250 kbps。有没有简单的方法来计算这些约束?或者是更易于理解的逐步计算指南,而不是Internet或数据表中非常复杂的数据表,希望您自己决定一些参数,例如SJW!谢谢。

2 个答案:

答案 0 :(得分:3)

我没有使用PIC CAN控制器,但是总的来说,它是这样的:

相对于tq总量的相位段2给出了采样点的位置。无论您使用哪种CAN应用程序,我都建议使用CANopen的标准建议,这是一个87.5%的采样点,可接受的位置在85%-90%之间(在最高波特率下更为宽容)。 / p>

所以1-tq PHSEG2 / tq 总计应该接近87.5%。就您而言,1 - 4/15 = 0.73。您需要通过增加其他段的大小或减小相段2的大小来解决此问题。这总是有点试验和错误。

关于波特率,您可能会得到以下公式:

时钟/(tq *波特率)=预分频器

您的特定CAN控制器将为该特定硬件提供确切的公式。请记住什么是时钟源,它是原始振荡器,是系统时钟,还是其他时钟源? (PIC因使用各种系统时钟分频器而臭名昭著,因此您可能最需要对PLL进行调整。)

SJW不会影响波特率。它是用于波特率不匹配的允许重新同步宽度,主要与更高的波特率相关。在250kbps速率下,SJW = 1应该可以正常工作。

答案 1 :(得分:0)

<块引用>

谢谢,所以我将比率固定为:SJW=1、Seg1_PH=7、Seg2_Ph= 2、Prop_Seg= 6。采样点将固定为 %86.6

这是在不了解原因的情况下遵循某些规则的方法的示例。上面选取的区间值比采样点要求本身重要得多,而后者在大多数情况下根本不重要。您的 seg1 和 seg2 值最好大致相等,prop_seg 应对应于总线长度,并且它们的组合应满足振荡器容差。样本点可能在 65-90% 的范围内,其中任何一个都可以。

太迟的采样点使得大多数 MCU 无法在紧急外部石英故障的情况下从内部振荡器工作(时钟安全系统可以在这种情况下将 MCU PLL 即时切换到内部源),因为频率容限对于通常相当不准确的内部振荡器(正常情况下为 1-2%),间隙变得太紧(小于 1%)。在低速(50 kbps 及以下)或短总线(最多数十米)且途中没有网关或电流隔离器的情况下,确实不需要大的传播段。