基于超局部模型与ESO的PMSM无模型预测电流控制原理与仿真
在电机控制领域,永磁同步电机(PMSM)因其高功率密度、高效率等优点,被广泛应用于工业伺服、电动汽车和家用电器中。然而,其高性能控制严重依赖精确的数学模型和电机参数。在实际应用中,电机参数会因温升、磁饱和等因素发生变化,传统的基于模型的控制策略(如矢量控制、模型预测控制)性能会因此下降,甚至失稳。如何设计一种对模型参数变化不敏感、鲁棒性强的先进控制算法,一直是工程师和研究者面临的挑战。
本文旨在深入探讨一种前沿的解决方案:基于超局部模型和扩张状态观测器的永磁同步电机无模型预测电流控制。这种方法的核心思想是,用极其简单的“超局部模型”替代复杂的电机数学模型,并利用扩张状态观测器实时估计并补偿模型中的总扰动(包括未建模动态和参数变化),从而实现高性能的电流预测控制。无论你是正在研究先进控制算法的学生,还是面临实际产品中电机参数漂移问题的工程师,本文将从原理到仿真,为你提供一套完整的理解与实践路径。
通过阅读本文,你将掌握:
- 超局部模型的基本思想及其在PMSM控制中的适用性。
- 扩张状态观测器的工作原理与设计方法。
- 如何将两者结合,构建无模型预测电流控制器。
- 在MATLAB/Simulink中搭建仿真模型,验证算法有效性。
- 分析该方法的优势、局限性与工程实践中的注意事项。
1. 背景与核心概念
在深入算法细节之前,我们需要厘清几个核心概念,理解传统方法面临的困境以及新方法试图解决的问题。
1.1 永磁同步电机控制面临的挑战
永磁同步电机的动态行为通常由在旋转d-q坐标系下的一组微分方程描述(即dq方程)。这些方程包含了定子电阻 (R_s)、d轴和q轴电感 (L_d, L_q)、永磁体磁链 (\psi_f) 等关键参数。传统的控制策略,如最常见的磁场定向控制(FOC),以及更先进的有限控制集模型预测控制(FCS-MPC),都直接或间接地依赖于这些参数的准确性。
然而,这些参数并非一成不变:
- 电阻 (R_s):随电机绕组温度升高而显著增加。
- 电感 (L_d, L_q):会随着电流大小(磁饱和效应)而变化。
- 永磁体磁链 (\psi_f):同样受温度影响,高温可能导致退磁。
这种参数不确定性会直接导致:
- 电流环控制器(如PI控制器)性能下降,动态响应变差,稳态误差增大。
- 模型预测控制中的预测模型失准,导致开关矢量选择错误,控制性能恶化,甚至引发振荡。
因此,研究对参数变化具有强鲁棒性,甚至完全“无模型”的控制算法,具有重要的理论和工程价值。
1.2 什么是“无模型”控制?
这里的“无模型”并非指完全不需要任何描述系统动态的信息,而是指不依赖于被控对象精确的数学模型。它旨在用更通用、更简洁、对参数不敏感的表达式来刻画系统的输入输出关系,从而绕过参数辨识的难题。
1.3 超局部模型:极简的输入输出描述
超局部模型是一种非常简洁的系统描述方式。对于永磁同步电机的电流环,我们可以为d轴和q轴电流分别建立如下形式的超局部模型:
[ \dot{i}_d = \alpha_d u_d + F_d ] [ \dot{i}_q = \alpha_q u_q + F_q ]
其中:
- (i_d, i_q) 是d轴和q轴电流。
- (u_d, u_q) 是d轴和q轴电压(控制输入)。
- (\alpha_d, \alpha_q) 是简单的、非物理的常数增益,可以非常粗略地整定,甚至在一定条件下可以设为相同值。
- (F_d, F_q) 是一个“集总项”,它包含了所有未包含在 (\alpha u) 项中的动态。这包括:
- 电机反电动势。
- 由电阻、电感、磁链等参数变化引起的动态。
- 模型简化带来的误差。
- 外部负载扰动。
超局部模型的核心优势:它将复杂的电机物理模型(包含多个耦合项和参数)简化为一个“控制增益项 + 集总扰动项”的形式。我们不再需要知道 (R_s, L_d, L_q, \psi_f) 的确切值,只需要专注于设计控制器来产生 (u),并设计观测器来实时估计和补偿 (F)。
1.4 扩张状态观测器:扰动估计的利器
如何获取未知的集总扰动 (F)?这就是扩张状态观测器大显身手的地方。ESO是自抗扰控制(ADRC)的核心组成部分之一。
其基本思想是:将系统的总扰动 (F) 视为一个新的状态变量。通过构造一个状态观测器,不仅可以估计出系统的原有状态(如电流 (i)),还能同时估计出这个扩张出来的“扰动状态”。
对于一阶系统 (\dot{i} = \alpha u + F),假设扰动 (F) 的变化有界,我们可以构建如下扩张状态系统:
- 令 (x_1 = i) (系统状态)
- 令 (x_2 = F) (扩张的扰动状态)
- 假设 (\dot{x}_2 = h) ((h) 未知但有界)
则系统可写为: [ \begin{cases} \dot{x}_1 = x_2 + \alpha u \ \dot{x}_2 = h \ y = x_1 \end{cases} ]
对于这个新的线性系统,我们可以设计一个线性状态观测器(如龙伯格观测器)来同时估计 (x_1) 和 (x_2)。观测器的输出 (\hat{x}_1) 就是对电流 (i) 的估计,(\hat{x}_2) 就是对总扰动 (F) 的实时估计。
2. 从原理到控制律设计
理解了超局部模型和ESO之后,我们就可以将它们组合起来,设计无模型预测电流控制器。
2.1 控制系统整体结构
整个控制系统的结构框图如下所示(文字描述):
- 外环:速度环(或其他位置环)。采用常规PI控制器,根据速度误差计算q轴电流参考值 (i_q^)。d轴电流参考值 (i_d^) 通常设为零(最大转矩电流比控制)或用于弱磁控制。
- 内环:无模型预测电流环(本文核心)。
- 超局部模型:作为电流的预测模型。
- 扩张状态观测器:实时观测d轴和q轴电流 ((i_d, i_q)),并估计出对应的总扰动 ((\hat{F}_d, \hat{F}_q))。
- 预测与优化:基于超局部模型、当前状态和扰动估计,预测下一时刻所有可能的电压矢量作用下的电流值。选择一个使电流跟踪误差最小的电压矢量,通过逆变器施加到电机上。
2.2 基于超局部模型的一步预测
在每一个控制周期 (k),我们拥有:
- 当前时刻的电流测量值/观测值 (i_d(k), i_q(k))。
- ESO提供的扰动估计值 (\hat{F}_d(k), \hat{F}_q(k))。
- 候选的电压矢量 (u_d(k), u_q(k))。
利用前向欧拉法对超局部模型进行离散化((T_s) 为采样周期): [ i_d(k+1) = i_d(k) + T_s [\alpha_d u_d(k) + \hat{F}_d(k)] ] [ i_q(k+1) = i_q(k) + T_s [\alpha_q u_q(k) + \hat{F}_q(k)] ]
这个公式就是我们的预测模型。对于逆变器产生的有限个(如7个或8个)基本电压矢量,我们可以分别计算应用它们之后,在 ((k+1)) 时刻的预测电流 (i_d^{p}(k+1), i_q^{p}(k+1))。
2.3 价值函数与矢量选择
与传统的模型预测电流控制类似,我们定义一个价值函数 (J) 来衡量跟踪性能。最常用的形式是参考电流与预测电流之差的平方和:
[ J = [i_d^* - i_d^{p}(k+1)]^2 + [i_q^* - i_q^{p}(k+1)]^2 ]
其中 (i_d^, i_q^) 是电流参考值。控制器遍历所有候选电压矢量,计算每个矢量对应的价值函数 (J),然后选择使 (J) 最小的那个电压矢量,在下一个周期作用于逆变器。
为什么这是“无模型”的?在整个预测和优化过程中,我们没有使用任何关于 (R_s, L_d, L_q, \psi_f) 的精确信息。电机复杂的动态和参数变化全部被囊括在 (\hat{F}_d, \hat{F}_q) 中,并由ESO实时估计和补偿。只要ESO能够快速准确地估计出扰动,预测的准确性就能得到保障,从而实现鲁棒的电流控制。
3. 仿真环境搭建与参数设计
我们将使用 MATLAB/Simulink 来搭建仿真模型,验证算法效果。仿真环境基于 Simscape Electrical 库中的永磁同步电机模块。
3.1 仿真环境准备
- 软件:MATLAB R2021a 或更新版本(包含 Simulink 和 Simscape Electrical 工具箱)。
- 核心模块:
Permanent Magnet Synchronous Motor: Simscape Electrical 库中的PMSM模型。Inverter (Three-Phase): 三相两电平电压源逆变器。Controller: 使用 MATLAB Function 或 S-Function 搭建的自定义控制算法模块。
- 仿真配置:
- 求解器:ode23tb (stiff/TR-BDF2)。
- 采样时间(控制周期 (T_s)): 50e-6 秒 (20 kHz)。
- 仿真时间: 1 秒。
3.2 PMSM 参数与逆变器参数
在仿真中,我们设定一组“真实”的电机参数,但在控制器设计中完全忽略它们。
| 参数 | 符号 | 值 | 单位 |
|---|---|---|---|
| 定子电阻 | (R_s) | 0.2 | Ω |
| d轴电感 | (L_d) | 5.0 | mH |
| q轴电感 | (L_q) | 5.0 | mH |
| 永磁体磁链 | (\psi_f) | 0.12 | Wb |
| 极对数 | (p_n) | 4 | - |
| 额定转速 | - | 3000 | rpm |
| 直流母线电压 | (V_{dc}) | 311 | V |
3.3 扩张状态观测器 (ESO) 设计
我们以q轴电流环为例,设计一个线性ESO。离散化设计过程如下:
连续时间系统模型(已扩张): [ \begin{cases} \dot{x}_1 = x_2 + \alpha u \ \dot{x}_2 = h \ y = x_1 \end{cases} ] 其中 (x_1 = i_q), (x_2 = F_q), (u = u_q)。
将其离散化(前向欧拉,周期 (T_s)): [ \begin{cases} x_1(k+1) = x_1(k) + T_s [x_2(k) + \alpha u(k)] \ x_2(k+1) = x_2(k) + T_s h(k) \ y(k) = x_1(k) \end{cases} ]
设计离散时间龙伯格观测器: [ \begin{cases} \hat{x}_1(k+1) = \hat{x}_1(k) + T_s [\hat{x}_2(k) + \alpha u(k)] + l_1 (y(k) - \hat{x}_1(k)) \ \hat{x}_2(k+1) = \hat{x}_2(k) + l_2 (y(k) - \hat{x}_1(k)) \end{cases} ] 其中 (l_1, l_2) 是观测器增益,(y(k) = i_q(k)) 是实际测量电流。
观测器增益整定:观测器极点需要配置得比系统闭环极点快。一种简单的经验方法是将其配置在同一个位置 (\omega_o)(观测器带宽)。对于二阶观测器,可以选取: [ l_1 = 1 - e^{-2\omega_o T_s}, \quad l_2 = (1 - e^{-\omega_o T_s})^2 / T_s ] 通常,(\omega_o) 可取为控制系统带宽的 3~10 倍。在仿真中,我们可以从 (2\pi*500) rad/s 开始调试。
3.4 无模型预测控制器参数
- 超局部模型增益(\alpha_d, \alpha_q): 这个参数非常鲁棒。一个简单的起调值是取标称电感值的倒数数量级。例如,假设电感标称值约为5mH,则 (\alpha \approx 1 / 0.005 = 200)。在仿真中,我们可以设 (\alpha_d = \alpha_q = 200)。
- 价值函数权重: 本例中d轴和q轴电流跟踪同等重要,故权重均为1。在实际应用中,如需弱磁,可调整d轴权重。
- 调制方式: 采用有限控制集模型预测控制(FCS-MPC),直接输出最优电压矢量对应的开关状态。
4. Simulink 仿真实现与代码分析
下面我们分步构建Simulink模型。由于整个模型较为复杂,这里重点展示控制算法核心部分的实现。
4.1 整体仿真模型结构
- 主仿真文件 (MFPC_PMSM.slx): 包含电机模块、逆变器模块、测量模块、SVPWM或FCS-MPC模块以及核心控制模块。
- 控制算法模块: 使用
MATLAB Function块实现,命名为MFPC_Controller。
4.2 控制算法核心代码 (MATLAB Function)
这个函数在每个控制周期被调用,输入为测量值(电流、转速、位置)和参考值,输出为最优开关状态或占空比。
function [Sa, Sb, Sc, id_est, iq_est, Fd_est, Fq_est] = ... MFPC_Controller(id_meas, iq_meas, theta_e, id_ref, iq_ref, speed_ref, Vdc) % 基于超局部模型和ESO的无模型预测电流控制 % 输入: % id_meas, iq_meas: 测量/反馈的dq轴电流 % theta_e: 电角度 % id_ref, iq_ref: dq轴电流参考值 % speed_ref: 速度参考值 (用于外环,此处简化) % Vdc: 直流母线电压 % 输出: % Sa, Sb, Sc: 三相桥臂的开关状态 (1或0) % id_est, iq_est: ESO观测的电流 % Fd_est, Fq_est: ESO观测的扰动 % 定义持久变量,用于存储ESO状态、上次开关状态等 persistent x1_d x2_d x1_q x2_q Ts alpha_d alpha_q l1 l2 Vectors if isempty(x1_d) % 初始化 x1_d = 0; x2_d = 0; % d轴ESO状态:x1=id_est, x2=Fd_est x1_q = 0; x2_q = 0; % q轴ESO状态:x1=iq_est, x2=Fq_est Ts = 50e-6; % 采样周期,与控制周期一致 alpha_d = 200; % 超局部模型增益 alpha_q = 200; % 观测器增益 (示例值,需根据带宽调整) wo = 2*pi*800; % 观测器带宽 800 Hz beta1 = 1 - exp(-2*wo*Ts); beta2 = (1 - exp(-wo*Ts))^2 / Ts; l1 = beta1; l2 = beta2; % 两电平逆变器8个基本电压矢量 (V0~V7) 在αβ坐标系下的值 Vectors = (2/3)*Vdc * ... [0, 0; % V0 [000] 1, 0; % V1 [100] 1/2, sqrt(3)/2; % V2 [110] -1/2, sqrt(3)/2; % V3 [010] -1, 0; % V4 [011] -1/2, -sqrt(3)/2; % V5 [001] 1/2, -sqrt(3)/2; % V6 [101] 0, 0]; % V7 [111] end % --- 第1步:扩张状态观测器 (ESO) 更新 --- % d轴ESO y_d = id_meas; % 测量值 % 状态预测 x1_d_pred = x1_d + Ts * (x2_d + alpha_d * (-Vdc/2)); % 注意:需使用上一拍的实际电压ud_act x2_d_pred = x2_d; % 观测器校正 x1_d = x1_d_pred + l1 * (y_d - x1_d_pred); x2_d = x2_d_pred + l2 * (y_d - x1_d_pred); Fd_est = x2_d; % 输出扰动估计 id_est = x1_d; % 输出电流估计 % q轴ESO (同理) y_q = iq_meas; x1_q_pred = x1_q + Ts * (x2_q + alpha_q * (-Vdc/2)); % 使用上一拍的uq_act x2_q_pred = x2_q; x1_q = x1_q_pred + l1 * (y_q - x1_q_pred); x2_q = x2_q_pred + l2 * (y_q - x1_q_pred); Fq_est = x2_q; iq_est = x1_q; % --- 第2步:无模型预测与优化 --- % 注意:在实际中,ud_act和uq_act是上一周期施加的电压。 % 此处为简化,在预测时假设上一周期电压已知,并用于ESO更新。 % 更严谨的做法是存储上一周期的开关状态并计算实际电压。 J_min = inf; % 初始化最小价值函数 opt_idx = 1; % 初始化最优矢量索引 % 遍历8个电压矢量 for idx = 1:8 V_alphabeta = Vectors(idx, :); % 获取αβ电压 Valpha = V_alphabeta(1); Vbeta = V_alphabeta(2); % 反Park变换:将αβ电压转换到dq轴 (需要当前电角度) ud_candidate = Valpha * cos(theta_e) + Vbeta * sin(theta_e); uq_candidate = -Valpha * sin(theta_e) + Vbeta * cos(theta_e); % 基于超局部模型的一步电流预测 id_pred = id_est + Ts * (alpha_d * ud_candidate + Fd_est); iq_pred = iq_est + Ts * (alpha_q * uq_candidate + Fq_est); % 计算价值函数 J = (id_ref - id_pred)^2 + (iq_ref - iq_pred)^2; % 寻找使J最小的矢量 if J < J_min J_min = J; opt_idx = idx; ud_opt = ud_candidate; % 记录最优电压,用于下一周期ESO uq_opt = uq_candidate; end end % --- 第3步:输出最优开关状态 --- % 将最优矢量索引转换为具体的开关信号 [Sa, Sb, Sc] switch opt_idx case 1 S = [0,0,0]; case 2 S = [1,0,0]; case 3 S = [1,1,0]; case 4 S = [0,1,0]; case 5 S = [0,1,1]; case 6 S = [0,0,1]; case 7 S = [1,0,1]; case 8 S = [1,1,1]; end Sa = S(1); Sb = S(2); Sc = S(3); % 为下一周期ESO更新准备“上一拍电压” % 注意:这是一个简化处理。在实际中,ud_act/uq_act应是上一周期实际作用于电机的平均电压。 % 此处用最优候选电压近似,在开关频率较高时可行。 % 更准确的做法是记录上一周期的S和Vdc,计算平均电压。 persistent ud_act_last uq_act_last if isempty(ud_act_last) ud_act_last = 0; uq_act_last = 0; end % 更新ESO中使用的“上一拍实际电压”(供下一个仿真步长使用) % 这里需要将ESO更新移到使用实际电压之后,代码结构需调整。 % 更合理的仿真结构是将ESO更新放在预测优化之后,使用本次周期计算出的最优电压对应的实际作用电压。 % 鉴于代码篇幅,此处示意关键逻辑,实际建模时需仔细安排执行顺序。 end代码关键点说明:
- 持久变量:用于在Simulink函数调用间保持ESO状态和参数。
- ESO更新:先进行状态预测,再用测量值校正。注意,ESO中使用的
u应是上一控制周期实际施加到电机上的电压。代码中为简化,在预测循环前使用了固定值,这是一个需要在实际建模中修正的点。更严谨的做法是存储上一周期的开关状态,并计算出平均电压后再用于本次ESO更新。 - 预测循环:遍历所有电压矢量,利用超局部模型预测下一时刻电流。
- 矢量选择:选择价值函数最小的矢量,并输出其开关状态。
- 执行顺序:在真实数字控制器中,采样、计算、更新是顺序发生的。仿真中需要仔细安排
ESO更新、预测优化、输出开关量的逻辑顺序,以模拟真实的计算延迟。
4.3 仿真结果分析
运行仿真后,我们可以观察以下关键波形:
- 速度与电流跟踪:在空载启动和加载情况下,电机转速应能快速、平稳地跟踪参考值,且d轴电流跟踪零,q轴电流跟踪转矩指令。
- ESO扰动估计:观测
Fd_est和Fq_est信号。在稳态时,它们应收敛到一个相对稳定的值,这个值包含了反电动势、参数误差等总扰动。当负载突变或速度变化时,扰动估计值应能快速响应。 - 参数鲁棒性测试:在仿真运行一段时间后,在线修改电机模型中的参数(如将 (R_s) 增加50%,将 (L_d, L_q) 减小30%),观察控制性能是否受到显著影响。与传统的基于模型的预测控制相比,无模型方法应表现出更强的鲁棒性。
5. 常见问题与调试指南
在实现和调试该算法时,你可能会遇到以下问题:
| 问题现象 | 可能原因 | 排查与解决思路 |
|---|---|---|
| 系统发散或不稳定 | 1. ESO观测器带宽 (\omega_o) 过高或过低。 2. 超局部模型增益 (\alpha) 设置不当。 3. 控制周期 (T_s) 与系统动态不匹配。 | 1.降低ESO增益:先从较小的 (\omega_o)(如100Hz)开始,逐步增加,观察估计值是否平滑且能跟踪扰动。 2.调整 (\alpha):(\alpha) 应与“控制输入对输出的增益”量级相符。太大导致控制过激,太小导致控制不足。可参考标称电感倒数进行初设。 3.检查采样时间:确保 (T_s) 足够小(通常为开关频率的1/2或更小),以满足香农采样定理和预测精度。 |
| 电流跟踪存在稳态误差 | 1. ESO未能完全估计出总扰动中的常数项或低频分量。 2. 价值函数权重设置不合理。 | 1.验证ESO性能:在恒定转速和负载下,观察 (\hat{F}_d, \hat{F}_q) 是否收敛到常数。如果没有,可能需要检查ESO离散化过程或考虑使用更复杂的ESO形式(如非线性ESO或更高阶ESO)。 2.引入积分项:可以在价值函数中增加对电流误差积分的惩罚,或在ESO中扩张状态以估计更慢的扰动。 |
| 控制性能对测量噪声敏感 | ESO观测器增益过高,放大了测量噪声。 | 1.在ESO前加入低通滤波器:对测量的电流信号进行滤波,但需注意相位延迟。 2.调整ESO带宽:在估计速度和抗噪性之间折衷,降低 (\omega_o)。 3.使用降阶ESO或滑模观测器:这些观测器可能具有更好的噪声抑制能力。 |
| 算法计算负担大,难以在微控制器实现 | FCS-MPC需要遍历所有电压矢量并进行多次预测计算。 | 1.减少候选矢量:例如,只使用6个有效矢量,忽略零矢量。 2.优化计算:利用对称性简化三角函数计算,使用查表法。 3.考虑占空比调制:预测每个矢量的最优作用时间,而不是只选一个矢量,但这会增加复杂度。 |
| 启动或低速时性能差 | 反电动势小,系统非线性特性相对显著,超局部模型近似误差可能变大。 | 1.注入高频信号:在启动时可考虑注入小幅高频电压信号以“激励”系统,帮助ESO快速收敛,但可能引入转矩脉动。 2.增益调度:根据转速或电流大小,自适应调整 (\alpha) 或ESO参数。 |
6. 工程实践建议与扩展方向
6.1 参数整定经验
- 先调ESO,再调控制器:ESO是算法的核心。首先确保ESO能快速、平滑地估计出电流和扰动。可以通过给系统一个阶跃参考指令,观察估计电流是否能跟踪测量电流,估计扰动是否收敛。
- (\alpha) 参数的鲁棒性:超局部模型中的 (\alpha) 参数非常鲁棒。通常可以设置为一个基于标称参数的固定值(如 (\alpha = 1/L_{nominal})),在整个运行范围内不需要改变。
- 离散化方法:对于较高的控制频率(>10kHz),前向欧拉法足够。如果控制频率较低或追求更高精度,可采用后向欧拉或双线性变换法离散化ESO和预测模型。
6.2 实际部署考量
- 延迟补偿:数字控制中存在计算延迟和PWM更新延迟。需要在预测模型中考虑一步或两步的延迟补偿,将预测目标从 (k+1) 时刻改为 (k+2) 时刻。
- 过调制与电压极限:在价值函数中需加入对电压幅值的约束,或直接排除那些会导致过调制的电压矢量,确保算法在直流母线电压限制内工作。
- 启动策略:在电机初始位置未知时,需要结合初始位置检测或开环启动策略,待电机转动起来后再切入无模型预测控制。
6.3 算法扩展与变体
- 多步预测:将单步预测扩展到多步预测,可以进一步优化性能,但计算量会指数增长。
- 考虑磁饱和:虽然本方法对电感变化不敏感,但若想进一步提高精度,可以让 (\alpha) 参数成为电流的函数((\alpha(i))),以近似描述磁饱和效应。
- 与其他无模型方法结合:例如,可以与无模型自适应控制、迭代学习控制等结合,以处理周期性扰动。
- 应用于其他电机:该框架同样适用于异步电机、同步磁阻电机等,只需重新定义超局部模型(可能阶次不同)。
基于超局部模型和扩张状态观测器的无模型预测电流控制,为永磁同步电机的高性能鲁棒控制提供了一条有效路径。它巧妙地用“在线估计的总扰动”替代了“离线辨识的精确参数”,显著提升了系统在参数变化和模型不确定性下的稳定性。从仿真到实际微控制器(如STM32F103)实现,中间还需解决计算效率、延迟补偿、启动策略等具体工程问题。建议读者在理解本文原理的基础上,先从仿真入手,逐步调整参数、观察现象、解决问题,最终将其应用于实际项目,切实提升电机控制系统的鲁棒性和适应性。
