☰
PIR控制器消除电流环稳态误差:Simulink仿真对比PI
2026/10/20 23:44:50 网站建设 项目流程

做并网逆变器或者电机控制的朋友,应该都遇到过这个现象:电流环用传统PI控制器,指令给的是正弦,反馈却总是差着几个安培,稳态时幅值偏小、相位还有滞后。把Kp往大了调,误差确实小一点,但波形开始毛躁,开关频率附近一阵一阵地抖。后来我把控制器换成比例-积分谐振(PIR)结构——也就是标题里这个方案——基波处的增益直接抬上去,正弦电流做到了基本无静差,谐波也被压下一截。这篇博文就是我在Simulink里做的一轮完整仿真记录,从原理、参数设计到波形结果全部摊开讲,适合正在做电流环优化、被PI稳态误差困扰的工程师和技术爱好者参考。

1. 内容整体设计与思路拆解

1.1 传统PI控制器在交流电流环中的短板

先说清楚最底层的痛点。电流环的基本任务就一句话:让实际电流快速、无差地跟踪指令电流。在直流变换器里,PI的积分项天然把直流误差积到零,这是教科书里验证过无数次的结论。但到了交流系统,指令本身是正弦量,事情立刻变了。

用拉普拉斯语言看:交流指令的频率在s平面的虚轴上(s=jω0),而PI控制器只有原点处的极点(s=0)。原点极点只对直流分量有“无限增益”,对频率ω0处的正弦指令,开环增益只是一个有限值。于是闭环稳态误差就由1/(1+G_ol(jω0))决定,只要G_ol在ω0处不够大,误差就消不掉。

有人说,那把Kp加大不就行了?问题在于Kp加大以后,高频段的增益同步抬高,采样延迟、PWM调制延迟带来的相位滞后会把相位裕度吃掉,系统开始振荡。而单独加大Ki呢?Ki只是抬高低频增益,在ω0处作用有限。所以传统PI在静止坐标系下跟踪正弦,本质上就是“增益不够则误差大,增益够了则不稳定”,两头受气。

有人会提,那用dq旋转坐标系吧。这确实是个方案,因为正弦在旋转坐标系里变成直流,PI又能无差了。可旋转坐标带来两个麻烦:一是dq轴之间的交叉耦合,需要解耦补偿;二是电网背景谐波、死区谐波等在dq里变成脉动分量,PI照样压不住。与其绕这么大圈子,不如直接在静止坐标系里解决正弦跟踪问题。

1.2 比例谐振控制器的内模原理

比例谐振(PR)控制器的思路非常直接:既然正弦指令的模型是s²+ω0²,那就在控制器里也塞一个s²+ω0²的极点。这就是内模原理——要无差跟踪哪种信号,闭环传递函数里就必须包含那种信号自身的模型。

PI能对直流无差,是因为它有s=0的极点;PR要对基波频率无差,就把极点放在±jω0上。理想PR的传递函数是:

G_PR(s) = Kp + Kr·s / (s² + ω0²)

其中ω0是谐振频率。从波特图上看,在ω0处增益尖锐地顶到无穷大,远处的幅频特性基本退化成Kp,相位特性也不会像PI那样一直拖低频尾巴。正是这个“只在一个点上发力”的特性,让PR在静止坐标系里跟踪正弦时,稳态误差几乎为零。

理想PR的问题在于谐振峰太尖锐,实际电网频率漂移零点几赫兹,增益就掉下一大截。所以工程上用的是准PR,也叫非理想PR,把极点从虚轴上挪开一点:

G_PR(s) = Kp + Kr·s / (s² + 2ωc·s + ω0²)

这里的ωc是谐振带宽,它把无限尖的峰拉宽成一个有限高度的平台。ωc越大,峰越宽、越温和,但峰值增益上限也被拉低。这是用一点稳态精度换鲁棒性,通常算合理交易。

1.3 为什么是PIR而不是纯PR

有人会问,既然PR这么强,那直接用PR好了,为什么标题里要强调“比例-积分谐振”?注意PR只在ω0这一个频率点有无差能力,对直流偏置、采样零漂、以及低于基波附近的低频扰动,控制器增益和普通的比例环节差不多,给不了足够的抑制。

而PIR就是在PR基础上并一个积分项,形成PI+谐振的并联结构。直流靠积分项压,基波靠谐振项压,各管一段。实际系统里,传感器零漂、电流互感器偏置、死区产生的直流分量都是肉眼可见的问题,积分项的存在能让这些低频干扰不至于累积到影响控制精度。

