PMSM转速环ADRC控制仿真,自抗扰控制,抗扰性仿真效果不错
拆开电机控制的黑盒子,总有个绕不过去的坎——干扰。传统PID抱着数学模型不撒手,参数调得死去活来,负载突变时还是得翻车。今天咱们来玩点野路子,用自抗扰控制(ADRC)给永磁同步电机转速环上点强度。
ADRC这玩意儿最骚的操作就是把系统内外扰动打包处理。举个栗子,在Simulink里搭转速环时,扩张状态观测器(ESO)的代码实现长这样:
function [z1, z2, z3] = ESO(y, u, h) persistent z1_prev z2_prev z3_prev if isempty(z1_prev) z1_prev = 0; z2_prev = 0; z3_prev = 0; end e = z1_prev - y; z1 = z1_prev + h*(z2_prev - beta01*e); z2 = z2_prev + h*(z3_prev - beta02*e + b0*u); z3 = z3_prev + h*(-beta03*e); z1_prev = z1; z2_prev = z2; z3_prev = z3; end这段代码藏着三个彩蛋:beta系数的选择直接决定观测器反应速度,b0是系统增益的估计值。重点看z3这个状态变量,它就像个垃圾回收站,把模型误差、负载突变这些幺蛾子全吃进去。
仿真时故意给电机加个暴击——0.3秒时突加5N·m负载。ADRC和PID的转速响应对比图里,PID选手抖得跟帕金森似的,恢复时间超过100ms;ADRC这边稳如老狗,波动幅度不到20rpm,5ms内回归设定值。抗扰效果肉眼可见的差距。
不过别急着高潮,ADRC参数整定有讲究。建议先用带宽法确定ESO参数:
beta01 = 3*omega_o; beta02 = 3*omega_o^2; beta03 = omega_o^3;这里omega_o建议取控制系统带宽的3-5倍。控制器部分更简单粗暴:
u0 = kp*(v1 - z1) + kd*(v2 - z2); u = (u0 - z3)/b0;看到没?z3直接把扰动抵消了,这才是真正的"以毒攻毒"。不过实际调试时b0要是估不准,效果打对折都是轻的。
最后丢个彩蛋:在代码里把ESO的离散化步长改大,立马能看到观测器延迟导致的控制量抽搐。所以玩ADRC,别光盯着控制律,数值实现的细节才是魔鬼。