☰
LESO结合无差拍电流控制:模型失配补偿与工程调试实践
2026/10/20 17:09:48 网站建设 项目流程

1. 无差预测电流控制:一步到位的代价

1.1 一拍到底:无差预测控制究竟在算什么

做电流环的工程师应该都体会过这种纠结:PI控制器调得好,动态响应也就那样,带宽往上顶,噪声和振荡立刻教做人。无差预测电流控制不一样,它的思路非常“暴力”——既然知道电机模型,那我直接算出在当前状态下,需要给多高的电压,让电流在一个控制周期结束时刚好等于给定值。一步到位,没有中间过程。

这就是所谓“无差拍”的含义。在数字控制器里,每个周期做一次采样、一次计算,然后更新一次PWM占空比。无差预测控制把电流环的响应速度推到极限:理论上第一个开关周期就能把电流拉到给定值,动态性能远超PI。很多高性能伺服、并网逆变器、有源滤波器场景,都在用这个方案。

但快是要付出代价的。这套控制律的本质是“用模型反推电压”,那模型准不准就直接决定了控制效果。你用的电感值、电阻值、反电势常数,只要和真实系统有一点点偏差,算出来的电压就会偏离“真正能让电流一步到位”的那个值。轻则响应变慢、静态误差变大,重则电流发散、系统振荡,甚至直接触发过流保护。

1.2 模型参数失配的连锁反应

无差预测控制有多依赖模型,可以做一个简单的代入感受一下。假设d轴电流方程是:

L0·di_d/dt = u_d − R0·i_d + ω·L0·i_q + F_d

其中L0和R0是标称电感、标称电阻。如果真实电感L和标称电感L0差20%,控制律算出来的电压就相当于给错了一个比例系数。电感偏大时,实际电流变化比预期慢,表现为动态响应迟钝;电感偏小时,电流变化比预期快,容易过冲,甚至出现持续振荡。

我在实际调试中见过最典型的画面:把标称电感设成真实电感的1.3倍之后,无差预测控制的电流波形直接从“干净的一条线”变成了“震荡的锯齿波”。那种振荡频率接近采样频率一半,纹波电流远超正常范围,靠加大PI参数根本救不回来。

反电势(特别是永磁同步电机的反电动势)也会引入误差。转速越高,反电势在电压方程里占的比重越大,如果标称的反电势系数不准,或者没做精确的磁链前馈,那么高速段就会出现明显的电流静差和转矩波动。

1.3 LESO加入后改变了什么

LESO(线性扩展状态观测器)是自抗扰控制的核心组件。它的逻辑很简单:把系统模型里所有“不确定的东西”——参数失配、外部扰动、未建模动态——统统看成一个“扩展状态”,然后用观测器把它实时估计出来。既然能估计出来,就能在控制量里把它抵消掉。

把它接到无差预测电流控制上,结构上就是“无差拍负责快,LESO负责准”。无差拍控制器按标称模型算电压指令,算完之后,再把LESO估计出来的扰动电压减掉。这样一来,哪怕模型参数不准,只要扰动在观测器的带宽范围内,它就能被补偿掉,电流环依然保持接近一拍跟踪的性能。

这个组合解决的核心痛点就是:既想要无差预测控制的动态响应,又不想被模型参数绑死。对于做电机驱动、并网变流器的工程师来说,这是一个非常实用的技术路线。

2. 控制结构与控制律推导

2.1 完整控制框架

整套控制结构可以分为三层。最外层是转速环或功率环,输出电流给定;中间层是电流环主体,由无差预测控制器加上两个LESO组成,d轴和q轴各一个观测器;最内层是PWM调制和逆变器。

运行时,每个控制周期执行以下操作:采样相电流并做坐标变换,得到d/q轴电流;把上一拍算出的电压和当前采样电流送入LESO,更新观测器状态,得到扰动估计值;用无差拍公式计算基准电压,再减去LESO估计的扰动,得到最终电压指令;最后经坐标反变换和调制,生成开关信号。

这个结构里,LESO和控制器是并列关系,不是串联关系。LESO不替代无差拍控制器,只给无差拍控制器“打补丁”。好处是,即使LESO失效(比如初始化异常),系统退化成普通无差预测控制,仍然能工作,不会直接崩掉。

