☰
无差拍电流控制遇上LESO:扰动观测器如何挽救模型失配
2026/10/21 16:16:48 网站建设 项目流程

做电流环控制这么些年,我一直有个近乎固执的观点:无差预测电流控制(DPCC)在理想模型里能跑到什么性能,其实没那么重要,真正值得反复推敲的,是当电感参数漂移、电阻随温度变化、逆变器死区等效扰动混进来之后,这套标榜"无差"的算法还能不能兑现它的承诺。最近几个月,我把线性扩展状态观测器(LESO)和无差预测电流控制放到同一个电流环里,从离线仿真到DSP实机完整跑了一轮验证,收获很大,也踩了几个文档里不会写的坑。这篇博文把整个设计思路、状态方程推导、增益整定以及实测对比完整掰开,给正在被模型失配和扰动拖后腿的同行一份可以参照的作业。

1. 无差拍电流控制的老毛病:模型一失配,"无差"就变"有差"

1.1 无差拍控制的理想等式

无差预测电流控制,业界常叫无差拍预测电流控制(DPCC),核心思想听起来很简单:用离散化的电流微分方程,反解出逆变器在一个采样周期内该输出的电压矢量,让电流在下一次采样点时精确等于参考值。

一阶电流环模型可以写成一阶微分方程:

[ L\frac{di}{dt} = u - Ri - e ]

离散化之后通常写成:

[ i(k+1) = (1-\frac{RT_s}{L})i(k) + \frac{T_s}{L}u(k) + d(k) ]

其中 (d(k)) 里塞的是反电动势、外部扰动、参数失配产生的等效电压等所有"说不清"的部分。无差拍的做法就是把 (i(k+1)) 直接定成参考值 (i^*(k+1)),反解控制量:

[ u(k) = \frac{L}{T_s}\big[i^*(k+1) - (1-\frac{RT_s}{L})i(k)\big] - L\cdot d(k) ]

这个方程的优点是极致简洁:只要模型参数 (L)、(R) 是对的,扰动项 (d(k)) 能被准确估计或者忽略,电流一拍之内就能跟上指令。问题是这两个条件是理想状态下的,实际系统里很难同时满足。

1.2 电感漂移后会发生什么

我在调试中见过太多这样的场景:仿真里电感设置 5mH,无差拍控制器表现完美,电流THD不到2%,换到实际柜子上,运行半小时电流波形就开始出现明显的低频振荡,电流过冲也变大了。问题根源往往就在电感参数上。

电感会随着磁路饱和程度、绕组温度变化而改变。假设实际电感是标称值的1.3倍,也就是 (L_{actual}=1.3L_n),但预测方程里的参数据仍是 (L_n)。那么实际电流变化量会是控制器预期值的1.3倍,第一拍电流就会超调。超调之后的电流值又会被预测方程拿去做下一拍计算,误差在逐拍递推中累积,最终表现为电流振荡甚至发散。

这个放大机理值得多说一句:无差拍控制相当于在每个采样周期内做一次"开环式"的模型逆求解,它没有比例积分控制器那样的误差积分通道去修正模型偏差。偏差每拍都会重新进入下一拍的计算,形成了一种类似于正反馈的累积。这不是控制器调试能简单消除的,必须从模型或者扰动处理层面入手。

1.3 常见的修复路线

针对模型失配,工业上大致有几条路:

一是参数在线辨识,在线实时估计 (L) 和 (R) 然后更新预测模型。这条路在电机控制里很流行,但实现复杂,辨识参数的激励条件和收敛速度都受工况限制,电流静默运行(接近零电流)时很多辨识算法直接失效。

二是用扰动观测器把"模型偏差 + 外部扰动 + 未建模动态"打包成总扰动去估计并补偿。这种方法不需要知道到底是哪种参数出了偏差,也不需要单独认识扰动源,把问题统一丢给观测器去对付。LESO 就属于这一类。

为什么我最终选了 LESO?因为它把扰动当成一个额外的状态变量来估计,相比传统的扰动观测器结构更统一,稳定性分析和增益配置都很直接,而且它本身还顺带提供了电流状态的滤波估计,可以一鱼两吃。

2. LESO的核心:把"说不清"的扰动变成第五个状态

2.1 扩张状态到底扩张了什么

很多刚接触 LESO 的朋友会问:状态观测器我是知道的,但"扩张状态观测器"多出来的"扩张"两个字是什么意思?

先看原始系统。以 d 轴电流为例,把前面的一阶模型重新整理:

[ \frac{di}{dt} = -\frac{R}{L}i + \frac{1}{L}u + f ]

