【问题标题】:CAN Bus Bit Timing CalculationCAN 总线位时序计算
【发布时间】:2021-07-06 05:14:41
【问题描述】:

我对 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!谢谢。

【问题讨论】:

  • 如果您提及您正在使用的 CAN 控制器将会很有帮助。
  • 我为此使用 PIC18F26K83。

标签: embedded can-bus


【解决方案1】:

我没有使用过 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 应该可以正常工作。

【讨论】:

  • 谢谢,所以我将费率固定为:SJW=1, Seg1_PH=7, Seg2_Ph= 2, Prop_Seg= 6。采样点将固定为 %86.6
【解决方案2】:

谢谢,所以我将费率固定为: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 及以下)或短总线(最多几十米)且途中没有网关或电流隔离器的情况下,实际上不需要大的传播段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2020-10-07
    相关资源
    最近更新 更多