2.2 无差拍控制律的离散化推导

先看d轴。忽略扰动时的连续域方程为:

L0·di_d/dt = u_d − R0·i_d + ω·L0·i_q

用前向欧拉法离散,Ts为控制周期,得到:

i_d(k+1) = i_d(k) + (Ts/L0)·[u_d(k) − R0·i_d(k) + ω·L0·i_q(k)]

无差拍的目标是让i_d(k+1)等于给定值i_d_ref,所以反解电压:

u_d(k) = (L0/Ts)·(i_d_ref − i_d(k)) + R0·i_d(k) − ω·L0·i_q(k)

q轴方程多了一项反电势,离散后为:

i_q(k+1) = i_q(k) + (Ts/L0)·[u_q(k) − R0·i_q(k) − ω·L0·i_d(k) − ω·ψ_f]

反解得到:

u_q(k) = (L0/Ts)·(i_q_ref − i_q(k)) + R0·i_q(k) + ω·L0·i_d(k) + ω·ψ_f

注意里面带下标0的都是标称值。真实系统运行时,L、R、ψ_f和标称值并不一样,所以直接按这个公式算,必然存在误差。

2.3 LESO的观测方程与量纲处理

这里有个特别容易踩坑的地方:LESO里扰动的量纲。很多人从ADRC教材里直接抄公式,用b0 = 1/L0的标准形式,结果合到无差拍控制律里时量纲对不上,调了半天都找不出原因。我自己也在这个地方浪费过一整天。

为了避免混乱,这里采用电压量纲的集总扰动写法。把d轴方程重新整理为:

L0·di_d/dt = u_d − R0·i_d + ω·L0·i_q + F_d

其中F_d就是“等效扰动电压”,把所有参数失配、反电势误差、未建模的压降全部吸收进去。这个量纲和电压一样,后续直接做减法就行,不用缩放。

针对这个一阶系统,LESO设计为:

dz1/dt = (u_d − R0·i_d + ω·L0·i_q + z2)/L0 + β1·(i_d − z1) dz2/dt = β2·(i_d − z1)

其中z1是d轴电流的估计值,z2是F_d的估计值。β1和β2是观测器增益,按带宽法整定:

β1 = 2·wo β2 = wo²

wo就是观测器带宽。这个设计思路的本质是:z1跟踪真实电流,z2跟踪那个“让模型对不上”的等效扰动。只要观测器收敛,z2就能实时给出当前系统里到底有多少“额外电压”在起作用。

q轴完全对称,只需要把反电势项也放进已知量里,然后单独再设一个同样的LESO。

2.4 补偿融合:把z2接到电压指令上

最终控制律写出来非常简洁。先按标称模型算出无差拍电压,然后用LESO估计的扰动电压修正:

u_d(k) = u_dp_d(k) − z2_d(k) u_q(k) = u_dp_q(k) − z2_q(k)

其中u_dp_d和u_dp_q就是上一节推出来的无差拍公式。z2_d和z2_q分别是d轴和q轴LESO对扰动电压的估计值。

这里有一个值得注意的细节:实际系统中的扰动往往不是缓慢变化的常量,比如反电势会随转速变化,参数失配在电流变化时也会表现出动态特性。所以观测器带宽不能取得太低,否则扰动估计跟不上真实变化,补偿效果就会打折扣。

但带宽也不能无限高,这一点在后面的调参部分专门展开。

3. 离散化实现与关键代码逻辑

3.1 观测器离散化

LESO在数字控制器里必须离散化。最简单的方式是前向欧拉,直接把微分改成差分。d轴观测器的离散形式为:

z1(k+1) = z1(k) + Ts·[(u_d(k) − R0·i_d(k) + ω·L0·i_q(k) + z2(k))/L0 + β1·(i_d(k) − z1(k))] z2(k+1) = z2(k) + Ts·[β2·(i_d(k) − z1(k))]

q轴同理。虽然前向欧拉在高增益下会有一定的离散化误差,但电流环控制周期普遍在50微秒到100微秒,观测器带宽通常在几百到两千弧度每秒,这种情况下前向欧拉完全够用。真正需要警惕的是wo取得过高后,前向欧拉可能导致观测器极点超出单位圆,出现数值震荡。这个在后面排查部分会细说。

