你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 FOC中RevPark_Circle_Limitation

[复制链接]
wuruize 提问时间:2015-9-17 10:23 /
图片中的表格是怎么算的,为什么不同的MMI表格内的数的个数还不一样

这个表格是怎么算出来的

这个表格是怎么算出来的
收藏 1 评论7 发布时间:2015-9-17 10:23

举报

7个回答
左岸右岸 回答时间: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值了,一步到位,但是都避不开要做开方运算。
不知道这个函数的原理你现在弄懂了没   跪求分享
微信截图_20180208105126.png
知足者常乐 回答时间: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库的说明里
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版