做永磁同步电机(PMSM)伺服驱动的人,十有八九都经历过这个场景:电流环用PI加SVPWM,速度环也用PI,调试时波形看起来挺干净,可一旦突加额定负载,转速总要掉一截,再靠积分慢慢顶回来。后来我把电流环整个换成模型预测电流控制(MPCC),速度环引入一个新型滑模扰动观测器(NSMDO)做前馈补偿,这套组合在一台2.4 kW表贴式PMSM台架上实测,突加额定负载的转速跌落比传统PI级联方案减少七成,恢复时间缩短到四分之一左右。这篇文章把这套方案的建模、观测器设计、电流预测、速度环采样率配合以及台架排错完整拆开讲一遍,适合正在做PMSM矢量控制研究,或者想把论文里的先进控制算法真正落到实处的同学和工程师。
1. 传统级联控制的短板:电流环带宽与负载扰动这两只拦路虎
先回顾一下大家最熟悉的级联矢量控制结构。外环是速度环PI,输出q轴电流给定iq*;内环是d、q轴电流PI,输出vd、vq;再经过SVPWM合成开关序列。这套结构在工程上极其成熟,但它有两个根深蒂固的瓶颈,平时不明显,一遇到高动态工况就露馅。
第一个瓶颈在电流环。电流PI的带宽受斩波频率和一拍延时限制,通常只能做到斩波频率的十分之一左右。PMSM的d、q轴之间有交叉耦合项,转速越高,ωe·Lq·iq和ωe·Ld·id这两项越大,PI要同时处理解耦和跟踪,参数稍微整定得不合适,高速就会出电流振荡。更麻烦的是PI的积分环节在电流限幅时容易饱和,抗积分饱和逻辑写得不好,大阶跃电流直接超调。而模型预测电流控制MPCC完全绕开了这些问题:它用离散电机模型直接预测未来电流,按代价函数选最优电压矢量,本质上一个周期内就能把电流推到位,响应速度接近无差拍控制,还没有积分环节,天然免疫积分饱和。
第二个瓶颈在速度环。速度环PI对负载扰动只有积分这一条路可以反抗,而积分动作天生就慢。想加快抗扰,就得把PI带宽往上提,但速度反馈的噪声会跟着放大,带宽上去了系统又容易抖。换句话说,传统速度环本质上处于一个两难局面:要么响应慢、抗扰差,要么噪声大、易振荡。Breakthrough的思路是别让速度环控制器去硬抗扰动,而是让一个观测器把负载转矩等扰动估计出来,直接前馈补偿到电流给定上。这样速度环PI只需要处理观测误差的残差,动态压力大幅减小。
那为什么选滑模扰动观测器?因为滑模结构对模型不确定性和外部扰动有天然鲁棒性,在系统进入滑动模态之后,等效控制项可以直接反推出扰动大小,非常适合做扰动估计。所谓"新型",主要是在趋近律上做改进,抑制传统滑模观测器那种高频抖振。把这两个技术一上一下组合起来,正好各补各的短板:MPCC把电流环做成快而准的执行器,NSMDO把速度环周围的扰动信息挖出来,整体系统的动态响应就不是PI级联能比的了。
2. NSMDO的建模与设计:滑模面、趋近律和扰动估计的收敛条件
2.1 从机械方程到集总扰动
设计观测器之前,先把被观测对象写清楚。PMSM机械运动方程为:
J·dωm/dt = Te − TL − B·ωm
其中J是转动惯量,B是粘滞摩擦系数,TL是负载转矩。电磁转矩在表贴式电机、id=0控制下简化为:
Te = 1.5·p·ψf·iq
p是极对数,ψf是永磁体磁链。现在的问题很直接:我们想知道TL,但机械方程里能测/能算的量只有ωm和Te。直接反解TL会遇到微分噪声,不现实。所以把模型不确定性和外部扰动全部合并成一个集总扰动d:
d = −(TL + B·ωm + ΔJ·dωm/dt + 其他未建模项)/J
这样机械方程就写成:
dωm/dt = Te/J + d
d包含了负载变化、摩擦、转动惯量辨识误差、甚至部分参数摄动。观测器的任务就是把d实时估出来,而不再关心它背后的物理成分是什么。
2.2 观测器结构与收敛条件
定义转速估计误差e = ωm − ω̂,构造一个带滑模修正项的扩张状态观测器:
dω̂/dt = Te/J + d̂ + k1·e
dd̂/dt = k2·sat(e/ε)
这里sat是饱和函数,ε是边界层厚度。第一行的k1·e起线性校正作用,让估计转速跟随实际转速;第二行的滑模项负责估计扰动。收敛性可以这样直观理解:写成误差动态方程:
de/dt = d − d̂ − k1·e
只要滑模项把e拉到0并维持在滑动面上,误差动态就变成d̂收敛到d。也就是说,观测进入滑动模态之后,d̂就是集总扰动的实时估计值。k1决定观测误差的收敛速度,k2决定扰动估计的跟踪速度。k1太小,观测器带宽不够;k2太大,抖振明显。一般经验是k1取观测器带宽的3到5倍于速度环带宽,k2再结合样机实测微调。
2.3 "新型"到底新在哪:趋近律与抖振抑制
传统滑模观测器直接用sign(e),工程上很难受,因为符号函数在滑模面两侧高速切换,d̂会叠加严重抖振,直接前馈到电流给定会变成高频噪声源。所谓新型滑模观测器,核心区别就在于趋近律设计。我这里采用一种带分数幂的滑模趋近律:
dd̂/dt = k2·sig^α(e) + k3·sig(e)
其中0 < α < 1,sig^α(e) = |e|^α·sign(e)。这个形式的好处在于:当e离滑模面较远时,|e|^α保持较大,扰动估计快速逼近;当e靠近滑模面时,|e|^α趋近于0,切换增益自动收缩,相当于在滑模面附近做了一个软着陆,抖振大幅减小。这比单纯增大边界层ε去压制抖振要聪明,因为增大ε牺牲的是估计精度,而分数幂趋近律不动精度,只改变趋近过程的增益形态。
实际工程中我在d̂输出端再加了一阶低通滤波,截止频率取扰动观测带宽的2到3倍。这个低通只滤高频噪声,不碰低频扰动信息。加上之后,d̂波形干净很多,前馈补偿进电流环也不会引入刺耳的开关噪声。
2.4 一组可复现的增益设计与离散实现
下面给一组我在台架上实际用过的参数,样机是一台2.4 kW表贴式永磁同步电机,额定转矩12 N·m,额定转速2000 rpm,极对数4。核心参数如下表:
| 参数 | 数值 |
|---|---|
| 定子电阻Rs | 0.8 Ω |
| 电感Ld = Lq | 6.5 mH |
| 永磁体磁链ψf | 0.28 Wb |
| 转动惯量J | 1.2e-3 kg·m² |
| 母线电压 | 311 V |
| 斩波/采样频率 | 16 kHz(Ts = 62.5 μs) |
NSMDO的离散实现用前向欧拉,采样周期与电流环一致,代码如下:
float e = wm - w_hat; // 转速估计误差 float Te = 1.5f * p * psi_f * iq; // 电磁转矩 float sig_alpha = powf(fabsf(e), 0.5f) * (e > 0.0f ? 1.0f : -1.0f); d_hat += Ts * (k2 * sig_alpha + k3 * e); // 扰动估计更新 w_hat += Ts * (Te / J + d_hat + k1 * e); // 转速估计更新增益选取参考:k1 = 600左右,对应观测器等效带宽约400 Hz,是速度环带宽的3到5倍;k2 = 300,k3 = 3000。这套增益在16 kHz采样下离散化稳定,负载阶跃后d̂大约1.5 ms内跟踪到位。需要注意,k2、k3的量纲与离散时间相关,换个采样率必须重新换算,不能照抄。
3. MPCC电流环:预测模型、一拍延时补偿与代价函数取舍
3.1 离散预测模型怎么建
MPCC的全部基础就是PMSM的d-q轴电压方程:
ud = Rs·id + Ld·did/dt − ωe·Lq·iq
uq = Rs·iq + Lq·diq/dt + ωe·Ld·id + ωe·ψf
用前向欧拉法离散化,一个周期Ts后预测电流为:
id(k+1) = id(k) + Ts/Ld·(ud(k) − Rs·id(k) + ωe·Lq·iq(k))
iq(k+1) = iq(k) + Ts/Lq·(uq(k) − Rs·iq(k) − ωe·Ld·id(k) − ωe·ψf)
这里把ωe在当前周期内视为常数。Ts取62.5 μs时,这个近似的误差足够小,完全满足工程需要。真正要小心的是交叉耦合项ωe·Lq·iq和反电动势项ωe·ψf,高速时这两项数值很大,漏掉任何一个,预测都会偏。
3.2 一拍延时补偿:为什么必须做两步预测
很多新手在仿真里跑MPCC一切正常,一上硬件就发现电流偏差大、甚至发散,九成原因是没做一拍延时补偿。数字控制里时序是这样的:k时刻采样电流,然后单片机花几十微秒计算最优矢量,等到PWM真正更新输出,已经是k+1时刻了。也就是说,k时刻算出来的矢量,实际作用的是k+1周期。如果预测模型还按"k时刻算、k周期作用"来写,等于每个周期都带了一拍相位滞后。
正确做法是两步预测。第一步,用k时刻实际施加的电压v(k)(上一周期算出来的那个矢量)预测出i(k+1);第二步,把这个i(k+1)作为起点,对7个候选电压矢量分别预测i(k+2),选出使代价函数最小的矢量作为k+1时刻的输出。两步预测看起来多算一次电流,但代价是值得的,实测中不做的后果就是高速运行时电流波形有明显相位滞后,控制器越激进越不稳定。
3.3 代价函数与候选矢量的取舍
MPCC的核心代价函数就是电流跟踪误差的平方和:
g = (id* − id(k+2))² + (iq* − iq(k+2))²
d、q轴误差平方加和,单位一致,权重天然相等。候选电压矢量是两电平逆变器的8个基本矢量,6个有源矢量加2个零矢量。对每个矢量算一次g,取最小者输出。如果希望限制开关频率,可以在代价函数里加一项λ·n_sw,n_sw表示切换次数,λ是权重,调得越大开关越省,电流波纹也会随之变大。
需要心里有数的是,传统FCS-MPC的开关频率是不固定的,电流纹波比定频SVPWM大一些。在16 kHz采样下,我实测纹波约在额定电流的3%到5%之间,对伺服应用可以接受。如果后续想进一步降纹波,可以改成占空比调制型MPC:每个有源矢量配一个零矢量,由占空比决定两者作用时间,输出变为一周期内的平均电压,纹波能降一半,代价是计算量翻倍。
3.4 参数敏感性与对策
MPCC的预测模型依赖Rs、L、ψf三个电机参数,参数不准预测就会偏。电感L不准,直接影响预测增量;磁链ψf不准,反电动势项就出错,转速越高越明显。表现就是iq出现稳态跟踪偏差,代价函数认为已经最优,但实际电流差一截。
我试过三种对策,效果排序如下:最好的是在线参数辨识,用递推最小二乘在每个电流采样周期同时辨识电感和磁链,但这套要占不少代码空间和算力;次之是在代价函数里加积分修正项,把电流误差累积后映射到给定修正上,实现简单,代价是动态性能略微变差;第三种是依赖NSMDO的集总扰动去吞掉参数偏差,这个方案实现成本最低,但只能补偿一部分,因为参数偏差引起的预测误差是时变的,观测器跟踪这种变化有延迟。工程上我最终采用的是"MPCC加积分修正项,NSMDO负责负载扰动",两者分工明确,调试时互不干扰。
4. 速度环采样频率怎么选:NSMDO带宽与级联系统时间尺度的配合
4.1 带宽金字塔
级联控制必须遵守带宽金字塔原则,否则内外环相互干扰。经验规则是:电流环闭环带宽约为斩波频率的1/10,速度环带宽取电流环带宽的1/5到1/10。对16 kHz斩波的系统,典型取值为电流环带宽800到1200 Hz,速度环带宽80到150 Hz。NSMDO作为速度环的辅助工具,观测带宽应明显高于速度环,但又低于电流环采样率的安全上限,一般取300到500 Hz。这样一个典型配置如下表:
| 环节 | 频率/采样 |
|---|---|
| 电流环(MPCC) | 采样16 kHz,闭环带宽约1 kHz |
| 速度环(PI) | 采样4 kHz,闭环带宽约100 Hz |
| NSMDO扰动观测 | 采样16 kHz,观测带宽约400 Hz |
从这个表能看出一个容易被忽略的问题:速度环PI和NSMDO服务的是同一个速度环,但它们不必跑在同一个采样率上,恰恰相反,分家跑往往效果更好。
4.2 速度环采样率与观测器运行率分家
很多人的惯性做法是速度环多少采样率,观测器就多少采样率,代码里写在一起省事。但扰动观测器的带宽受采样率硬约束:观测器能可靠估计的扰动频率带宽,经验上不超过其采样率的1/10。如果速度环采样4 kHz、NSMDO也跑4 kHz,观测带宽最多400 Hz;一旦负载里有超过400 Hz的周期性扰动分量,比如齿轮箱齿槽力矩、弹性联轴器扭振,这个观测器基本就看不见了。
所以我的做法是让NSMDO和MPCC同步跑16 kHz,速度环PI只在4 kHz更新。负载突变本质上是阶跃扰动,800 Hz以上的谐波分量为零,所以NSMDO在16 kHz下跑,d̂的反应时间能做到亚毫秒级,前馈到电流给定几乎无延迟;速度环PI带宽低,本来也不需要那么快的更新率,4 kHz足够。这样分工的结果就是:扰动信息获取快,速度环决策稳,两边都舒服。
4.3 采样率对扰动观测带宽的约束:一组定量计算
用具体的数算一下这层约束。速度环采样Ts_speed = 250 μs对应的奈奎斯特频率是2 kHz,若NSMDO也只在速度环率上跑,按1/10经验带宽取400 Hz。对于我的样机,机械时间常数τm = J/B大约几十毫秒量级,单纯负载阶跃400 Hz带宽是够用的。我做过对比实验,把突加负载的转矩变化时间从0.1 ms压到0.05 ms,4 kHz运行的观测器d̂明显滞后,前馈补偿后转速仍然有可见跌落;切到16 kHz运行,同样的转矩突变d̂几乎同步跟上,跌落尖峰又小了一截。
不过采样率不是越高越好。速度反馈的量化噪声是白色的,观测器本质上是这个噪声的通路,d̂中的高频噪声功率会随带宽近似线性放大。观测器从4 kHz提到16 kHz,带宽提高四倍,d̂噪声幅值实测也粗了一圈。解决手段就是我之前说的:趋近律的软着陆特性加一阶低通输出滤波。采样率、带宽、噪声这三者之间要做一个明确取舍,不能只看观测器响应快不快要带宽。
4.4 编码器测速噪声是隐藏杀手
NSMDO的输入之一是转速ωm,速度反馈质量直接决定观测器表现。编码器测速的经典矛盾在于:转速越高,位置增量计数大、量化误差占比小;转速越低,量化误差占比爆炸式放大。我用的是2500线光电编码器四倍频,在30 rpm低速时,一个采样周期内的位置增量只有寥寥几个脉冲,算出来的转速跳变幅度远超真实值,此时NSMDO的d̂波形肉眼可见地抖动。
处理办法分三道防线:第一,速度反馈回路单独加一阶低通,截止频率取速度环带宽的2到3倍,过滤高频量化噪声而不伤速度环相位裕量;第二,低速段改用T法测速,用两个位置脉冲之间的时间戳计算转速,低速分辨率大幅提升;第三,如果条件允许,在速度反馈上引入跟踪微分器,比纯低通的相位滞后小,对观测器更友好。经验是先把速度反馈噪声压下去,再谈观测器增益整定,顺序反了会浪费大量调试时间。
5. 参数整定顺序与台架实测排错
5.1 我的整定顺序:先电流、后观测、再补偿
这套系统参数多,乱调必然越调越乱。我总结出的有效顺序是五步走:
第一步,建立MPCC电流环基线。只跑电流环,给iq一个0到5 A的阶跃,观察电流跟踪是否无超调、无振荡。如果这一步都有问题,后面全白搭。第二步,电流环稳定后,速度环先用PI跑,突加负载记录转速跌落深度和恢复时间的基线数据。第三步,单独使能NSMDO,但先不接前馈补偿,空载运行观察d̂波形是否合理收敛到0附近,只允许少量噪声。第四步,按0.7倍补偿系数接入前馈,逐步加到1.0,每加一档都要做负载阶跃测试,确认转速跌落持续变小且不出现新的振荡。第五步,综合微调k1、k2和速度环PI带宽,把系统调到转速跌落、d̂噪声和电流纹波三者的平衡点。
这五步里最容易被跳过的是第二步,很多人一上来就把观测器前馈接上,结果转速波形突变,却分不清是观测器的问题还是速度环本身的问题。保留基线数据,你才有个对照,出了问题一眼能定位。
5.2 波形上有哪些标志性表现
系统调好后,示波器上的特征非常明显。突加额定负载时,iq秒级响应曲线会先出现一个陡峭的跃升尖峰,这是NSMDO前馈在瞬间补转矩;对应转速波形上只有一个浅V形跌落,然后快速回到给定值,没有传统PI那种缓慢爬升的长尾巴。d̂波形在负载阶跃后1到2 ms内完成爬升,然后平平稳稳地维持在新水平,中间不带振荡纹路。
再看得细一点,MPCC的电流波形和SVPWM的区别一眼就能分辨:因为开关序列不是固定的,电流毛刺的时间分布不规则,但包络线光滑,阶跃响应一个采样周期内基本到位。如果电流包络出现规律性波动,或者d̂波形有周期性起伏,多半是机械端有周期性负载扰动,而不是控制器问题。这时候用观测器d̂去诊断机械特性,反而是个额外的好处。
5.3 实测中踩过的四个坑
第一个坑是观测器输出抖振。现象是d̂高频振动,前馈到电流后电磁噪声明显,甚至引起速度环共振。原因几乎都是k2取太大或速度反馈噪声太脏。解决办法是我前面写的:分数幂趋近律加低通滤波,同时回头检查编码器测速。
第二个坑是MPCC电流稳态偏差。现象是iq给定5 A,实际只有4.7 A,代价函数却已经最小化了。根因是电感或磁链参数失配。我临时验证推断的方法是故意把程序里的ψf调偏10%,电流偏差随之变化,确诊后上了积分修正项解决。
第三个坑是前馈补偿系数加到1.0以上引起自激。这个现象特别隐蔽,小负载时稳定,大负载突加时速度环开始低频振荡。原因是观测器带宽有限,d̂跟踪大扰动有时滞,补偿量在时间上不完美同步,相当于在环路里注入了一个延迟的正反馈。解决办法是补偿系数压回0.85到0.95,牺牲一小部分抗扰能力换稳定性。
第四个坑是死区效应。两电平逆变器在电流过零点附近,死区时间造成的电压误差最明显,而MPCC对电压误差又很敏感,预测值在这种时刻周期性偏差,表现为电流过零附近有细微的平台段。加了死区补偿后明显改善。
下面把这个排错逻辑整理成表:
| 症状 | 可能原因 | 处理办法 |
|---|---|---|
| d̂高频抖振 | k2过大、测速噪声 | 分数幂趋近律、低通滤波、T法测速 |
| 电流稳态偏差 | L/ψf参数失配 | 在线辨识或代价函数积分修正 |
| 大负载自激振荡 | 观察器时滞、补偿太强 | 补偿系数降为0.85~0.95 |
| 过零电流平台 | 逆变器死区 | 死区补偿、调整代价函数权重 |
5.4 鲁棒性验证怎么做
参数整定完成后,我喜欢做一轮破坏性测试来检验系统的鲁棒性。具体做法包括:把程序里的ψf、L分别故意设置成±10%、±20%的偏差,观察电流误差如何变化、NSMDO的d̂是否能补偿一部分;做正反转快速切换,观察速度过零时系统是否稳定;低转速30 rpm下突加负载,检验低速测速噪声对观测器的影响程度。这套验证做完,你对这套方案的边界条件就有底了,写报告或者交付代码的时候也能诚实地告诉使用者:在什么范围内它可靠,超过什么范围需要重新整定。
6. 这套方案适合谁,以及我后续想做的改进
把NSMDO和MPCC组合跑熟之后,我的体会是这套东西不是万金油。它最适合高性能伺服、机器人关节这类对负载突变响应要求高的场合,前提是控制板算力够、编码器分辨率够。如果做的是低成本家电驱动,电机参数一致性差、MCU算力有限,老老实实PI级联反而更可靠,没必要为了先进而先进。我在代码里始终保留着一套传统PI控制作为备份,切换开关一拨就能回到基线方案,对比测试时随时能拿证据说话。
后续我计划做三个方向的改进:一是把FCS-MPC升级为占空比调制型MPC,把电流纹波再压一压;二是把NSMDO和扩展卡尔曼滤波做融合,低速段用卡尔曼,高速段靠滑模,取两者之长;三是把观测增益做成自适应,跟随转速和负载状态在线调整。如果这些做完了有值得分享的结果,我会再回来写一篇实测对比。
最后分享一个小技巧:调试NSMDO的时候,别只盯着d̂波形看,把iq给定那条曲线叠加在转速波形上一起观察。扰动补偿有没有生效,看iq是否在负载突变的瞬间果断顶上去,比看转速跌落尖峰更直观,也更容易定位是观测器没估准,还是前馈通道没接对。这个细节帮我省了至少两周的排错时间。