资讯详情

基于PI+重复控制的有源滤波器谐波抑制策略与Simulink仿真

📅 2026/10/15 7:33:53 | 华诺云谱 👁 阅读
基于PI+重复控制的有源滤波器谐波抑制策略与Simulink仿真
做电力电子仿真的人十有八九都调过有源滤波器的模型。最近我又在Simulink里搭了一版谐波抑制策略模型控制结构用的是PI加重复控制。这套组合听起来不复杂但真正仿真跑起来想把补偿后的电流波形压到接近正弦把THD从二三十降到5以下中间全是细节。今天这篇就把这套“基于PI重复控制的有源滤波器谐波抑制策略模型”从原理到参数、从建模仿真到故障排查完整拆开讲一遍。先说明白这个模型解决什么问题。有源滤波器APF的核心任务是检测非线性负载产生的谐波电流然后通过变流器输出一个方向相反、幅值相同的补偿电流让电网侧电流恢复接近正弦。这里最关键的不是“能不能产生谐波”而是“电流控制器能不能精确跟踪谐波指令”。谐波指令本身是周期性变化信号而且包含5次、7次、11次、13次等多频分量如果用普通PI控制器去跟踪相位滞后不可避免稳态误差也很难消除。PI加重复控制就是为了解决这个跟踪精度问题。1. 用PI加重复控制给有源滤波器做谐波抑制到底在解决什么1.1 谐波抑制难点不在“知道谐波”而在“跟住谐波”我这里说的“知道谐波”指的是谐波检测环节。现在主流做法是基于瞬时无功功率理论的dq变换或者ip-iq检测法先把三相电流变换到同步旋转坐标系再通过低通滤波器取出基波分量然后用原电流减去基波就能得到包含各次谐波的总谐波指令。这个环节本身不复杂Simulink里用几个坐标变换模块和滤波器就能搭出来。真正的难点在后面的电流跟踪。你可以把电流控制器理解成一台“追踪器”目标是让逆变器实际输出的补偿电流实时跟随给定的谐波指令。问题是谐波指令变化很快而且频率成分复杂。常规PI控制器的传递函数在基频处增益有限在5次、7次谐波频率处增益更低加上采样和PWM调制带来的延迟跟踪误差会越来越大。你调高比例系数动态响应确实快一点但超调和噪声也跟着上来系统还可能不稳定。重复控制就不一样的。它的思路建立在“内模原理”上如果系统要无静差地跟踪一个周期性参考信号那控制器里必须包含这个周期信号的模型。重复控制在控制器内部搭了一条“记忆上一周期误差”的通路每个周期都叠加之前周期修正的补偿量。这样经过几个周期的反复修正系统在基波以及各次谐波频率点上都会有很高的增益稳态跟踪误差可以被压到非常小。这是单纯PI做不到的地方。1.2 PI和重复控制的分工逻辑一个管“冲劲”一个管“精度”我见过有人一上来就只加重复控制仿真也能跑但启动那一下特别难受误差收敛要等好几个周期。有人就反过来只加PI结果稳态波形总带毛刺THD压不下来。合理的设计是让两者并联各干各的活。PI控制器宽带带宽高一些动态响应快。负载突变、谐波指令瞬时跳变时PI能立刻给出一个较大的修正量把前几个周期的冲击扛下来。重复控制负责稳态精度它在谐波频率点上的高增益可以把PI剩下的周期性残差逐步吃掉。两者并联以后暂态靠PI稳态靠重复控制谐波畸变率和动态性能都能兼顾。这个结构在Simulink里实现并不复杂PI输出和重复控制输出相加作为最终的电流控制量。需要注意的是两个通道的增益不能随便叠加完事。重复控制器的输出必须经过限幅否则启动瞬间容易顶到调制波上下限导致过调制和电流畸变。PI通道倒不一定要限幅因为它的输出会随着稳态误差减小而自动缩回去但重复控制不同它内部有记忆积分项限幅不做好容易累积出一个很大的偏置。1.3 这个Simulink模型适合谁拿来做基础框架如果你刚开始接触有源滤波器仿真这套模型是挺好的切入点。它把电力电子里的坐标变换、电流闭环、PWM调制、谐波检测、重复控制器全都串在一起而且每个模块都可以单独拆开看波形。尤其是重复控制这种带记忆特性的控制算法你只有放到闭环里反复调参数才能理解模块按N个周期延迟是什么意思相位补偿前后移几拍的效果差在哪里。如果是有工程项目经验的人也可以把这个模型当成“控制原型”。比如把里面的谐波检测算法从全频段补偿改成选择性补偿或者把逆变器模型从理想开关换成带死区的详细模型控制结构都不用大改。这个模型的边界很清楚它是单台并联型有源滤波器逆变器侧用L型并网电感负载侧用三相整流桥模拟非线性负载。你在这个基础上加LCL滤波器或者改成多机并联都不会推翻原有的控制框架。2. 模型的核心组成与控制思路拆解2.1 谐波检测dq旋转坐标下的提取逻辑我搭模型时用的是最常见的同步旋转坐标法。三相负载电流iload先经过abc到dq变换变换角度来自一个锁相环PLL锁的是电网A相电压相位。d轴分量和q轴分量分别通过一个低通滤波器滤掉平均值以外的纹波。这里滤出来的就是基波有功和无功对应的直流量再经过dq到abc的反变换得到基波电流。负载电流减去基波电流剩下的就是谐波电流指令。这里要提醒你一个坑dq变换的旋转角度必须是电网电压基波相位而不是电流相位。因为谐波电流在dq坐标下会叠加出5次、7次等高频分量如果锁相环跟随的是畸变后的电流角度本身就会出现波动检测结果会混入更多乱七八糟的分量。实际调试时可以先看PLL输出的角度波形是不是一条稳定的锯齿波再看dq轴电流波形里有没有明显的直流量。PLL弧度不对后面全白搭。低通滤波器截止频率的选择也很讲究。我常用的是100Hz左右也就是说只保留50Hz附近的基波分量。截止频率设低了基波提取滞后严重动态响应慢设高了dq轴上的5次谐波变成300Hz可能没被滤透基波电流里就会混入谐波成分。你可以用一组对比实验验证把截止频率从50Hz调到200Hz观察补偿后的电网电流THD变化通常能发现中间有个最优区间。2.2 电流指令合成与逆变器调制谐波指令出来之后需要变成三相补偿电流参考值送到电流内环。电流内环的误差信号是补偿电流参考值ic_ref减去实际反馈的逆变器输出电流ic。控制器输出经过坐标反变换得到三相调制波再和三角载波比较生成IGBT的PWM驱动脉冲。这里有个细节大多数人第一次都会忽略逆变器直流侧电压并不是恒定的母线电容电压会有波动这个波动会直接干扰补偿电流输出。所以电流内环之外一定要有一个直流电压外环。直流电压外环的输出通常作为一个有功电流修正量叠加到d轴电流参考上用来补偿变流器的开关损耗和线路损耗维持母线电压稳定。调制部分我习惯直接在Simulink里用PWM Generator模块载波频率设到10kHz或20kHz。开关频率选低了谐波补偿带宽受限而且输出端更容易出现开关频率附近的纹波选高了仿真步长必须相应缩小仿真速度会明显拖慢。10kHz算是比较折中的选择既能覆盖到25次以内的谐波补偿需求仿真耗时也还能接受。2.3 重复控制器怎么在Simulink里落地重复控制的核心是内模。连续域的理想重复控制器传递函数可以写成G_r(s) e^(-sT) / (1 - e^(-sT))其中T是基波周期也就是0.02秒。但实际实现都是用离散域。离散化之后的典型形式是G_r(z) z^(-N) / (1 - z^(-N))N就是每个基波周期内的采样点数。比如采样频率fs设为10kHz基波频率f0为50Hz那N fs / f0 10000 / 50 200。这个N必须算准不能四舍五入取个约数。N错了重复控制器记忆的周期和实际基波周期对不上补偿效果会明显下降有时甚至出现“追不上”的现象。纯理想内模在工程上没有直接用的因为它在所有谐波频率点上的增益都接近无穷大稍微有点模型误差就震荡。实际模型里我在反馈环路上加了一个低通滤波器Q(z)把内模改成带阻尼的形式。Q(z)可以取0.98这样的常数也可以取一阶低通。加Q之后增益不再无穷大但谐波频率点依然保持较高增益稳定裕度却大大改善。Simulink里的具体搭法是这样的误差信号先经过一个周期延迟也就是z^(-N)然后再和当前误差相加形成内模的累积项累积项经过补偿环节C(z)输出到总控制器。补偿环节里包含三块一个是比例增益Kr用来调节重复控制在整个控制量里的权重一个是超前相位补偿z^k用来抵消采样延迟和逆变器延时带来的相位滞后还有一个是低通滤波器用来抑制高频噪声。三块串联起来就是完整的重复控制补偿器。2.4 PI控制器的实现细节电流内环PI控制器在dq坐标系下分开做d轴一个PIq轴一个PI。输入分别是d轴和q轴的电流误差输出经过反变换得到三相调制波。这个做法可以避免在静止坐标系下对交流量做PI带来的稳态误差问题。PI公式上直接用离散PID模块就行但需要注意积分限幅和输出限幅。积分限幅很多人偷懒不设结果模型跑几个周期后积分项飘到天上控制器输出饱和波形全乱。设置限幅时有个技巧先把PI输出整体限幅在调制波允许范围比如正负0.9再在这个基础上给积分单独设置一个较窄的限幅。这样启动或者大动态时比例项能正常响应积分项不会被拉飞。采样频率和控制频率要匹配。我的习惯是电流内环控制频率和PWM开关频率一致都是10kHz这样PWM比较自然。如果控制频率比采样频率高会出现一个控制周期内采样数据还没更新完的混乱情况。Simulink里最好把所有离散控制器模块的采样时间统一设置避免多速率连接造成的警告。3. 从零到一搭建仿真参数选择与整定过程3.1 主电路参数和仿真步长选择模型主电路参数我按常规低压有源滤波器来搭三相电网电压380V/50Hz非线性负载用三相不可控整流桥带阻感性负载模拟额定电流大概20A左右。逆变器直流侧电压取700V直流母线电容取2000uF并网电感取3mH开关频率10kHz。这里有个容易忽略的点仿真步长。如果你用Simulink默认的变步长求解器跑电力电子模型时开关动作容易导致步长剧烈跳动仿真特别慢波形还可能出现毛刺。我建议用固定步长离散求解器步长设5e-6秒也就是0.005毫秒。PWM开关频率10kHz对应一个开关周期100微秒5微秒的步长能保证一个开关周期内有20个采样点波形相对平滑。仿真时间不要一上来就设好几秒先跑0.3秒到0.5秒主要用来验证控制回路能否稳定。重复控制的效果至少要看0.1秒以后的波形因为算法投入以后要经过好几个基波周期才能把谐波压下去。我第一次调试时设了0.02秒结果看到补偿效果还没出来误以为参数有问题白白浪费了不少时间。3.2 电流内环PI参数怎么整电流内环PI参数我用的是“先粗调比例再补积分”的路子。先给Kp一个较小值比如0.1Ki设0跑仿真看补偿电流对指令的跟踪情况。然后逐步加大Kp观察电流误差波形直到跟踪速度可接受。这个过程中如果出现明显高频振荡说明Kp太大了退回去一半。再慢慢加Ki消除稳态偏差。Kp和Ki相互影响每次只动一个参数否则出了问题根本不知道是谁引起的。比较实用的经验值是在3mH并网电感、10kHz采样下Kp大概在5到15之间Ki在几百到几千之间。具体数值取决于你用的标幺化方式和PI模块内部结构。如果你用Simulink自带的离散PID模块注意看它是并联还是串联结构并联结构下Kp和Ki含义直接串联结构下参数还要换算。我吃过这个亏换成并联式PID模块之后整个调试思路都清晰多了。调试PI时最好把重复控制器暂时禁用让它输出为0先把PI通道调到一个“波形能看但THD还不够低”的状态。这时候电网电流波形大概是基波分量明显但边上有毛刺THD可能在10%到15%之间。别急着继续调PI因为靠PI把谐波压到5以下会很费劲而且增益加太高容易振荡。3.3 重复控制增益和相位补偿的调整顺序重复控制的参数有三个关键周期延迟N、增益Kr、相位补偿拍数k。N根据采样频率和基波频率计算前面说了不用再调。真正需要反复试的是Kr和k。Kr的作用是控制重复修正的强度。我的调试习惯是先给一个较小的值比如0.5然后看稳态误差波形是否在逐周期收敛。收敛速度慢就增加Kr出现振荡就减少Kr。常规范围在0.5到2之间具体要看系统的开环增益。相位补偿k是个很微妙的东西。由于采样延迟、逆变器延时和滤波器相位滞后的存在重复控制器的补偿信号比理想情况晚了几拍所以需要提前k拍输出。k太小补偿动作总是晚半拍谐波抑制效果差k太大补偿过头反而激发振荡。确定k最简单的方法是扫参数把k从0到5依次代入观察第5次、第7次谐波衰减程度选THD最低的那个k。我在10kHz采样下常用k取2或3对应0.2到0.3毫秒的补偿拍。加重复控制的一个硬性条件必须先确认基础PI闭环系统是稳定的。重复控制相当于在这个稳定闭环上并联一个高增益的周期性校正环节如果基础闭环不稳定重复控制救不回来。你可以先断开重复控制支路用单位阶跃信号测试电流环响应确认收敛之后再合上重复控制支路。3.4 直流侧电压外环先粗调再细调直流侧电压外环的目标是让母线电压稳定在700V附近。这里有个基本原则电压外环的响应速度必须远低于电流内环。电流内环时间常数通常在毫秒级别电压外环时间常数则要放到百毫秒级别否则两者会产生交互振荡。外环PI参数整定思路和电流内环类似但投入要更大一些。Kp取得太大母线电压会出现低频振荡Ki取得太大负载突变时电压会有很大的过冲。我的做法是先让运行稳定观察母线电压的波动范围再一点点缩小误差。电压波动在正负5V以内说明外环已经基本合格不必追求完全平直。外环输出叠加到d轴电流参考时要注意方向。如果母线电压低于参考值说明逆变器有功不足需要吸收更多的有功电流给电容充电这时外环输出应该让d轴电流参考增大。方向搞反了母线电压会越跑越低最后仿真报错。4. 仿真结果怎么看波形、FFT与THD4.1 补偿前后的关键波形特征模型跑通后第一件事不是看THD而是看波形形态。补偿前电网侧电流是整流桥的经典尖顶波峰值处平坦边沿陡峭本质上是一堆谐波叠加在基波上。补偿后电网电流应该是一根平滑的正弦波没有明显毛刺幅值和相位基本和电压保持一致。你还要看逆变器实际输出的补偿电流波形。正常情况它应该和检测出来的谐波指令基本重合只是有几十微秒级的延迟。如果你发现补偿电流在指令突变的瞬间出现大幅尖峰说明PI参数偏高或者限幅太紧。如果补偿电流想着重复制的方向来回抖说明重复控制相位补偿设置有问题。启动过程也值得记录。直接启动有源滤波器时电网电流在头几个周期会有一段剧烈调整那是PLL锁定和母线电压建立的暂态过程。暂态持续0.1到0.2秒属于正常现象。若暂态振荡时间超过0.5秒大概率是电压外环带宽过高或电流内环阻尼不足。4.2 FFT分析怎么简化谐波Simulink里做频谱分析我习惯用Powergui模块里的FFT工具。先选中电网电流波形设置分析窗口为2到3个基波周期基波频率设成50Hz最大频率设到1000Hz左右就能看到各次谐波柱状图。看THD数值时要注意不同标准下THD的定义有细微差别但仿真里你只要关注FFT工具显示的THD就行。补偿前整流桥负载的电流THD一般都在25%到30%补偿后如果算法正常THD应该降到5%以下。如果只能降到10%左右优先检查重复控制是否真正投入N计算是否正确相位补偿k是否合适。你还可以单独看指定次数的谐波柱状图。比如重点观察5次谐波250Hz和7次谐波350Hz它们是三相整流负载的主要特征谐波。理想情况下补偿后这两个柱子的高度应该比补偿前降低一个数量级。如果5次降下去了但7次还很高很可能是重复控制的相位补偿只对5次有效对7次已经过度超前了。4.3 动态过程和稳定裕度的观察方法有源滤波器的动态性能通常用负载阶跃来测试。在模型里设置一个定时开关让整流桥负载在0.2秒时从半载切换到满载观察电网电流的过渡过程。好的系统表现是电流会在几个毫秒内跟踪新负载谐波含量短暂增加后迅速收敛。如果过渡过程中出现明显的低频振荡波包说明PI通道相对重复控制的占比过大需要降低PI增益或者增大重复控制投入。稳态裕度很难直接看波形但有个便宜办法给电网电压叠加一点谐波扰动比如加5%的5次谐波电压观察补偿电流是否稳定收敛。重复控制对内模参数敏感电网频率偏移或者电感参数变化较大时原本调好的参数可能失去效果。如果你要模拟更真实场景可以把并网电感参数改成设计值的正负20%观察THD的变化。这个测试能帮你判断模型能不能适应实际器件参数的离散性。5. 实际调试中的高频坑与排查方法5.1 补偿后谐波反而变大这是刚搭完最容易出现的问题。补偿前THD 25%补偿后反而变成35%说明补偿电流不仅没抵消谐波反而叠加了谐波。最常见的原因是谐波检测环节相位不准或者PWM输出符号反了。先看补偿电流和指令电流的极性如果两者方向完全相反就没问题如果方向相同那就是反相加错了。排查流程我一般是这样先把补偿电流断开单独给逆变器一个已知的小幅正弦指令看输出电流是否同频同向再检查PLL角度在dq变换中使用是否一致最后检查电流互感器极性时Simulink里表现为传感器方向是否匹配。三步下来基本能定位。5.2 重复控制引发振荡如果合上重复控制后电流波形出现高频抖动或者周期性的尖峰第一反应不是把Kr调大而是调小。振荡有两种表现一种是高频噪声放大低通滤波器没起到限制作用一种是周期性振荡说明相位补偿过大k值往回退1到2拍。Q(z)的取值也很关键。Q取0.98时谐波抑制效果好但对参数变化更敏感Q取0.9时鲁棒性更好但稳态误差会大一些。调试时可以用Q作为后手先保证稳定再逐步提高Q让THD降到目标范围。5.3 采样和补偿点配合导致计算延迟Simulink里常见的“代数环”警告常常出在电流采样、指令计算和PWM比较在同一个采样步长内互相依赖。消除警告的办法是插入单位延迟但插入的位置很讲究。优先在指令信号上插延迟不要在实际电流反馈通道上插延迟因为反馈通道延迟会直接降低控制带宽。如果发现补偿电流指令总是比实际电流慢半拍可以在重复控制的补偿器里加超前环节解决。更极端的做法是用上一个周期的指令做预测补偿但模型复杂度增加我建议先用相位补偿解决不要急着上预测算法。5.4 直流侧电压控制与外环参数互相拉扯母线电压波形如果出现小幅锯齿状波动那往往是电压外环Ki过大积分项和电流内环形成了周期性互动。解决方法是把电压外环带宽降低Ki减小一半再看波动是否消失。有时候电压波动会耦合到PWM调制导致补偿电流里多出低频分量看起来像是谐波抑制变差实际上根源在直流侧。母线电压在建压阶段经常有大的超调如果超调超过50V模型里的理想开关器件还能承受但真实的功率器件就危险了。可以在启动时给电压外环一个缓启动斜坡参考或者限制电压误差输入避免积分项在启动瞬间累积太多。6. 模型扩展方向与个人经验6.1 从全频段补偿到选择性补偿这个模型的基础版本是全频段补偿即补偿除基波以外的所有谐波。但在实际工程中往往只需要补偿特定次数的谐波比如5次、7次、11次和13次。你可以把重复控制器里的内模改成选择性内模只建立目标谐波频率的记忆路径。方法是把z^(-N)替换成z^(-N/m)加多个谐振内模并联的结构。这样能降低控制器输出噪声减少对非目标频段的干扰。选择性补偿的另一个好处是更容易通过设计谐振项参数来平衡稳定性和收敛速度。每个谐振项相当于一个窄带高增益滤波器可以针对对应的谐波单独调整增益。这个扩展非常适合在Simulink里试验因为不需要改变整个控制框架只需在重复控制内模部分做子模块替换。6.2 模型扩展成LCL滤波器的注意点很多实际并网逆变器用的是LCL滤波器因为LCL在同等体积下对开关频率纹波的衰减效果更好。但LCL本身存在谐振峰直接套用这个模型会不稳定。扩展时要在电流环里加入有源阻尼常见方法是在电容电流上并联一个反馈比例项把谐振峰压下去。这个改动在控制器的输出前叠加即可其他部分不用大改。调整时注意LCL的参数谐振频率要尽量避开重复控制的补偿频段特别不能让谐振峰落在5次或7次谐波附近否则重复控制的高增益会把谐振激励出来。我在仿真里遇到过调整电容值把谐振频率移远之后模型一下就稳了。6.3 最后分享一点调试心得这套模型我前前后后调过好几版最大的体会是参数整定必须按顺序来不能同时调PI、重复控制和电压外环。每调完一个环节先停下来看波形确认这一步确实稳住了再动下一个环节。很多人喜欢一上来就把所有参数填个差不多的值然后跑仿真出问题了根本不知道是哪个环节炸的。另外保存版本很重要。每得到一组“还能用”的参数就单独存一份模型副本。重复控制参数换一个值之后可能整个波形都变了你想退回上一步结果原来的参数被覆盖了只能从头再来。这个习惯在调试任何重复控制类算法时都非常管用。最后提醒一个容易被忽略的小技巧跑完仿真后把电网电流和补偿电流同时放到一个示波器窗口对比看相位关系一目了然很多问题根本不用去抠数据就能发现蹊跷。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