这里的 (f) 是总扰动,包含反电动势耦合项、参数失配项、逆变器死区等效扰动等。如果我们只知道 (f) 是某个不确定的、有界的量,就可以把 (f) 当作一个全新的状态变量,用 (x_1 = i) 表示电流,(x_2 = f) 表示总扰动,那原系统就变成了:

[ \begin{cases} \dot{x}_1 = -\frac{R}{L}x_1 + \frac{1}{L}u + x_2 \ \dot{x}_2 = h \end{cases} ]

其中 (h = \dot{f}),它是扰动变化率。这一步就是"扩张":系统阶数从一阶变成了二阶,代价是引入了一个未知的 (h),但它只进入状态方程,不影响观测器的设计框架。

这种做法的巧妙之处在于,我们不需要知道 (f) 的数学模型,不需要知道它是正弦波、阶跃还是缓慢漂移,只要它变化速度相对于观测器带宽来说不算太快,LESO 就能把它估计出来并实时补偿。

2.2 观测器方程与增益配置

按线性状态观测器的标准结构,针对扩张后的二阶系统写出观测器:

[ \begin{cases} \dot{z}_1 = -\frac{R}{L}z_1 + \frac{1}{L}u + z_2 - \beta_1(z_1 - i) \ \dot{z}_2 = -\beta_2(z_1 - i) \end{cases} ]

这里 (z_1) 是电流估计值,(z_2) 是总扰动估计值。(\beta_1)、(\beta_2) 是两个待配置的观测器增益。

特征多项式设计法很简单。把观测误差动态写成矩阵形式,令其特征多项式等于 ((s+\omega_0)^2) 的形式,就得到:

[ \beta_1 = 2\omega_0, \quad \beta_2 = \omega_0^2 ]

(\omega_0) 就是观测器带宽,工程上叫扩张状态观测器带宽。这个配置给出的是二阶无超调最优配置,既保证了误差收敛速度,又避免了观测器本身引入振荡。

实际离散化时,我采用前向欧拉得到的离散观测器方程如下:

[ \begin{cases} z_1(k+1) = z_1(k) + T_s\left[-\frac{R}{L}z_1(k) + \frac{1}{L}u(k) + z_2(k) - \beta_1(z_1(k)-i(k))\right] \ z_2(k+1) = z_2(k) - T_s\beta_2(z_1(k)-i(k)) \end{cases} ]

要注意离散化的步长就是电流环采样周期 (T_s)。每次中断到来,先读 ADC 获得实测电流 (i(k)),然后更新 (z_1)、(z_2)。

2.3 带宽不是越高越好

(\omega_0) 越大,观测器收敛越快,对扰动的估计越及时,但代价有两个:一是对电流测量噪声的放大越明显,因为观测器本质上是一个闭环增益很大的滤波器;二是数字实现中离散化误差影响越大,观测器极点一旦被推到单位圆边缘附近,很容易出现数值抖动。

我做过的对比实验里,把 (\omega_0) 从 500 rad/s 提调到 3000 rad/s,扰动估计确实更紧了,但电流波形上开始出现高频毛刺,PWM 电流纹波被增益放大了接近一倍。后来把 (\omega_0) 放到 1500 rad/s 左右,才在动态响应和噪声之间找到平衡点。经验上,观测器带宽取电流环期望闭环带宽的 3 到 5 倍是起步区间,具体数值要结合采样频率来定,一般不建议超过开关频率的十分之一。

3. 融合方案:LESO如何嵌进无差预测电流控制

3.1 控制律怎么改

有了 LESO 提供的总扰动估计 (z_2),无差拍控制律就可以升级了。把前面无差拍的理想控制量中的未知扰动 (d(k)) 替换成 LESO 的输出 (z_2(k)):

[ u(k) = \frac{L_n}{T_s}\big[i^*(k+1) - (1-\frac{R_n T_s}{L_n})z_1(k)\big] - L_n z_2(k) ]

这里我特意用 (z_1(k)) 而不是实测电流 (i(k)) 来做反馈,原因后面会讲。(L_n)、(R_n) 是名义参数。

这行公式看着只加了一项 (-L_n z_2(k)),实际价值非常大。它让控制律从"基于精确模型的逆向计算"变成了"基于模型逆向计算 + 在线扰动补偿",哪怕预测模型里的 (L_n) 和实际电感差了三成,只要 LESO 能把等效出来的扰动估计出来,控制律依然能输出正确的电压,电流照样做到无差跟踪。

3.2 一拍延迟别忘补

