[资源分享] CAN波特率与采样点配置

[复制链接]
 楼主| JasonLee27 发表于 2021-4-23 15:08 | 显示全部楼层 |阅读模式
本帖最后由 JasonLee27 于 2021-4-23 15:54 编辑

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


如果使用CANFD,需要设置二次采样点,对应驱动中如下配置:
  1.     canConfig.tdcEnable = ENABLE;
  2.     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

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部

66

主题

415

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部