PMSM传统滑模观测器+PLL仿真模型,加上了相位补偿观测波形与实际波形基本重合。 以下图一为未加补偿的电角度,转速以及三相波形。 图二为加上补偿的波形。 效果较好。
永磁同步电机控制里滑模观测器是个经典玩法,但实际调起来总有几个坑得填。今天咱们重点聊聊相位补偿这个事儿——不加补偿的时候波形看着像喝醉了酒似的,补偿之后马上规规矩矩跟参考波形对齐了,这中间的代码魔术是怎么变的?
先看传统滑模观测器的核心代码,Matlab里大概长这样:
function [theta_est, speed_est] = SMO_Observer(v_alpha, v_beta, i_alpha, i_beta) persistent z_alpha_prev z_beta_prev; k = 100; % 滑模增益 H = 0.02; % 滞环宽度 e_alpha = v_alpha - Rs*i_alpha; e_beta = v_beta - Rs*i_beta; % 滑模函数 z_alpha = sign(e_alpha - Lq*i_alpha)*H; z_beta = sign(e_beta - Lq*i_beta)*H; % 低通滤波 theta_est = atan2(z_beta_prev, z_alpha_prev); z_alpha_prev = z_alpha; z_beta_prev = z_beta; end这里有个坑:滑模函数输出的高频抖动直接做反正切,相当于把噪声一起算进角度里了。实际跑出来的波形就像图1里的电角度曲线,抖得跟筛糠似的,转速估计也跟着跳街舞。
这时候PLL(锁相环)就该上场救场了。但直接怼个PLL上去还不够,得加个相位补偿器:
function [compensated_theta] = Phase_Compensator(raw_theta) persistent integral_term; Kp = 150; Ki = 3000; delta_theta = raw_theta - compensated_theta_prev; % 比例积分补偿 integral_term = integral_term + Ki*delta_theta*Ts; compensated_theta = Kp*delta_theta + integral_term; end这补偿器相当于给角度估计加了双保险。比例项快速响应突变,积分项慢慢磨平残余误差。图2里那些突然的相位跳变被压得服服帖帖,实测波形和观测波形基本重合,跟双胞胎似的。
重点在观测器与PLL的对接处:
% 主循环处理 [raw_theta] = SMO_Observer(v_alpha, v_beta, i_alpha, i_beta); compensated_theta = Phase_Compensator(raw_theta); [final_theta, speed] = PLL_Module(compensated_theta);这里相当于三级流水线:滑模出粗料,补偿器精修,PLL最后抛光。特别要注意补偿器的积分系数别设太大,否则遇到转速突变时会过冲。之前掉过这个坑,电机转速从1000rpm突降到500rpm时,波形直接表演了个鲤鱼打挺。
最后说下三相波形对齐的秘诀。补偿后的电流环代码里得同步调整Park变换的角度:
Iq_ref = speed_controller(); % 速度环输出 Idq = [Id_ref; Iq_ref]; Iabc = inv_Park(Idq, final_theta + compensation_delay); % 补上延迟角这个compensation_delay一般取个0.5~1个PWM周期的时间,具体得看开关频率。调好了就像图2里那样,三相电流波形又圆润又对称,跟示波器抓的真实波形几乎分不清谁是谁。
说到底,相位补偿就是个精细活。既要压住观测器的高频躁动,又要跟上动态变化,调参的时候建议备杯咖啡——别问我是怎么知道的。