[资源分享]

CAN波特率与采样点配置

[复制链接]
1101|2
手机看帖
扫描二维码
随时随地手机跟帖
JasonLee27|  楼主 | 2021-4-23 15:08 | 显示全部楼层 |阅读模式
本帖最后由 JasonLee27 于 2021-4-23 15:54 编辑

这里给大家介绍一下CAN的波特率和采样点的配置与计算
如下表:
24884608270a199dee.png
我们的CAN模块支持AHB即系统时钟和XOSC外部晶振时钟。
对所有CAN控制器来说,SJW,SEG1 SEG2的配置方式都是一样的。对应我们驱动接口的配置如下。
 /*
        设置波特率为500K,采样点为81.25%.
        tSeg1 = (S_SEG_1 + 2); tSeg2 = (S_SEG_2 + 1).
        BandRate         = (16M / (S_PRESC + 1) / ((S_SEG_1 + 2) + (S_SEG_2 + 1)))
        SamplePoint = (tSeg1 / (tSeg1 + tSeg2)).
        在已经知道波特率与采样点的情况下,经过计算后:tSeg1 = 13,tSeg2 = 3.
         */
        canBandrateConfig.PRESC         = 0;//分频后时钟为8M.
        canBandrateConfig.SEG_1         = 11;
        canBandrateConfig.SEG_2         = 2;
        canBandrateConfig.SJW             = 2;//满足S_SJW <= tSeg2即可.
        
    ///data bit rate = 2M
    ///samplePoint 62.5%
        canDataBitrateConfig.PRESC         = 0;//分频后时钟为16M.  
        canDataBitrateConfig.SEG_1         = 3;
        canDataBitrateConfig.SEG_2         = 2;
        canDataBitrateConfig.SJW         = 2;//满足S_SJW <= tSeg2即可.
    canConfig.clockSrc = CAN_CLKSRC_AHB;    ///<选择时钟源 CAN_CLKSRC_EXTERNAL_OSC:外部晶振 CAN_CLKSRC_AHB:系统时钟,默认48M


如果使用CANFD,需要设置二次采样点,对应驱动中如下配置:
    canConfig.tdcEnable = ENABLE;
    canConfig.sspOffset = 13;


91827608270847a192.png

使用特权

评论回复

相关帖子

粱崇浩| | 2021-4-28 15:37 | 显示全部楼层
一个TQ的时间=(时钟频率/位速率)/时钟频率吧,500K位速率下,相当于一个TQ有48M/500K=96个时钟周期,我认为你的计算逻辑是错误的

使用特权

评论回复
JasonLee27|  楼主 | 2021-4-28 15:55 | 显示全部楼层
粱崇浩 发表于 2021-4-28 15:37
一个TQ的时间=(时钟频率/位速率)/时钟频率吧,500K位速率下,相当于一个TQ有48M/500K=96个时钟周期,我认为 ...

按上面500K的设计,1个bit有96个TQ,那么一个TQ的时间就是2us/96,其实就是工作频率的倒数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

415

帖子

10

粉丝