做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/(LsR)。设电流误差为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 为什么这个组合特别适合APFAPF的谐波指令本质上就是严格周期的和重复控制的内模天然匹配这是两个东西能“门当户对”的核心原因。与此同时实际运行中还有负载突变、启动冲击这类非周期扰动重复控制在这些瞬间基本帮不上忙但PI的快速响应能第一时间把电流拉回正常范围。等系统进入稳态重复控制再逐步把残余的周期性误差抹平。我实测下来的效果是负载突变瞬间波形短时畸变一个基波周期后明显恢复正弦整个过程的稳态精度比纯PI高动态响应比纯重复控制快。这就是复合策略最有价值的点。2.4 控制频率和采样周期的选择一套控制系统要先定“节拍”。对电力电子APF开关频率和采样频率通常取一致我在这里取10kHz即控制周期Ts1e-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。整个系统的关键参数整理如下表后续每个控制环节都围绕这些数值展开。参数符号取值电网线电压Uac380V / 50Hz并网电感L2 mH电感等效电阻R0.01 Ω直流侧电容C2200 μF直流母线参考电压Udc_ref800 V负载电阻RL10 Ω负载电感LL5 mH开关/采样频率fs10 kHz控制周期Ts100 μ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参数的计算过程电流环被控对象是L2mH、R0.01Ω属于一阶惯性系统。用零极点抵消法整定选电流环截止频率fc500Hz也就是开关频率的1/20这样可以给数字控制和PWM延迟留足相位裕量。计算如下ωc 2π × 500 ≈ 3141.6 rad/s Kp ωc × L ≈ 6.28 Ki Kp × R / L ≈ 31.4这组数只是初值实际仿真里我会在Kp5~8、Ki30~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基波整数倍频率上的增益越高稳态效果越好但稳定性裕度越小。我起步用Q0.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-4Solver选择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. 仿真结果怎么解读从波形到THD5.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选DiscreteSolver固定步长步长取Ts的整数倍。我一般直接固定1e-4整个模型几十秒到两分钟就能跑完这个差距非常明显。6.3 补偿电流发散振荡重复控制增益太大、相位超前补偿过头、Q太接近1都能导致环路振荡。我发现最隐蔽的是相位超前k拍给大了。本来是想补偿数字延迟结果超前过度高频段相位跨越到正反馈区间控制器就开始“啸叫”。处理顺序很土但可靠先把Q退回0.95Kr降到0.2k从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滤波、死区补偿、负载电流前馈。有了这个基础后面每一步都是增量改进而不是推倒重来。