目录
在CAN总线系统中,波特率的计算是一个关键步骤,它确保网络上的所有设备能够以相同的速率进行通信。
波特率的计算涉及到几个关键参数,包括CAN控制器的时钟频率、分频因子、以及位时间的不同部分。
时钟频率(Fclk)
分频因子(Prescaler)
位时间(Bit Time)
基于上述参数,CAN波特率的计算公式如下:
波特率 = Fclk / (Prescaler * Bit Time)
其中,Bit Time = Sync Seg + Prop Seg + Phase Seg1 + Phase Seg2。
假设一个CAN控制器有如下参数:
Bit Time = 1 + 2 + 3 + 2 = 8 TQ
则波特率为:
波特率 = 16 MHz / (8 * 8 TQ) = 16,000,000 / 64 = 250,000 bps (或250 kbps)
以AT32F413这款MCU为例,CAN波特率计算公式如下所示:
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𝑞。
按照公式继续推导如下:
其中, BRDIV[11: 0]、 BTS1[3: 0]和 BTS2[2: 0]为 CAN 位时序寄存器 (CAN_BTMG)中参数,在 AT32F413的 BSP 程序中对应结构体对照表如下:
举个例子,设定f𝑆𝑌𝑆𝐶𝐿𝐾=192MHz, f𝐴𝑃𝐵1𝐶𝐿𝐾 = f𝑃𝐶𝐿𝐾=24MHz 时, 1M 波特率的软件设置如下: