PMSM控制中的无感算法:包括定位、电流闭环强拖、角度渐变切换、速度电流双闭环、无传感器角度估...
PMSM控制无感算法:定位+电流闭环强拖+ 角度渐变切换+ 速度电流双闭环+ 无传感器角度估算SMO+ PLL 控制方式 Simulink 仿真模型
最近在搞PMSM无感控制方案验证,发现启动阶段的平滑过渡和观测器稳定性是真要命。直接上干货,咱们聊聊怎么用Simulink搭一个包含强拖启动和滑模观测器(SMO)的完整控制模型,重点看几个关键代码实现。
启动阶段的核心是电流闭环强拖,这时候还没角度反馈呢。在Simulink里搞了个强制旋转的电压矢量发生器,核心参数是设定好的初始拖动频率。代码里这个循环设定特别要注意斜坡时间:
% 强拖阶段角度生成
if t < 0.1
theta_forced = 0; % 初始定位
elseif t < 0.3
theta_forced = 2*pi*5*(t-0.1); % 5Hz斜坡
else
theta_forced = 2*pi*20*(t-0.3) + 2*pi*5*0.2; % 20Hz加速
end
这里0.3秒的渐变时间参数直接关系到电机能否顺利起转,时间太短容易导致失步。实测发现当拖动电流设定在额定电流30%时,机械特性最硬,适合大多数中惯量负载。
PMSM控制无感算法:定位+电流闭环强拖+ 角度渐变切换+ 速度电流双闭环+ 无传感器角度估算SMO+ PLL 控制方式 Simulink 仿真模型
切到无感模式时最怕角度跳变,这里用了αβ轴电流差值作为切换条件。模型里搞了个状态机控制切换逻辑,关键代码段长这样:
function switch_flag = fcn(I_alpha_obs, I_beta_obs, I_alpha_ref, I_beta_ref)
error = sqrt((I_alpha_obs - I_alpha_ref)^2 + (I_beta_obs - I_beta_ref)^2);
persistent count;
if isempty(count)
count = 0;
end
if error < 0.05 % 电流偏差阈值
count = count + 1;
else
count = 0;
end
switch_flag = (count > 50); % 连续50个周期达标才切换
这种滞后比较设计能有效避免高频扰动导致的误切换。注意阈值0.05对应的是标幺值,实际调试时要换算成实际电流值。
滑模观测器的实现最有趣,直接在Simulink里用MATLAB Function写了个带符号函数的版本:
function [e_alpha, e_beta] = SMO(v_alpha, v_beta, i_alpha, i_beta, Ld, Rs)
persistent i_alpha_hat i_beta_hat;
if isempty(i_alpha_hat)
i_alpha_hat = 0; i_beta_hat = 0;
end
k = 50; % 滑模增益
h = 0.0001; % 积分步长
e_alpha = i_alpha_hat - i_alpha;
e_beta = i_beta_hat - i_beta;
% 滑模面计算
s_alpha = sign(e_alpha);
s_beta = sign(e_beta);
% 观测器更新
di_alpha_hat = (v_alpha - Rs*i_alpha_hat + k*s_alpha)/Ld;
di_beta_hat = (v_beta - Rs*i_beta_hat + k*s_beta)/Ld;
i_alpha_hat = i_alpha_hat + di_alpha_hat * h;
i_beta_hat = i_beta_hat + di_beta_hat * h;
这个实现里有个坑——符号函数引起的抖振会污染反电动势估计值。后来在PLL环节加了二阶锁相环,用了个双积分结构:
function [theta_est, omega_est] = PLL(e_alpha, e_beta, Kp, Ki)
persistent integ_angle integ_error;
if isempty(integ_angle)
integ_angle = 0; integ_error = 0;
end
theta_delta = atan2(e_beta, e_alpha);
error = theta_delta - integ_angle;
integ_error = integ_error + Ki * error;
omega_est = Kp * error + integ_error;
integ_angle = integ_angle + omega_est * 0.0001; % 对应仿真步长
theta_est = integ_angle;
锁相环的带宽设置特别讲究,通常取电机额定转速的3-5倍。调试时发现当Kp=200,Ki=5000时,在2000rpm突变工况下相位滞后控制在15度以内。
整套模型跑下来最爽的时刻是切模式时的波形——速度环给定从强拖的20Hz跳变到15Hz,实际转速经过约0.1秒完成跟踪,切换瞬间的转矩波动控制在5%以内。不过也翻过车,有一次SMO增益调太大导致高频振荡,电机直接啸叫着抖成筛子。所以说,无感控制这玩意,仿真成功只是开始,真上硬件还得跟示波器死磕好几天。

更多推荐
所有评论(0)