做电机控制的同行应该都体会过这么一件事永磁同步电机PMSM的电流环用传统FOC加PI方案调好了稳定性和动态响应都挺能打但电机一发热、电感一饱和、或者换一批参数偏差较大的电机原来那套参数就开始露馅。我在这类项目上踩过不少坑后来换了一条路——把自抗扰里的核心元件扩展状态观测器ESO和无模型预测电流控制MPCC结合起来做电流环在MATLAB/Simulink里搭了全套仿真验证效果比我预想的要稳。这套方案跟参数敏感的传统模型预测控制最大的区别在于它不依赖精确的电机数学模型而是用一个超局部模型把不确定部分全部折叠进一个待观测项再用ESO实时估计并补偿。听起来有点绕但实际调下来你会觉得这套东西的鲁棒性确实对得起无模型三个字。这篇文章就把整套实现思路、仿真搭建过程、我的调参经验和踩过的坑一次性说清楚适合正在做PMSM控制仿真的研究生或工程师参考也适合对自抗扰控制有兴趣、想找个落点试一试的同行。1. 整体方案设计为什么要用ESO无模型预测电流控制这个组合1.1 传统FOC和模型预测控制的软肋到底在哪先说说传统方案为什么会有瓶颈。FOCPI的电流环设计本质上依赖电机dq轴数学模型里的定子电阻、电感和永磁磁链。PI参数整定通常是根据被控对象的时间常数和增益来算的——电阻、电感一变电流环的零极点位置就漂了响应自然变差。我做对比实验时遇到过很典型的情况把离线辨识到的电感值人为改掉30%PI电流环的动态明显变慢阶跃响应出现超调工况恶劣时甚至拖累整个速度环稳定。传统模型预测控制MPC更依赖模型精度。它的思路是用电机方程预测下一拍电流然后选一个电压矢量让预测电流最接近参考值。预测公式里全是R、L、ψf这些参数只要有一个偏了预测出来的电流就跟着偏最后表现出来就是稳态电流有静差、动态过程振荡甚至直接发散。说白了传统MPC的预测精度完全建立在模型足够准这个前提上而这个前提在真实电机上恰恰不成立。所以无模型这三个字不是噱头它是真的把对参数的依赖从预测方程里摘出去了。MPCC的核心是把原来的物理模型替换成一个只描述输入电压与电流变化率关系的超局部模型模型里所有记不清、测不准、会变化的部分全部塞进一个项F里交给ESO去估。这样一来你不再需要精确的L、R、ψf也能把电流预测做得准。1.2 ESO在整套系统里扮演什么角色ESO是自抗扰控制ADRC的核心元件它的能力通俗讲就是实时猜出系统里那些说不清道不明的总扰动。这个总扰动包括参数变化引起的内扰电阻温漂、电感饱和、未建模动态磁链谐波、死区效应、外部负载扰动以及——这点对无模型控制来说最关键——我们把真实模型简化成超局部模型时产生的误差。它统统能把它们合并成一个变量F并实时观测出来。在MPCC框架里ESO做了两件事一是模型在线化它不断用输入输出电压和实测电流刷新对F的估计让超局部模型始终贴近真实系统二是扰动前馈化估计出的F直接进预测器参与电压计算等于把扰动提前补偿掉了不需要等电流偏差出来让PI慢慢追。整个控制系统的结构大概是速度环PI输出q轴电流参考d轴电流参考给0然后电流环的MPCC预测器根据ESO给的F和当前电流算出最优电压矢量经过SVPWM送到逆变器。相比传统FOC只是把电流环PI换成了预测器ESO结构上多出来的计算量不大但抗参数变化的底气完全不一样。2. 核心原理拆解超局部模型、ESO设计与预测器公式2.1 PMSM的dq轴模型以及哪些项最让人头疼先看表贴式PMSM在同步旋转坐标系下的电压方程$$u_d R_s i_d L_d \frac{di_d}{dt} - \omega_e L_q i_q$$ $$u_q R_s i_q L_q \frac{di_q}{dt} \omega_e L_d i_d \omega_e \psi_f$$其中 $R_s$ 是定子电阻$L_d$、$L_q$ 是dq轴电感$\psi_f$ 是永磁磁链$\omega_e$ 是电角速度。做电流预测控制时通常把方程改写成电流导数的形式$$\frac{di_d}{dt} \frac{1}{L_d}(u_d - R_s i_d \omega_e L_q i_q)$$ $$\frac{di_q}{dt} \frac{1}{L_q}(u_q - R_s i_q - \omega_e L_d i_d - \omega_e \psi_f)$$从预测角度看最麻烦的就是交叉耦合项 $\omega_e L_q i_q$、反电动势项 $\omega_e \psi_f$ 以及磁链谐波之类的高阶项。这些项和转速强相关高速时数值很大而且都依赖参数精度。传统MPC直接拿这套方程做预测一旦L、ψf偏差或者高速工况下模型未覆盖的项起作用预测值就会跑偏。有些论文的做法是加前馈解耦、加参数在线辨识来补救但这会引入额外复杂度而且辨识算法本身也有收敛性问题。ESO超局部模型的思路则更干脆不直接处理这些具体项全部当成未知扰动用一个统一变量去估计。2.2 超局部模型把不确定项统统丢给F去扛超局部模型的核心思想是把一个复杂非线性系统在局部工作点附近简化成$$\frac{di_d}{dt} F_d \alpha_d u_d$$ $$\frac{di_q}{dt} F_q \alpha_q u_q$$这里 $F_d$、$F_q$ 包含所有模型不确定性、耦合项、反电动势、负载扰动等而 $\alpha_d$、$\alpha_q$ 是一个可以人为选择的控制增益。注意这个 $\alpha$ 不需要精确它可以理解为输入电压对电流变化率的平均贡献系数。我在仿真里通常直接取 $\alpha_d \alpha_q 1/L_s$用额定电感值就行偏差部分自然会被ESO吸收进F里。写成离散形式就是最常见的前向欧拉格式$$i_d(k1) i_d(k) T_s \left[ F_d(k) \alpha_d u_d(k) \right]$$ $$i_q(k1) i_q(k) T_s \left[ F_q(k) \alpha_q u_q(k) \right]$$这个式子就是整个无模型预测控制的地基。它的好处是如果ESO能把 $F_d$、$F_q$ 估得足够准那么不需要知道电机任何真实参数也能准确预测下一拍电流。这就是无模型的真正含义——不是没有模型而是模型里需要精确知道的参数少到了可以不依赖的程度。2.3 线性ESO的设计与离散实现以q轴为例把 $\frac{di_q}{dt} F_q \alpha_q u_q$ 看成状态方程让 $x_1 i_q$ 为原状态$x_2 F_q$ 为扩张状态。假设 $F_q$ 变化比电流慢得多即 $\dot{F}_q \approx 0$在离散控制周期内这个假设完全合理于是可以设计线性扩张状态观测器$$\dot{z}_1 z_2 \alpha_q u_q - \beta_1 (z_1 - i_q)$$ $$\dot{z}_2 -\beta_2 (z_1 - i_q)$$其中 $z_1$ 是电流观测值$z_2$ 是总扰动估计值 $\hat{F}_q$。理论上只要观测器带宽足够高$z_1 \rightarrow i_q$、$z_2 \rightarrow F_q$。带宽法整定是工程上最省事的做法设观测器带宽为 $\omega_o$取$$\beta_1 2\omega_o, \quad \beta_2 \omega_o^2$$这样观测器特征方程为 $s^2 \beta_1 s \beta_2 (s\omega_o)^2$极点都在 $\omega_o$ 处。仿真中我的经验是 $\omega_o$ 取1000到3000 rad/s比较合适太小则估计滞后太大则容易放大采样噪声和逆变器开关谐波。注意这地方有个很多人容易忽略的点离散化。直接用连续域算出的 $\beta_1$、$\beta_2$ 套进离散迭代如果采样频率不够高很可能出现震荡。我的习惯是采样周期 $T_s1e-4$ 秒10kHz时$\omega_o$ 不超过3000离散后的观测器才稳定。离散迭代的实现很简单$$e(k) z_1(k) - i_q(k)$$ $$z_1(k1) z_1(k) T_s \left[ z_2(k) \alpha_q u_q(k) - \beta_1 e(k) \right]$$ $$z_2(k1) z_2(k) - T_s \beta_2 e(k)$$d轴ESO同理只是把下标换成d。2.4 预测控制器设计连续集解析式与有限集枚举有了下一拍电流预测公式和ESO估计的 $\hat{F}_d$、$\hat{F}_q$就可以设计控制器了。预测控制里最常见的有两种落地方式连续集MPCC和有限集FCS-MPCC。连续集MPCC的做法是直接求逆解出电压。期望 $i_d(k1) i_{d_ref}$把预测公式倒过来$$u_d(k) \frac{ \frac{i_{d_ref} - i_d(k)}{T_s} - \hat{F}d(k) }{ \alpha_d }$$ $$u_q(k) \frac{ \frac{i{q_ref} - i_q(k)}{T_s} - \hat{F}_q(k) }{ \alpha_q }$$算出的是dq轴电压参考之后走反Park变换得到αβ轴电压再进SVPWM生成开关信号。这种方案的特点是电流纹波小、开关频率固定和现有FOC代码框架衔接起来很方便只是需要调制器。有限集FCS-MPCC的做法是不用调制器直接枚举两电平逆变器的8个电压矢量V0到V7其中两个零矢量对每个矢量用预测公式算出下一拍电流$$i_d(k1|V_i) i_d(k) T_s \left[ \hat{F}d(k) \alpha_d u{d_i}(k) \right]$$ $$i_q(k1|V_i) i_q(k) T_s \left[ \hat{F}q(k) \alpha_q u{q_i}(k) \right]$$然后选让代价函数最小的那个矢量$$J \left( i_{d_ref} - i_d(k1) \right)^2 \left( i_{q_ref} - i_q(k1) \right)^2$$这里有个MPC相比多目标优化的好处代价函数里只有电流误差两项不需要调权重系数。不像某些方案要平衡开关频率、共模电压等多个目标权重系数得反复试。我推荐第一次做MPCC的同行先用连续集版本逻辑更好理解、波形也更干净想玩有限集版本先把连续集的机理吃透再改否则波形一团乱纹波时你都不知道是预测出了问题还是矢量选择出了问题。2.5 一拍延迟补偿仿真里最容易忽略的细节数字控制系统有个天然问题这一拍算出来的电压真正加到电机上已经是下一拍的事了。也就是说如果你在k时刻用 $i(k)$ 预测 $i(k1)$ 并据此算出 $u(k)$这个 $u(k)$ 实际在 $k1$ 时刻才作用等到 $k2$ 才看到电流响应。如果忽略这个延迟电流动态会多出一个拍子的滞后表现为高速或大电感工况下的电流振荡。工程上常用的补偿做法是两步预测第一步先假设当前时刻已经施加了上一拍算出的电压预测出 $i(k1)$第二步基于 $i(k1)$ 再用预测公式选出真正要在下一拍施加的电压矢量。我两种版本都写过差这一步仿真的电流纹波和动态超调差别很明显建议从一开始就把这一步考虑进去。3. 仿真系统搭建从参数设置到Simulink模块连接3.1 仿真平台与电机参数设定我用的是MATLAB/Simulink版本并不重要2020之后的版本跑这套模型都没问题。被控对象参数我建议直接用仿真库里常见的2kW表贴式PMSM参数这样和其他文献对拍也有参照。下面这组参数是我实际用的你可以直接抄参数数值单位额定功率2kW额定转速2000r/min极对数4-定子电阻 Rs0.958Ωd轴电感 Ld5.25mHq轴电感 Lq5.25mH永磁磁链 ψf0.1827Wb转动惯量 J0.003kg·m²阻尼系数 B0.008N·m·s直流母线电压311V开关频率/采样频率10kHz采样周期 $T_s 1e-4$ 秒离散求解器选定步长步长直接设 $1e-4$或者更小一点如 $5e-6$ 让连续域电机模型更精确但控制器本身保证每 $1e-4$ 秒执行一次。我一般把PMSM本体放在连续域用Simulink内置模块解算器选ode4步长 $5e-6$控制器用离散子系统采样时间设为 $T_s$这样仿真精度和速度平衡得比较好。3.2 Simulink模型整体布局整个仿真模型从上到下分五块。第一块是速度参考与速度环PI输出q轴电流参考d轴电流参考设为0也可以挂在MTPA模块后面但无模型控制通常先用 $i_d0$ 跑通。第二块是电流采样与坐标变换检测三相电流做Clark变换和Park变换得到dq轴实际电流。第三块是ESO两个独立观测器分别估计 $\hat{F}_d$ 和 $\hat{F}_q$输入是dq轴电压指令、dq轴实际电流和采样周期输出是估计扰动。第四块是MPCC预测器输入是电流参考、实际电流、ESO输出输出是dq电压或者开关信号。第五块是PMSM本体和逆变器模型。信号线的连接我最开始经常搞错的是ESO的电压输入该取哪个值必须是控制器算出来、经过SVPWM真正送到逆变器那端的dq电压或者说理想电压指令。仿真里逆变器是平均值模型时指令就等于实际值接指令电压没问题如果用开关级逆变器模型就需要对桥臂中点电压做Park变换拿到实际dq电压再给ESO否则ESO估算的F里会混入逆变器非线性误差——当然混入也行ESO本来就能估掉它但如果你后面要分析ESO输出波形最好把输入接干净一点。3.3 关键模块代码实现ESO模块我用MATLAB Function实现为了让状态在离散步进中保持需要用persistent变量。以q轴为例function [F_est, z1_out, z2_out] ESO_q(i_q_meas, u_q_cmd, Ts, beta1, beta2, alpha_q) % q轴线性ESO离散欧拉迭代 persistent z1 z2 if isempty(z1) z1 i_q_meas; % 初值设为当前实测电流 z2 0; end e z1 - i_q_meas; z1_next z1 Ts * (z2 alpha_q * u_q_cmd - beta1 * e); z2_next z2 - Ts * beta2 * e; z1 z1_next; z2 z2_next; F_est z2; z1_out z1; z2_out z2; end注意初值那块这是个大坑如果直接把z1初值设为0观测器启动瞬间会有很大的估计误差反映到电流波形上就是启动电流尖峰。把z1初始化为当前实测电流启动就平滑很多。两个轴的ESO可以合并成同一个函数用alpha和beta做参数选择。MPCC预测器如果是连续集版本核心也就几行function [u_d_ref, u_q_ref] MPCC_continuous(i_d_ref, i_q_ref, i_d_meas, i_q_meas, F_d_est, F_q_est, Ts, alpha_d, alpha_q) % 无模型预测电流控制求dq电压参考 u_d_ref ((i_d_ref - i_d_meas) / Ts - F_d_est) / alpha_d; u_q_ref ((i_q_ref - i_q_meas) / Ts - F_q_est) / alpha_q; end至于有限集版本需要把8个基本电压矢量对应的dq轴电压算出来。以直流母线电压 $U_{dc}$ 标准写法为例αβ轴的8个电压矢量按开关状态映射后用当前电角度 $\theta_e$ 反变换到dq轴。然后枚举预测、求代价函数最小值输出最优开关状态。这部分代码会比连续集长一些但核心逻辑还是那个预测公式和代价函数。SVPWM部分直接用Simulink自带的SVPWM模块或者自己写几行查表扇区判断的标准代码。SVPWM不是这篇文章的重点但有一点要提醒SVPWM输出限幅必须和直流母线电压匹配。我在做实验时遇到过控制器解出很大的u_d、u_q参考SVPWM限幅后实际输出电压被削顶ESO还是按未限幅的指令做观测扰动估计就会偏差。仿真中要保证送进ESO的电压和实际送到逆变器的电压是同一个信号限幅后或者在预测器输出端就加限幅。3.4 仿真工况设计与结果解读我设计的典型仿真工况是给定转速1000 r/min启动空载运行0.2秒突加8 N·m负载。速度环PI先粗略给一份参数电流环完全由MPCCESO接管。结果看三个地方第一启动阶段d轴电流应基本保持在0附近q轴电流快速到达加速所需转矩电流没有明显超调第二0.2秒突加负载瞬间q轴电流马上上升转速跌落一小段后恢复ESO的 $\hat{F}_q$ 同步跳变——这正是它观测到了负载扰动引起的电流变化趋势第三稳态时电流波形纹波小连续集MPCC加SVPWM的波形比不加调制的有限集版本干净不少。我特别推荐做一个参数失配实验来直观感受无模型的价值把Simulink里PMSM模块的电感设为额定值的1.5倍比如LdLq7.9mH控制器里的 $\alpha$ 还用额定值对应的 $1/L_s$。传统FOCPI在这种情况下电流环动态明显劣化稳态震荡传统MPC如果还按额定参数预测稳态电流会出现明显静差而这套ESOMPCC的电流跟踪几乎不受影响因为电感变化被ESO吸收进了F。这个对比做出来整套方案的优势就非常直观了。3.5 三种方案的对比怎么看我在仿真里跑过传统FOCPI、传统模型预测电流控制和这套ESOMPCC做了一张横向对比表对比维度FOCPI传统MPCCESO无模型MPCC对参数误差的敏感性高高低参数变化后的稳态静差明显明显很小电流纹波小较大有限集取决于调制方式调参复杂度中两个PI中依赖模型中ESO三个参数计算量小中中对高速工况的适应性一般参数敏感好ESO补偿反电动势说实话这套方案最吸引我的不是波形有多漂亮而是在电机参数变化、负载变化、甚至模型本身不准确时系统依然能保持稳定的电流跟踪能力。做控制的人最后都会明白一个道理再好的控制算法也扛不住模型方向性失配ESO等于给预测控制补上了在线校准这层能力这是它最大的价值所在。4. 常见问题与调试心得我实际踩过的坑4.1 电流波形发散或剧烈振荡先查哪里仿真中遇到电流发散最常见的三个原因ESO初值没设对、离散化后观测器不稳定、超局部模型的 $\alpha$ 选得离谱。ESO初值问题我说过了z1初值必须设为当前实测电流。观测器不稳定通常是 $\omega_o$ 太大或者采样周期太大。我的经验范围是$T_s1e-4$ 时$\omega_o$ 别超过3000 rad/s如果你把 $T_s$ 加到 $5e-4$那 $\omega_o$ 压到1000以下才安全。$\alpha$ 的问题更隐蔽——如果你把 $\alpha$ 设置为 $1/L_s$ 且L_s取的是额定值实际电感和额定值差太多比如差5倍ESO内部用 $\alpha u$ 计算的状态预测会贡献一个很大的偏置虽然理论上F能吸收但控制器解析式里的 $(\dots)/\alpha$ 会把这个偏差放大导致电压指令饱和。我的做法是$\alpha$ 用额定电感倒数的0.8到1.2倍之间偏离太多时先离线辨识一下。4.2 ESO估计值异常波形上有毛刺或偏置如果说ESO输出的 $\hat{F}_q$ 在稳态时波动很大通常是两个原因。一个是采样电流里有高频噪声而 $\omega_o$ 取得太高观测器把噪声也当成了扰动去估计另一个是输入ESO的电压和实际施加的电压不一致比如SVPWM限幅、死区补偿没做导致ESO看到的输入和真实输入之间有固定偏差。前者把 $\omega_o$ 往低调后者检查信号线或者把限幅后电压反馈给ESO。我在调试中还发现过一个有趣的规律稳态时 $\hat{F}_q$ 的数值大致等于反电动势和磁阻转矩耦合项的和。你可以拿它当作虚拟传感器用比如间接观测电角速度甚至辨识磁链变化。这是ESO方案额外的好处——它的中间量本身有物理含义不只是一个黑盒估计值。4.3 启动大电流冲击怎么压下去启动瞬间的大电流冲击除了ESO初值问题还有可能是速度环PI积分初值设置不合理。参考电流突变太快MPCC为了追iq_ref会输出一个很大的u_q而ESO刚启动时 $\hat{F}_q$ 还没收敛补偿不到位电流自然冲高。我建议做三件事一是ESO初值按实测电流初始化二是给iq_ref加一个斜坡限幅让参考电流按1到2毫秒逐步加速到目标值三是MPCC输出的电压做限幅限制在母线电压能提供的范围内。这三个一起上启动冲击基本能压到可控范围。仿真里调这些参数之外也可以在Matlab Function里对输出加一个saturation语句。4.4 参数调优速查表把经验整理成速查表方便后面做实验时对照参数含义初值建议调参方向α_d、α_q超局部模型控制增益1/Ld、1/Lq额定值过大则振荡过小则动态慢β1ESO增益12ωo和β2联动不要单独调β2ESO增益2ωo²增大则观测更快但噪声放大ωoESO带宽1000~3000 rad/s采样频率高可加大否则减小Ts采样周期1e-4 s越小控制越精细计算量越大速度环带宽外环PI带宽为电流环的1/5~1/10过高等同于电流环限速另外一个经验是先调ESO让 $\hat{F}_q$ 看起来跟得上突变负载而不发散再调预测器里的 $\alpha$ 和限幅最后才回头碰速度环。如果一上来就同时调所有参数出问题了你根本分不清是观测器的问题还是预测器的问题。我在第一次做这套方案时就犯了一把抓的错最后推倒重来才理清头绪。5. 参考文献检索方向与后续扩展建议5.1 按哪些关键词找文献更高效项目标题里有附参考文献这部分需求我介绍一下我自己实际检索文献的路径这样比你直接搜索可能更快更准。建议组合以下关键词去学术数据库检索自抗扰控制 永磁同步电机可以找到自抗扰控制应用在PMSM的完整综述和研究脉络从早期奠基性论文到最近几年改进方案的对比都能翻出来。扩展状态观测器 电流控制这是ESO设计细节和参数整定方法的重要来源尤其是观测器带宽整定和离散化分析很多论文对带宽取值有系统的讨论。无模型预测控制 超局部模型这个方向是近几年控制领域的热点能找到超局部模型的理论基础以及它如何在不需要精确模型的情况下做预测控制。永磁同步电机 模型预测电流控制这一组能让你看到传统MPCC在PMSM上的各种变体包括单矢量、双矢量、三矢量以及权重系数设计和延迟补偿方法。无模型预测控制 永磁同步电机 ESO直接命中你这套方案的核心交集相关文章数量虽然不算多但每一篇的仿真和实验分析都值得精读。我说个实际的体会先读综述掌握框架再精读一篇推导详细的学位论文里面的公式推导和参数设计往往比期刊论文更完整最后带着自己的仿真问题去翻具体改进文章。这样干活效率最高比打开搜索引擎从第一篇开始顺藤摸瓜省力得多。5.2 这套方案还能往哪些方向扩展仿真跑通之后往后扩展的空间挺大。第一个方向是双矢量和三矢量MPCC当前用的是单矢量枚举电流纹波偏大扩展到双矢量在一个周期内分配两个有效矢量可以显著减小纹波代价是计算量翻倍但仿真里完全能接受。第二个方向是把ESO换成其他观测器做横向对比比如滑模观测器、龙伯格观测器看看不同观测器在参数失配和噪声下的表现差异这是一个很自然的论文或项目切入点。第三个方向是给 $\alpha$ 加自适应既然 $\alpha$ 理论上可以偏离真实值那在线辨识真实电感然后实时修正 $\alpha$能让控制器在超大范围参数变化下更稳定这个方向工程应用潜力比较大。第四个方向是把这套电流环整体移植到实验平台仿真通过只是第一步实验平台上还有死区补偿、电流采样偏置、通信延迟这些仿真里不存在的坑要处理移植过程中你才会真正理解ESO补偿能力的边界在哪里。我最后的建议是把仿真模型作为你验证新想法的工作台数据结构ESO输出F、预测电流 i(k1)、最优电压矢量这些中间量全部记录下来后面做实验对比、写报告、做答辩展示都用得上。最后说点个人体会这套ESO无模型MPCC方案我最初是在一次电机参数严重漂移的项目里被逼着试的当时的直觉是所有依赖模型的路线都不可靠不如换个不依赖模型的思路。跑通之后我才意识到它真正的价值不只是解决参数漂移而是把控制器的鲁棒性和可做性分成两层——ESO负责兜底不确定性预测器负责快速响应两层各司其职比把希望全押在一个精确模型上踏实得多。希望这篇记录能让正在折腾PMSM电流控制的你少走几个弯路。
阅读完成 · 觉得有帮助?