数字控制器有个绕不开的固有时延:在 (kT_s) 时刻采样、计算,然后写入 PWM 比较寄存器,但真正生效是下一个开关周期,也就是 ((k+1)T_s)。如果控制律仍然以 (i^*(k+1)) 为目标,实际到达 ((k+1)T_s) 时刻时,作用的是上一拍的电压,自然会产生一拍滞后,动态性能变差。

标准的做法是"预测前瞻两步":在 (k) 时刻,先根据当前状态预测 (i(k+1)),然后设定目标为 (i^*(k+2)),反解出应该在 ((k+1)T_s) 时刻作用的电压 (u(k+1)):

[ u(k+1) = \frac{L_n}{T_s}\big[i^*(k+2) - (1-\frac{R_n T_s}{L_n})\hat{i}(k+1)\big] - L_n z_2(k) ]

这里 (\hat{i}(k+1)) 可以先由 LESO 的观测方程推一拍得到,也可以用实测的 (i(k)) 套进模型外推。我倾向用 LESO 的 (z_1) 推,因为 LESO 输出天然就是滤波后的状态估计,不会把开关纹波直接灌进预测方程。

不补这一拍,仿真里可能看不出太大问题,但实机电流相位会滞后,电流环动态响应会明显变肉,补偿源电压的能力也会打折。

3.3 先估后用还是边估边用

细节上一个重要的取舍是:LESO 估计扰动之后,是直接把它加到输出电压上,还是把它送入预测电流方程参与循环?

两种写法数学上等价,但工程实现感受完全不同。我推荐把 (z_2) 写进预测方程而不是单独做一个前馈通道,原因是这样能保证扰动补偿和电流预测共享同一个离散时间基准,不容易出现"扰动前馈已经生效、预测模型还以为扰动不存在"的脱节。简单说,保持控制律只有一条主线,LESO 只是为这条主线提供更准确的反馈和扰动信息。

同时,LESO 输入中的 (b_0)(即 (1/L))要用名义电感值。这意味着即使 LESO 内部也使用了模型参数,但它的扰动估计项会吸收掉参数偏差,所以整体抗失配能力是靠"扰动估计"单条腿撑起来的,这个逻辑一定要理解清楚,后面调参时不至于混淆。

4. 三组对照实验:电感失配、电阻漂移和突加扰动

4.1 实验平台条件

搭建了一套三相并网逆变器 dq 轴电流环实验模型,仿真和半实物平台同步验证。核心参数如下:

参数数值备注
直流母线电压300V逆变器侧
采样/开关频率10kHz周期 100μs
标称电感 (L_n)5mH实验可实时切换
标称电阻 (R_n)0.5Ω绕组等效电阻
电流参考10A(幅值)dq 轴
LESO 带宽1500 rad/s观测器增益由此换算
调制方式SVPWM规则采样

三组对照实验分别抓住三个最典型的"工程现实":电感变成1.6倍、电阻翻倍、外部加入阶跃扰动电压。每组都对比"纯DPCC"和"DPCC+LESO"的表现。

4.2 电感失配下的波形变化

先把电感从 5mH 直接增到 8mH,标称参数和控制参数都保持 5mH 不变。纯 DPCC 组在切换后的前几个周期就出现明显的电流过冲,随后电流波形出现包络式低频振荡,幅值大约在设定值的 60% 到 120% 之间波动,三相电流THD从正常时的约2.2%恶化到8.7%,已经无法正常并网运行。

DPCC+LESO 组在同一条件下,虽然扰动估计在切换后的最初 3-5 个采样周期内有一个收敛过程,但之后电流迅速回到正弦状态,THD 维持在1.5%左右,幅值波动小于3%。这里要特别注意,THD 残余的部分主要是开关纹波和谐波,并非预测误差。

这说明 LESO 的扰动估计项确实把"电感变大"等效出来的电压误差吃掉了,控制律输出的电压不再依赖准确的电感值。

4.3 电阻漂移和外部扰动

电阻从 0.5Ω 升到 1Ω 时,纯DPCC 的稳态误差明显放大,电流幅值持续低于参考值,相位也出现偏移。这是因为电阻项在预测方程中占比相对较小但在大电流工况下不可忽略。加上 LESO 后,由于扰动估计包含电阻压降误差,这部分偏差在 2ms 以内被完全补偿,电流跟踪误差几乎为零。

外部扰动实验使用电压源串联方式注入一个 2V 的阶跃反电动势扰动,模拟电网电压突变或负载瞬间变化。纯DPCC 的电流产生约 2.5A 的瞬时跌落,恢复时间约 8ms,而且恢复过程中伴随一次振荡。DPCC+LESO 在扰动注入后电流跌落减小到约 0.8A,恢复时间缩短到 2ms 以内,且几乎没有超调。

