做电力电子仿真的人,十有八九都调过有源滤波器的模型。最近我又在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轴一个PI,q轴一个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.1,Ki设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与THD
4.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、重复控制和电压外环。每调完一个环节,先停下来看波形,确认这一步确实稳住了,再动下一个环节。很多人喜欢一上来就把所有参数填个差不多的值,然后跑仿真,出问题了根本不知道是哪个环节炸的。
另外,保存版本很重要。每得到一组“还能用”的参数,就单独存一份模型副本。重复控制参数换一个值之后,可能整个波形都变了,你想退回上一步,结果原来的参数被覆盖了,只能从头再来。这个习惯在调试任何重复控制类算法时都非常管用。最后提醒一个容易被忽略的小技巧:跑完仿真后,把电网电流和补偿电流同时放到一个示波器窗口对比看,相位关系一目了然,很多问题根本不用去抠数据就能发现蹊跷。