如何计算CAN通信波特率

0?wxfmt=jpeg

0

CAN通信波特率的计算是一个难点,要正确计算设置CAN波特率。CAN2.0协议中定义标称位速率为一理想的发送器在没有重新同步的情况下,每秒发送的位数量,也就是我们说的波特率。

0?wx_fmt=jpeg位时间由若干个时间单元(Tq)或者称为时间份额组成。那么位CAN消息中最小的时间份额由下式计算:

0?wx_fmt=jpeg

PRESDIV 为预分频因子, Fcanclk为CAN模块时钟源频率。

CAN2.0协议中规定要求每一位可以划分为几个不重叠时间片段,分别是:

同步段(Synchronization segment)

传播段(Propagation segment)

相位缓冲段1(Phase segment 1)

相位缓冲段2(Phase segment 2)

0?wx_fmt=jpeg

同步段:

位时间的同步段用于同步总线上不同的节点。这一段内要有一个跳变沿。

传播段:

传播段用于补偿网络内的物理延时时间。它是总线上输入比较器延时和输出驱动器延时总和的两倍。

相位缓冲段 1、相位缓冲段 2 PHASE SEG1 PHASE SEG2):

相位缓冲段用于补偿边沿阶段的误差。这两个段可以通过重新同步加长或缩短。

采样点:

采样点是读总线电平并解释各位的值的一个时间点。采样点位于相位缓冲段1( PHASE_SEG1)之后。

信息处理时间 (INFORMATION PROCESSING TIME

信息处理时间是一个以采样点作为起始的时间段。采样点用于计算后续位的位电平。

同步段(SYNC_SEG)为 1 个时间份额;传播段( PROP_SEG)的长度可设置为 1, 2, …, 8 个时间份额;缓冲段 1 ( PHASE_SEG1)的长度可设置为 1, 2, …, 8 个时间份额;相位缓冲段 2( PHASE_SEG2 )的长度为阶段缓冲段 1 ( PHASE_SEG1 )和信息处理时间( INFORMATIONPROCESSINGTIME)之间的最大值;信息处理时间少于或等于 2 个时间份额。一个位时间总的的时间份额值可以设置在 8—25 的范围。

在清楚了位时间的构成后,我们以飞思卡尔kv4x系列MCU为例说明如何计算CAN波特率

我们知道飞思卡尔KV4xMCU的CAN模块有两种时钟源可选,外设时钟时钟源和晶振时钟源,所以分两种情况来说明

例子:假设系统使用8M晶振,经过PLL倍频后输出144M作为系统时钟,外设也是144M,要求设定波特率为250kbps,CAN模块选择外设时钟源。如果使用peripheral clock 则设置 CAN_CTRL1 bit13 为1。

配置波特率主要是配置控制寄存器1

对照数据手册配置波特率:

首先配置预分频参数PRESDIV 为47

则可计算:

0?wx_fmt=jpeg

配置寄存器传播段域为2,则传播段时间 = (2 + 1)Tq

配置寄存器相位缓冲段1域为3,则相位缓冲段1时间 = (3+1)Tq

配置寄存器相位缓冲段2域为3,则相位缓冲段2时间 = (3+1)Tq

同步段不用配置,固定为1个Tq

则波特率 = 1/(1+3+4+4)Tq 将(2) 带入可计算出:

0?wx_fmt=jpeg

其他波特率值可类似计算,具体应用时候还要参考数据手册的限制条件,这四个值都有范围限制。

例子:假设系统使用8M晶振,经过PLL倍频后输出144M作为系统时钟,外设也是144M,要求设定波特率为250kbps,CAN模块选择晶振时钟源。

首先配置预分频参数PRESDIV 为3

0?wx_fmt=jpeg0?wx_fmt=jpeg

其他波特率值可类似计算,具体应用时候还要参考数据手册的限制条件,这四个值都有范围限制。

在CAN 驱动中如果使用外部8M晶振作为CAN模块时钟源,必须配置CAN_CTRL1 bit13为0,选择can模块使用外部时钟,同时必须正确配置MCG_C2和OSC_CR寄存器,才能正常工作,否则CAN模块不能正常通讯。

MCG_C2 |=MCG_C2_EREFS_MASK;

// Enable ERCLK clock to FlexCAN

OSC_CR |= OSC_CR_ERCLKEN_MASK | OSC_CR_EREFSTEN_MASK;

各位亲,是否学会了如何计算CAN通讯波特率呢?如果你喜欢本文,请分享给你的朋友。

0?wx_fmt=bmp0?wx_fmt=bmp

0

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值