这个结果验证了一个关键判断:LESO 的带宽决定了它能"消化"多快的扰动变化。1500 rad/s 带宽意味着扰动估计在 1ms 级的时间里完成收敛,对于工频变化和负载切换足够用。

5. 从仿真迁移到DSP实机时的现实考验

5.1 同样的带宽,仿真和实机感受不一样

离线仿真里 LESO 带宽设到 3000 rad/s 也没问题,因为理想模型里没有采样噪声和高频干扰。但搬到DSP上,问题立刻冒出来。

首先是离散化误差。观测器极点用前向欧拉离散后,实际极点位置与连续域设计值有偏差,带宽设置越高,偏差越明显。当 (\omega_0) 折算到数字域接近 0.3 倍采样频率时,观测器动态会偏出预期,表现为电流毛刺增多。

其次是执行时序。我把采样安排在 PWM 计数器的下溢中断里,紧邻开关切换点,导致 ADC 采到的电流含有明显的开关毛刺,这些毛刺直接灌进 LESO 的校正项,观测器估计值开始抖动。解决办法是把采样时刻移到 PWM 波形的中心,尽量避开开关跳变产生的共模干扰,同时对 ADC 结果做一次窗口长度为 3-5 的滑动平均滤波。

5.2 电流噪声对LESO的干扰,比想的更严重

实机上发现一个在仿真里几乎看不出来的问题:LESO 的 (z_2) 扰动估计项对高频噪声非常敏感。原因是 (z_2) 本质上是对 (z_1) 的偏差进行积分放大,而 (\beta_2) 直接乘在误差上,高带宽下积分增益很大,测量噪声会被积分成缓慢漂移的估计偏差,严重时会让 (z_2) 在真实扰动值附近来回摆动,反而把扰动补偿变成了扰动注入。

我的处理方法是把控制回路的反馈改成 (z_1),而不是直接读 ADC 的原始采样值。(z_1) 是观测器内部的滤波状态,等效带宽被 (\beta_1) 限制住了,高频噪声已经被天然滤掉一层。这个改动让实机电流的 THD 从4.5%降回到2.1%,效果非常明显。

不过这里有个坑:直接用 (z_1) 代替实测电流做无差拍反馈,会引入约半拍到一拍的状态估计延迟。如果 LESO 带宽太低,电流跟踪会有滞后感,所以 (z_1) 的等效滤波带宽建议保持在电流环带宽的 5 倍以上。

5.3 参数整定的实用顺序与一手体会

最后说调参顺序,这个顺序我从失败中总结出来,建议照做:

第一步,先关闭 LESO 的扰动补偿,只把纯DPCC调到可以在标称参数下稳定运行。确保电流波形正常,无振荡。

第二步,逐步增加 LESO 带宽,同时观察 (z_2) 的波形。如果 (z_2) 出现高频振铃,说明带宽过高或者采样时序有问题,先回退一步处理噪声。

第三步,打开扰动补偿,用电感切换或者突加负载验证补偿效果。此时如果电流振荡,优先降低 LESO 带宽,而不是调增益。

第四步,做一拍延迟补偿验证。用阶跃响应看电流是否在一个周期内达到参考值,如果出现超调或滞后,检查两步预测是否写对。

我实际调试中遇到最顽固的问题是:纯DPCC在标称参数下正常,接入 LESO 补偿后反而出现持续的小幅振荡。排查很久才发现是观测器带宽和采样滤波时间常数耦合在一起,导致扰动估计出现了约 30 微秒的相位滞后,而一拍延迟补偿又把这个相位滞后误判为电流超前,控制器心态就崩了。后来把滑动平均窗口从5点改成3点,并将 LESO 带宽下调400 rad/s,问题消失。

整套方案最终在实机运行了连续八个小时,电感温度从常温升到接近80摄氏度,换算成电感值下降了约12%,电阻上升了约四成,电流波形始终稳定,THD没有出现明显恶化。这基本证明了一件事:LESO 对参数漂移的吸收能力是实打实的,而无差拍电流控制在得到状态观测器支撑后,终于配得上"无差"这两个字。

最后再分享一个小技巧:如果你手头项目也打算从纯DPCC往"DPCC+观测器"方向改,不要贪心一上来就做高带宽扰动补偿,先把观测器的输出接到上位机里看一遍波形,确认没有奇怪的毛刺和相位翻转,再决定要不要启用补偿通道。这一步能帮你省下一整周的调试时间。

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

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

立即咨询