3.2 一步延迟补偿的实现

数字控制有个物理现实:这一拍采样算出的电压,最早要到下一拍才能更新到PWM输出。如果不管这个延迟,直接拿当前采样值做无差拍计算,实际上等效于把控制作用推迟了一个周期,在电感较小、采样频率不够高的时候,很容易引起电流振荡。

标准解法是两步预测。第一步,用当前采样电流和上一拍输出电压,预测本拍结束时的电流;第二步,用预测电流作为初值,计算让下一拍结束时达到给定值的电压。

以d轴为例,第一步预测:

i_hat_d(k+1) = i_d(k) + (Ts/L0)·[u_d(k−1) − R0·i_d(k) + ω·L0·i_q(k) + z2_d(k)]

注意这里把LESO估计的扰动也加进了一部预测,这是很多实现容易漏掉的细节。扰动是真实存在的电压项,预测未来电流时当然要把它算进去。

第二步计算电压:

u_d(k) = (L0/Ts)·(i_d_ref − i_hat_d(k+1)) + R0·i_hat_d(k+1) − ω·L0·i_hat_q(k+1) − z2_d(k)

q轴做了同样的两步计算。这样处理之后,整个环路相当于“预测一拍+控制一拍”,补偿了数字控制固有的延迟,无差拍效果才能真正体现出来。

3.3 核心代码逻辑

把上面的公式落成C语言风格的伪代码,电流环中断里的核心逻辑大概是这样的结构。

// 电流环中断服务函数,Ts为电流环周期 // 采样电流: id_fb, iq_fb;转子电角速度: omega;上一拍电压: ud_prev, uq_prev // 给定电流: id_ref, iq_ref // 第一步:LESO状态更新(d轴) float z1d_dot = (ud_cmd + z2d - R0 * id_fb + omega * L0 * iq_fb) / L0; + beta1 * (id_fb - z1d); float z2d_dot = beta2 * (id_fb - z1d); z1d += Ts * z1d_dot; z2d += Ts * z2d_dot; // 同理更新q轴LESO float z1q_dot = (uq_cmd + z2q - R0 * iq_fb - omega * L0 * id_fb - omega * PSI0) / L0; + beta1 * (iq_fb - z1q); float z2q_dot = beta2 * (iq_fb - z1q); z1q += Ts * z1q_dot; z2q += Ts * z2q_dot; // 第二步:预测本拍结束电流(延迟补偿) float id_pred = id_fb + Ts / L0 * (ud_prev + z2d - R0 * id_fb + omega * L0 * iq_fb); float iq_pred = iq_fb + Ts / L0 * (uq_prev + z2q - R0 * iq_fb - omega * L0 * id_fb - omega * PSI0); // 第三步:无差拍电压计算(加入LESO扰动补偿) float ud_ref = L0 / Ts * (id_ref - id_pred) + R0 * id_pred - omega * L0 * iq_pred - z2d; float uq_ref = L0 / Ts * (iq_ref - iq_pred) + R0 * iq_pred + omega * L0 * id_pred + omega * PSI0 - z2q; // 第四步:限幅与输出 ud_prev = ud_ref; uq_prev = uq_ref;

这段代码里,LESO的更新放在最前面,使用的是当前采样电流和当前周期的电压指令。预测阶段用的是上一拍的电压指令,因为当前拍的电压指令还没有真正作用到PWM上。这个先后顺序非常重要,一旦搞反,整个系统的时序就乱了。

3.4 限幅与状态保护

LESO在异常工况下可能“放飞自我”,所以工程实现必须加保护。我常用的做法有三个。

第一,对z2的补偿量做限幅。z2是扰动电压估计,物理上不会超过母线电压的一半太多,所以可以直接给一个合理的上下限,比如±0.5倍直流母线电压。超过这个范围就钳位,避免观测器状态越过物理边界。

第二,对电压指令总量做限幅。无差拍算出的电压可能超过PWM能输出的最大值,不处理就会出现过调制失真。这里不能只对d/q轴幅值限幅,还要考虑实际调制方式的限制。简单可靠的做法是:如果矢量幅值超限,按比例缩小d/q电压,保留角度不变。

