永磁同步电机(PMSM)的无传感器控制一直是电机驱动领域的热点问题。在众多解决方案中,模型参考自适应系统(MRAS)因其结构简单、实现方便而备受工程师青睐。这种控制方案的核心在于建立两个相互较劲的数学模型——参考模型和可调模型。
参考模型基于电机理想方程直接计算转子位置,相当于一个"理论派";可调模型则根据实际测量的电流和电压进行估算,扮演着"实践派"的角色。两个模型输出的误差信号通过自适应机制不断调整参数,最终实现转子位置和转速的准确估计。这种"理论指导实践,实践修正理论"的闭环机制,正是MRAS的精妙之处。
在实际工程应用中,MRAS方案相比其他无传感器控制方法有几个显著优势:
注意:MRAS在极低速(<2%额定转速)和零速附近性能会明显下降,这时需要考虑结合高频注入等其他方法。
典型的MRAS无传感器矢量控制系统包含以下几个关键部分:
图1所示的系统结构中,最核心的就是MRAS观测器部分。它由三个主要组件构成:
参考模型采用永磁同步电机在α-β静止坐标系下的电压方程:
code复制uα = Rs*iα + Ls*diα/dt - ωe*ψf*sinθ
uβ = Rs*iβ + Ls*diβ/dt + ωe*ψf*cosθ
其中:
在Simulink中,可以用以下方式实现参考模型:
matlab复制function [i_alpha_ref, i_beta_ref] = reference_model(u_alpha, u_beta, theta_hat, omega_hat)
persistent i_alpha i_beta;
if isempty(i_alpha)
i_alpha = 0;
i_beta = 0;
end
% 电机参数
Rs = 0.5; % 定子电阻(Ω)
Ls = 0.003; % 定子电感(H)
psi_f = 0.2; % 永磁体磁链(Wb)
Ts = 1e-4; % 采样时间(s)
% α轴电流计算
di_alpha = (u_alpha - Rs*i_alpha + omega_hat*psi_f*sin(theta_hat)) / Ls;
i_alpha = i_alpha + di_alpha * Ts;
% β轴电流计算
di_beta = (u_beta - Rs*i_beta - omega_hat*psi_f*cos(theta_hat)) / Ls;
i_beta = i_beta + di_beta * Ts;
i_alpha_ref = i_alpha;
i_beta_ref = i_beta;
end
可调模型采用电流模型,其输出为估算的β轴电流:
matlab复制function i_beta_hat = adjustable_model(i_alpha, theta_hat)
% 假设电流模型为理想模型
i_beta_hat = -i_alpha * tan(theta_hat);
end
在实际应用中,这个模型可以根据具体电机类型进行修改。对于内嵌式永磁同步电机(IPMSM),需要考虑Ld和Lq的不一致性。
自适应机构是MRAS的核心,它根据参考模型和可调模型的输出误差来调整估算参数。常用的自适应律为PI型:
matlab复制function [theta_hat, omega_hat] = mras_adaptation(i_alpha, i_beta_hat, Ts)
persistent theta_integral;
if isempty(theta_integral)
theta_integral = 0;
end
% 误差计算
error = i_alpha - i_beta_hat;
% 自适应参数
Kp = 0.5; % 比例系数
Ki = 100; % 积分系数
% 积分分离抗饱和
if abs(error) > 0.1
theta_integral = theta_integral + Kp * error * Ts;
else
theta_integral = theta_integral + (Kp + Ki) * error * Ts;
end
% 输出估算值
theta_hat = theta_integral;
omega_hat = (theta_hat - delay(theta_hat)) / Ts;
end
自适应参数的选取直接影响系统性能:
比例系数Kp:主要影响动态响应速度
积分系数Ki:影响稳态精度和低速性能
采样时间Ts:应远小于电流环控制周期
实操技巧:可以先在仿真中固定Kp,逐步增大Ki直到出现振荡,然后回退20%作为最终值。
转速估算通常采用锁相环(PLL)结构,其实现代码如下:
matlab复制function omega_hat = pll_update(theta_err, Ts)
persistent omega_integral;
if isempty(omega_integral)
omega_integral = 0;
end
% PLL参数
Kp_pll = 15;
Ki_pll = 800;
% 积分项更新
omega_integral = omega_integral + Ki_pll * theta_err * Ts;
% 抗积分饱和
omega_integral = sign(omega_integral) * min(abs(omega_integral), 1000);
% 输出估算转速
omega_hat = Kp_pll * theta_err + omega_integral;
end
为改善转速突变时的响应性能,可以加入前馈补偿:
matlab复制function omega_hat = pll_with_feedforward(theta_err, omega_ref, Ts)
% 基础PLL估算
omega_pll = pll_update(theta_err, Ts);
% 前馈补偿
feedforward_gain = 0.7; % 前馈系数
omega_hat = omega_pll + feedforward_gain * omega_ref;
end
这种结构可以将转速阶跃响应时间从50ms缩短到20ms左右,显著改善动态性能。
在Simulink中搭建MRAS控制系统时,建议采用分层模块化设计:
使用结构体存储不同参数组,便于快速切换:
matlab复制% 参数配置组
params = struct(...
'fast_response', struct('Kp',0.8, 'Ki',150, 'Kp_pll',20, 'Ki_pll',1000),...
'stable', struct('Kp',0.5, 'Ki',100, 'Kp_pll',15, 'Ki_pll',800),...
'low_speed', struct('Kp',0.3, 'Ki',200, 'Kp_pll',10, 'Ki_pll',1200)...
);
current_mode = 'stable'; % 切换不同模式
disp(['当前模式:', current_mode]);
仿真完成后,使用以下代码绘制关键波形:
matlab复制% 获取仿真数据
simOut = sim('PMSM_MRAS');
logsout = simOut.get('logsout');
% 提取转速信号
speed_ref = logsout.get('speed_ref').Values;
speed_actual = logsout.get('speed_actual').Values;
speed_est = logsout.get('speed_est').Values;
% 绘制转速曲线
figure;
plot(speed_ref.Time, speed_ref.Data, 'b');
hold on;
plot(speed_actual.Time, speed_actual.Data, 'g');
plot(speed_est.Time, speed_est.Data, 'r--');
legend('参考转速','实际转速','估算转速');
xlabel('时间(s)'); ylabel('转速(rpm)');
title('转速跟踪性能');
可能原因及解决方法:
电机参数不准确
PWM开关噪声干扰
自适应参数不合适
改善措施:
解决方案:
经验分享:在实际调试时,建议先用仿真确定参数范围,再在实物平台上微调。同时记录不同工况下的波形,建立参数调整与性能变化的对应关系。