HC32F460 Simple FOC移植参考
本帖最后由 liangzhou1988 于 2024-6-30 00:06 编辑1 Simple FOC控制原理核心其实就是SVPWM调制,由三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波,能够使电机电流波形尽可能接近于理想的正弦波形。
SVPWM子程序(为了让代码看起来更简洁,所以程序中没有约束条件,参数设置一定要按要求范围输入):void setPhaseVoltage(float Uq, float Ud,float angle_el) {
intsector = (angle_el / _PI_3) + 1; //find the sector we are in currently float T1 = _SQRT3*_sin(sector*_PI_3 - angle_el) *Uq/driver.voltage_limit; float T2 = _SQRT3*_sin(angle_el - (sector-1)*_PI_3) *Uq/driver.voltage_limit; float T0 = 1 - T1 - T2;
float Ta,Tb,Tc; switch(sector){ case 1: Ta = T1 + T2 + T0/2; Tb = T2 + T0/2; Tc = T0/2; break; case 2: Ta = T1 +T0/2; Tb = T1 + T2 + T0/2; Tc = T0/2; break; case 3: Ta = T0/2; Tb = T1 + T2 + T0/2; Tc = T2 + T0/2; break; case 4: Ta = T0/2; Tb = T1+ T0/2; Tc = T1 + T2 + T0/2; break; case 5: Ta = T2 + T0/2; Tb = T0/2; Tc = T1 + T2 + T0/2; break; case 6: Ta = T1 + T2 + T0/2; Tb = T0/2; Tc = T1 + T0/2; break; default:// possible error state Ta = 0; Tb = 0; Tc = 0;}//calculate the phase voltages and center float Ua = Ta*driver.voltage_limit; float Ub = Tb*driver.voltage_limit; float Uc = Tc*driver.voltage_limit;
driver.setPwm(Ua,Ub,Uc);}
2 调试方法
1、开环控制,只能使用电压模式,电流模式需要采样电流,那就是闭环了,2、一般设置Ud=0,所以只需设置Uq。在SimpleFOC中voltage_limit最终赋值Uq,3、Uq设置太大,电机发热严重,Uq设置太小,电机没劲转不动或者转不快,所以一定要根据电机相电阻设置大小,4、θ不是当前的角度,是目标角度,就是下次计算时的角度。
3 移植完成工程截图
4 参考意义:A 软件意义:HC32F460 FOC电机基础驱动参考(主频,GPIO, TMR4触发ADC,PWM,SVPWM,PARK逆变换);B 硬件意义:可用于验证基础硬件的好坏,选择合适的目标转速和Uq,可以让电机实现较小电流的慢速旋转,则基础硬件正常,否则需要排查驱动电路的故障。
5硬件参考详见附件;欢迎讨论。软件附件超过10M,传不上去,详询18688968198;
感谢分享 开关元件组成的特定开关模式产生的脉宽调制波 程序中没有约束条件,参数设置一定要按要求范围输入 FOC控制算法写好了,电机的运行效果确实不一样 好高深的东西。FOC电机驱动。也成了专门的知识,。 哪个版本的simplefoc 移植起来方便不方便啊 FOC的目的是通过解耦控制磁场的d轴和q轴电流,使得电机的控制变得更加高效和精确。
页:
[1]