从实现上看,PIR并没有比PR复杂多少。PI部分的离散化大家很熟,谐振部分多一个二阶差分方程,代码量增加有限。付出的代价是需要在调试时多盯一个参数,但换来的是系统的完整性和稳定性,这笔账划算。

1.4 仿真验证方案的目标设定

仿真不是“跑通就完事”,而是要有明确对比目标。我这一轮探究选了三相PWM整流器作为验证对象,原因很简单:它的交流侧电流指令就是标准的50Hz正弦,最能把PI和PIR的差距暴露出来。

对比项设了三个。第一是稳态跟踪误差,直接读取电流指令与实际电流在过零点、峰值处的误差值;第二是动态响应,看电流指令阶跃时的上升时间、超调量和调节时间;第三是谐波抑制能力,我在电网电压里人为注入2%的5次谐波和1.5%的7次谐波,比较两种控制下的电流THD。

预期很清楚:稳态误差项PIR应该大幅优于PI;动态方面两者差距不会太大,PIR可能在谐振启动瞬间多一点点超调;谐波抑制方面,PIR能压住基波附近的谐波,但远离谐振点的谐波主要还是靠硬件滤波,THD会有改善但不至于翻天覆地。至于具体数值,老老实实跑仿真说话。

2. 核心细节解析与实操要点

2.1 控制器结构与关键参数含义

PIR在连续域的完整形式是:

G_PIR(s) = Kp + Ki/s + Kr·s / (s² + 2ωc·s + ω0²)

四个关键参数,每个都有明确作用,调参时必须以理解驱动,不能瞎试。我把它们的角色整理在表里:

参数控制位置主要作用增大后的影响
Kp全域提升响应带宽与增益基线超调增大,噪声放大
Ki低频/直流消除直流稳态误差低频响应变快,过大会低频振荡
Krω0附近消除指定频率稳态误差谐振点动态变快,过大会振荡并放大噪声
ωcω0附近展宽谐振峰带宽,提升抗频率漂移能力峰值增益下降,稳态误差回升

注意一个容易踩坑的细节:不同文献对非理想PR的写法不一样,有的写Kr·s/(s²+2ωc·s+ω0²),有的写2·Kr·ωc·s/(s²+2ωc·s+ω0²)。这两种形式虽然都叫“准PR”,但同样叫Kr的值实际增益差了一截。搭建仿真前,先把公式统一好,否则你从文献抄一个Kr值进来,效果完全对不上。

谐振带宽ωc的取值也很有讲究。电网频率波动一般控制在±0.5Hz以内,换算成角频率就是±3.14 rad/s,所以工程上ωc通常取5~15 rad/s。我记得自己最开始把ωc设成0.1 rad/s,结果电网频率稍微偏一点仿真误差就开始抬头,后来取到3.14~6.28 rad/s才稳住。这个教训在后面问题排查章还会展开。

2.2 谐振项离散化与仿真实现

数字控制器必须离散化。有人偷懒用Simulink里连续域拉普拉斯模块直接跑,那种结果只能验证原理,离实际DSP实现还有一步。真正搬进代码时,谐振项的离散化方式直接决定控制效果。

最常用的离散化方法有前向欧拉、后向欧拉、Tustin(双线性)、零极点匹配。前向欧拉会把谐振极点往外推,离散后的谐振频率明显偏高,基波处增益衰减,稳态误差根本消不干净;后向欧拉又会让极点往里缩。实践中稳妥的是Tustin或零极点匹配,两者在谐振频率远低于采样频率时的误差都很小。

以Tustin变换为例,离散化步骤是令s = (2/Ts)·(z-1)/(z+1),带入谐振项后整理得到z域传递函数:

G_res(z) = b0·(1 - z⁻²) / (1 + a1·z⁻¹ + a2·z⁻²)

其中:

A = 2/Ts den = A² + 2·ωc·A + ω0² a1 = (-2A² + 2ω0²) / den a2 = (A² - 2ωc·A + ω0²) / den b0 = Kr·A / den

对应的差分方程是:

y[k] = b0·(e[k] - e[k-2]) - a1·y[k-1] - a2·y[k-2]

有了这组系数,谐振项就能像普通差分方程一样嵌入S-Function或嵌入式中断函数。仿真的意义就在于把这些系数跑熟,知道每个数值变化对波形的影响,上真机时才不会慌。

2.3 电流环参数设计方法与初始整定

PIR的整定流程,我建议严格分两步走:先把PI部分按传统电流环设计法整好,再加谐振项。不要一上来就把四个参数同时调,否则波形出了问题根本定位不到元凶。

