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

编者:沉尸 ([email protected])

FOC流程图 Circle_Limitation所在位置

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

图1

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

 图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”中也是如此定义:

 

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

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

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

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

         当index = 62时

归纳为:

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

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

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

                                                                 图5

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

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

                                                                 图6

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

32121/32767=98.03%

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

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

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

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

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

以C5为例(C4放着62):

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

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

你可能感兴趣的:(ST电机库,机器人,开源软件)