首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CANBUS Baudrate配置意义

CANBUS Baudrate配置意义
EN

Stack Overflow用户
提问于 2019-07-05 12:43:22
回答 2查看 1.2K关注 0票数 0

在确定数字的情况下,canbus波德率配置的逻辑是什么?

代码语言:javascript
复制
  CAN_InitStructure.CAN_BS1 = CAN_BS1_2tq;
    CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
    CAN_InitStructure.CAN_Prescaler = 16;
    CAN_Init(CAN1, &CAN_InitStructure);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-05 13:11:37

你忘了

代码语言:javascript
复制
CAN_InitStructure.SyncJumpWidth = CAN_SJW_1TQ;

比特率将是:

代码语言:javascript
复制
 BITRATE = (CANCLOCK / CAN_InitStructure.CAN_Prescaler) / (1 + CAN_InitStructure.CAN_BS1 + CAN_InitStructure.CAN_BS2)

其中CANCLOCK是以赫兹为单位的CAN外围时钟。这取决于您的时钟树配置。

你的时间量子频率是TQF = CANCLOCK / CAN_InitStructure.CAN_Prescaler

时间量子本身TQ = 1/TQF (以秒为单位)

位时间是BITTIME = TQ * (CAN_InitStructure.SyncJumpWidth + CAN_InitStructure.CAN_BS1 + CAN_InitStructure.CAN_BS2)

记住,xxxx_3tq的意思是3 TQ

票数 3
EN

Stack Overflow用户

发布于 2019-07-07 21:24:45

为CAN配置波德率有点麻烦,但所有CAN控制器的工作原理都很相似。

您希望每个位的样本点接近87.5%的理想位置(如自动化/CANopen推荐中的CAN )。为了达到这个目的,您需要知道在样本点之前和之后有多少TQ (时间量子)。

每个TQ的长度由CAN控制器的时钟决定,由系统时钟导出和划分,每个TQ的长度为1个时钟周期。16 TQ通常是理想的,所以你会想在那之后选择一个除数。如果你在16兆赫运行系统时钟,你可以选择16除数,得到1兆赫的can时钟。请记住,内部RC振荡器是一个不可接受的CAN!您必须使用外部晶体或振荡器,以获得足够的精度。

采样点之前的段通常称为同步段(固定1 TQ)、传播段和相位段1--控制器与控制器之间的术语略有不同。这些段合在一起应占所需波德率的87.5%,而样本点后的段(通常称为相段2 )应构成其余部分。

同步跳跃宽度(SJW)与波特率计算本身无关,但与之相关。SJW确定给定波特率允许时钟偏离多少TQ --对于800 work或1000 work,您将其设置为3,否则1应该工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56903322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档