【CAN通讯系列9】揭开波特率的神秘面纱

通过前面两篇文章:

【CAN通讯系列7】波特率是什么?

【CAN通讯系列8】如何准确接收数据?

已经详细介绍了波特率,CAN位时间,同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),采样点等概念。

图片

了解了这些基础内容后,本文打算通过一个实例,揭开波特率的神秘面纱。

图片

Source: 怎样进行CANoe 仿真工程配置

为何这么说?因为对于汽车研发人员,大多数人只需要关注波特率是否设置正确,只有底层软件开发人员需要去计算和配置波特率相关的参数。下面结合Infineon芯片手册来进行CAN波特率相关参数的计算和配置。    

1 计算波特率相关参数  

根据Infineon Aurix系列芯片手册提供了CAN位时间的标准格式定义,有:

  • Tsync表示同步段(SS)的时间

  • Tseg1表示传播时间段(PTS)和相位缓冲段1(PBS1)的时间

  • Tseg2表示相位缓冲段2(PBS2)的时间

图片

Source: Infineon TC27x系列用户手册

根据Infineon系列芯片手册提供的求解方法,这些时间相关量的关系如下所示:

图片

假设需求是:需要设置某路CAN的波特率为500Kbps,采样率为87.5%。微控制器的晶振时钟周期频率为20MHz。    

首先,将晶振时钟周期频率转换为时间,即有:1/fCAN=1/20MHz=50ns

然后,要设置的波特率为500Kbps,换算时间表示则为1/500 Kbps =2000ns

其次,采样率要设置为87.5,那意味着(Tsync+Tseg1)/ (Tsync+Tseg1+Tseg2)= 7/8,因为CAN位时间长度范围应满足8~25个tq,则CAN位时间可能为8或16或24,此时:

  1. 如果CAN位时间为8个tq,那么tq=250ns;根据计算公式:

    图片

    250ns/50ns=5,因为BRP只能为整数,这时取DIV8=0, BRP=4。

  2. 如果CAN位时间为16个tq,那么tq=125ns; 此时125ns/50ns=2.5,不为整数,不成立!

  3. 如果CAN位时间为24个tq,那么tq=83.33ns,tq不为整数,也不成立!

综上,就可以确定CAN位时间应为8个tq,tq=250ns,取DIV8=0, BRP=4。

根据采样点取在87.5%处,根据已有的计算公式,

图片

先算TSEG2,即有:

1-87.5%=Tseg2/NBT=[(TSEG2+1)*tq]/8*tq=(TSEG2+1)/8

即有:TSEG2=0,注意也就是相位缓冲段2(PBS2)为1个tq

那么Tseg1= NBT-Tseg2-Tsync=6tq,所以TSEG1=5。

再根据下式计算SJW,    

图片

因为Tseg2=1Tq,所以SJW只能取0。

综上有:DIV8=0, BRP=4,TSEG1=5,TSEG2=0,SJW=0。

2 配置波特率相关参数  

有了上面的计算结果,接下来底层软件工程师要做的就是对寄存器做配置,比如Infineon的这款芯片是要去配置节点位时间寄存器,如下所示:

图片

Source: Infineon TC27x系列用户手册

配置结果如下:

图片

代码实现形式如下:

图片

    

而汽车行业都在用AutoSAR工具链进行底层软件开发,比如EB Tresos是常用的MCAL配置工具,利用其进行波特率配置的话,将在下面界面进行配置。

图片

Source: EB tresos实战记录:配置通信-Can_eb配置can-CSDN博客        

3 小结

通过上述针对波特率进行的计算和配置过程,就让非底层软件开发人员终于有机会了解到软件层面是如何实现的,揭开了这层神秘的面纱。就这么一个小小功能的解析,其实已经包含了从基本原理到软件实现,再到实际应用,后续继续以这种思路,解析更多CAN通讯内容,欢迎持续关注。

  • 28
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值