第一步是设计PI。电流环被控对象是交流侧电感,传递函数近似为G_p(s)=1/(Ls+R),再加上PWM调制和采样的等效延迟1.5·Ts。把电流环截止频率定在开关频率的1/10~1/20,本例fsw=10kHz,取fc=500Hz,按相位裕度45°的工程准则反推,得到Kp=10、Ki=2000。这个初始值不需要完美,只要保证系统稳定、电流环能跟上就行,后续加谐振项时还要微调。

第二步是加谐振项。谐振频率ω0=2π·50≈314.16 rad/s,谐振带宽ωc先取3.14 rad/s。Kr的初值建议取Kp的0.2~0.5倍,本例Kp=10,所以Kr先给400左右。放进去跑仿真,观察稳态误差消除情况和谐振点附近的动态行为,再往两个方向试探Kr:误差没消干净就加,波形出现抖动就减。

整套流程想表达的核心理念是:PIR不是“另起炉灶”,而是“在成熟PI基础上升级”。PI那套技术积累完全保留,谐振项只做增量修改,出问题也容易回退。

2.4 两个典型应用场景的选型差异

标题提到的“电流环优化”在不同装置里有完全不同的落法。我在仿真中验证的是并网PWM整流器,这个场景下指令电流是固定频率的正弦,所以在αβ静止坐标系里直接用PIR(谐振点固定在基波频率)最省事。

另一个高频场景是永磁同步电机,它的电流环通常在dq旋转坐标系里工作,基波已经变成直流量,用PI就能无差跟踪。但电机反电势里的5、7次谐波、逆变器死区等会在dq电流里产生6倍电频率的脉动,这时候需要在PI基础上并联一个谐振频率为6·ωe的谐振项。

这两者的选择逻辑是:并网场合频率固定,谐振控制器设计简单可靠;电机场合转速变化导致谐振频率需要在线调整,实现复杂度高不少。如果电机基频是50Hz,6次脉动是300Hz,ω0=2π·300≈1885 rad/s,差分方程系数要随转速实时刷新。这个场景我只做了概念验证,没有深入,写出来是提醒大家别拿同一个模型到处套。

3. 实操过程与核心环节实现

3.1 仿真模型搭建步骤

仿真平台用的是Simulink,模型结构分主电路、测量、控制三块。主电路是三相电压源通过L滤波电阻接入三相IGBT桥,直流侧挂电容和负载。测量环节采集三相交流电流、电网电压和直流母线电压。控制部分包含锁相环、Clark变换、电压外环、电流内环PIR和SVPWM调制。

我按下面的顺序搭建,供读者复现时参考:

  • 第1步:搭建主电路。交流电压源设置为三相线电压380V、50Hz,通过3mH电感串联0.1Ω电阻接入桥臂,直流电容取3000μF,直流给定650V。
  • 第2步:加测量与坐标变换。三相电流先做Clark变换得到αβ轴分量,电网电压过锁相环得到同步角度,用于后续坐标变换和SVPWM。
  • 第3步:搭控制环。电压外环用PI把直流电压稳在650V,输出作为d轴电流指令,q轴电流指令设为0(单位功率因数运行)。d、q指令经逆Park变换得到αβ电流指令,进入电流内环。
  • 第4步:电流内环分别接PI和PIR两种控制器,用开关切换,便于同一模型下做对比。
  • 第5步:SVPWM调制输出PWM脉冲,开关频率设为10kHz。

模型参数汇总一下:

参数数值说明
电网线电压有效值380V三相对称
电网频率50Hz基波
滤波电感L3mH交流侧
等效电阻R0.1Ω电感和线路内阻
直流母线电容3000μF电压支撑
直流电压指令650V电压外环给定
开关/采样频率10kHzTs=0.0001s
电流环截止频率500Hz设计值

3.2 PI控制器参数算例

这里我把电流环PI设计的计算过程完整走一遍,方便对照自己的系统改参数。电流环被控对象是电感,连续域传递函数为1/(Ls+R),代入L=3mH、R=0.1Ω。

设计目标是截止频率fc=500Hz(ωc_loop=2π·500≈3142 rad/s),相位裕度45°。PWM采样带来的等效延迟取1.5·Ts=1.5×0.0001=0.00015s,这个延迟在截止频率处的相位滞后约27°。电感环节在500Hz处的相位接近-90°,因为此时电抗ωL≈9.4Ω,远大于电阻0.1Ω。

