PMSM自抗扰控制建模与工程实现
永磁同步电机(PMSM)凭借高功率密度与优异的动态特性,已成为高精度伺服系统的首选执行机构。然而,传统PI控制难以应对参数摄动、负载突变等非线性扰动。自抗扰控制(ADRC)通过扩张状态观测器(ESO)实时估计并补偿总扰动,为PMSM提供了更强的鲁棒性。本文围绕ADRC在PMSM驱动系统中的工程实现展开,涵盖电流环与速度环的完整设计流程,并给出基于M语言的模块化实现方案。
1. PMSM数学模型与ADRC适配性分析
1.1 旋转坐标系下的电机方程
在d-q同步旋转坐标系中,表贴式PMSM的电磁关系可描述为:
% PMSM电压方程(d-q轴)
u_d = R_s * i_d + L_s * di_d/dt - p_n * ω_e * L_s * i_q
u_q = R_s * i_q + L_s * di_q/dt + p_n * ω_e * (L_s * i_d + ψ_f)
其中u_d, u_q为定子电压分量,i_d, i_q为电流分量,L_s为同步电感,ψ_f为永磁体磁链,p_n为极对数,ω_e为电角速度。
电磁转矩方程与机械运动方程:
T_e = 1.5 * p_n * ψ_f * i_q % 转矩方程
J * dω_m/dt = T_e - T_L - B * ω_m % 机械方程
1.2 ADRC的适配优势
将上述方程整理为二阶积分器串联型标准形式:
% 电流环(以q轴为例)
di_q/dt = f_iq + b_iq * u_q
% 其中 f_iq = -(R_s/L_s)*i_q - p_n*ω_e*i_d - (p_n*ω_e*ψ_f)/L_s 视为总扰动
% b_iq = 1/L_s 为控制增益
该形式恰好匹配ADRC的核心假设——系统可表示为积分串联型加集总扰动,为ESO的设计奠定基础。
2. 扩张状态观测器(ESO)设计
2.1 三阶ESO的离散化实现
针对二阶被控对象,ESO需估计状态量x_1, x_2及扩张状态x_3(总扰动)。采用欧拉法离散化:
function z_eso = eso_update(z_eso, u, y, h, beta_vec, b0)
% 输入:z_eso - [z1; z2; z3] 观测器状态
% u - 控制量, y - 实际输出, h - 采样周期
% beta_vec - [β01; β02; β03] 观测器增益
% b0 - 控制增益估计值
e = z_eso(1) - y; % 估计误差
% 非线性函数 fal(e,α,δ)
fe = fal(e, 0.5, 0.01);
% 状态更新
z_eso(1) = z_eso(1) + h * (z_eso(2) - beta_vec(1)*e);
z_eso(2) = z_eso(2) + h * (z_eso(3) - beta_vec(2)*fe + b0*u);
z_eso(3) = z_eso(3) + h * (-beta_vec(3)*fe);
end
function f = fal(e, alpha, delta)
if abs(e) <= delta
f = e / (delta^(1-alpha));
else
f = sign(e) * abs(e)^alpha;
end
end
2.2 观测器增益整定
采用带宽配置法,令观测器特征多项式为(s+ω_o)^3,则:
omega_o = 500; % 观测器带宽 (rad/s)
beta_01 = 3 * omega_o;
beta_02 = 3 * omega_o^2;
beta_03 = omega_o^3;
3. 电流环ADRC控制器实现
3.1 跟踪微分器(TD)设计
为获取平滑的微分信号并抑制噪声,采用如下快速离散TD:
function [v1, v2] = td_update(v1, v2, v, h, r, h0)
% v: 输入指令, r: 速度因子, h0: 滤波因子
d = r * h; % 边界层厚度
d0 = h0 * d; % 线性区间
a0 = sqrt(d^2 + 8*r*abs(v-v1));
if abs(v-v1) > d0
a = v2 + (a0 - d)/2 * sign(v-v1);
else
a = v2 + (v-v1)/h;
end
if abs(a) > d
sign_a = sign(a);
else
sign_a = a/d;
end
fhan = -r * sign_a;
v2 = v2 + h * fhan;
v1 = v1 + h * v2;
end
3.2 非线性状态误差反馈(NLSEF)
function u = nlsef(e1, e2, kp, kd, alpha1, alpha2, delta)
% e1: 位置误差, e2: 速度误差
u0 = kp * fal(e1, alpha1, delta) + kd * fal(e2, alpha2, delta);
% 扰动补偿
u = (u0 - z3) / b0; % z3来自ESO的扰动估计
end
3.3 电流环完整仿真代码
% PMSM电流环ADRC仿真参数
Ls = 1.5e-3; % 同步电感 (H)
Rs = 0.5; % 定子电阻 (Ω)
psi_f = 0.168; % 永磁体磁链 (Wb)
pn = 4; % 极对数
J_rotor = 0.001; % 转动惯量 (kg·m²)
% ADRC参数
wo_i = 800; % 电流环观测器带宽
wc_i = 500; % 控制器带宽
b0_i = 1/Ls; % 控制增益估计
% 初始化
iq_ref = 10; % q轴电流指令 (A)
iq = 0; % 实际电流
z_eso = zeros(3,1); % ESO状态
u_q = 0; % 控制电压
t_sim = 0:1e-5:0.05; % 仿真时间
% 数据记录
iq_log = zeros(size(t_sim));
uq_log = zeros(size(t_sim));
d_est_log = zeros(size(t_sim));
for k = 1:length(t_sim)
t = t_sim(k);
% 模拟负载扰动(0.02s注入)
if t > 0.02
T_L = 2.0; % 负载转矩突变
else
T_L = 0;
end
% 电机实际动态(简化模型)
diq = (u_q - Rs*iq - pn*psi_f*100) / Ls; % 假设转速100rad/s
iq = iq + diq * 1e-5;
% ESO更新
z_eso = eso_update(z_eso, u_q, iq, 1e-5, ...
[3*wo_i; 3*wo_i^2; wo_i^3], b0_i);
% TD安排过渡过程
[v1_td, v2_td] = td_update(0, 0, iq_ref, 1e-5, 1e4, 2);
% 计算误差
e1 = v1_td - z_eso(1);
e2 = v2_td - z_eso(2);
% NLSEF控制律
u0 = wc_i^2 * e1 + 2*wc_i * e2;
u_q = (u0 - z_eso(3)) / b0_i;
% 限幅
u_q = max(min(u_q, 300), -300);
% 记录
iq_log(k) = iq;
uq_log(k) = u_q;
d_est_log(k) = z_eso(3);
end
% 绘图分析
figure;
subplot(3,1,1);
plot(t_sim, iq_log, 'b', t_sim, iq_ref*ones(size(t_sim)), 'r--');
ylabel('i_q (A)'); title('电流环ADRC响应');
subplot(3,1,2);
plot(t_sim, uq_log, 'g');
ylabel('u_q (V)');
subplot(3,1,3);
plot(t_sim, d_est_log, 'm');
ylabel('扰动估计'); xlabel('时间 (s)');
4. 速度环ADRC设计与级联结构
4.1 速度环被控对象特性
速度环以电流环为内环,其动态可简化为:
dω/dt = (T_e - T_L)/J = (1.5*pn*ψ_f*i_q - T_L)/J
将i_q视为虚拟控制量,速度环同样可纳入ADRC框架。
4.2 双环级联ADRC架构
| 层级 | 控制目标 | ESO阶数 | 典型带宽 |
|---|---|---|---|
| 电流环(内环) | d-q轴电流跟踪 | 三阶 | 500-1000 Hz |
| 速度环(外环) | 转速精确调节 | 三阶 | 50-200 Hz |
% 速度环ADRC参数
wo_w = 200; % 速度环观测器带宽
wc_w = 100; % 速度环控制器带宽
b0_w = 1.5*pn*psi_f/J_rotor; % 等效控制增益
% 级联控制主循环
for k = 1:length(t_sim)
% 速度环:生成电流指令
omega_err = omega_ref - omega_m;
[z_w, u_iq_ref] = adrc_speed_loop(omega_m, omega_ref, z_w, b0_w, wo_w, wc_w);
% 电流环:跟踪电流指令
iq_ref = u_iq_ref;
[z_i, u_q] = adrc_current_loop(iq, iq_ref, z_i, b0_i, wo_i, wc_i);
% 更新电机状态
% ...
end
5. 参数整定与性能优化
5.1 带宽配置原则
内外环带宽需满足解耦条件:
% 带宽分离准则
wo_inner >= 5 * wc_outer; % 内环观测器带宽 >> 外环控制器带宽
wc_inner >= 3 * wc_outer; % 内环控制器带宽 >> 外环控制器带宽
5.2 抗饱和补偿策略
% 积分型抗饱和
function u_anti = anti_windup(u_raw, u_sat, u_prev, ki, Ts)
delta_u = u_sat - u_prev;
if abs(delta_u) > 0.01 % 存在饱和
u_anti = u_prev + ki * Ts * (u_raw - u_sat); % 条件积分
else
u_anti = u_raw;
end
end
6. 基于M文件的模块化仿真平台
6.1 代码组织架构
% 主仿真脚本:main_pmsm_adrc.m
% ├── 参数初始化:init_params.m
% ├── ADRC核心模块:
% │ ├── eso_update.m % 扩张状态观测器
% │ ├── td_update.m % 跟踪微分器
% │ └── nlsef_calc.m % 非线性反馈律
% ├── 电机模型:
% │ └── pmsm_model.m % 连续/离散化电机方程
% └── 可视化:
% └── plot_results.m % 多维度性能分析
6.2 自动参数扫描脚本
% batch_tune.m: 批量参数寻优
wo_range = 400:100:1200;
wc_range = 200:50:800;
for idx_wo = 1:length(wo_range)
for idx_wc = 1:length(wc_range)
[J_ise, J_iae] = evaluate_performance(wo_range(idx_wo), ...
wc_range(idx_wc));
perf_matrix(idx_wo, idx_wc) = J_ise;
end
end
% 绘制性能曲面
surf(wc_range, wo_range, perf_matrix);
xlabel('控制器带宽'); ylabel('观测器带宽');
zlabel('ISE指标'); title('ADRC参数灵敏度分析');
7. 实验验证要点
在硬件在环(HIL)或实际电机平台验证时,需重点关注:
- 观测器收敛性:通过示波器捕捉ESO状态,验证扰动估计在1-2个周期内收敛
- 参数鲁棒性:在±30%电感参数偏差下测试电流跟踪精度
- 动态抗扰:负载突变时转速跌落恢复时间应小于传统PI的50%
- 噪声敏感性:对比不同α值下fal函数的滤波效果
通过上述完整的ADRC设计流程,PMSM驱动系统可在保持较高动态性能的同时,有效抑制参数不确定性与外部扰动的影响。M文件的模块化实现方式便于工程人员快速移植至嵌入式平台,为工业伺服系统的升级提供了可行的技术路径。