第三,观测器增益β1和β2要经过离散化稳定性校验。前向欧拉离散后,观测器极点的模值和wo相关,当wo大于采样频率的十分之一时就要提高警惕。一个经验是:wo不要超过采样角频率的0.1倍,再往上走就要换用双线性变换或者其他离散化方法了。

4. 参数整定策略与调试顺序

4.1 观测器带宽wo怎么取

LESO整定这件事,核心就一个参数:wo。它决定了扰动估计的速度和噪声放大的程度,是一个典型的“快与噪”权衡。

如果wo太低,比如只有电流环带宽的2倍以下,会出现什么现象?扰动估计滞后。比如负载突变时,真实扰动已经变了,z2还在慢慢爬,补偿跟不上,电流还是会有一段明显的动态偏差。稳态时还会有静差,因为参数失配产生的扰动没有被完全抵消。

如果wo太高,问题更隐蔽。此时LESO会把电流采样里的噪声当成“扰动”来估计,z2剧烈波动,补偿电压高频抖动,电流纹波反而变大。极端情况下,观测器增益过高还会带来离散化不稳定,电流环和观测器之间形成正反馈,直接振荡。

我自己的经验法则是:先按电流环带宽的5到10倍设一个初始值,再用递进法微调。比如采样频率10kHz,电流环带宽设计在800Hz左右,那wo可以先设8000 rad/s(约1.3kHz),然后看电流波形调整。波形上出现明显的高频毛刺,就往下压;负载突变后电流恢复明显变慢,就往上提。反复几次,找到一个“毛刺可以接受、动态响应足够快”的平衡点。

4.2 参数整定的完整顺序

我的习惯是绝不一次性把所有环节都打开,那样出了问题根本不知道是哪个环节在捣乱。正确顺序分四步。

第一步,先跑纯无差预测控制,不带LESO补偿,用精确的模型参数。确认电流环本身能稳定跟踪,控制时序没有问题。如果这一步就振荡,先查延迟补偿和调制时序,不要往后走。

第二步,把LESO加上,但wo设低一点,比如2000 rad/s。观察z2的输出:正常时它应该在零附近小幅波动,负载突变时会出现一个明显的跳变,然后回落。如果z2一直在单调增大,说明观测器模型里有符号或量纲错误,先修bug再谈调参。

第三步,逐步提高wo,每次增加1000到2000 rad/s,观察电流波形和z2噪声。找到一个噪声和动态响应的平衡点。

第四步,做参数失配实验。把控制器的标称电感增大或减小20%,重复第三步的验证。观察z2能否把失配造成的扰动补掉,电流波形是否依然可控。这一步是检验LESO效果的核心场景,也是整个方案价值最直观的体现。

4.3 参数失配实验设计

具体怎么做失配实验?我常用的方法:控制器里有两个电感参数,一个是控制律用的标称值L0,一个是系统模型用的真实值L。正常情况两者相等。做过失配实验时,固定真实L不变,只改控制器里的L0。

比如把L0设为真实电感的1.25倍,相当于控制器“以为”电感比实际大。这时纯无差拍控制大概率会出现电流振荡,振荡频率在采样频率的一半左右,非常明显。这时再把LESO打开,如果参数已经调好,电流波形会重新趋于平滑,动态性能虽然略降,但整体可控。

反过来,把L0设为真实电感的0.8倍,表现为电流过冲和静态误差,而非振荡。这是因为电感估计偏小导致电压增益偏高,电流变化速度超过预期。LESO同样能把这个“额外电压”估计出来并抵消掉。

这个实验做完,基本就能确定LESO的补偿能力边界了。一般来说,L0偏差不超过30%时,LESO都能有效工作;再大就要考虑在线参数辨识了,比如递推最小二乘法。

5. 常见问题与排查实录

5.1 高频毛刺与观测器噪声

现象:电流波形总体控制住了,但叠加了一层密集的高频毛刺,纹波明显比纯PI控制时大。

排查思路:先看z2的输出波形。如果z2本身噪声很大,说明wo太高,观测器把采样噪声放大了。处理方法:降低wo,或者对电流采样做滤波。注意滤波本身会带来相位延迟,如果滤波器和LESO带宽离得太近,两者耦合后可能出现新的振荡。