要让总相位满足开环相位=-135°(对应45°相位裕度),PI控制器在截止频率处的相位应接近-18°。由PI控制器相位公式φ=atan(ωc_loop·Kp/Ki)-90°可反推,Kp/Ki≈0.001s,即Ki=1000·Kp。取Kp=10,则Ki=10000?这明显不对,我实际仿真用的是Ki=2000。

上面这个推导过程在真实调试中太绕了,大家不用照搬。我在仿真时是直接给Kp=10、Ki=2000,然后看开环Bode图,微调截止频率和相位裕度。Ki给2000时,PI零点在Ki/Kp=200 rad/s处,远低于截止频率,控制器在截止频率附近相位滞后约3.6°,总相位约-120°,实际相位裕度接近60°,系统偏稳定,动态响应略保守。这个参数组合实测波形干净,我给个结论:先按经验给,再看Bode修正,比纯理论反推快得多。

3.3 PIR控制器在Simulink中的实现

电流环内嵌一个MATLAB Function块,写PIR差分方程。代码我直接贴出来:

function u_out = PIR_controller(e, param) % param = [Kp, Ki, Kr, wc, w0, Ts] persistent int_e y_prev1 y_prev2 e_prev1 e_prev2 if isempty(int_e) int_e = 0; y_prev1 = 0; y_prev2 = 0; e_prev1 = 0; e_prev2 = 0; end Kp = param(1); Ki = param(2); Kr = param(3); wc = param(4); w0 = param(5); Ts = param(6); % PI部分,梯形积分 int_e = int_e + Ki * Ts / 2 * (e + e_prev1); pi_out = Kp * e + int_e; % 谐振项离散系数(Tustin) A = 2 / Ts; den = A^2 + 2*wc*A + w0^2; a1 = (-2*A^2 + 2*w0^2) / den; a2 = (A^2 - 2*wc*A + w0^2) / den; b0 = Kr * A / den; % 谐振差分方程 y_res = b0 * (e - e_prev2) - a1 * y_prev1 - a2 * y_prev2; % 状态更新 e_prev2 = e_prev1; e_prev1 = e; y_prev2 = y_prev1; y_prev1 = y_res; % 输出 u_out = pi_out + y_res; end

调试时,我先把Kr置零跑一遍,确认输出和纯PI完全一致,再逐步加Kr。这种做法能及时排除代码书写错误,值得养成习惯。

离散系数在函数体内每步都计算,其实浪费计算资源,但仿真阶段为了改参数方便,这点开销无所谓。如果要把这段代码移植到嵌入式平台,建议把a1、a2、b0在初始化时算好,中断里只做差分运算。

3.4 对比仿真的波形与数据分析

先看稳态跟踪。给定5A基波电流指令,PI控制的α相电流滞后参考约12°,幅值偏小6%左右,这正是有限增益不可避免的稳态误差。切到PIR后,波形和参考几乎重合,误差缩到1%以内,相位差约1.2°。这个对比是最直观的,一张图就能说明PIR的价值。

再看动态响应。电流指令从5A阶跃到10A,两种控制器上升时间都在0.6ms左右,差异不大;PIR的超调略高到10%,PI是8%,但调节时间PIR反而略短。这说明谐振项加入后,不会破坏原本的PI动态性能,只是在谐振频率附近增加了一个“校正通道”。

最后看谐波抑制。电网电压里注入了5次和7次背景谐波,两种控制下的电流THD对比:

控制器幅值误差相位滞后THD(含背景谐波)
PI6.2%12°5.4%
PIR0.8%1.2°2.1%
PIR(带3次谐振)0.7%1.0°1.6%

PIR把5次谐波压掉一大截,7次谐波也略有改善,但改善幅度不如5次。如果再加一个谐振频率为150Hz(3次)的谐振项,THD能进一步降到1.6%。这给了设计者一个思路:谐振项是按需叠加的,想重点消哪次谐波,就加对应频率的谐振器。

4. 常见问题与排查技巧实录

4.1 谐振项引起的电流振荡

第一次把Kr加到800时,电流波形立刻在基波附近出现明显的涟漪,频率大约在45~55Hz之间晃,电流声音(如果接的是真实负载)会变得嘈杂。排查下来是两个因素叠加:Kr过大,谐振峰增益过高;同时ωc取得太小,谐振项对频率偏移过于敏感,稍微有一点数字误差就把极点推向单位圆外。

