说到永磁同步电机的转速环控制,我相信绝大多数搞电控的工程师,第一个想到的还是PI。转速环PI调好了,电流环跟得上,大部分工业场景、电动车驱动、伺服系统都能跑得挺稳。但前几年开始,自抗扰控制(ADRC)的热度一下子起来了,尤其是当负载突变、转动惯量变化、或者电机参数和铭牌对不上的时候,PI就有点力不从心,ADRC成了很多人眼里"更高级"的替代方案。
这篇文章把PI控制、线性自抗扰(LADRC)和非线性自抗扰(NLADRC)放到一起,从PMSM转速环模型的角度逐层拆开,讲清楚它们各自是怎么设计的、到底强在哪里、又踩过哪些坑。适合正在做PMSM控制仿真的学生,也适合纠结要不要把PI换成ADRC的工程师——看完你至少能判断:你的场景到底值不值得上ADRC。
1. 先说转速环本身:这三套控制的共同起点
1.1 永磁同步电机转速环路里的"低频大惯性"本质
先别急着看算法,我们得回到最基础的机械运动方程。永磁同步电机在d-q坐标系下,电磁转矩表达式是:
Te = 1.5 * p * (ψf * iq + (Ld - Lq) * id * iq)
采用id=0控制时,Ld与Lq的差异产生的磁阻转矩被忽略,电磁转矩简化为Te = 1.5 * p * ψf * iq。代入机械方程:
J * (dω/dt) = Te - TL - B * ω
把式子整理成标准形式:
dω/dt = (1.5 * p * ψf / J) * iq - (TL + B * ω) / J
这个式子很关键。它告诉我们几件事:
- 转速环被控对象本质上是积分串联型系统,也就是从iq到ω是一阶积分环节,不是一阶惯性环节,更不是二阶。
- 记号b0 = 1.5 * p * ψf / J,对应"控制增益"。
- 负载转矩TL、粘滞摩擦B * ω、还有那些我们没建模的磁链谐波、齿槽转矩波动,通通会作为"扰动"出现在系统里。
1.2 为什么总扰动这个概念是自抗扰的基石
如果你只把扰动当成"外面来的干扰",PI也能对付,靠积分项慢慢消除。但ADRC的思维方式不一样——它把所有不确定性和外部扰动合并成一个总扰动f(t),然后想办法在控制回路里把这个f(t)直接估算出来,再反向抵消掉。
用状态方程写就是:
dx1/dt = x2 dx2/dt = f(t) + b0 * u y = x1
这里x1是转速,x2是转速的导数。注意,我们把b0只当成一个"大致的增益",真正精确的模型参数、摩擦力、负载变化全塞进f(t)里去了。
实际上,PMSM的机械方程天然长这样:电流iq是输入,转速ω是输出,中间经过一个积分器,外加一个扰动力矩。所以转速环用ADRC是"原生适配"的,不需要引入额外的状态。这也是为什么自抗扰控制器在电机课题里火得这么快——模型结构天然满足要求。
2. PI控制不想退场的原因:工程简单性背后有代价
2.1 转速环PI参数整定的现代做法:带宽法
老式整定靠试凑,边看阶跃响应边调Kp、Ki,能调好,但费时间。现在比较规范的做法是带宽法。我们忽略电流环动态,把它当作一个快速响应的比例环节,于是开环传递函数为G(s) = (Kp * s + Ki) / (J * s^2)。
转速环PI控制器的传递函数为C(s) = Kp + Ki/s = Kp * (s + ωz) / s,其中ωz = Ki / Kp。用PI的零点去对消被控对象的极点(也就是1/Js的积分极点),再用闭环期望带宽去定Kp和Ki:
Kp = J * ωc Ki = J * ωc^2
这里的ωc就是期望的转速环带宽。一般取电流环带宽的1/5到1/10,如果电流环带宽是1000 rad/s,转速环闭环带宽取100~200 rad/s比较稳妥。取太高,转速环就会去"够"电流环的动态,把电流环的相位滞后引进来,最后变成一个阻尼很差的振荡器。
实际中的整定公式还要考虑一点:如果公式里用的是反电动势系数,而实际磁链ψf和转动惯量J有偏差,那整出来的Kp、Ki就会跟着成比例偏差。这也是PI的第一个隐性弱点——它需要你"知道"J和ψf的准确值,而现场往往只能估。
2.2 PI能忍受哪些扰动,不能忍受哪些
PI的积分项能消除阶跃负载引起的稳态误差,这一点在工程中已经够用了。但PI对周期性扰动和参数摄动的处理是被动的——它不知道扰动长什么样,只能"等误差出现了再慢慢积分去补"。这意味着每次负载突变之后,都会有一段明显的转速跌落和恢复过渡过程。
如果你把增益调高,理论上恢复得更快,但噪声也会被放大。实际放大的不光是电流测量噪声,还有转速反馈的量化噪声。伺服电机编码器分辨率有限,低转速时速度反馈本身就有台阶,PI增益一大,转速控制输出就会发毛,电流指令跟着抖,电机轴响。
我调过的某跨平台伺服项目就是典型例子:额定转速3000rpm,编码器4096线,PI带宽从80提到150之后,转速环指令就开始出现约±5rpm的持续抖动,电流波形也毛了。后来用卡尔曼滤波做了速度观测才压下来——但这就意味着,为了让PI更抗扰动,你得先把反馈噪声问题解决,成本并不低。
所以PI并没有大家想象的那么"落后",它的所有限制都源于"扰动只能靠反馈误差去补偿"这个被动机制。ADRC想改变的正是这一点。
3. 线性自抗扰(LADRC):用观测器代替积分项
3.1 LESO怎么把总扰动"看"出来
线性自抗扰的核心是扩张状态观测器(LESO)。它的基本思想是:既然总扰动f(t)进不了方程,那我把它扩成一个新的状态x3,用一个三维状态观测器同时估计转速、转速导数、还有总扰动:
dz1/dt = z2 + β1 * (y - z1) dz2/dt = z3 + β2 * (y - z1) + b0 * u dz3/dt = β3 * (y - z1)
其中z1估计转速,z2估计转速导数,z3估计总扰动f(t)。这个观测器的形式其实和龙伯格观测器一模一样,只是把扰动当成了第三个状态来估计。
β1、β2、β3怎么取?带宽法给了很优雅的答案:把观测器特征方程配置成(s + ωo)^3的形式,则有:
β1 = 3ωo,β2 = 3ωo^2,β3 = ωo^3
ωo是观测器带宽,通常取控制器带宽ωc的3~5倍。为什么这么取?因为观测器必须比控制器"看得快",才能及时把扰动信息送给补偿回路;但也不能太快,否则高频噪声会通过观测器增益直接放大。
3.2 LADRC的控制律:它本质上是带扰动补偿的PD
状态反馈控制律为:
u = (kp * (ωref - z1) + kd * (-z2) - z3) / b0
注意这里用了-z2作为微分项。这就是为什么LADRC和PI不一样:PI靠积分消除稳态误差,而LADRC靠z3直接把扰动静态补偿掉。它的闭环传递函数在理想观测下可以写成典型二阶系统,kp = ωc^2,kd = 2ωc,这样控制器也只有一个带宽参数需要调。
我用一个实际调试案例来说明这样的好处:某永磁同步电机做转速环,原来PI参数按J=0.002 kg·m^2整定,但后来负载装了不同惯量的轮盘,等效J变成了0.004,PI转速环出现明显超调和振荡。改用LADRC之后,b0仍按原J算的0.002来设置,结果转速响应几乎不受J变动影响——因为J变化的部分被当作总扰动观测并补偿了。
但这里必须泼一盆冷水:b0不能随便错太多。b0是模型与扰动的边界线。b0偏大,控制增益被补偿得过强,容易振荡;b0偏小,扰动项又要扛更多的工作量,同样可能引起观测误差。从工程实践看,b0偏差在±30%以内都能接受,超过50%就会出问题。
3.3 从PI平滑修改到LADRC的现场策略
很多工程师担心上了ADRC就要推翻整套调试习惯,其实没必要。如果你现在有一组合格的PI参数,可以按以下思路迁移:
- 保持电流环不动,只改转速环。
- 用原来PI的Kp、Ki反推等效带宽ωc = Ki / Kp(如果你的PI整定比较规范)。
- 设LADRC的控制器带宽等于这个ωc,然后取观测器带宽ωo = 3ωc先跑起来。
- 先空载验证转速阶跃响应与PI相差不大,再逐步加大ωo观察扰动下的转速跌落幅度。
- 最后把z3通道单独拉出来观察波形,确认它基本跟随负载变化,就说明观测器生效了。
我自己在做的某图像处理Demo配套电机驱动里,就是这么一步步从PI切到LADRC的,切换过程大约只调了半天。
4. 非线性自抗扰(NLADRC):理论上更美,工程上更烫手
4.1 fal函数带来的非线性观测器到底是什么
非线性自抗扰与线性版本最大的区别在于,观测器增益不再是常数,而是误差的非线性函数。核心是韩京清提出的fal函数:
fal(e, α, δ) = { |e|^α * sign(e), |e| > δ; e / δ^(1-α), |e| ≤ δ }
当误差较大时,增益按|e|^(α-1)变化;误差小到δ范围之内,又回到线性增益防止抖振。α通常取0.25~0.5,δ取0.01~0.1。把fal函数嵌进扩张状态观测器后,就得到NLESO:
dz1/dt = z2 + β1 * fal(y - z1, α1, δ) dz2/dt = z3 + β2 * fal(y - z1, α2, δ) + b0 * u dz3/dt = β3 * fal(y - z1, α3, δ)
这个设计哲学是:误差大的时候给大增益,让观测器快速收敛;误差小的时候给高增益分辨率,保证稳态跟踪精度。这比恒定的线性增益更"聪明"。
4.2 我在仿真里看到的"惊艳"与"翻车"
说实话,非线性ADRC在Simulink仿真里表现确实抢眼。我见过很多研究论文的对比图:同样的负载突变,PI转速跌落了100rpm,LADRC跌50rpm,NLADRC只跌10rpm,恢复时间也最短。第一次看这种图,谁不心动?
但是把它往实物上搬,问题就来了。最典型的是离散化陷阱。fal函数是非线性的,当采样周期太大,观测器在一个控制周期内可能跨越多个线性/非线性区间,导致等效增益剧烈跳变。仿真里采样时间设1e-5s很容易收敛,实际DSP里跑到1e-4s甚至2e-4s时,NLESO开始出现极限环甚至是轻微的持续振荡。
我踩过的一个坑是:某次做硬件在环测试,把NLADRC的α2从0.5改成0.25,仿真里收敛速度明显变快。但上电之后,转速低频振荡,电流谐波变大,示波器看电流FFT多出明显的高频分量。后来把采样频率从10k提到15k,问题才有所缓解——但代价是MCU的负载从65%涨到92%,这谁顶得住?
4.3 工程上的折中:分段线性,用性能换稳定
以我接触到的量产项目经验来说,很少有团队敢直接上全参数非线性ADRC。更常见的做法是:
- 把fal函数的分段点δ适当加大,让线性区间覆盖到正常误差范围,只在突加大扰动时启用非线性增益。
- 对三个扩状态通道的α进行去耦合处理:α1可以取0.5,α2和α3取1,避免同时非线性引发高增益耦合。
- 或者干脆用饱和线性函数近似fal,保留大误差高增益的特性,但去掉小误差区域的非线性形态。
还有一条路线值得推荐:先上LADRC,把功能跑通以后,再对观测器误差通道逐个加非线性。如果性能提升明显,值得;如果提升不到10%且噪声变大,就退回去。工程上真金白银的收益,往往不在那百分之几的扰动抑制上,而是在调参的时间成本控制上。
5. 三种方案同台对比,选型要看你的真实约束
5.1 从调参数量、扰动抑制、噪声容忍度几个维度逐一比较
我整理了一个表格,基本可以帮你在方案定型阶段做快速判断:
| 对比项 | 转速环PI | LADRC | NLADRC |
|---|---|---|---|
| 需整定参数 | Kp, Ki(约2个) | ωc, ωo, b0(约3个) | ωc, ωo, b0, α, δ(约5个以上) |
| 对模型准确性依赖 | 高(依赖J和ψf) | 中(依赖b0,容差约±30%) | 中(b0之外还依赖α、δ) |
| 对阶跃负载扰动恢复 | 靠积分慢速恢复 | 观测补偿,恢复很快 | 观测补偿且收敛更快 |
| 对斜坡负载扰动抑制 | 存在稳态误差 | 在LADRC下有可接受的稳态误差 | 理论上稳态误差更小 |
| 测量噪声敏感度 | 低 | 中(ωo高时放大) | 高(非线性增益进一步放大) |
| MCU资源占用 | 最低 | 中等(一个三阶观测器) | 较高(含分段函数计算) |
| 调试难度 | 低 | 中等 | 高 |
| 实机风险 | 低 | 中低 | 中高 |
5.2 什么场景适合维持PI,什么场景值得上ADRC
如果你的应用满足以下条件,我不建议折腾ADRC,PI继续用就好:
- 负载基本恒定,转动惯量变化不大,比如水泵、风机、普通传送带。
- 转速精度要求不高,转速跌落有几十转可以接受。
- 现场没有多少参数调试窗口,希望一次上线稳定运行。
但如果你的应用符合下面任何一条,ADRC的价值就出来了:
- 负载惯量会随工况变化,比如机械臂变姿态、卷绕系统的卷径变化。
- 经常有负载冲击,比如切削进给、冲压机构,要求转速跌落小、恢复快。
- 电机参数(尤其是磁链)随温度变化明显,导致PI参数在冷热状态下性能差异大。
5.3 实用的调试起点与"先线性后非线性"的路线建议
如果决定上ADRC,最稳的路径是从LADRC开始。原因很简单:参数少、可解释性强、与现有PI调试经验的迁移成本低。把LADRC跑稳定之后再研究要不要加非线性,你就能真正体验到两个版本的差异,而不是一上来就被非线性参数折磨。
具体建议的初始参数是:
- 转速环带宽ωc先取PI整定的等效带宽,保证稳定优先。
- 观测器带宽ωo取3~5倍ωc。
- b0按额定参数计算,然后空载和满载分别测阶跃响应,只需要微调b0这一项。
- 用LADRC跑至少一周的稳定性测试,确认没有低频振荡、温度漂移之后,再考虑NLADRC。
6. 仿真别骗自己:从Simulink到电机台架之间隔着什么
6.1 仿真里最容易被忽略的三个参数口径
很多人在Simulink里建PMSM模型,直接把扰动设成阶跃负载,然后看三种控制器的对比曲线。说实话,这个对比基本只能说明"观测器能观测到阶跃扰动",并不能代表真实负载特性。真实的机械负载扰动往往是:
- 与位置相关的周期性扰动,比如齿槽转矩、偏心负载,频率不固定。
- 与转速相关的非线性摩擦,尤其是Stribeck曲线中的负阻尼段,低速时会引入不稳定风险。
- 负载突变的时间尺度不是阶跃,而是斜坡,或者有几十毫秒过渡过程的脉冲。
如果你只在阶跃负载下比三种方案,LADRC和NLADRC的优势会被夸大至少50%。建议在仿真里加两类扰动做验证:一类是10~20Hz的周期性正弦扰动,另一类是0.1秒上升沿的斜坡负载变化,这样测试结果更接近真机场景。
6.2 采样频率、离散化和计算延时的剥皮式验证
离散化的影响在PI下很小,但ADRC的观测器对离散化敏感得多。你在仿真里用连续时间LESO很容易收敛,但转成离散状态方程之后,如果直接用前向欧拉积分,采样频率与带宽比不够大时,观测器会出现观测误差甚至发散。
一个可用的经验法则是采样频率至少要大于观测器带宽的10倍。如果ωo取到500 rad/s,控制频率至少要8kHz以上。在STM32或DSP上通常能做到,但如果你用的是低算力的MCU,这就是硬件约束。
另外,ADRC控制律里的b0除法运算在定点DSP上要特别小心,b0往往是一个小数,定点缩放没做好的话,控制输出会带明显的量化台阶。仿真感知不到这一类问题,台架上电流波形会多出一层毛刺。
6.3 编码器量化噪声是如何"骗过"观测器的
这是一个容易被忽视但实际影响很大的问题。扩张状态观测器要靠(ω - z1)的误差来驱动,如果速度反馈本身是量化信号,误差项就不是平滑变化的,而是阶梯式的。观测器带宽越高,这些阶梯就越容易被放大。
我在某公司的某型伺服验证平台上做过对比:2500线增量编码器,转速300rpm,速度采样经过M法得到,量化误差约±1rpm。LADRC的ωo取3倍ωc时可以正常运行,取到5倍时,z3扰动观测曲线上出现明显噪声毛刺,而控制输出把这部分噪声进一步传给了电流环。之后再增大编码器线数到5000,情况才改善。
所以如果你想上ADRC,第一步其实是确认你的速度反馈质量足够好,否则它会成为整个控制链路的瓶颈。这比纠结用LADRC还是NLADRC重要得多。
7. 我最后保留的一点个人倾向
这三套方案没有绝对的好坏,它们解决的是同一个问题,只是对模型信息利用的方式不同。PI把对扰动补偿的全部希望寄托在积分项上,LADRC把它寄托在一个重构出来的总扰动观测值上,NLADRC则试图用非线性增益再把观测和补偿做得更精细。PMSM的转速环结构简单但应用环境杂,这恰好让LADRC处在一个非常好的平衡点:它不要求精确模型,又不像NLADRC那样难调。
如果让我给一个最直接的结论:正在学习和仿真阶段的同学,LADRC值得精读,它是理解自抗扰思想性价比最高的一条路;在现场做项目且对扰动抑制有真实指标要求的工程师,直接把PI换成LADRC,大概率不会失望;NLADRC则建议在有充分仿真验证和台架调试时间的条件下去挑战——它确实是好东西,但它要求的工程投入,远不止多调两个参数那么简单。最后留一个小经验:无论你最后选了哪一套,先花一天时间把转速反馈信号用示波器录下来看看噪声水平,这个数据决定了你参数能往上推多高,也决定了你后续调试会少走多少弯路。