做电力电子仿真的同行,多多少少都跟谐波怼过几个回合。变频器、整流桥、UPS、开关电源这一类非线性负载,往电网里灌谐波电流的劲头从来不会跟人客气。治理手段无非两条路:被动滤波和主动补偿。无源LC滤波器结构简单、造价低,但只能滤固定次数谐波,搞不好还会跟电网阻抗发生谐振;有源电力滤波器(APF)走的是“检测-反向补偿”的路子,实时性强、可控性高,是当前电能质量治理的主流方向。而APF谐波抑制效果好不好,控制策略就是灵魂所在。
这篇来拆一个工程上很实用的APF谐波抑制方案:PI控制+重复控制的复合策略,以及这套策略在Simulink中从建模到仿真的完整实现过程。我会把为什么要把PI和重复控制“搭伙”、重复控制里的N、Q(z)、Kr这些参数到底怎么定、模型每个环节怎么搭起来、以及仿真里容易踩的坑都摊开讲清楚。正在做APF仿真、准备毕业论文或者搞产品预研的朋友,可以直接拿这篇文章当参考。
1. 谐波治理为什么要“主动出击”
1.1 非线性负载的谐波“账单”
先交代背景。三相不控整流桥、晶闸管整流器、变频器这类设备,输入电流不是正弦波,而是含有大量低次谐波的周期性非正弦波。以常见的三相不控整流带阻感负载为例,输入电流近似为120°导通的方波,频谱上以6k±1次谐波为主体,也就是5次、7次、11次、13次这些特征谐波。
这些谐波带来的麻烦很具体:中性线过流、变压器和电机附加损耗发热、保护装置误动作、电容器组谐振甚至烧毁,还有对通信线路的电磁干扰。把网侧电流的总谐波畸变率(THD)压到5%以下,是很多场合的硬指标。在这个前提下,无源滤波器已经显得力不从心,因为负载变了、谐波次数变了,它就不灵了。APF的价值在于它能实时跟踪谐波,主动向电网注入一个大小相等、相位相反的补偿电流,把谐波“抵消”在公共耦合点。
1.2 APF的补偿链条:检测、控制、输出
APF的整个补偿过程可以拆成三段:谐波检测、电流控制、变流器输出。
谐波检测负责从负载电流里分离出谐波分量,作为补偿电流的指令信号。电流控制拿到指令之后,结合APF实际输出电流,算出控制量,驱动变流器产生对应的电压输出。变流器再经过并网电感把补偿电流注入电网。这三段任何一个环节偷懒,补偿效果就大打折扣。
工程里最常见的谐波检测方案是同步旋转坐标系下的dq法:把三相负载电流经过Clarke变换和Park变换,转到与电网电压同步旋转的dq坐标系。在这个坐标系下,基波正序电流变成了直流分量,谐波分量则表现为交流量。用一个低通滤波器把直流分量提取出来,反变换回abc坐标系,得到的就是基波正序电流,负载电流减去基波正序电流,剩下的就是谐波+无功成分,作为APF补偿指令。
这个检测方法相当成熟,Simulink里用经典模块就能搭出来,后面第三章我会给出具体的连接方式。
2. 控制策略拆解:为什么是PI+重复控制
2.1 只靠PI,稳态精度很尴尬
先看最基础的方案:电流环用PI调节器。PI控制器的传递函数是Kp+Ki/s,它对直流信号有无穷大的增益,所以跟踪直流指令非常拿手。如果APF只补偿基波无功,在dq坐标系下把无功电流指令设成直流,PI完全够用。
但问题在于,APF要补偿的是谐波电流,它们在同步旋转坐标系里不是直流,而是5、7、11、13次等整数倍频的交流量。PI调节器对交流信号增益有限,频率越高增益越低,所以纯PI控制的APF存在明显的稳态跟踪误差,补偿后的剩余谐波含量往往不达标。如果把PI的Kp调得很大,增益是上去了,但噪声和系统不稳定风险也跟着涨,这不是治本的办法。
2.2 重复控制:按模板画圆式的周期零误差跟踪
重复控制的核心思想是内模原理:如果控制器内部包含了被跟踪信号的发生模型,就能对该信号实现无静差跟踪。谐波电流是周期性信号,周期就是工频周期20ms。重复控制器在内部构造一个周期延时正反馈环,相当于把“上一周期的误差记忆”不断累积和修正,从而使系统对周期性的谐波指令获得非常高的增益。
用通俗的话说,这就像熟练工按模板画圆:新手一笔画不圆,但只要每次都照着模板修正,多画几轮就越来越圆。重复控制不是一次到位,而是利用信号的周期性反复修正,理论上能对任意周期信号实现零稳态误差。
离散域重复控制器的典型表达式是:
Grep(z) = Kr * z-N * S(z) / (1 - Q(z) * z-N)
其中N是每个基波周期内的采样点数,Q(z)是为了保证稳定性而引入的低通或常数(常见取0.95~0.99),S(z)是相位幅值补偿器,用于补偿检测滤波和PWM逆变器等被控对象带来的相位滞后,Kr是重复控制增益。
2.3 复合结构:并联搭伙与参数分工
纯重复控制有个短板:它对周期信号很擅长,但对负载突变这类非周期扰动响应慢,至少要等一个基波周期才开始修正。工业生产线上负载经常波动,APF既要谐波滤得干净,又要动态响应快,怎么办?
工程上的答案是让PI和重复控制并联使用。误差信号同时送入PI支路和重复控制支路,两者输出叠加后作为调制波指令。PI管动态过渡,负载突变时它能立刻响应;重复控制管稳态精度,慢慢把周期性谐波的剩余误差压下去。两条支路各司其职,互不挤占。
这种复合结构在Simulink里实现起来也很直观:误差信号走两路,最后相加。需要注意两者之间的耦合问题,特别是相位补偿和增益分配,后面第四章我会给出一组能直接上手的参数起点。
3. Simulink模型搭建全流程
3.1 准备工作:工具箱与仿真环境配置
Simulink里做APF仿真,核心工具箱是Simscape Electrical(以前叫SimPowerSystems)。另外还需要Simulink Control Design做频域分析,以及基础的DSP System Toolbox用来搭滤波器。版本倒不用太新,R2018b以上基本都够用。
仿真建议用离散控制模型加连续主电路的混合配置。主电路里的电源、整流桥、变流器保持连续域,控制部分用离散模块,用一个离散采样时间Ts来控制,比如Ts=1e-4秒(对应10kHz采样)。这样更贴近DSP实现的实际情况,也方便后面把控制算法改写成嵌入式代码。
求解器方面,主电路带功率电子开关,属于刚性系统,首选ode23tb,相对容差设为1e-4,最大步长不要超过1e-5到1e-4秒这个量级。如果你发现仿真特别慢,优先检查是不是求解器设置不合理,而不是急着去改模型结构。
3.2 主电路参数与非线性负载设置
我用的主电路结构和参数如下,直接照着搭就行:
- 三相电网:线电压380V,频率50Hz,内阻很小可忽略
- 非线性负载:三相不控整流桥,直流侧接R=10Ω、L=1mH的阻感负载
- APF主电路:三相全桥IGBT模块(Universal Bridge),直流侧母线电容C=2200μF,交流侧并网电感L=1.5mH
- PWM调制:三角载波比较法,开关频率10kHz,调制波限幅
这里有两个容易被忽略的细节。第一,Universal Bridge里电力电子器件选“IGBT/Diodes”,桥臂选“Three-phase arm”;第二,APF直流侧电容的初始电压不能为0,最好设成650~700V左右,否则APF投入的瞬间会有一个剧烈的母线充电冲击,让控制器来不及反应。
非线性负载电流的谐波构成是以5、7、11次为主的,这几路谐波恰好是重复控制最拿手的周期性信号,选择这个负载对于验证策略非常典型。
3.3 谐波电流检测:从abc到dq再到谐波指令
谐波检测模块推荐搭成子系统,内部结构分四步:
第一步:采集三相负载电流ila、ilb、ilc,做Clarke变换得到αβ轴分量。第二步:用PLL得到电网电压相位θ,做Park变换,得到dq轴电流。第三步:各接一个一阶低通滤波器,截止频率取10~20Hz,滤掉交流谐波,只留直流基波正序分量。第四步:把滤波后的dq分量反Park变换回abc坐标,得到基波正序电流;用负载电流减去它,就是谐波补偿指令。
这里我建议直接在MATLAB Function模块里用代码写变换,比搭一堆S函数模块清爽很多。参考代码如下:
function [i_alpha, i_beta] = clarke(ia, ib, ic) % 等幅值Clarke变换 i_alpha = (2/3)*(ia - 0.5*(ib + ic)); i_beta = (2/3)*(sqrt(3)/2*(ib - ic)); endfunction [id, iq] = park(i_alpha, i_beta, theta) % Park变换,theta为PLL输出的电网电压相位 id = i_alpha*cos(theta) + i_beta*sin(theta); iq = -i_alpha*sin(theta) + i_beta*cos(theta); end反变换公式同理,只是符号反过来。低通滤波器可以直接用Simulink的First-Order Low Pass模块,也可以自己写一个一阶IIR滤波器。低通截止频率的选择有个权衡:设太低,基波提取得干净但动态慢,负载突变后补偿要延迟几个周期;设太高,基波里会掺入5次、7次分量,导致补偿指令不纯。我从10Hz起步试过,效果还行,动态要求更高的场合可以提高到30Hz,但要注意检测环节相位延迟会给重复控制带来压力。
3.4 控制器与PWM调制的连接
控制器的误差信号是谐波指令减去APF实际输出电流,这个误差同时进入两条支路。
PI支路直接用Simulink的PID Controller模块,P和I参数先不追求最优,从Kp=10、Ki=500起步。
重复控制支路是重头戏。它包含一个周期延时缓冲区和一个正反馈结构。最简单的实现方式是在MATLAB Function模块里维护一个长度为N的数组,N等于采样频率除以基波频率,10kHz采样50Hz基波,N=200。每个采样周期做三件事:读数组中最早存的那个输出值,计算新的重复控制输出,然后把数组整体往前推一格、把最新输出存进去。
对应代码如下:
function y = rep_ctrl(e, Kr, Qk) % 重复控制器实现:y(k) = Kr*e(k) + Qk*y(k-N) persistent buf if isempty(buf) buf = zeros(200,1); % N=200 end % 取上一周期的控制输出 y_old = buf(1); % 计算当前输出 y = Kr * e + Qk * y_old; % 滚动缓冲区 buf(1:end-1) = buf(2:end); buf(end) = y; end这就是重复控制的主体。Qk取0.95,Kr取0.5。如果你在仿真中发现高频段不稳,可以再接一个低通滤波器作为Q(z),让高频增益降下来。相位补偿S(z)可以先用超前拍数来近似,比如让重复控制的输出再提前几个采样周期叠加,m取3~5,能有效抵消检测滤波和PWM的固有延迟。这个补偿做不好,重复控制很容易变成振荡源,后面我会单独说。
两路输出相加后,送到PWM发生器。如果控制器是在dq坐标系下运行的,调制波是d、q轴分量,需要先反Park变换到αβ轴,再经过反Clarke变换得到三相调制波,最后和10kHz三角载波比较生成IGBT的门极信号。这一步很多人会漏掉反变换,结果波形就是乱的,务必检查。
4. 关键参数的设计与整定
4.1 直流母线电压和网侧电感怎么算
APF要能补偿谐波,直流母线电压必须足够高,不然变流器输出电压够不着谐波补偿的需求。对380V系统,直流母线电压至少满足Udc ≥ 2.45×220≈540V,实际工程和仿真中我习惯取700~800V。选800V,留出足够的电压裕量,PWM的调制比不至于顶到饱和。
网侧电感L的选取直接影响电流纹波和补偿带宽。经验公式大致是:
L ≈ (Udc - √2·Uac) / (6·fsw·ΔImax)
代入Udc=800V,Uac=220V(单相相电压有效值),fsw=10kHz,设允许的电流纹波峰峰值ΔImax=5A,得到L≈(800-311)/(6×10000×5)≈1.63mH,取1.5mH。电感太小,纹波大,开关噪声容易串进控制环路;电感太大,补偿电流变化率受限,动态跟不上谐波变化,所以这个值要综合平衡,不能照抄公式盲目取整数。
4.2 电流环PI参数的经验整定
电流内环被控对象约等于一个纯电感L,开环传递函数近似为PI×1/(sL)。按典型的Ⅰ型系统整定思路,希望电流环截止频率fc在开关频率的1/10左右,也就是1kHz。此时PI参数大致落在:Kp ≈ L×2π×fc ≈ 1.5mH×2π×1000 ≈ 9.4,Ki按Kp×100~200取,约500~1000都能稳。
我给出一个从Kp=10、Ki=500起步的调试方法:先单独跑PI支路,把重复控制禁用(Kr设为0),看APF补偿后的波形。如果波形还有明显的周期纹波,把Kp往上加一半;如果开始震荡,说明Kp过头了,退回上一次的值。Ki主要负责消除低频静差,过大容易和电网阻抗谐振,一般只要不拖慢动态就尽量取小。
这里要提醒一句:参数永远跟你自己的模型绑定,不同电感值、母线电压、采样频率对应的最优PI参数都不完全一样。我给的数值是参考起步点,不是万能答案。
4.3 重复控制的三块基石:N、Q(z)、Kr
N是采样点数,直接由采样率除以基波周期决定:N=fs/f0。10kHz采样、50Hz工频,N=200。N必须算准,差一个点,重复控制的“记忆”就对不准谐波周期,补偿效果会肉眼可见地变差。代码里数组长度就是N,初始化一定要设对。
Q(z)的作用是抑制重复控制高频段的增益尖峰,保证稳定性。工程简化时直接取固定常数Qk=0.95,效果就不错。突然想验证稳定性边界的时候,可以把Qk从0.9慢慢往1.0推,你会发现越接近1,稳态精度越好,但系统越容易抖。Qk=1.0对应纯积分型的重复控制,对参数偏差极其敏感,仿真里几乎稳不住。所以Qk不要贪心,0.95到0.99之间比较合理。
Kr是重复控制支路的增益,太小修正力度不够,稳态谐波残留大;太大容易激发高频振荡。我的经验是从0.3起步,每轮仿真增加0.2,观察高频抖动的征兆,停在振荡之前那一档。一般0.5~0.8都能取得不错的稳态效果。
5. 典型仿真结果与波形解读
5.1 补偿前后网侧电流波形对比
仿真时间设为0.3s,APF在0.1s时投入。前0.1s网侧电流波形是典型的不控整流特征电流,波形顶部平直、边缘陡峭,畸变严重。0.1s后APF开始输出补偿电流,经过大约2~3个基波周期,网侧电流逐渐接近正弦。
正常调好的模型里,你会在Scope中看到APF投入后,网侧电流曲线明显变圆滑,不再有整流桥特征电流那种“块状”感。这个视觉变化非常直观,可以作为调参是否成功的第一个判据。
5.2 THD指标与谐波频谱分析
用Simulink自带的Powergui里的FFT分析工具,或者把波形导出到MATLAB工作区再用fft函数分析,可以得到补偿前后的THD对比。典型结果如下:
| 指标 | 补偿前 | 补偿后 |
|---|---|---|
| THD总量 | 27%左右 | 4%~5% |
| 5次谐波占比 | 20%左右 | 2%以下 |
| 7次谐波占比 | 10%左右 | 1.5%左右 |
| 11次谐波占比 | 5%左右 | 1%左右 |
这里重点看5次和7次,它们是不控整流谐波的“大股东”。如果补偿后5次谐波还有明显残留,优先怀疑重复控制N有没有算错,或者相位补偿有没有接对。如果所有次数都残留但都不算严重,多半是Kr偏小或者Qk偏小,适当增大即可。
5.3 动态工况:负载突变下的响应行为
把负载电阻从10Ω在0.2s时突变到5Ω,观察网侧电流波形。PI支路的响应速度很快,电流会在几个毫秒内冲上来;重复控制支路会在一两个基波周期内进一步修正残差,整体恢复时间大约20~40ms。如果只有重复控制没有PI,恢复时间会明显拖长到60ms以上,这就是复合策略在动态性能上占优的直接证据。
6. 常见问题与排查技巧实录
6.1 仿真不收敛、跑太慢怎么处理
APF主电路带IGBT开关,非线性强,容易出现步长反复缩小、仿真进度条走不动的情况。第一步把ode23tb和相对容差1e-4用上,并把最大步长限制在1e-5左右。第二步检查主电路里有没有环流支路缺少小电阻阻尼,特别是直流侧电容与断路器之间。第三招,在IGBT桥臂输出端和并网电感之间串一个几欧姆的小阻尼电阻,仿真速度能有明显改善。
6.2 三招解决重复控制引发的系统振抖
最典型的问题:APF一投入,网侧电流波形高频抖动,甚至PWM调制波顶到限幅。原因几乎都出在重复控制的补偿环节。第一招,把Qk从0.99降回0.95,抑制高频增益尖峰。第二招,把Kr先降到0.3,确认振荡消失后再逐步往上加。第三招,检查S(z)相位补偿是不是超前拍数过大,m值过大会把高频噪声一起放大,用一个低通滤波器串联在重复控制输出端,截止频率取2kHz左右,就能有效压制。
6.3 补偿精度上不去的排查思路
补偿后THD迟迟压不到5%以下,按顺序排查四件事:第一,谐波检测的低通滤波器截止频率是否太低,导致动态补偿指令滞后;第二,重复控制的N是否精确等于fs/f0,一个点的偏差都会导致相位错位;第三,PI和重复控制的耦合是否互相打架,试着先单独开一路看效果;第四,PWM的开关频率和采样频率是否匹配,如果采样率只有5kHz而载波10kHz,离散控制会丢失信息,把Ts改小再试。
6.4 调参顺序与实用速查表
我最常用的调试顺序是先关掉重复控制,把PI调到波形基本成形没有大震荡;再单独开重复控制,Kr从0.3往上加,看稳态精度逐步提升;最后两者合并,再微调PI的Ki和重复控制的Qk。不要上来就两路一起调,出了问题分不清是哪一环节的锅。
| 问题征兆 | 优先检查项 | 调整建议 |
|---|---|---|
| 波形不收敛、步长卡死 | 求解器设置、阻尼电阻 | 用ode23tb,加阻尼 |
| 高频振荡 | 重复控制Qk/Kr/超前拍数 | Qk降到0.95,Kr降到0.3 |
| THD降不下去 | 检测滤波器、N、PI增益 | 提高LPF截止频率,校验N |
| 动态恢复慢 | PI增益、复合结构 | 调大Kp,确认PI支路导通 |
| 直流母线电压跌落 | 电容容量、电压外环 | 加大电容,检查电压环 |
最后再分享一个我实践下来的体会:重复控制的数组滚动实现,看着简单,但N一旦设错或者采样率跟载波频率不一致,调试时浪费的时间远超想象。所以我习惯在一开始就把Ts、Fsw、N这三个数值写在模型注释里,改模型之前先核对它们。做APF仿真的核心不是把模型搭通,而是把控制参数背后的物理意义想通。PI和重复控制这对组合,一个管突发、一个管反复,配合得当,谐波问题就没那么难缠。