基于滑膜观测器的永磁同步电机控制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代码方便多了。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