
做电能质量仿真这几年我最有体会的一件事就是并网设备越多配电房里的电流波形就越难看。变频器、充电桩、电机驱动器这类非线性负载一多电流里的谐波和无功就一起上来了传统LC无源滤波器体积大、补偿频带窄所以现在工程上更愿意用并联有源滤波器APF——它本质上就是一台可控的电流源专门在并网点输出与谐波和无功反向的补偿电流把电网侧的电流洗回正弦。标题里的分流说的就是这个意思谐波和无功走APF这条支路电网只管基波有功。而控制APF最主流的方法就是基于dq坐标系的控制算法。这篇文章基于我搭过的一套Simulink并联APF仿真电路把整体架构、模块搭建、参数设置、FFT分析结果和调试踩坑全过程都过一遍。适合电力电子方向的研究生、做电能质量评估的工程师以及想用Simulink快速验证控制算法的研究型读者。我会尽量把每一步的为什么也说清楚而不是扔一堆模块名让你自己猜。1. 并联拓扑与补偿目标先搞清楚分流到底分的是什么1.1 非线性负载产生的谐波和无功从哪里来仿真里最常用的非线性负载就是三相不控整流桥带电阻电感负载这也是实际变频器前端的基本形态。整流二极管在一个工频周期内只导通一段区间电流呈现明显的尖顶波包含大量6k±1次谐波也就是5次、7次、11次、13次这些特征频率其中5次和7次幅度最大。同时整流桥的换相过程会让基波电流滞后于电网电压产生基波无功功率功率因数通常只有0.8左右。我仿真里用的负载就是三相二极管整流桥直流侧接R10Ω、L5mH这个组合THD大约在25%上下谐波特征非常典型适合做补偿前后的对比。1.2 为什么并联拓扑是主流方案有源滤波器分串联型和并联型两种。串联型要承受全部负载电流而且串在线路里投切、绝缘、短路保护都麻烦工程上用得很少。并联型APF只在公共耦合点PCC上并联接入补偿电流只是谐波和无功电流的叠加容量比负载容量小投切不影响主电路坏了也方便旁路检修。标题里写的分流就是指这种并联工作方式——让谐波和无功电流走APF这条旁路电网只留下干净的基波有功电流。一台APF还可以同时服务好几路负载扩展性好所以市面上商用电能质量治理装置基本都是并联型。1.3 用公式看补偿目标电源电流应该如何被洗干净负载电流iL可以拆成三部分iL i1p i1q ih其中i1p是基波正序有功电流也就是电网最终应该保留的部分i1q是基波正序无功电流ih是谐波电流的总和。APF要做的是输出补偿电流iC让它满足iC i1q ih这样在公共耦合点上按基尔霍夫电流定律叠加后电源电流is就是is iL - iC i1p补偿后的电网电流只剩基波正序有功分量波形正弦且与电压同相。注意这里的减的方向取决于电流正方向定义实际Simulink模型搭好后还需要根据电流传感器方向调整一次符号我在第6部分会细说。这条公式是整个控制系统的设计目标后面所有模块都是围绕让iC逼近i1qih展开的。2. dq坐标系下的控制逻辑把交流补偿问题变成直流控制问题2.1 Clarke变换和Park变换到底做了什么dq控制的第一步是坐标变换。三相静止坐标系abc下的电流是50Hz正弦量直接控制它并不方便。先做Clarke变换把abc变成两相静止坐标系αβiα (2/3)(ia - 0.5·ib - 0.5·ic) iβ (1/√3)(ib - ic)这里用的是等幅值变换也就是变换前后电流矢量的幅值不变。这样做的好处是后续计算增益时直观但要注意如果你在别的教材里看到的是等功率变换系数是√(2/3)那功率表达式里的系数会差一个3/2一定要保持一致。然后对αβ坐标系再做Park变换也就是把静止坐标旋转到以电网基波角频率ω同步旋转的dq坐标系id iα·cosθ iβ·sinθ iq -iα·sinθ iβ·cosθ其中θ是A相电网电压的相位由锁相环得到。这两步变换合起来的物理意义打个比方站在地面上看电风扇的叶片叶片在高速旋转你觉得眼花缭乱如果你跟着叶片一起转看到的叶片就是静止的。dq变换就是跟着电网电压基波旋转去看电流所以原本50Hz的基波电流在dq坐标系下变成了直流量。2.2 d轴电流是有功q轴电流是无功谐波在同步旋转坐标系里d轴电流id与电网电压矢量方向一致对应有功电流q轴电流iq与电压方向垂直对应无功电流。谐波分量变换到dq坐标系后仍然是交流量但频率变成基波的整数倍——比如5次、7次谐波在同步dq坐标下都表现为6倍频脉动11次、13次表现为12倍频脉动。所以整个控制任务变得非常清晰d轴通道让APF输出的d轴电流追上负载d轴电流中的非基波正序有功分量再加上维持直流母线电压的小量有功电流。q轴通道让APF输出的q轴电流追上负载q轴电流的全部这样电网侧的q轴电流就归零基波无功和谐波无功一起被补偿掉。这就是为什么标题里说基于dq控制算法可以同时减轻谐波和无功功率——因为谐波和无功在dq坐标系下分别落在确定的频率和通道上控制和检测都变得结构化。2.3 PI控制器为什么在dq坐标系下够用学过自动控制的人都知道PI控制器对直流参考信号可以实现无静差跟踪但对正弦交流参考会产生稳态幅值和相位误差。如果直接在abc坐标系下用PI控制50Hz的谐波补偿电流效果很难做理想。现在基波正序有功和无功都变成了直流量PI控制器就可以发挥最大作用——对直流目标无静差对dq坐标下的交流扰动谐波则靠电流内环的带宽去压制。这套思路比在abc坐标系下用比例谐振PR控制器更经典、更稳定而且工程上在DSP里实现PI也最成熟。初学者别一上来就追求PR或重复控制先把dqPI这套基础跑明白后面再扩展其他控制跟容易。3. ip-iq检测法在Simulink中的落地补偿电流指令怎么算出来3.1 为什么不用FFT做谐波检测有人可能会想检测谐波直接用FFT不就好了FFT确实能精确分析各次谐波含量但它是块处理一个窗口至少要一个完整工频周期实时性差而且窗口滑动时的瞬态响应很糟糕。APF要实时跟踪快速变化的谐波电流所以工程上几乎都用瞬时无功功率理论也就是基于坐标变换的实时检测方法。Simulink仿真的优势就在这里可以很方便地搭出检测模块实时观察指令电流的变化。3.2 ip-iq法的核心低通滤波把基波捞出来ip-iq法把负载电流变换到dq坐标系后得到的id和iq中基波正序有功对应id的直流分量基波正序无功对应iq的直流分量谐波在id和iq中表现为交流脉动分量所以检测的关键一步就是设计一个低通滤波器LPF从id和iq中把直流分量提取出来。提取出来的直流分量就是负载电流里的基波正序有功和无功。然后有两种补偿模式只补偿谐波指令电流等于负载电流减去全部基波正序分量也就是id要减直流、iq要减直流。同时补偿谐波和无功本场景d轴减掉基波正序有功直流分量q轴直接取负载iq的全部让APF把q轴电流整体承接下来。我在模型里用的是第二种因为标题明确要求同时处理谐波和无功。另外还有一个额外的d轴修正量来自直流电压外环的输出用来补充APF自身开关损耗和线路损耗产生的有功消耗这个下一节再讲。这里有一个关键经验不要试图用高通滤波器直接提取谐波分量。高通滤波器对直流附近的幅频响应很难做得理想会把少量基波成分带进指令导致补偿不准甚至出现新的畸变。正确做法是先用低通滤波器提取基波直流分量再用原始信号减去它。这个低通再相减的结构在实现上更可控、数值上也更稳定。3.3 Simulink检测模块的分块搭建我习惯把检测模块分成三个子模块便于调试时单独观察锁相环我用的是同步参考坐标系锁相环SRF-PLL把三相电网电压变换到dq用PI把q轴电压调至零积分得到同步角度θ。Simulink库里有现成的Three-Phase PLL模块直接用也可以但要注意确认输出是角度还是角速度积分后的wt后面park反变换要用同一个θ。坐标变换模块用Gain、Sum和Sin/Cos函数搭Clarke和Park变换。三相负载电流先经过Clarke得到iα和iβ再根据θ得到id和iq。这个部分也可以写成MATLAB Function一行代码的事但我建议用基础模块搭一次能加深理解。低通滤波器用二阶Butterworth离散实现截止频率我取22Hz左右。这个值是有讲究的基波50Hz在dq下是0Hz直流6倍频脉动在300Hz。截止频率太低比如5Hz提取的直流很干净但动态响应慢负载突变后要几百毫秒才跟上截止频率太高比如50Hz300Hz的脉动会漏进来提取出的基波就不再纯粹。实际试下来20~30Hz是比较合适的折中。检测模块的输出就是dq坐标系下的补偿指令电流id_ref和iq_ref。把这两个量送给后续的电流内环而不是送到abc域再处理这是dq控制的关键——整个闭环都保持在旋转坐标系里完成。3.4 用Scope检查检测模块是否正确模型搭好后先给负载通电但让APF不工作把id_raw和id_lpf放同一个Scope里看。正常情况下id_raw是带有300Hz脉动的直流波形id_lpf则是平滑的直流两者直流均值应该一致。如果id_lpf明显滞后很多个周期说明LPF截止频率设太低如果有明显300Hz波动说明截止频率偏高或者滤波器阶数不够。这一步我每次都会做检测环节有问题的话后面补偿效果一定不对先在这里花几分钟能省下大量调试时间。4. 电流内环与直流母线稳压主电路仿真的一整套配置4.1 主电路参数怎么定Simulink模型里的主电路我用的是Simscape Electrical专业电力系统库搭建核心元件如下。组件参数说明三相电源线电压380V50Hz配一个很小的线路阻抗模拟实际电网非线性负载三相不控整流桥 R10ΩL5mHTHD约25%谐波特征典型APF连接电感L_c0.6mH串联0.01Ω太小纹波大太大会拖慢电流跟踪直流侧电容C3000μF初始电压700V容量不足时动态压降大直流侧参考电压700V必须高于电源线电压峰值约537V留出调制余量开关频率10kHz兼顾纹波与控制带宽并网电感L_c的选择很关键。L_c太小开关纹波电流大电流采样和控制器容易被高频噪声干扰L_c太大电流跟踪速度慢尤其对高次谐波补偿能力明显下降。一个常用的经验范围是让连接电感在系统基波阻抗的5%~10%之间对380V/几十A级别的小功率APF0.5mH到1mH都可以接受。先取0.6mH跑再观察补偿后的THD决定要不要微调。直流侧电容同样有矛盾电容越大直流电压越稳但成本和体积上去电容太小负载突变时母线电压会大幅波动导致补偿电流指令失真。3000μF对几十kVA的APF是比较常见的选取仿真里你可以刻意改成1000μF对比会明显看到电压跌落更深、恢复更慢。4.2 电流内环带解耦前馈的PI控制电流内环的任务是让APF实际输出的电流跟踪前面算出的指令电流。在dq坐标系下AC侧电流的动态方程可以写成L·did/dt R·id ud_v - ed ωL·iq L·diq/dt R·iq uq_v - eq - ωL·id注意这两条方程里id和iq之间通过ωL项耦合在一起。如果不处理这个耦合d轴电流变化会通过ωL·iq项扰动q轴电流反之亦然动态过程会出现明显的振荡和拖尾。所以工程上普遍采用前馈解耦把控制律写成ud_v_ref ed - ωL·iq PI(id_err) uq_v_ref eq ωL·id PI(iq_err)也就是说控制器输出的电压参考值由三部分组成电网电压前馈ed、eq、解耦补偿项±ωL·i、以及PI电流误差项。在Simulink里这就是两个PI控制器加上几个乘加模块的事。实际调试时注意符号方向——不同教材里电流的正方向定义可能不同解耦项的符号会跟着变最终以你模型里电流传感器的方向为准先跑开环确认方向再闭环。PI参数整定我遵循先Kp后Ki的试凑法先屏蔽电压外环给id_ref一个矩形波阶跃比如0跳到10A观察id的跟踪响应。Kp太小响应慢Kp太大出现高频振荡然后加Ki消除稳态误差。对这套380V、几十A参数系统电流环初值可以取Kp5~10、Ki200~500跑几次阶跃就能定位到合理值。4.3 直流电压外环APF要补油才能站稳很多人会忽略直流母线电压外环结果发现APF一投入开关管和线路电阻损耗逐渐消耗电容能量直流电压持续下跌补偿效果越来越差。实际上APF本身有有功损耗必须从电网侧吸收少量有功来维持直流母线电压。做法是把直流电压测量值Vdc与参考值做差送进电压外环PI输出一个d轴电流修正量Δid叠加到id_ref上Δid Kp_v·(Vdc_ref - Vdc) Ki_v·∫(Vdc_ref - Vdc)dt id_ref (id_load - id_lpf) Δid这个外环的带宽要明显低于电流内环通常内环响应时间在几毫秒外环在几十到上百毫秒否则外环调节与内环追随相互叠加会产生低频振荡。电压环初值我通常取Kp_v0.1~0.3、Ki_v5~15。仿真开始时直接给电容设初始电压700V这样APF一投入就能工作免去预充电电路的漫长暂态。4.4 SPWM调制与主电路接通电流内环输出的ud_ref和uq_ref经过Park反变换得到三相调制波送入PWM Generator2-level bridge模块设置载波频率10kHz输出6路脉冲给Universal Bridge的IGBT门极。Universal Bridge模块选IGBT/Diode类型直流端接电容交流端接连接电感后并入公共点。如果你不用PWM Generator这个现成模块也可以自己搭三角波比较器。两种方式我都试过关键是仿真步长必须足以分辨载波10kHz的载波周期是100μs离散仿真步长至少要取2μs到5μs否则脉冲宽度失真补偿电流纹波也会被严重歪曲。4.5 一个关键的调试验证顺序第一次仿真强烈建议按两部走先给APF接一个纯电阻负载空转验证PWM和直流电压稳定再接入非线性负载看补偿效果。我在调模型时发现很多人一上来就满负荷接入波形一团乱之后分不清是检测问题、电流环问题还是PWM问题。逐步接入后每个模块的对错一目了然。也可以加一个三相断路器做负载投切仿真观察瞬态过程这对后面看动态响应很有用。5. 从波形、FFT与动态响应判断补偿是否真的到位5.1 三项波形对比要盯哪里模型跑起来后把负载电流iL、补偿电流iC、电网电流is三个波形放到同一个Scope里对比。补偿前的iL是明显的尖顶波补偿电流iC应该是包含了谐波毛刺和基波无功分量的补丁波形大致与iL的畸变部分对应补偿后的is应该接近正弦同时与电源电压基本同相。如果is看起来比没有APF时更差别急着怀疑控制参数先查补偿电流的符号和锁相角度多半是方向反了或者θ错位了。5.2 用Powergui的FFT分析算THD只看波形形状还不够专业要量化THD。Simulink里最直接的方法是用Powergui模块里的FFT Analysis工具先通过To Workspace把is和iL记录下来然后打开Powergui的FFT Analysis选项卡设置基频50Hz、分析窗口取稳态段10~20个周期、最大频率取1000Hz左右选择要分析的信号点Display就能看到谐波频谱柱状图。我这套模型的结果大致是补偿前负载电流THD约25%补偿后电源电流THD降到3%~4%5次谐波从接近20%的占比压低到1%以内。顺便说一句如果你想在MATLAB命令行里批量算THD可以简单用Signal Processing Toolbox的thd函数指定基频后它会自动计算所有谐波的总失真。对于做参数扫描仿真的人这是比手动打开FFT窗口更高效的方式。5.3 无功补偿效果怎么看验证无功补偿不能只看THD还得看功率因数和电流相位。补偿前电网电压与电网电流之间有明显相位差功率因数大概在0.85上下补偿后电流与电压同相功率因数接近1。用Simulink里的功率测量模块可以直接读有功和无功数值更直观的方法是看dq分解下的电网电流q轴分量——补偿前is的iq有直流分量对应基波无功补偿后is的iq应该在零附近波动。通过这个视角你也能清楚看到dq控制对无功功率减轻的作用机制。5.4 动态响应属于加分项用断路器做一次负载切入观察以下三个行为的时序直流母线电压Vdc在切入瞬间会先跌一小段随后在几十毫秒内回到700V附近电网电流is在切入瞬间会快速增大电流包络在大约20~40ms内稳定下来补偿指令id_ref、iq_ref会同步变化期间如果有明显长时间振荡多半是电压外环PI参数偏激进或者LPF动态响应太慢。理论上APF的动态响应有一个无法绕开的约束ip-iq检测模块里的LPF本身有延迟负载突变后检测指令需要几个毫秒才能跟上因此在暂态过程中短时间的谐波泄漏是正常的。工程上为了进一步缩短这个延迟会改用自适应滤波器、滑窗傅里叶或者改进型LPF但那是后话了一套仿真先用二阶LPF把稳态指标做漂亮再去优化动态。6. 调试过程中最影响结果的五个细节6.1 锁相角度错位半周期补偿效果直接负优化这是我最常碰到的问题。现象是APF投入后电源电流THD不降反升波形比原来更毛。排查方法很简单把θ和A相电压放进同一个Scope确认θ的过零/峰值锁相点与你采用的park变换约定一致。不同文献对park矩阵的定义可能有差异有的用[cosθ sinθ; -sinθ cosθ]有的用反向矩阵两者算出的θ相位会差90度或180度补偿指令自然跟着错位。还有一种情况是Three-Phase PLL模块输出的角度范围在某些版本里是0到2π但你写MATLAB Function时用了-π到π的角度定义两者混用就会出现周期性的相位跳变。这个问题排查起来不复杂但极易被忽略。6.2 低通滤波器的截止频率一半是稳态一半是动态我前面提到截止频率取20~30Hz但很多初学的人会纠结到底取多少。给一个判断方法在dq坐标系下你关心的是0Hz的基波分量和300Hz的6倍频谐波分量两者的频率比是6倍以上二阶Butterworth在截止频率以上以-40dB/dec衰减。如果截止频率设为25Hz300Hz处大约衰减46dB相当于谐波分量被压到原来的0.5%左右这就足够了。再往下降低截止频率稳态提取更干净但相位延迟变大动态响应变差。我的经验值是负载变化不频繁的稳态应用取20Hz负载冲击多的场景取30Hz作为折中。6.3 仿真步长与开关周期不匹配波形全是毛刺一开始我犯过一次错误把离散仿真步长设为1e-4s开关频率10kHz一个载波周期里只有1个仿真点PWM的脉宽根本无法准确表达补偿电流波形像锯齿一样。后来把步长压到2e-6s也就是每个载波周期50个点波形立刻干净了。仿真时间变长了但做电能质量仿真这种事不能省。如果整体模型太大跑不动建议先用理想开关模型平均模型验证控制逻辑最后再换成详细IGBT模型跑最终结果也可以把Simulink求解器设为离散优先配合Powergui离散模块避免连续求解器处理理想开关时出现数值振荡。6.4 总线选择器没有可选信号测量模块的类型不匹配很多人在论坛上问simulink bus selector没有可选信号这个问题在带Simscape电气模块的模型里非常常见。Three-Phase V-I Measurement这类模块输出的是物理信号Physical Signal或者非虚拟总线你直接接Bus Selector会发现列表是空的。解决方法是先用PS-Simulink Converter把物理信号转成普通Simulink信号或者改用分别的电压传感器和电流传感器模块。这个坑和算法没关系但非常消耗耐心提前知道能省一晚上。6.5 电流内环和电压外环的整定顺序不能乱参数整定是我最后说但最早该做好的事。一个正确顺序是先把负载断掉只给APF通一个小电流参考值观察电流环的跟踪性能调好电流环后再接入负载和检测模块最后才投入电压外环。如果跳过电流环直接全系统闭环一旦波形不对你很难判断问题在检测、内环还是外环三个PI互相干扰调参变成瞎猜。每次只改动一组PI参数记录波形变化这个习惯比任何高级整定公式都重要。整套仿真做完之后我最大的体会是dq控制把复杂的电能质量补偿问题拆成了三个层次——检测、电流内环、电压外环每个层次可以独立调试、独立验证。当你发现波形不对逐层隔离排查通常几分钟就能定位。后续想让效果更好可以考虑把LPF换成自适应滤波器以改善动态响应把SPWM改成SVPWM来提升直流电压利用率或者把整套控制器离散化后移植到嵌入式平台——那基本就是一个产品原型了。希望这份经验能帮你少走点弯路。