wuruize 发表于 2015-9-17 10:23:30

STM32 FOC中RevPark_Circle_Limitation

图片中的表格是怎么算的,为什么不同的MMI表格内的数的个数还不一样

左岸右岸 发表于 2015-9-17 10:44:25

不懂呢,帮顶一下:)

你好我好大家好! 发表于 2015-9-17 11:01:45

收藏一下,期待权威答案

卫博1234 发表于 2016-10-21 19:52:42

本帖最后由 卫博1234 于 2016-10-21 20:03 编辑

我也不是很懂,大概了解的回答一下。这个表是给RevPark_Circle_Limitation用的。
我把这个函数一点点注释如下,我这里用的是MAX_MODULATION_98_PER_CENT,楼主的例子是100%最高调制比的。
void RevPark_Circle_Limitation(void)
{
s32 temp;
            
temp = Stat_Volt_q_d.qV_Component1 * Stat_Volt_q_d.qV_Component1
             + Stat_Volt_q_d.qV_Component2 * Stat_Volt_q_d.qV_Component2;//
            
if ( temp > (u32)(( MAX_MODULE * MAX_MODULE) ) ) // 如果(Vd1^2+Vq1^2) > MAX_MODULE^2成立。                     //注意 在MAX_MODULATION_99_PER_CENT情况下 ==>
                     //MAX_MODULE=32111=32768*0.98,这个MAX_MODULE就是这么来的
   {
u16 index;//为便于理解,下面的程序注释中都假设Vq1=x*32768, Vd1=y*32768,
                  //则(Vq1)^2+(Vd1)^2=(x^2+y^2)*32768^2
                                                               
temp /= (u32)(512*32768); // =(Vq1^2+Vd1^2)/(512*32768) = (x^2+y^2)*32768^2/(512*32768)
                                             //=64(x^2+y^2);   注意32768=512*64
temp -= START_INDEX ;      // = 64(x^2+y^2) - 61; ==>
                                          //最大值满足temp_max=128-61=67(实质上是66,
                                          //因为32767才是最大值,到了32768才会是2,所以(x^2+y^2)<2),
                                           //最小值temp_min=MAX_MODULE^2/(512*32768)-61=0,
                                           //所以这埯可以看出来,那个对应98%最高调制比的表格里,只有67个数据
index = circle_limit_table[(u8)temp];
                                                               
temp = (s16)Stat_Volt_q_d.qV_Component1 * (u16)(index);
                   //(Vq1)*MMI*S16_Max/V_mag, index = MMI*S16_Max^2/V_magnitude_index
Stat_Volt_q_d.qV_Component1 = (s16)(temp/32768);
                   //Vq=(Vq1)*MMI*S16_Max/(32768*V_mag)
                                                               
temp = (s16)Stat_Volt_q_d.qV_Component2 * (u16)(index);
                  //(Vd1)*MMI*S16_Max/V_mag
Stat_Volt_q_d.qV_Component2 = (s16)(temp/32768);
                  //Vd=(Vd1)*MMI*S16_Max^2/(32768*V_mag)
   }

}

liu553824989 发表于 2016-10-21 20:00:11

不是很懂,好久没搞了,帮顶

狂奔的蜗牛soyoa 发表于 2018-2-8 10:50:43

本帖最后由 狂奔的蜗牛soyoa 于 2018-2-8 10:53 编辑

卫博1234 发表于 2016-10-21 19:52
我也不是很懂,大概了解的回答一下。这个表是给RevPark_Circle_Limitation用的。
我把这个函数一点点注释如 ...
这个函数是为了将经过PID调节后的Vd,Vq映射到0-32767相应的对应PWM占空比为0-100%, 那么就会涉及到合成矢量取模的运算 即SQRT(Vd² + Vq²),这个运算量比较大,所以用查表的方式。然而完全不理解是怎么算出合成矢量模长的。

纵观整个FOC算法,参与算法计算的参数中只有Vq,Vd是与实际物理量没有固定倍数关系的,所以必须在这里做归一化,思路是对的,我之前想的直接将Vd Vq映射到母线电压,这样可以直接映射到定时器的CNT值了,一步到位,但是都避不开要做开方运算。
不知道这个函数的原理你现在弄懂了没   跪求分享

知足者常乐 发表于 2018-4-6 10:47:03

狂奔的蜗牛soyoa 发表于 2018-2-8 10:50
这个函数是为了将经过PID调节后的Vd,Vq映射到0-32767相应的对应PWM占空比为0-100%, 那么就会涉及到合成 ...

楼主,你这个是哪一篇文档,我怎么没有看到?

知足者常乐 发表于 2018-4-7 19:30:26

我找到了,在2.0库的说明里
页: [1]
查看完整版本: STM32 FOC中RevPark_Circle_Limitation