ST电机库v5.4.4源代码分析(2): 磁链圆限制之计算以及一个小bug

编者:沉尸 (5912129@qq.com)

FOC流程图 Circle_Limitation所在位置

图1

 

 图2

现在计算出了,需要限制:

 如果

 

 显然需要一个缩小的系数i (i < 1)进行校正

这个开根号的计算对于一般单片机来说,运算还是很耗时的,所以这里要采取牺牲精度的快速查表计算方式。

下面的内容结合ST的电机库5.4.4中的源码进行说明

结合上图2中所示

         S16_MAX = 32767 (S16_MAX是16位有符号数之最大值)

我们选取的“MAX_MODULE”的值不会直接让它等于S16_MAX,留一点余量,比如取99%或者98%等等。

         M = 32767 * 99% = 32439.33

这里选择 32439,源代码“Inc\parameters_conversion.h”中也是如此定义:

 

 

下面开始推导表格中的缩小因子。以index=62区间段为例进行计算:

取区间段中的最大值:63*0x1000000-1,最大值的缩小程度最“狠”,每个区间当然是选择最“狠”的那个了。

根据上面的式子1-1,计算出来的缩放因子是一个小于1的小数,在计算机中不好存放,实际应用中将它放大32768倍,于是公式1-1变形为

         当index = 62时

归纳为:

 上面表格中的数据明显和源代码中的数据表格不符合

                                                                 图5

经过推导分析,源代码中表格有错,应该修改表格为我们推导出来的数据表格。

那么源代码中的表格是怎么来的呢?根据我的分析最后发现应该将源代码中定义修改为:

                                                                 图6

后,才能将源代码中的定义和表格相匹配!也就是源代码表格采用的是大概98%的MAX_MODULE值。

32121/32767=98.03%

同时针对图6中的这个定义,我用Execl表格也推导了一份

 

瞧!这个表格中的数据和源代码中的表格吻合到完美无缺

所以,ST马达库5.4.4中的代码有个小Bug(影响不大),订正时,要么修改表格,要么修改#define定义值,本篇文章主要是探索一下这些定义的表格数据是咋来的而已!

备注: Execl表格中数据的计算公式为(假设放在C栏,B栏放61,62,...):

以C5为例(C4放着62):

         =SQRT(32439*32439/(((C4+1)*16777216)-1))*32768

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值