如何计算CAN通信波特率-CSDN博客

目录

1、理论

2、实践

3、注意事项


在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波特率的计算公式如下:

cpp 波特率 = 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

则波特率为:

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

2、实践

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

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

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

2、位段 1(BIT SEGMENT 1),包括 CAN 标准里的 PROPSEG 和 PHASESEG1,记为 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 波特率的软件设置如下:

3、注意事项

  • 确保总的Bit Time在CAN控制器的可配置范围内。
  • 不同的CAN控制器可能有不同的最大和最小TQ限制。
  • 适当设置波特率可以减少误差,提高网络的稳定性和可靠性。
  • 高波特率适用于短距离通信,而长距离通信则需要降低波特率以减少误差。
  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32是一种基于ARM Cortex-M系列处理器的微控制器,它可以通过CAN总线进行通信。CAN总线是一种高速、可靠、抗干扰能力强的通信方式,广泛应用于汽车、工业控制、航空等领域。 下面是STM32CAN通信的详细讲解: 1. 硬件连接 STM32的CAN总线需要连接到CAN总线收发器,以实现CAN总线的物理层。CAN总线收发器通常包括两个引脚:CAN_H和CAN_L,分别对应CAN总线的高电平和低电平。连接方式如下图所示: ![image](https://img-blog.csdn.net/20170829170428613?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hpdGdwdC9ibGFjay5wbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/50) 2. 初始化CAN总线 在使用CAN总线之前,需要对其进行初始化。以下是初始化CAN总线的步骤: a. 开启CAN总线时钟 b. 配置GPIO口为CAN功能 c. 配置CAN总线的时序参数,包括波特率、同步跳转宽度和时间段长度等 d. 配置CAN总线的工作模式,包括正常模式、监听模式和循环回环模式等 e. 使能CAN总线 3. 发送数据 在发送数据前,需要先配置CAN总线的发送邮箱。STM32的CAN总线支持多个发送邮箱,每个发送邮箱都有自己的ID、数据长度、数据内容等信息。以下是发送数据的步骤: a. 配置发送邮箱的ID、数据长度和数据内容等信息 b. 将数据放入发送邮箱中 c. 启动发送邮箱,并等待发送完成 d. 检查发送状态,如果发送成功则继续发送下一个数据,否则重新发送当前数据 4. 接收数据 在接收数据前,需要先配置CAN总线的接收邮箱。STM32的CAN总线支持多个接收邮箱,每个接收邮箱都有自己的ID、数据长度等信息。以下是接收数据的步骤: a. 配置接收邮箱的ID和数据长度等信息 b. 启动接收邮箱,并等待接收完成 c. 检查接收状态,如果接收成功则读取接收数据,否则等待下一次接收 以上就是STM32CAN通信的详细讲解。在实际应用中,需要根据具体的需求进行配置和调试,才能实现可靠的CAN通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44079197

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值