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

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
收藏 评论3 发布时间:2018-2-8 11:01

举报

3个回答
努力的人 回答时间: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
你好,在不在,我也遇到这样的问题,我想请教点事

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版