Embedded CAN总线位定时计算

Embedded CAN总线位定时计算,embedded,can-bus,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; 这些是完全不同的结果,似乎两者都给了我大约50kbps而不是250kbps。有没有简单的方法来计算这些约束条件?或者更容易理解的逐步计算

我对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;

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

我没有使用PIC CAN控制器,但一般情况下是这样的:

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

因此,1-tqPHSEG2/tqtotal应接近87.5%。在您的情况下
1-4/15=0.73
。您需要通过增加其他段的大小或降低相位seg 2的大小来解决此问题。这总是有点尝试和错误

至于波特率,您可能会得到如下公式:

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

您的特定CAN控制器将给出该特定硬件的精确公式。记住什么是时钟源,是原始振荡器,是系统时钟,是其他的吗?(PIC因使用各种系统时钟分频器而臭名昭著,除此之外,您还可以进行PLL调整。)


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

如果您提到您正在使用的CAN控制器,这将非常有用。我使用PIC18F26K83来实现此目的。谢谢,因此我将速率固定为:SJW=1,Seg1_PH=7,Seg2_PH=2,Prop_Seg=6。采样点将固定为%86.6