做APF仿真这几年,经常被问到一个问题:电流内环到底该用什么控制器?我的结论一直很明确——对于有源电力滤波器这种要跟踪周期性谐波指令的装置,单靠PI很难把稳态效果做漂亮,纯重复控制又扛不住动态冲击,最实用的方案就是PI并联重复控制。这篇文章不是理论推导课,而是一份完整的落地记录:从主电路拓扑、谐波检测、重复控制离散实现,到参数整定、THD对比和那些让人崩溃的坑,全部按Simulink实操顺序写清楚。模型基于三相三线两电平电压源型APF,谐波指令用瞬时无功功率理论提取,电流内环采用PI+重复控制,外环维持直流母线电压,所有控制都在离散域里实现。适合正在做电能质量、APF、SVG仿真,或者毕设需要快速跑出低THD波形的同学参考。整套模型不依赖任何工具箱里的专用模块,按下面的步骤自己搭,几分钟就能跑起来。
1. 先弄明白:有源滤波器到底在“滤”什么
1.1 谐波源是谁,无源为什么不够
电网里的谐波基本都是非线性负载带来的。最典型的就是三相不控整流桥加阻感负载,输入电流是一段一段的脉冲锯齿波,傅里叶展开之后会发现6k±1次谐波占了大头:5次、7次、11次、13次……这些谐波沿线路传播,会造成变压器发热、中性线过流、保护误动作等一系列问题。传统无源滤波器是在特定频率点附近形成低阻通路,可谐波频谱一复杂,就得并联一堆LC支路,而且LC参数老化失谐之后滤波效果会迅速劣化,甚至可能和系统阻抗产生谐振。这些工程上的麻烦,正是APF这类主动补偿装置被大规模应用的原因。
1.2 APF的工作原理:检测、反相、注入
把APF理解成一台“谐波发生器”就够了。它实时采样负载电流,算出其中的谐波成分,然后让逆变器输出一个大小相等、方向相反的谐波电流,直接在并网点把电网侧的畸变分量抵消掉。理想情况下,电网侧看到的电流就只剩基波正弦。这个方案听起来不复杂,真正的难点全在控制:谐波指令本身就是宽频带的周期信号,频率成分很密集,电流环能不能又快又准地跟踪,直接决定了APF到底是“低THD神器”还是“功率振荡器”。
1.3 PI控制器为什么在这里有天花板
先不否定PI,它在dq同步旋转坐标系下对直流量的跟踪能力是公认的,用来控制基波电流、维持直流母线电压都很合适。可问题在于,APF的指令电流里有大量5次、7次、11次分量,这些分量变换到dq坐标系以后会变成6倍频、12倍频的交流脉动。PI对这种周期脉动跟踪的可用增益完全由带宽决定,想把高次分量都压下去,就得把Kp抬到天上去,然后相位裕度就撑不住了。我自己调过最典型的现象是:波形没变干净,反而多了很多毛刺,频谱里全是开关频率附近噪声被放大的痕迹。结论是:PI适合提供基波处的高增益和快速动态,但要照顾“全家桶”式的高次谐波指令,工程可实现的带宽根本喂不饱。
1.4 重复控制的底气来自内模原理
重复控制的源头是内模原理,一句话说就是:把外部信号的动力学模型放到闭环里,控制器就能对该信号实现无静差跟踪。对于周期信号,它的“模型”很简洁——一个周期延迟加正反馈。离散化之后,如果基波周期对应200个采样周期,那就在控制器里构造一个含有z^-200的反馈结构。这个内模在基波整数倍频率处增益非常高,所以5次、7次这些周期性分量可以被大幅压制。代价也很明显:它每个控制周期只修正上一周期同一个采样点的误差,动态响应天生慢一个基波周期。所以PI和重复控制根本不是二选一,而是互补关系。
2. 复合控制策略:并联结构是最佳开法
2.1 串联还是并联,第一个分岔口
把PI和重复控制组合起来,实际有两种接法。串联接法是把重复控制放在指令前向通道里,重复控制的输出再作为PI的参考,这种结构看起来是“层层修正”,但两个环节的相位滞后是相乘的,参数一旦没有配合好,整个电流环的响应速度会变得很别扭。而且PI带宽的调整会直接影响重复控制看到的等效被控对象,调参时特别容易互相拉扯。我更推荐并联接法:同一个电流误差e同时进入PI和重复控制,两个控制器的输出相加作为最终的电压调制指令。这样两个控制器相互独立,PI管动态、重复控制管周期性稳态精度,可以先整PI再加重复控制,每个环节都能单独验证效果。
2.2 并联复合控制律的具体形式
先明确被控对象:APF等效为一个通过并网电感L接入电网的逆变器,忽略高频开关分量后,电流环被控对象就是一阶惯性环节P(s)=1/(Ls+R)。设电流误差为e,控制器输出为u,并联复合控制律就是:
u = u_PI + u_RC u_PI = Kp * e + Ki * ∫e dt u_RC(z) = Kr * C(z) * z^(-N) / (1 - Q(z) * z^(-N)) * e(z)这个式子里,N是基波周期对应的采样拍数,Q(z)是内模稳定因子,Kr是重复控制增益,C(z)是补偿环节,通常由低通滤波器和相位超前环节组成。后面Simulink模型的搭建就是照这个式子来的,理解这一行公式,整个重复控制子系统就不会搭错。
2.3 为什么这个组合特别适合APF
APF的谐波指令本质上就是严格周期的,和重复控制的内模天然匹配,这是两个东西能“门当户对”的核心原因。与此同时,实际运行中还有负载突变、启动冲击这类非周期扰动,重复控制在这些瞬间基本帮不上忙,但PI的快速响应能第一时间把电流拉回正常范围。等系统进入稳态,重复控制再逐步把残余的周期性误差抹平。我实测下来的效果是:负载突变瞬间波形短时畸变,一个基波周期后明显恢复正弦,整个过程的稳态精度比纯PI高,动态响应比纯重复控制快。这就是复合策略最有价值的点。
2.4 控制频率和采样周期的选择
一套控制系统要先定“节拍”。对电力电子APF,开关频率和采样频率通常取一致,我在这里取10kHz,即控制周期Ts=1e-4s。为什么用10kHz而不是更高或更低?太高的话开关损耗明显,太低的话5次、7次谐波(250Hz、350Hz)虽然够得着,但11次、13次谐波(550Hz、650Hz)已经逼近奈奎斯特频率,控制器相位裕度会非常紧张。10kHz兼顾了谐波跟踪能力和开关损耗,是工业装置里很常见的折中点。定了Ts,重复控制的延迟拍数也就定了:N = 0.02s / 0.0001s = 200。
3. Simulink建模实操:从主电路到控制环路
3.1 仿真系统参数与总体拓扑
搭模型之前先把参数固定下来,不然后面调参没有依据。我采用三相三线两电平电压源型APF,并网侧用L滤波器。电网线电压380V/50Hz,负载为三相不控整流桥带RL负载,APF直流母线电容2200μF,参考电压800V。整个系统的关键参数整理如下表,后续每个控制环节都围绕这些数值展开。
| 参数 | 符号 | 取值 |
|---|---|---|
| 电网线电压 | Uac | 380V / 50Hz |
| 并网电感 | L | 2 mH |
| 电感等效电阻 | R | 0.01 Ω |
| 直流侧电容 | C | 2200 μF |
| 直流母线参考电压 | Udc_ref | 800 V |
| 负载电阻 | RL | 10 Ω |
| 负载电感 | LL | 5 mH |
| 开关/采样频率 | fs | 10 kHz |
| 控制周期 | Ts | 100 μs |
主电路的拓扑在Simulink里可以用Simscape Electrical(旧称SimPowerSystems)模块搭:三相电源通过线路阻抗连接公共耦合点,负载侧是三相不控整流桥,APF的IGBT桥臂输出端经过并网电感L接到公共耦合点。IGBT模块用两个桥臂支路,直流侧接电容和电压测量。这里有一个细节:三相三线系统里没有中线,因此电流采样只用两相就够了,第三相由克拉克变换计算得出,但为了方便观察和调试,我直接采了三相负载电流。
3.2 谐波检测与指令电流生成
谐波检测采用瞬时无功功率理论的经典方案,核心思想是:在dq同步旋转坐标系下,基波正序分量变成直流量,谐波则是交流脉动。用低通滤波器把直流量提取出来,反变换回abc坐标系,就得到了负载电流的基波分量。负载电流减基波分量,剩下的就是需要补偿的谐波指令。在Simulink里的具体信号流是:
- PLL锁定电网电压相位,输出sin/cos同步信号;
- 负载电流经过Clark变换得到αβ分量,再经Park变换得到dq分量;
- dq两路各接一个截止频率很低的LPF,滤出基波对应的直流量;
- 把直流母线电压外环输出的有功电流指令叠加在d轴直流量上;
- 反Park变换回到αβ,再反Clark变换回abc,得到基波正序指令;
- 负载电流减基波指令,得到谐波补偿指令。
LPF的截止频率我取20Hz,一阶低通。这个值很关键:太高会把低次谐波也滤进“基波”里,指令电流少算;太低又会让检测动态变慢,负载突变时直流电压波动变大。20Hz是我试下来比较稳妥的中间值。
3.3 电流内环PI和重复控制子系统的搭建
电流内环输入是指令电流和实际补偿电流的误差e,输出是电压调制指令。PI部分直接用Simulink的Discrete PI Controller模块,积分方式选离散时间积分,采样周期填1e-4。
重复控制子系统的搭建是整个模型的核心,按前面那个传递函数来分步实现。这里最干净的做法是:
- 在Simulink Discrete库找到Delay模块,设置delay为200,实现z^-200延迟链;
- 误差e经过延迟链后,延迟输出乘上Q(一个Gain模块,初值0.95),再反馈回输入求和点;
- 这个求和结果就是内模的输出,乘上重复控制增益Kr;
- 之后串联补偿器C(z),补偿器内部先是一个离散二阶低通Transfer Fcn,再串一个超前环节z^k;
- 补偿器输出和PI输出相加,得到最终调制电压指令。
注意:Simulink里的Delay模块在离散模式下非常好用,200拍延迟只需要一个模块就能完成,不要像我一开始那样真的去拉200个Unit Delay级联,既难看又容易出错。
超前环节z^k在Simulink里想直接用“超前”表达比较麻烦,我建议在设计补偿器时把z^k直接并入离散传递函数系数里,比如写一个“Discrete Transfer Fcn”分子为[1, -1]之类的结构来实现一拍超前。仿真时你会发现这个相位超前对结果影响很大,后面参数整定一节我会细讲。
3.4 直流电压外环与PWM调制
直流电压外环的作用是维持母线电容电压稳定。实时采样Udc,与800V参考比较,误差进一个PI控制器,输出作为d轴有功电流参考。外环PI带宽要远低于电流环,我这里取等效带宽25Hz左右。因为它的输出只是叠加在谐波指令d轴上的一个直流偏置,所以即使带宽低,也能把电压调稳。
调制部分我前期先用三角波SPWM把逻辑跑通,验证控制策略没问题之后再切SVPWM。SPWM的好处是模块少、调试快,对于验证PI+重复控制的谐波抑制效果完全够用。SVPWM带来的直流电压利用率提升,在这个仿真阶段不会成为瓶颈,反而是SPWM的错误排查更容易。
4. 参数整定与仿真配置:整套能跑起来的关键
4.1 电流环PI参数的计算过程
电流环被控对象是L=2mH、R=0.01Ω,属于一阶惯性系统。用零极点抵消法整定,选电流环截止频率fc=500Hz,也就是开关频率的1/20,这样可以给数字控制和PWM延迟留足相位裕量。计算如下:
ωc = 2π × 500 ≈ 3141.6 rad/s Kp = ωc × L ≈ 6.28 Ki = Kp × R / L ≈ 31.4这组数只是初值,实际仿真里我会在Kp=5~8、Ki=30~50的范围内微调。Kp过大容易出现高频毛刺,Ki过大在电流指令阶跃时会产生过冲。考虑到离散化引入的延迟,我还会在仿真时稍微砍一点Kp,保证阶跃响应没有振荡。
仿真开始前,建议把参数写进一个初始化脚本,模型里的模块直接引用这些变量,后面调参只改.m文件,不用一个个点模块。
%% APF仿真参数初始化 fs = 10000; % 开关/采样频率 Ts = 1/fs; % 控制周期 f0 = 50; % 基波频率 N = round(1/(f0*Ts)); % 重复控制延迟拍数 = 200 L = 2e-3; % 并网电感 R = 0.01; % 电感等效电阻 fc_i = 500; % 电流环截止频率 Kp_i = 2*pi*fc_i*L; % Kp = 6.28 Ki_i = Kp_i*R/L; % Ki = 31.4 Udc_ref = 800; % 直流母线参考电压 C_dc = 2200e-6; % 直流侧电容 Q_rp = 0.95; % 重复控制内模稳定因子 Kr_rp = 0.5; % 重复控制增益 k_lead = 5; % 相位超前拍数4.2 重复控制内模参数的整定思路
重复控制的参数核心就是三件:N、Q(z)、C(z)。N已经由采样频率和基波周期确定,就是200拍,基本不用调。Q(z)决定了内模的“纯度”,Q越接近1,基波整数倍频率上的增益越高,稳态效果越好,但稳定性裕度越小。我起步用Q=0.95常数,这是绝大多数文献和工程实践里的安全值,跑通之后再考虑改用低通型Q(z)来进一步提升性能。
补偿器C(z)是决定稳定性的关键。它由三部分组成:增益Kr、低通滤波器S(z)、相位超前z^k。S(z)我设计成二阶低通,转折频率1500Hz,阻尼比0.7,用来压制内模在高频段的增益,避免开关频率附近的噪声被放大。Kr从0.1开始逐步往上加,加到0.5~0.8的区间,每加一次跑一段仿真,看补偿电流是否收敛。相位超前k在3~8拍之间试,主要补偿PWM零阶保持和数字控制引入的延迟。
提示:工程上判断稳定边界最直接的方法,是看稳态时补偿电流误差的RMS。如果误差RMS持续下降并趋于稳定,说明参数在安全区间;如果出现等幅振荡或发散,对不起,参数越界了。
4.3 求解器和仿真步长的选择
电力电子仿真的求解器配置是新手最容易翻车的地方。我强烈建议Powergui模块设为Discrete模式,采样时间填1e-4,Solver选择fixed-step,推荐ode4或ode5,固定步长也是1e-4。这样Simulink会把电力电子开关按离散事件处理,仿真速度和收敛性都好很多。
如果Powergui用了Continuous模式,Simulink会用连续变步长算法去解IGBT开关这种高频非线性事件,仿真极慢不说,还经常出现不收敛的报错。我见过不少同学卡在这一步,以为是自己模型搭错了,实际上只是求解器配置不当。仿真时间我一般设0.3s,前0.05s是启动瞬间,0.15s处加一次负载突变,用来观察动态响应。
4.4 启动逻辑:先充电后补偿
APF启动时直流母线要从零电压充到800V。如果一上电就同时跑电压外环和谐波补偿,启动冲击电流会非常大,波形也很难看。我在模型里加了一个简单的时序逻辑:前0.05s只让电压外环工作,PWM调制限幅在较小范围,给电容充电;等Udc接近参考值,再切换到完整的谐波补偿模式。虽然仿真里不一定非加不可,但这个习惯会让波形干净很多,也更容易看清每个环节的效果。
5. 仿真结果怎么解读:从波形到THD
5.1 补偿前后波形对比
跑完仿真,先看三相网侧电流波形。补偿前是典型的三相整流电流:波峰窄、平顶宽、畸变严重,这正是低次谐波比例很高的直观表现。投入APF补偿后,等系统进入稳态一到两个基波周期,网侧电流会明显变成光滑的正弦波。这里有个操作细节:对比波形时最好把两个场景的Scope数据存到工作空间里,再用MATLAB重新绘制,把两张图叠在同一时间轴上对比,比在Simulink里切换画面直观得多。
5.2 FFT分析与THD量化
THD不能靠“目测”,必须量化。Simulink里Powergui自带FFT分析工具,取稳态阶段一个完整周期的电流波形,基波频率设50Hz,分析窗口选基波周期的整数倍。补偿前的频谱里,5次(250Hz)、7次(350Hz)、11次(550Hz)、13次(650Hz)会非常突出,THD通常在20%到30%之间。投入PI+重复控制后,这些谱线会被明显压下去,THD降到5%以内是可以实现的。如果THD做不进5%,优先怀疑谐波检测LPF的截止频率位置和重复控制增益是否给够,而不是急着加Kp。
5.3 动态响应怎么看
只盯着稳态THD有失偏颇。APF实际运行时负载是变化的,我习惯在0.15s处把负载电阻从10Ω突变成5Ω,观察网侧电流的动态过程。纯重复控制在突变瞬间会明显“慢半拍”,因为要等下一个周期才轮到修正;PI+重复控制则靠PI立刻把电流幅值拉起来,重复控制在随后的周期里把残余误差慢慢修掉。同时观察直流母线电压波形,能看到电压小幅跌落然后恢复的过程。这套复合策略最典型的响应曲线就是:突变瞬间有畸变,一个基波周期内迅速恢复,之后周期性误差被进一步压到极低。这个表现,就是并联结构优于纯重复控制的证据。
6. 踩坑实录:Simulink里我遇到过的五大问题
6.1 重复控制整个不起作用
症状是加上重复控制前后THD几乎没变化。排查顺序先看N是不是200,只要采样频率改过而N没跟着改,延迟就不是一个完整的基波周期,内模增益自然没能集中在谐波频率上。再查延迟反馈对不对,如果反馈没有和当前误差构成真正的“自我叠加”,只是把误差延迟后直接输出,那本质上只是一个前馈延迟滤波器,根本没有内模效果。这两种错误我都犯过,排查技巧也很简单:给误差加一个单次阶跃扰动,观察控制器输出是否出现周期性重复模式,没有的话说明内模根本没搭对。
6.2 仿真速度奇慢无比
大概率是Powergui用了Continuous模式,或者Solver设成了变步长。电力电子开关在连续模式下会被当成高频非线性事件处理,每一步都要重新迭代,一个0.3s的仿真能跑上半小时。解决办法就是前面强调的:Powergui选Discrete,Solver固定步长,步长取Ts的整数倍。我一般直接固定1e-4,整个模型几十秒到两分钟就能跑完,这个差距非常明显。
6.3 补偿电流发散振荡
重复控制增益太大、相位超前补偿过头、Q太接近1,都能导致环路振荡。我发现最隐蔽的是相位超前k拍给大了。本来是想补偿数字延迟,结果超前过度,高频段相位跨越到正反馈区间,控制器就开始“啸叫”。处理顺序很土但可靠:先把Q退回0.95,Kr降到0.2,k从0开始逐拍加,每加一拍跑一次仿真,看到波形变差就退回上一步。反复几次,就能找到稳定边界。
6.4 谐波检测到“假谐波”
锁相环PLL相位不准,或者LPF截止频率选得不好,会让检测出来的谐波指令本身就带偏差。电网电压略有畸变时,PLL若不滤波,同步角度会抖动,dq变换出来的直流量就不干净,低通之后混进了不该有的分量。我在PLL后面加了一个简单的低通或者陷波处理,相位同步明显干净了。另一个坑是LPF截止频率取得太高,比如100Hz,结果7次谐波被当成基波滤掉,补偿指令直接算少了。这个错误不好发现,因为波形看起来还行,但FFT一分析就会暴露。
6.5 死区时间的影响不容忽视
IGBT开关死区会增加电流畸变,在低THD目标下尤其明显。仿真里如果直接用理想开关模块,死区为零,结果会偏乐观。要贴近工程实际,就把死区时间设成2~3μs,或者使用带死区驱动的桥臂模块。死区引入的误差本质上也是周期性的,重复控制能补偿一部分,但不会完全消除。这也是为什么真实装置里通常还需要额外的死区补偿策略,这篇模型只做控制策略验证,刚好可以把死区当成下一步工程化的扩展点。
最后说点实在的。这套PI+重复控制的模型,我前后跑了不下几十次,最大的心得就是别急着把参数压到极限。指标要的是THD小于5%,不是越接近零越好;参数要留裕量,因为电网阻抗、负载特性一变,仿真里“刚好”的参数到了实际系统可能就振荡。建议如果你也在做APF或者SVG,先用这套模型把复合控制的思路吃透,再慢慢加LCL滤波、死区补偿、负载电流前馈。有了这个基础,后面每一步都是增量改进,而不是推倒重来。