基于滑膜观测器技术的永磁同步电机MATLAB仿真模型研究与实践
永磁同步电机的无传感器控制这两年越来越火,滑膜观测器作为其中扛把子技术,今天咱们就上手撸一个Matlab仿真模型。先说说滑膜观测器的精髓——这玩意儿就像个电子侦探,通过测量电流电压这些表面现象,把藏在电机内部的转子位置和转速给揪出来。2)滑膜控制的开关量波形,应该是高频抖动的方波;这段代码里的sign函数就是滑膜观测器的灵魂开关,k值选得太大容易抖振,太小又跟踪不上。这里有个坑要注意:坐标变换用的
基于滑膜观测器的永磁同步电机控制MATLAB仿真模型.
永磁同步电机的无传感器控制这两年越来越火,滑膜观测器作为其中扛把子技术,今天咱们就上手撸一个Matlab仿真模型。先说说滑膜观测器的精髓——这玩意儿就像个电子侦探,通过测量电流电压这些表面现象,把藏在电机内部的转子位置和转速给揪出来。
先整点硬核的,滑膜观测器的核心方程得摆出来:
function [theta_est, omega_est] = SMO(I_alpha, I_beta, V_alpha, V_beta)
persistent z_alpha z_beta;
if isempty(z_alpha)
z_alpha = 0; z_beta = 0;
end
Ld = 0.008; Lq = 0.012; Rs = 2.8;
k = 150; % 滑膜增益
% 电流误差计算
e_alpha = (1/Ld)*(V_alpha - Rs*I_alpha) - (1/Ld)*z_alpha;
e_beta = (1/Lq)*(V_beta - Rs*I_beta) - (1/Lq)*z_beta;
% 滑膜控制律
z_alpha = k * sign(e_alpha);
z_beta = k * sign(e_beta);
% 反正切求角度
theta_est = atan2(z_beta, z_alpha);
omega_est = diff(theta_est)/Ts; % Ts是采样时间
end
这段代码里的sign函数就是滑膜观测器的灵魂开关,k值选得太大容易抖振,太小又跟踪不上。实际调试时建议先设个中间值,比如150,再根据波形微调。
基于滑膜观测器的永磁同步电机控制MATLAB仿真模型.
接下来整个控制环路的结构:
% 主仿真循环
for t = 0:Ts:Tend
% 读取实际电流(仿真时用电机模型生成)
[I_alpha_real, I_beta_real] = PMSM_Model(V_alpha, V_beta);
% 滑膜观测器估算
[theta_est, omega_est] = SMO(I_alpha_real, I_beta_real, V_alpha, V_beta);
% 电流环控制(举个PI调节的例子)
Iq_ref = 10; % 假设q轴电流给定
Vq = Kp*(Iq_ref - Iq_meas) + Ki*integral_error;
% 坐标变换
V_alpha = Vq * cos(theta_est);
V_beta = Vq * sin(theta_est);
end
这里有个坑要注意:坐标变换用的角度必须是估算角度,别手滑用了真实角度(虽然仿真时有真实值),否则就变成开环自嗨了。
仿真跑起来后重点看三个波形:1)估算转速和实际转速的跟踪情况,初期可能有相位差;2)滑膜控制的开关量波形,应该是高频抖动的方波;3)q轴电流是否跟住设定值。遇到观测角度漂移的情况,八成是滑膜增益没调好或者电机参数设错了。
最后给个调参小技巧:把观测器带宽设得比系统带宽高5-10倍,比如电机额定转速2000rpm对应约33Hz,观测器带宽搞到200Hz左右比较合适。Matlab里调参的时候可以直接在命令行边改边跑,比重新编译C代码方便多了。

更多推荐
所有评论(0)