做电机无感控制的同行应该都有同感:滑模观测器(SMO)这东西,仿真里波形干干净净,一上真实台架就开始暴露问题。最典型的就是那个反馈增益怎么取都不对劲——取小了,高速段滑模面建立不牢,反电动势估计跟不上,转子磁链角偏出去几度你都看不见;取大了,低速段抖振能把电流波形振成毛刺森林。这个矛盾的根子在于:固定增益让观测器在所有转速段共用同一套“性格”。我最近给一个某跨平台电机控制器的无感方案做转子磁链定向控制时,把滑模观测器的切换增益改成了与转速相关的自适应形式,低速段不再捂着耳朵听抖振,高速段的磁链角度和转速估计精度也明显改善。这套方案从原理到底层实现到调参落地的全过程,我觉得值得完整写出来。
1. 先搞清楚:在转子磁链模型上动滑模观测器,到底在改什么
1.1 无感控制里“转子磁链”这个量有多重要
异步电机做矢量控制,转子磁链角度是所有坐标系变换的基准。d轴必须锁在磁链矢量的方向上,如果磁链角偏了5度,给出去的转矩电流实际上有一半变成了去磁电流,转矩输出打折,动态响应变差,甚至可能引起磁链饱和或者欠励磁。有编码器的时候,这个角度通常靠速度积分或者直接观测器去校,压力不大;真正棘手的是无感控制——你手里只有电流和电压,磁链方向完全要靠在观测器里“算”出来。
常用的开环磁链估计分两类。电流模型用转子时间常数和转速计算磁链,低速好使,但依赖转速信号,无感系统里这本身就存在鸡生蛋的问题;电压模型靠反电动势积分,高速段精度尚可,但纯积分项带来的零漂和初始值问题在低速段就是灾难。所以工程上更愿意用带闭环修正的观测器结构,把磁链放进状态方程里去估,用实测电流来持续“纠偏”。而滑模观测器因为结构简单、对参数误差的鲁棒性好,成了这种闭环结构里相当常见的选择。
1.2 传统滑模观测器的看家本领与老毛病
滑模观测器在电机控制里能站住脚,底层逻辑就一句话:它利用不连续的高增益切换项,强行把电流估计误差压到一个滑模面上。一旦进入滑模状态,系统的动态行为就不受原模型参数影响,只由滑模面方程决定。这就是它抗参数摄动的底气——定子电阻随温度漂个30%,只要滑模增益足够大,对估计结果的影响被大大削弱。这也是它在无感领域里经久不衰的原因。
但成也切换,败也切换。sign函数那种硬切换,本质上是在用一个高频抖动的等效信号去逼近真实扰动,工程上就表现为电流估计误差和磁链估计里的高频颤振,俗称抖振。为了抑制抖振,传统的做法是加低通滤波器,把等效控制量里的高频成分滤掉。但低通滤波是有代价的:相位滞后。转速越高,滞后的角度越大,而转子磁链角度误差对相位又特别敏感。于是你发现低通滤波器的截止频率调了又调:截止频率低了,抖振没了,高速角度滞后却大到影响满载输出;截止频率高了,相位保住了,可抖振也跟着回来了。这其实已经是个两难。
1.3 固定增益的真正麻烦:它被迫在两头妥协
更隐蔽的问题是切换增益本身。带编码器的系统里,观测器的参数怎么调都有编码器兜底;无感系统里,切换增益直接决定整个观测器的性格。固定增益设计时,你得先想清楚在什么转速下保证滑模存在。如果按额定转速的最大扰动去定增益,那么低速下这个增益明显“过剩”,切换项幅度过大,抖振被进一步放大,电流环都被带出了附加噪声;反过来,如果按低速需求把增益调小,高速段的扰动上界盖不住,滑模面维持不住,磁链角和转速估计就开始滞后甚至发散。
我一开始用的就是这种传统固定增益方案,低速额定20%以下时,电流波形的毛刺能明显看到;跑到80%额定转速以上,又发现磁链角估计比实测小了一个固定角度,补偿了几次都补不干净。后来我把切换增益改成转速的函数,才意识到一个挺简单的道理:扰动上界本身就是随转速增长的,那为什么增益要是个常数?
2. 转子磁链模型的滑模观测器:原理与结构拆解
2.1 两相静止坐标系下到底在解什么方程
要聊改进,得先把被改进的对象说清楚。这里说的转子磁链模型,不是那种把磁链当中间量的开环公式,而是把转子磁链作为状态变量,和定子电流一起写进状态方程。在两相静止坐标系下,异步电机的转子磁链动态可以写成:
dψrα/dt = (Lm/Tr)·isα - ψrα/Tr - ωr·ψrβ
dψrβ/dt = (Lm/Tr)·isβ - ψrβ/Tr + ωr·ψrα
其中Tr是转子时间常数(Lr/Rr),Lm是互感,ωr是转子电角速度。注意最后两项:ωr×ψr,这是转差带来的交叉耦合。看明白这个方程,后面很多设计决策就有依据了——转速通过这个耦合项直接影响磁链动态。
对应的定子电流动态方程把磁链耦合进来了,写紧凑一点是:
dis/dt = -a·is + b·ψr + c·(ωr × ψr) + d·us
其中a、b、c、d都是电机参数的组合表达式,本质上由σLs、Rs、Tr这些参数决定。这个方程里最关键的就是c·(ωr × ψr)这一项,它是“扰动”的主要来源之一,也是后面自适应增益设计的切入口。电流是实测得到的,所以观测器可以拿电流估计误差来做滑模面;磁链没有实测信号,只能靠等效控制去重构、去逼出来。
2.2 观测器结构与滑模面的建立
常见的全阶滑模观测器是把电流和磁链两个状态都估计出来,电流估计方程和磁链估计方程里都加上切换修正项。核心思路可以简化成三步:
第一步,用上一拍的状态估计值代入模型,算出当前电流的预测值;第二步,拿电流采样值和预测值做差,得到电流残差;第三步,把残差经过符号函数(或饱和函数)放大成切换项,作为修正量同时反馈进电流方程和磁链方程。滑模面取的就是电流残差本身,也就是把s = i_hat - i 压制到零。一旦电流残差进入滑模、在零附近高频切换,那么电流方程里的切换项的平均值就恰好等于模型里所有不确定项的总和,这时的切换项经过等效控制原理处理后,就能反推出反电动势和磁链信息。
这里有个工程上容易犯迷糊的点:磁链方程里加切换项时,反馈系数怎么给?有的实现是电流切换量乘以一个固定的磁链修正增益,有的实现是直接拿等效控制信号去替换磁链方程里的部分状态。实测下来,前者更皮实,因为它保留了电磁耦合的物理关系,不太容易出现数值上的正反馈。
2.3 等效控制与转子磁链的提取
所谓等效控制,并不是真的切换项本身,而是切换项里的低频分量、平均值。工程实现上就是让切换量经过一个低通滤波器,把高频载波滤掉,剩下的连续信号就是等效控制。再把这个等效控制代入磁链方程或者反电动势公式,就能得到转子磁链的估计值,再通过atan2求角度,或者送进PLL求出转速。
这里必须提醒一句:低通滤波器的截止频率是整个链条里最容易被低估的环节。截止频率太低,等效控制里的有效磁链信息也被削掉了,高速段滞后明显;截止频率太高,高频残余进到角度计算里,估计出的磁链角就带毛刺。我见过不少论文里把这个滤波器参数写得含糊其辞,实际调的时候你会发现它和切换增益是联动的,一个改了另一个必须跟着重调。
2.4 需要自适应增益的根源:扰动上界随转速变大
现在可以回答标题里那个关键问题了:为什么切换增益要跟转速相关。从电流动态方程能看到,磁链耦合项、转速交叉耦合项都会随转速变化,其中最主要的c·(ωr × ψr)项,幅度正比于|ωr|乘以磁链幅值。在磁场定向建立之后磁链幅值基本恒定,那么这一项的扰动上界就近似正比于转速绝对值。滑模存在的充分条件要求切换增益必须大于扰动上界,所以满足条件的最小增益本身就应该随转速线性增长。
固定增益的做法相当于用额定转速下的扰动上界去约束所有工况。低速时这个界远远用不上,切换幅度却依然那么大,抖振自然消灭不掉。更合理的做法是让增益贴着扰动上界走:低速低增益,高速高增益,中间平滑过渡。这就是“与转速相关的自适应反馈增益”背后的动机,不是什么新鲜花活,而是把滑模存在条件里的不等式重新尊重了一下。
3. 与转速相关的自适应反馈增益:设计与实现
3.1 自适应律的形式怎么选
增益和转速的函数关系可以有很多种写法,我实际对比过几种,各有适用场景。
最简单的形式是线性函数:k = k0 + k1·|ωr|,在20%额定转速以下它的行为倒是直白,但问题是高速没有上界限制,增益一直涨上去,最终会喂出不必要的大幅切换,噪声和电磁噪音都吃亏。
带饱和的线性形式要好一些:k = k_min + (k_max - k_min)·min(|ωr|/ω_b, 1)。在转折转速ω_b以内线性增长,超过就封顶。这个形式工程上很好理解,参数少,调试直觉强,但转折点附近有一个斜率突变,跑工况时可能在转速跨越这个点的时候看到电流残差的小幅跳动。
我最后采用的是有理分式形式:
k = k_min + (k_max - k_min)·|ωr| / (|ωr| + ω_k)
其中ω_k是转折转速,|ωr|远小于ω_k时增益趋近k_min,远大于时趋近k_max,中间过渡平滑单调,没有斜率跳变。相比线性加饱和,它天然保证了增益永远在两个界限之内,高转速不会冲过头。相比tanh形式,它只需要三个参数,调起来直觉更清晰。这几种形式的对比我整理成了表:
| 形式 | 公式 | 优点 | 缺点 |
|---|---|---|---|
| 线性 | k0 + k1·|ωr| | 参数少,低速好理解 | 高速无界,噪声放大 |
| 线性+饱和 | k_min + (k_max-k_min)·min(|ωr|/ω_b, 1) | 有界,调试直觉好 | 转折点斜率突变 |
| 有理分式 | k_min + (k_max-k_min)·|ωr|/(|ωr|+ω_k) | 平滑、有界、单调 | 三个参数要逐个标定 |
| tanh | 按tanh过渡 | 最平滑 | 参数不直观,易过拟合 |
3.2 转折转速ω_k到底怎么定
转折转速这个概念,指的是增益从低速值开始明显上升的那条“膝盖”。它该放的位置不是拍脑袋决定的,我的做法是分两步定位。
第一步做开环辨识:把增益固定在几个不同值下跑转速斜坡,记录不同转速下电流残差的抖振幅度和磁链角滞后量。曲线交叉点往往就在10%到20%额定转速之间——这个区间内反电动势已经足够大,固定小增益开始出现跟踪滞后,但切换幅度又不足以引起严重抖振。第二步把ω_k设在这个交叉点附近,再往低了收一点,给过渡留足裕量。收低的逻辑是:宁可让增益稍微早一点变大,也不要在某个临界转速上突然发现滑模面维持不住。
另外要提醒一下,ω_k用转速的标幺值来定义比较好。不同功率等级的电机,额定转速差异很大,直接用物理转速写死参数不具有可移植性。我在代码里用额定转速做归一化,换电机平台调试时,只需要改额定转速基值和三档增益参数,不用重推整个观测器结构。
3.3 离散化与代码实现,几个不值得踩的坑
自适应增益最终要在控制周期内实时计算,离散化这一环不能省。我是在常规的电流环中断里实现的,控制频率10kHz,滑模观测器每拍更新一次。核心代码逻辑如下:
#define SMO_KMIN (0.35f) // 最低增益,按标幺值体系 #define SMO_KMAX (2.8f) // 最高增益 #define SMO_WKNEE (0.15f) // 转折转速,额定转速标幺值 #define SMO_RATE (30.0f) // 增益变化速率限幅,每秒标幺值 static float smo_k_sw = SMO_KMIN; float smo_adaptive_gain_update(float w_elec_pu) { float abs_w = fabsf(w_elec_pu); // 有理分式自适应律 float k_target = SMO_KMIN + (SMO_KMAX - SMO_KMIN) * (abs_w / (abs_w + SMO_WKNEE)); // 速率限幅,防止转速突变时增益跳变引起电流冲击 float diff = k_target - smo_k_sw; float max_step = SMO_RATE * CONTROL_PERIOD; if (diff > max_step) diff = max_step; if (diff < -max_step) diff = -max_step; smo_k_sw += diff; return smo_k_sw; }三个点必须注意。第一,增益不要直接用瞬时转速符号的正负去切换方向,这里用fabsf取绝对值,正反转对称,避免换向瞬间增益突变。第二,速率限幅不能省,我一开始图省事直接每秒更新一次目标值,转速斜坡时没问题,一碰到负载突变转速猛拉,增益瞬间跳变,电流残差立刻起冲。第三,参与计算转速的估计值本身最好做轻滤波,否则转速估计里的噪声会被自适应律放大到增益里引起耦合振荡。实测下来,给转速估计加一个一阶低通,截止频率50Hz左右,就足够了。
3.4 稳定性上的一点思路,不搬公式但能想明白
很多论文喜欢用Lyapunov函数来证明自适应滑模观测器的稳定性,那个推导本身不难,核心是选V = s²/2,然后证明V对时间的导数小于零。落到工程上,等价于一句话:切换增益必须盖过系统的总扰动上界。由于扰动上界D(|ωr|)是转速的单调增函数,那只要让增益k(|ωr|)始终大于D(|ωr|)就行。有理分式形式的自适应律在低速段保持一个最低下限k_min,这个下限要大于低速时扰动上界的最大可能值;高速段虽然增益上升,但只要k_max留够裕量,滑模面就不会丢。我们实测过程中真正要关心的不是证明的完备性,而是参数裕量:增益曲线的位置必须在扰动上界曲线之上,但同时不能高得离谱,否则抖振就是代价。
4. 仿真与实验验证:从波形到参数整定
4.1 仿真模型怎么搭才有参考价值
仿真环境里我习惯把电机本体、逆变器非线性、电流采样延迟都搭进去,只搭理想电机模型的仿真结果参考价值很有限。电机本体用经典四阶模型即可,逆变器部分要带死区时间设置,电流采样要加入一个控制周期的零阶保持延迟。很多同行觉得SMO在仿真里表现很好、上机就拉胯,八九成是仿真太“干净”了,把真实世界最麻烦的三样东西——死区、采样延迟、电流噪声——全给理想化了。
测试工况我固定用三组。第一组是零速起转到20%额定转速的低速段,重点看抖振和磁链角噪声;第二组是额定转速左右的阶跃加减速,重点看滑模跟随的滞后;第三组是双向转速穿越零点,重点看正反转交接时增益切换是否平滑。固定增益和自适应增益跑同一套工况,波形对比才有说服力。
4.2 参数整定的顺序比参数本身更重要
这块是纯工程经验。自适应增益有三个参数:k_min、k_max、ω_k,加上低通滤波器截止频率,一共四个维度。乱调一定调不出来,顺序对了能省一半时间。
先把k_min定出来。方法是在最低工作转速下跑稳态,从小往大加,直到电流估计残差进入滑模、磁链角不再抖动为止。这个值通常比想象中小得多,因为低速时扰动上界本来就小。接着定k_max,在额定转速附近跑,观察磁链角滞后,如果滞后明显就加大k_max,加到滞后不再改善为止,再回退10%留裕量。然后是ω_k,按3.2节的方法定位后微调。最后回到低通滤波器,先粗设一个中等截止频率,跑两组高低速工况,看哪边更糟糕就调向哪边,然后回到第一步微调k_min,因为这两个参数互相耦合。
用这套顺序,我前后只用了两个半天就把参数收敛到了比较满意的状态。如果用穷举试错法,一个参数改了重新看四个维度,很花时间。
4.3 实验波形里到底看什么
上机实验的判据需要提前想清楚,不然就是对着波形瞎看。我从三个指标看:电流残差的高频分量幅度,反映抖振强度;磁链角在稳态时的标准差,反映低速精度;外加一个转速阶跃后的调节时间,反映动态跟随能力。
对比结果很直观:固定增益方案如果按高速需求定增益,低速20%额定转速时电流残差噪声峰峰值基本是自适应方案的2到3倍;如果按低速需求定,高速段磁链角会出现一个2到3度的固定滞后。自适应方案在低速段用小增益,残差噪声明显收敛,高速段增益提上来后,磁链角最大滞后控制在0.5度以内。更让人舒服的是,转速穿越零点时增益平滑过渡,几乎看不到电流冲击,这是固定增益换向瞬间最容易露馅的地方。
5. 常见问题与排查经验
5.1 问题速查表
把我在这个项目里遇到过的典型问题整理成速查表,方便直接对照:
| 现象 | 可能原因 | 处理方向 |
|---|---|---|
| 低速段电流残差毛刺大 | k_min偏高或低通滤波截止频率偏高 | 减小k_min,降低滤波截止频率 |
| 高速段磁链角滞后 | k_max不足,或滤波截止频率过低 | 提高k_max,提高滤波截止频率 |
| 转速过零时电流冲击 | 增益切换不平滑,或转速估计噪声大 | 检查自适应律平滑性,给转速加反馈滤波 |
| 负载突变后恢复慢 | 速率限幅过小,增益爬升太慢 | 增大SMO_RATE,或提前预测转速变化 |
| 磁链角估计含固定偏移 | 定子电阻参数不准,低速尤为明显 | 加入定子电阻在线辨识或温度补偿 |
| 转速估计抖动频繁 | 等效控制信号噪声大 | 检查低通滤波器,必要时用PLL替代atan2直接算角 |
5.2 几个容易踩的工程坑
第一个坑是死区补偿。低速段反电动势小,逆变器死区引起的电压误差相对占比很大,而这些误差会被滑模观测器当作“扰动”去对抗、去补偿。切换增益如果为了对抗死区误差而调大,抖振就会跟着上来,等于用死区换来抖振。所以建议先把死区补偿做好,再去动滑模增益参数,两者配合着调。
第二个坑是电流采样的直流偏置。哪怕零点几个百分点的采样偏置,经过观测器里的积分和等效控制环节,会被放大成磁链估计上的直流漂移,低速时尤其明显。这个问题经常被误判成滑模参数没调好,浪费很多时间。查的时候可以在零速稳态下看磁链估计是否有缓慢漂移,有的话优先检查采样通道偏置调零。
第三个坑是离散化带来的高频极不稳定。我最初用显式欧拉离散磁链方程,在控制频率只有5kHz时,高速工况下观测器偶发振荡,查了很久发现是离散化步长过大导致的高频极点越界。后来改成隐式欧拉,或者把磁链方程的时间常数项做半隐式处理,这个问题就消失了。如果你遇到莫名其妙的高频振荡,先怀疑离散化方式,再去调增益。
5.3 这个方案后续还能怎么延伸
自适应反馈增益只是把滑模观测器“顺毛撸”了一遍。沿着同一个思路,后续还有几个方向可以直接扩展。一是把符号函数换成sigmoid函数,边界层厚度也做成随转速自适应,低速时薄一点保精度,高速时厚一点抑抖振,效果还能再上一截。二是转速和磁链角的提取从atan2换成PLL,带宽随转速自适应,低速窄带滤波、高速宽带跟踪,和增益自适应正好形成一个闭环。三是把增益曲线里的ω_k从固定常数变为磁链幅值的函数,弱磁工况下磁链变小,扰动上界也随之变化,增益曲线跟着调整会更精确。这些扩展都不需要推翻现有结构,在自适应增益这个底座上加装即可。
6. 实测中的几点体会
最后说几个这次项目里沉淀下来的体会,算不上结论,纯属经验。
调参顺序比参数本身更重要。我花了大量时间在固定增益方案里纠结低通滤波截止频率,改了增益又改滤波,改了滤波又回来改增益,来回几次才意识到是顺序错了。先把增益曲线四个参数按这套顺序定完,回头再看低通滤波,很多之前纠缠不清的矛盾都自己化解了。
还有一点,观测器永远是在给电流环服务。滑模观测器调得再好,电流环本身的动态和噪声特性如果不过关,整个无感系统的上限依然上不去。所以如果电流波形本身就不干净,先别急着怪观测器,回去把电流环增益重新审查一遍再做结论。
最后是工程心态上的建议:自适应增益不是越多越好。增益曲线的平滑度和有界性比“自适应”这三个字本身重要得多。一个有人为速率限幅、有清晰物理含义的简单有理分式,远好过一个参数众多、曲线花哨却很难解释的复杂自适应律。我见过不少改进方案加了五六种维度,最后反而在标定环节耗费大量人力。把一件事用最简单的形式做扎实,在这个领域永远是收益最高的选择。