搞电机控制的兄弟应该都懂,无感算法里磁链观测器+PLL锁相环的组合有多香。今天直接上干货,聊聊非线性磁链观测器的实现套路和实操中那些让你少掉几根头发的技巧
永磁同步电机非线性磁链无感算法、Flux观测器锁相环PLL仿真模型 flux计算电机磁链目的为了使得估计的磁链收敛于实际磁链 pll通过估计磁链计算经过pi调节后使得估计角度跟踪实际角度 模型描述及资料 1送非线性无感磁链算法推导过程pdf 2 磁链观测器调试经验仿真与实际电机控制一致算法经过开发版集成测试 3该模型全部采用离散化建模可直接进行模型生成代码送基于MBD开发 的stm32实际电机控制程序 4无感观测器的角度能够很快追踪到电机实际角度可以直接移植到自己的模型当中使用再配合调参经验一并使用先看磁链观测器的核心逻辑——用电压电流模型硬刚非线性。别被公式吓到直接看离散化代码// 离散磁链计算α-β坐标系 void Flux_Observer(float u_alpha, float u_beta, float i_alpha, float i_beta) { static float psi_alpha_hat, psi_beta_hat; // 估计磁链 float Ts 0.0001; // 10kHz采样 // 电压模型更新 psi_alpha_hat (u_alpha - R*i_alpha)*Ts - w_hat*psi_beta_hat*Ts; psi_beta_hat (u_beta - R*i_beta)*Ts w_hat*psi_alpha_hat*Ts; // 电流模型修正 psi_alpha_hat K1*(Ld*i_alpha - psi_alpha_hat)*Ts; psi_beta_hat K1*(Lq*i_beta - psi_beta_hat)*Ts; }这里用前向欧拉法做离散化重点在于电压模型和电流模型的混合校正。K1这个增益参数直接决定收敛速度实测超过2000后系统开始抖但低于500又跟乌龟爬似的——后面调参部分细说。磁链算准了PLL怎么锁角度来看这段骚操作// PLL角度跟踪 float PLL_Update(float psi_alpha_hat, float psi_beta_hat) { static float theta_hat, epsilon; float delta_theta; // 反正切解算 float theta_raw atan2f(psi_beta_hat, psi_alpha_hat); // 相位差计算 delta_theta theta_raw - theta_hat; // PI调节注意角度循环处理 if(delta_theta PI) delta_theta - 2*PI; else if(delta_theta -PI) delta_theta 2*PI; epsilon Kp*delta_theta Ki*delta_theta*Ts; // 更新角度估计 theta_hat (epsilon w_base)*Ts; return theta_hat; }这里暗藏两个坑角度解算时的象限跳变和PI参数整定。曾经有个兄弟把Ki设大了十倍电机直接变蹦迪灯转子上天...永磁同步电机非线性磁链无感算法、Flux观测器锁相环PLL仿真模型 flux计算电机磁链目的为了使得估计的磁链收敛于实际磁链 pll通过估计磁链计算经过pi调节后使得估计角度跟踪实际角度 模型描述及资料 1送非线性无感磁链算法推导过程pdf 2 磁链观测器调试经验仿真与实际电机控制一致算法经过开发版集成测试 3该模型全部采用离散化建模可直接进行模型生成代码送基于MBD开发 的stm32实际电机控制程序 4无感观测器的角度能够很快追踪到电机实际角度可以直接移植到自己的模型当中使用再配合调参经验一并使用说到离散化建模Simulink里别傻乎乎用连续积分器。对比下正确姿势% 错误示范连续积分 1/(s) % 正确姿势Tustin变换 ( Ts*(z1) ) / (2*(z-1) )用Tustin变换能保住相位特性生成代码时C编译器也不会问候你家人。实测离散化后的模型在STM32F4上跑比某些论文里的连续模型响应快30%以上。移植到实际电机时记住这三板斧先调K1让磁链曲线别发散再调PLL的Kp让角度能跟上最后微调Ki消除静差有个邪门现象同一套参数在1kW电机上好使换到5kW电机就翻车。后来发现是磁链观测器的电阻参数没随温度更新加个在线参数辨识立马稳如老狗。最后甩个调试秘籍当角度估计震荡时先把Ki设零Kp从0开始往上撸直到出现等幅振荡然后取70%的值再加Ki。实测比什么Ziegler-Nichols法靠谱多了。