还有一种情况是PWM死区效应引起的扰动周期成分。LESO带宽不够的时候无法完全抵消,残留的毛刺频率和载波频率相关。这种残差无法靠单纯提高wo解决,最好加基础死区补偿,让LESO只处理剩余部分。

5.2 稳态偏差与补偿滞后

现象:动态响应不错,但稳态时电流和给定值之间存在固定偏差,负载越大偏差越明显。

排查思路:先是看z2是否有稳定的输出值。如果有,说明LESO已经在工作,但补偿量不足。原因一般是wo太低,扰动估计滞后。可以试着提高wo,看稳态偏差是否缩小。

如果z2输出接近零,但稳态偏差依然在,说明LESO没有被正确激励——很可能是观测器增益β1、β2的符号写反,或者反馈通道的电流量纲不对。这时候不要急着调参数,认真对照观测器方程检查一遍代码。

5.3 启动冲击与状态初始化

现象:系统一上电,电流瞬间顶到很大,甚至触发过流保护。

排查思路:很多时候是z2初始值设成了0,但真实扰动不一定是0。比如电机一开始带负载,反电势突变,观测器需要时间收敛,这个阶段里无差拍控制器没有补偿,电流自然会冲一下。

解决办法:初始化时把z1设成当前采样电流,z2设成0,让观测器从真实状态开始收敛。同时可以在启动阶段对补偿量做斜坡投入,比如z2补偿按照一个时间常数逐渐生效,避免突然“砸”进去。

5.4 逆变器非线性补偿的边界

现象:低速大电流时,电流波形有较明显的低次谐波,比如5次、7次谐波,波形呈“马鞍形”畸变。

排查思路:逆变器死区时间、管压降是客观存在的。LESO确实能观测到这些非线性因素造成的等效电压扰动,但它在每个开关周期都会剧烈变化,不像负载扰动那样平滑。观测器带宽有限,很难完全跟踪这种高频开关级扰动。

所以工程上的正确思路是:用传统死区补偿把大部分逆变器非线性抵消掉,LESO只处理剩余的低频扰动和参数误差,两者各管一段。不要指望LESO包打天下,这不符合物理规律。

5.5 常见问题速查表

现象可能原因处理方向
电流高频毛刺明显wo过高,噪声被放大降低wo,检查采样滤波
稳态电流静差wo过低,扰动估计滞后提高wo,确认z2稳态值
启动瞬间过流z1初始化错误,补偿未投入z1设为采样电流,补偿斜坡投入
高速段波动反电势前馈不准,LESO带宽不足提高wo,或完善反电势标定
参数失配时振荡L0偏差过大,超出LESO补偿能力减小标称误差,或增加在线辨识
补偿量长期触限幅观测器发散或参数错误检查量纲、符号,限制z2范围

6. 调试心得与后续扩展

最后分享一个我自己的习惯。每次在实验台上调试LESO的时候,我不会只看电流波形,还会把z2、电压指令、电流误差这几个信号同时录下来。很多时候电流波形看起来还行,但z2已经在一个很大的偏置上震荡,这说明观测器状态离物理真实值已经偏离很远了。这种情况往往比电流波形异常更危险,因为它是慢慢累积的,可能在一个看似正常的瞬间突然爆发出问题。

从参数整定的角度,我再强调一次:wo的调整要像拧螺丝一样,一次拧一点,不要一步到位。你在仿真里跑得很顺的参数组合,到了实验台上往往要打七折甚至五折,因为真实电流采样的噪声和电磁干扰是仿真模型里永远不会出现的。

这套“LESO+无差预测电流控制”的方案,后续还可以往三个方向扩展。一是扩展到LC滤波型逆变器,用更高阶的LESO同时估计电容电压和电感电流的扰动;二是和在线参数辨识结合,LESO处理高频扰动,辨识算法修正标称值,两者互补;三是把LESO估计出的扰动信号直接用作负载力矩观测值,在某些伺服场景里可以省掉额外的传感器。

我自己目前的经验是,这套结构在抗参数扰动方面已经比纯无差拍实用很多,但“快”和“鲁棒”之间永远存在物理边界。把边界摸清楚,比把一个参数调到完美更有价值。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询