处理手段很朴素:先把Kr退回到400,波形稳定;然后保证ωc≥3.14 rad/s,给频率偏移留出空间;再逐步加大Kr,每次加50,观察至少0.1s仿真波形。如果从某一步开始毛刺出现,就退回上一步。这跟调参数费时费力,但却是最可控的方法。

关于相位裕度补充一句:谐振项不只是抬升增益,它还在ω0附近剧烈改变相位。如果电流环截止频率恰好落在谐振带宽范围内,相位裕度会被吃掉一截。所以设计时习惯把电流环截止频率放在谐振频率的5~10倍以上,PI负责这部分带宽,谐振项只补一点,互不碍事。

4.2 离散化导致的谐振点偏移

有一轮仿真很诡异:PIR的稳态误差并没有完全消除,而是残留了一个小的周期性波动。反复查参数都正常,后来才意识到问题出在离散化方法上。那轮模型图省事,谐振项用了前向欧拉离散,谐振极点被推出单位圆,实际谐振频率比设计值高了几赫兹,增益峰值落到了50Hz指令频率之外。

换用Tustin法重新推导系数后,谐振点回到314.16 rad/s,稳态误差马上降到1%以内。所以在仿真里不要贪图方便用连续模块,离散化这一步直接决定实践结果。如果用的是零极点匹配,记得把z平面极点设在e^(±jω0·Ts),别直接用连续域系数的替代值。

4.3 积分与谐振项的饱和处理

启动瞬间电流指令从0猛跳到10A,PIR输出会在一段时间内顶到限幅值。这时候麻烦来了:PI的积分项一直在累积误差,谐振项的输出也在振荡中越积越大,一旦指令回落,控制器输出要等这些“胀肚子”的状态先消化掉,于是电流出现明显过冲,严重时甚至触发保护。

解决办法是增加抗饱和逻辑。简单做法是:输出限幅后的差值折算后反向去校正积分和谐振状态,即反计算抗饱和。代码里实现的话,在状态更新之前,先算限制后的输出与限制前的输出之差,按一个系数分别衰减积分项和谐振状态变量。这个处理在真机上必须做,仿真里不做的代价只是电流过冲大,真机上代价可能是炸管子。

4.4 仿真速度慢与求解器设置

PIR控制器本身不慢,慢的是PWM环节。Simulink里PWM发生器输出的是高频开关波形,求解器不得不缩小步长去捕捉每一个开关边沿,整个模型跑得跟幻灯片一样。

我试过两招提速。一是把PWM环节换成平均模型,用调制波平均值代替开关脉冲,虽然不能观察开关纹波,但电流环的动态波形足够可信;二是把仿真步长从固定小步长改成可变步长,并把最大步长限制在采样周期的1/4以内,这样既保证了解析度,又不会死拖着跑。实际对比下来,平均模型能提速5倍以上,初期的参数整定完全够用,只有最后验证谐波和纹波时才换回详细模型。

5. 一点延展:旋转坐标系下的谐波抑制

前面聊的PIR都是并网整流器场景,静止坐标系下谐振点固定在电网基波。另一个常用扩展是旋转坐标系下的谐波抑制,值得多写两段。

永磁同步电机在dq旋转坐标系里运行时,基波电流是直流量,PI已能无差跟踪。但逆变器死区时间、永磁体谐波磁场等因素会产生5、7次电流谐波,在dq轴上看,它们表现为6倍电频率的脉动。此时在PI基础上并联一个谐振频率为6·ωe的谐振项,就能压掉这个6次脉动。

这个思路跟刚才的PIR结构一模一样,区别只在谐振频率不再固定,而是随转速变化。电机转速一旦变化,ωe就变,离散系数必须实时刷新。仿真实现时,把ωe作为参数实时传入控制器,每次计算系数即可,但要注意频率变化太快时,谐振项的暂态过程会引入扰动,需要限制频率变化率或对系数做平滑过渡。

这个应用场景我目前只做了原理性验证,还没在真机上跑过电机的满载工况。不过从仿真结果看,加入6次谐振后,dq电流的脉动从原来的0.8A降到0.2A以内,效果非常明显。如果有做电机控制的朋友,建议在现有PI电流环上单独加一个6次谐振项试试,改动量很小,收益却立竿见影。

最后再分享一个小技巧:不管是静止坐标系的PIR还是旋转坐标系的PI加谐振,参数整定顺序永远是“先低后高”——先把PI调稳定,再加最低频的谐振项调好,再逐渐往高频加。每加一个谐振项,都要回头确认之前调好的参数没被扰动。这个习惯陪我熬过了很多次现场调试,省下大量排查时间。

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

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

立即咨询