凡亿专栏 | 如何计算CAN通信波特率
如何计算CAN通信波特率

在CAN总线系统中,波特率的计算是一个关键步骤,它确保网络上的所有设备能够以相同的速率进行通信。


1、理论

波特率的计算涉及到几个关键参数,包括CAN控制器的时钟频率、分频因子、以及位时间的不同部分。


时钟频率(Fclk)

  • CAN控制器的时钟频率。

    这是CAN模块的输入时钟,通常来自于微控制器的主时钟。

分频因子(Prescaler)

  • 用于从主时钟频率中分频得到位时间计数器的时钟频率。

    分频因子可以增大位时间,使得CAN总线能够在较低的波特率下工作。

位时间(Bit Time)

  • 位时间由几个部分组成,总共需要满足规定的时间量子(Time Quanta,TQ)数:

    • 同步段(Sync Seg):

      用于同步不同节点上的数据边缘,固定为1 TQ。

    • 传播时间段(Prop Seg):

      用于补偿网络中的物理延迟,长度可以调整。

    • 相位缓冲段1(Phase Seg1)和相位缓冲段2(Phase Seg2):

      用于对抗信号抖动和网络延迟,长度可调。


基于上述参数,CAN波特率的计算公式如下:



波特率 = Fclk / (Prescaler * Bit Time)


其中,Bit Time = Sync Seg   Prop Seg   Phase Seg1   Phase Seg2。


假设一个CAN控制器有如下参数:

  • Fclk = 16 MHz

  • Prescaler = 8

  • Sync Seg = 1 TQ

  • Prop Seg = 2 TQ

  • Phase Seg1 = 3 TQ

  • Phase Seg2 = 2 TQ

  • Bit Time = 1   2   3   2 = 8 TQ


则波特率为:



波特率 = 16 MHz / (8 * 8 TQ) = 16,000,000 / 64 = 250,000 bps (或250 kbps)


2、实践

以AT32F413这款MCU为例,CAN波特率计算公式如下所示:


4c51a7a19e46c78e5db9d78a4c2c20.jpg


CAN 总线的额定位时间由 3 部分组成:

1、同步段(SYNC_SEG),该段占用 1 时间单元,即公式中的1 x t𝑞。

2、位段 1(BIT SEGMENT 1),包括 CAN 标准里的 PROP_SEG 和 PHASE_SEG1,记为 BSEG1, 该段占用 1 至 16 时间单元,时间单元个数由 BTS1[3:0]位定义,即公式中的t𝐵𝑆𝐸𝐺1 = (1   BTS1[3:0]) x t𝑞。

3、位段 2(BIT SEGMENT 2),包括 CAN 标准里的 PHASE_SEG2,记为 BSEG2,该段占用 1 至 8 时间单元,时间单元个数由 BTS2[2:0]位定义,即公式中的t𝐵𝑆𝐸𝐺2 = (1   BTS2[2:0]) x t𝑞。


时间单元的长度由 CAN 位时序寄存器(CAN_BTMG) 的 BRDIV[11:0]位及 PCLK 定义,即公式中的t𝑞。


c703ceda91cff012b65f7f53312264.jpg


按照公式继续推导如下:


a4be41f68ecd334f588cea93435fbe.jpg


其中, BRDIV[11:0]、 BTS1[3:0]和 BTS2[2:0]为 CAN 位时序寄存器 (CAN_BTMG)中参数,在 AT32F413的 BSP 程序中对应结构体对照表如下:


f6c9b33bc7de4e37ea968ec225a3f2.jpg


举个例子,设定f𝑆𝑌𝑆𝐶𝐿𝐾=192MHz, f𝐴𝑃𝐵1𝐶𝐿𝐾 = f𝑃𝐶𝐿𝐾=24MHz 时, 1M 波特率的软件设置如下:


889e5e355b202a75ad198ea46a2082.jpg



3、注意事项

  • 确保总的Bit Time在CAN控制器的可配置范围内。

  • 不同的CAN控制器可能有不同的最大和最小TQ限制。

  • 适当设置波特率可以减少误差,提高网络的稳定性和可靠性。

  • 高波特率适用于短距离通信,而长距离通信则需要降低波特率以减少误差。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论