CAN总线位时序计算

CAN Bus Bit Timing Calculation

我对 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。有什么简单的方法可以计算这些约束吗?或者更容易理解的逐步计算指南,而不是互联网上或数据表中的指南,这些指南非常复杂并且希望您自己决定一些参数,例如 SJW!谢谢

我没用过PIC CAN控制器,但大体上是这样的:

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

所以 1 - tqPHSEG2 / tqtotal 应该接近 87.5%。在你的情况下 1 - 4/15 = 0.73。您需要通过增加其他段的大小或减小相位段 2 的大小来解决此问题。这总是需要反复试验。

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

clock / (tqtotal * baudrate) = 预分频器

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

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

Thank you, so I fix the rates as: SJW=1, Seg1_PH=7, Seg2_Ph= 2, Prop_Seg= 6. Sample point will be fixed to %86.6

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

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