打印
[N32G45x]

N32如何修改CAN波特率以及如何调整采样点

[复制链接]
486|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
心向朝阳|  楼主 | 2022-10-9 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
N32G45X支持2路CAN总线接口,兼容规范2.0A和2.0B,位速率高达1Mbit/s。那么软件中应该怎么设置,才能达到我们想要的波特率速率呢?以及理论上波特率速率越高,相应的采样点位置要越往后移(即采样率要越大),那软件上应该怎么配置,才能调整采样率呢?下面小编来具体介绍一下

使用特权

评论回复
沙发
linjinming2000| | 2022-10-9 17:51 | 只看该作者
最佳采样点是87.5%

使用特权

评论回复
板凳
chenqianqian| | 2022-10-9 18:59 | 只看该作者
1M是理论通信速率,实际通信速率和通信距离和拓扑结构都有关系。

使用特权

评论回复
地板
心向朝阳|  楼主 | 2022-10-9 19:42 | 只看该作者
1.首先我们要查看用户手册:知晓CAN外设时钟是搭载在APB1时钟总线上的,所以按照N32G45X的SDK的原始配置,APB1总线的时钟频率为36M,此时引入CAN外设结构体成员变量:BaudRatePrescaler;该成员的作用是配置CAN外设的时钟分频,可设置为1-1024分频,比如我们设置4,则CAN外设时钟为:APB1时钟/CAN外设时钟分频系数 = 36M/4 =9M

使用特权

评论回复
5
心向朝阳|  楼主 | 2022-10-9 19:53 | 只看该作者
2.通过设置BaudRatePrescaler这个个CAN外设结构体成员变量为4,我们得到了CAN外设时钟为9M,此时再引入两个CAN外设结构体成员变量:TBS1和TBS2,一个正常的位时间=1(固定)+TBS1+TBS2 ;其中最前面的1为固定数值,TBS1和TBS2分别为(TBS1【3:0】寄存器表示数值+1;TBS2【2:0】寄存器表示数值+1),注意:在N32G45X的can驱动库中,TBS1和TBS2可选参数已经封装了一层宏定义,不需要用户自己再+1,TBS1和TBS2的宏定义参数是多少tq就用多少tq计算

使用特权

评论回复
6
心向朝阳|  楼主 | 2022-10-9 19:58 | 只看该作者
比如这组参数:
    CAN_InitStructure.TBS1              = CAN_TBS1_14tq;
    CAN_InitStructure.TBS2              = CAN_TBS2_3tq;
    CAN_InitStructure.BaudRatePrescaler = 4;
一个位时间= 1(固定数值)+14tq+3tq = 18tq ;而1tq=1/CAN外设时钟=1/9M;所以一个位时间=18/9M ,波特率即为位时间的倒数:9M/18=500k

使用特权

评论回复
7
心向朝阳|  楼主 | 2022-10-9 20:02 | 只看该作者
而采样点固定在TSB1和TBS2的交界处,所以这组参数的采样率为:[1(固定数值)+TBS1] /[1(固定数值)+TBS1+TBS2]=15tq/18tq=83.3%

使用特权

评论回复
8
心向朝阳|  楼主 | 2022-10-9 20:04 | 只看该作者
调整TBS1和TBS2的数值,可以改变采样点位置,从而改变采样率,但同时一个位的时间也会随之改变,同时影响到波特率的大小

使用特权

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

本版积分规则

9

主题

59

帖子

2

粉丝