请选择 进入手机版 | 继续访问电脑版

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

FOC2.0 RevPark_Circle_Limitation函数分析

[复制链接]
狂奔的蜗牛soyoa 提问时间:2018-2-8 11:01 /
最近开始着手将FOC2.0的库函数从头重写一遍,主要是为了了解FOC的各个技术细节,同时改写2.0库中一些自己不是很理解的函数。目前硬件驱动已全部完成,开始着手写算法部分。现在卡在RevPark_Circle_Limitation() 这个函数上。

纵观整个FOC算法,参与计算的参数中,只有Vd,Vq是进过PID调节得到的值,与实际物理量之间没有固定的倍数关系。所以要对Vd,Vq做归一化处理。然后就可以映射到你想映射的区间中。 这里面就涉及到SQRT(Vd² + Vq²) ,计算量比较大,2.0库中用RevPark_Circle_Limitation()来计算合成矢量模长,并查表,只是这个函数一直没看懂,希望有精通的大神指教一二,感谢!

函数如下:
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;  // min value 0, max value 2*32767*32767

if ( temp > (u32)(( MAX_MODULE * MAX_MODULE) ) ) // (Vd^2+Vq^2) > MAX_MODULE^2 ?
   {
   u16 index;

   temp /= (u32)(512*32768);  // min value START_INDEX, max value 127
   temp -= START_INDEX ;   // min value 0, max value 127 - START_INDEX
   index = circle_limit_table[(u8)temp];

   temp = (s16)Stat_Volt_q_d.qV_Component1 * (u16)(index);
   Stat_Volt_q_d.qV_Component1 = (s16)(temp/32768);  

   temp = (s16)Stat_Volt_q_d.qV_Component2 * (u16)(index);
   Stat_Volt_q_d.qV_Component2 = (s16)(temp/32768);  
   }

}


微信截图_20180208105126.png
收藏 评论4 发布时间:2018-2-8 11:01

举报

4个回答
努力的人 回答时间:2018-2-23 19:34:52
你应该在好好学习一下电机控制理论,推荐你一本书永磁无刷电机及其驱动技术,电流环控制器的输出得到了vd,vq,需要进行限幅,然后经过反PARK变换得到阿尔法-贝塔坐标系下的分量,然后经过SVPWM算法,驱动三相全桥,进而驱动电机

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

moon-362134 回答时间:2018-2-24 08:32:08
楼主思路明了,真心厉害,向您学习
jiang2009hit 回答时间:2018-5-5 10:58:56
你好,在不在,我也遇到这样的问题,我想请教点事
祥云123 回答时间:2022-11-27 19:17:13
楼主明白了吗,我也遇到这个问题,有偿问答hu161128祥云

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版