本文主要是介绍STM32F4 磁链观测器+PLL 无感无刷电机位置驱动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在前面几节我们介绍了基于stm32f1的定点运算的滑膜观测器反正切以及stm32f4的浮点运算滑膜+PLL的案例,大家反馈的还挺好,在做售后的过程中有小伙伴咨询了磁链观测器和隆伯格观测器,针对磁链观测器咨询的较多,我们调试了磁链的程序,以及在这一讲我们将为大家简单讲解一下磁链观测器的使用方法。
硬件测试平台依旧使用我们前面用到的滑膜+PLL的 KY_Motor无刷电机驱动板:
PMSM的FOC控制需要位置信息。在一些应用中,安装位置传感器很麻烦,例如,在一些真空泵中,由于密封性问题,不可能将电机轴伸出电机壳外。在起重机和电梯应用中,电机和逆变器之间的距离很大,传感器信号衰减和噪声干扰很高。在一些家用设备,如冰箱和空调,成本限制阻碍了传感器的使用。
PMSM无传感器技术大致分为三种类型:反电动势(EMF)、电感和磁链。
转子磁链观测器利用定子电压、定子电流或转子转速信号观测出转子磁链的相位和幅值。如果转子磁链的相位观测不准,那么定子电流的励磁分量与转矩分量就不能实现完全的解耦,可能会造成系统的振荡甚至不稳定。如果观测出转子磁链的幅值偏大,会使得电机运行在弱磁状态,减小带载能力;如果观测出转子磁链的幅值偏小,会导致过大的励磁电流,使电机的铁心饱和,严重时还会导致绕组过热而烧坏电机。因此决定整个矢量控制系统性能优劣的最为关键环节就是转子磁链观测器。
电压型磁链观测器方程
从式(2-51)可以发现该观测器具有以下特点:
(1) 该模型与转子电阻无关,且不需要电机转速信息,适合用于无速度传感器矢量控制系统;
(2) 包含一纯积分项,被积项的初始相位与直流偏置都会影响积分结果;
(3) 低速时观测器性能较差。因为低速时给定的定子电压幅值小,电机端电压难以精确获得,定子电阻的阻值在运行过程中又会发生变化,使得被积项产生明显的相对误差。
电流型磁链观测器方程
从(2-53)可以看出磁链观测器具有以下特点:
1、需要实测的电子电流和转速信号,不需要定子电压信号;
2、包含转子时间常数和互感参数,当电机温升和磁路饱和时会对这些参数产生较大影响;
3、不包含纯积分环节,故其观测值是渐进收敛的。
如何用C语言将磁链方程转述出来:
只需要下面四步就可以将磁链和PLL表述出来。
1、void Observer_Par_init(void);//初始化磁链参数
2、Flux_Observer_Angle(float Ialpha,float Ibeta,float Ualpha,float Ubeta);//磁链观测器角度
3、Observer_Flux(PFlux_Obser ptHandle);//磁链观测器实现
4、Flux_Pll_Compute(PFlux_Obser ptHandle);//磁链+PLL计算
磁链初始化需要初始化电机参数,增益以及PI参数,完整函数如下:
void Observer_Par_init(void)
{Flux_Obser.Ls = Motor_Ls;Flux_Obser.Flux = Motor_Flux*Motor_Flux;Flux_Obser.Gain = 1000000.0f; Flux_Obser.Rs = Motor_Rs;Flux_Obser.tPll.Kp= 300.00f; Flux_Obser.tPll.Ki = 100.0f;Flux_Obser.tPll.Speed_coeff = 60.0f/(2.0f*Motor_Pn*PI);//每Ts角度增加Ui电角度 可求速度Flux_Obser.tPll.Kslf = LPF_CutFre(100.0f); //100Hz 截止频率}
磁链观测器角度函数:
void Flux_Observer_Angle(float Ialpha,float Ibeta,float Ualpha,float Ubeta)
{Flux_Obser.I_Alpha = Ialpha;Flux_Obser.I_Beta = Ibeta;Flux_Obser.U_Alpha = Ualpha;Flux_Obser.U_Beta = Ubeta;Pll_Compute(&Flux_Obser.tPll,Flux_Obser.Est_Yita_alpha,Flux_Obser.Est_Yita_beta);
}
磁链观测器+PLL计算函数:
void Flux_Pll_Compute(PFlux_Obser ptHandle)
{float Sin_Value = 0;float Cos_Value = 0;Cos_Value = arm_cos_f32(ptHandle->tPll.Theta);Sin_Value = arm_sin_f32(ptHandle->tPll.Theta);ptHandle->tPll.Err = ptHandle->Est_Yita_beta * Cos_Value - \ptHandle->Est_Yita_alpha * Sin_Value;ptHandle->tPll.Interg +=ptHandle->tPll.Err * ptHandle->tPll.Ki;ptHandle->tPll.Ui = ptHandle->tPll.Err * ptHandle->tPll.Kp + ptHandle->tPll.Interg;ptHandle->tPll.Theta += ptHandle->tPll.Ui;ptHandle->tPll.Theta = (ptHandle->tPll.Theta > 2*PI)? ptHandle->tPll.Theta- 2*PI :ptHandle->tPll.Theta;ptHandle->tPll.Theta = (ptHandle->tPll.Theta < 0)? ptHandle->tPll.Theta + 2*PI : ptHandle->tPll.Theta;ptHandle->tPll.SpeedLpf_Rpm = ptHandle->tPll.SpeedLpf_Rpm + ptHandle->tPll.Kslf * (ptHandle->tPll.Speed_Rpm - ptHandle->tPll.SpeedLpf_Rpm);}
以上就是磁链观测器+PLL在stm32f4平台上实现的全过程,写的比较简单,磁链属于foc控制的进阶教程,相信有foc控制基础的学员,看了这个教程能有一些启发,也能自己写出完整的磁链控制程序,能够更加深入的去实现磁链控制以及无感电机foc控制。
下面是完整的测试视频:
视频中我们分别对电流波形进行了上位机显示,通过启动波形,电位器调速的波形来形象直观的感受磁链观测器的启动过程,以及带负载的情况。
stm32f4平台 磁链+PLL 无感无刷电机控制实例
这篇关于STM32F4 磁链观测器+PLL 无感无刷电机位置驱动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!