ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

APF谐波抑制仿真:PI+重复控制策略如何将THD压到3%

APF谐波抑制仿真:PI+重复控制策略如何将THD压到3% 做有源滤波器APF谐波抑制仿真时我踩得最深的一个坑就在控制器上主电路、LCL滤波器、谐波检测模块都搭完了电网电流THD却怎么都压不进5%。一开始用纯PI控制补偿后THD卡在6%到8%之间眼瞅着就差一口气就是过不去。后来把控制器升级成PI重复控制Simulink模型没有大改THD直接掉到3%出头。这篇博文把整套模型从原理、参数整定到分层搭建的过程完整复盘一遍重点讲清楚为什么PI扛不住谐波重复控制又是靠什么把谐波压下去的以及我在Simulink里具体怎么搭、参数怎么调、哪些坑必须避开。内容适合电力电子方向的研究生、刚接触APF的工程师也适合那些想复现“PI重复控制”策略但始终没跑出理想波形的人。1. 谐波问题与APF控制的核心矛盾1.1 非线性负载产生的谐波特征为什么5、7次是主角仿真里最常用的谐波源是三相不控整流桥带RL负载这也是工业现场最常见的一类非线性负载。整流桥交流侧电流不是正弦波而是接近方波或阶梯波用傅里叶展开后主要含有6k±1次谐波也就是5次、7次、11次、13次、17次、19次……其中5次和7次幅值最大理论幅值约为基波幅值的1/5和1/7。我实测过一组典型数据三相不控整流带R5Ω、L2mH负载交流侧线电感3mHTHD大概在26%到30%之间。这个底子是很差的电网供电质量基本等于不合格。如果无源滤波器要处理这种谐波需要多组单调谐滤波器并联体积大、参数固定、还可能和电网阻抗发生谐振。有源滤波器APF的好处是能动态跟踪谐波变化输出一个与负载谐波幅值相等、相位相反的补偿电流让电网电流只留下基波成分。这里要理解一个控制目标APF并联在PCC点负载电流iL 基波分量iL1 谐波分量iLh。APF输出补偿电流ic让电网电流is iL - ic ≈ iL1。所以APF内部的核心任务是精确跟踪一个反相的谐波电流指令。这个跟踪精度直接决定补偿效果。1.2 PI控制器对正弦误差的天然局限很多初学者会把APF电流环做成一个普通的PI闭环给定是检测出来的谐波指令反馈是实际补偿电流误差经过PI调节输出调制波。这样搭起来仿真能跑但THD就是压不下去。原因在于PI控制器的本质比例积分环节对直流分量有无静差跟踪能力因为积分器在s0处有一个极点可以对常数扰动提供无穷大增益。但电流指令是300Hz、600Hz这类的正弦分量PI在非零频率处的增益是有限的。你把Kp调大在300Hz处的幅值增益能提高一些但相位裕度也会跟着掉系统很快开始震荡噪声也会被放大。我用带宽法估算过电流环PI带宽设计在1kHz到2kHz之间时对300Hz谐波指令的幅值跟踪误差大约有15%到20%相位滞后也有十几度。这个误差直接反映在补偿后的电网电流上表现为THD压不下去FFT分析里5次、7次谐波残余量很明显。换个说法PI控制器的“积分清零能力”只对直流有效对周期性的正弦交流误差它做不到零稳态误差。这是积分控制律本身的结构特点决定的不是参数调得不够。1.3 重复控制解决周期性扰动的内在逻辑要解决周期性谐波的零稳态误差跟踪问题最核心的思路来自内模原理如果控制器闭环里包含了外部信号的动力学模型那么系统对该信号可以实现零稳态误差跟踪。正弦信号对应的是谐振控制器也就是PR控制一个谐振点对付一个频率但谐波有好几个频率你要挂五六个谐振器参数整定和离散化都麻烦。重复控制走的是另一条路它把“周期信号”本身当作模型。任何以基波周期重复的信号无论包含哪些次谐波都能被一个周期延迟环节生成。在离散域这个内模可以写成G_internal(z) 1 / (1 - Q(z) * z^(-N))其中N是一个基波周期内的采样点数Q(z)通常取0.95到0.98之间的常数或低通滤波器。如果Q(z)1这就是一个纯周期积分器上一周期的误差会被完整累加到本周期的修正量里对周期信号误差的增益趋于无穷大实现零稳态误差。可以这么直观理解重复控制相当于每天把“昨天的误差”加到“今天的修正量”里。如果谐波是严格周期性的那么昨天在300Hz处欠补偿了多少今天就在这个点上多补一些。循环几轮之后误差会被一点点削掉。这也是为什么重复控制对周期性谐波效果极好但对非周期性扰动反应迟钝——因为它必须等一个周期才能看到误差重复出现。2. PI重复控制的复合结构与参数整定2.1 复合控制在dq旋转坐标系下的拓扑选择搭Simulink模型之前先确定控制策略放在哪个坐标系下。三相APF的电流环有两种常见做法一种是在abc静止坐标系下直接控制另一种是在dq同步旋转坐标系下控制。我推荐用dq坐标系。原因有二第一基波正序分量在dq轴下变成直流PI控制器可以直接处理用来建立电流环的基本跟踪能力和动态响应第二5次、7次、11次、13次等谐波在dq轴下会映射为6次、12次等6的倍数次分量。也就是说所有需要抑制的谐波都统一到了300Hz、600Hz、900Hz这些频率上重复控制的周期取300Hz对应的周期基波周期的1/6就够了不需要分别针对每个谐波频率做谐振器。控制结构是典型的并联复合控制电流误差e同时送入PI支路和重复控制支路两路输出求和得到调制电压。PI支路负责快速动态响应重复控制支路负责稳态谐波抑制两者各管一段。指令电流的构造也得说清楚。APF的电流参考指令不是简单的“负载谐波取反”还需要叠加一路直流侧电压外环的输出。直流电压外环维持Vdc稳定它输出的有功电流指令用于补偿APF本身的开关损耗和电容漏电流。仿真里我一般这样构造指令i_ref i_harmonic_detected i_dc_voltage_loop_output其中i_harmonic_detected是负载电流中的谐波分量指令i_dc_voltage_loop_output是维持直流电压的有功电流修正量。两者相加后作为电流内环的参考输入。2.2 重复控制器内部三个关键环节的作用重复控制器不是简单一个延迟模块完整的重复控制支路包含三个核心环节我把它们在Simulink里的作用和取舍整理成一张表环节作用常见取值说明Q(z)内模反馈系数0.95~0.98Q1时纯积分、稳态精度最高但鲁棒性差电网频率偏移会震荡取小于1的常数是工程常用折中z^(-N)周期延迟N fs / (6*f1)在dq轴下取6倍基频对应的周期采样频率必须是300Hz的整数倍否则N不是整数C(z) Kr * z^k * S(z)补偿器Kr0.6~1.0k2~4S(z)取零相移低通用来校正控制对象幅频特性和相位滞后Q(z)这个参数最容易被忽略。很多人一开始用Q1仿真在小步长静态条件下跑着没问题但稍微改动下电网频率或者滤波器参数系统就开始发散。Q0.98之后内模极点被拉回单位圆内相当于给周期积分器加了点“遗忘因子”牺牲一点点稳态精度换取稳定性。实际仿真中0.98和1的结果差距很小但稳定性差距很大。z^k超前环节也很关键。电流环被控对象是LCL滤波器加PWM的惯性环节信号通过这些环节会有相位滞后如果重复控制的修正量和实际需要的补偿量存在较大相位偏差不仅压不住谐波还可能引入新的扰动。z^k的作用就是提前k拍输出补偿相位滞后。k一般取2到4具体多少要扫一下开环相位曲线我调试时通常先试k3看FFT结果再微调。2.3 参数整定的先后顺序与一个可行数值实例复合控制器的参数整定要有顺序不能一上来就把所有环节都挂上去否则出了震荡你都说不清是哪个环节引起的。我的调试顺序是第一步断开重复控制支路只保留PI电流环。把PI参数整到电流波形稳定、不震荡此时系统能跑但THD偏高一般在6%到8%。这一步相当于搭好一个独立的PI电流内环作为对比基准。第二步整定直流电压外环。外环带宽要比内环低很多一般取内环带宽的1/10到1/5否则内外环会互相干扰。稳定后直流电压能压在750V附近波动控制在±5V以内。第三步加入重复控制支路。先把Q设成0.98Kr设0.5S(z)设为一阶低通观察系统是否稳定再逐步加大Kr到0.8左右观察THD变化。如果波形出现非周期抖动优先降低Q其次检查z^k超前拍数。下面是一组我在15kHz采样频率下实测可用的参数三相380V/50Hz系统大家可以作为起点参考参数数值采样频率/开关频率15kHzdq轴重复控制周期点数N5015000/300电流内环PIKp2.8Ki150直流电压外环PIKp0.6Ki25重复控制Q(z)0.98常数重复控制Kr0.8相位超前拍数k3S(z)(z2z^-1)/4需要注意这组参数是针对特定LCL参数和开关频率的直接用不一定能复现同样的结果但整定方法和顺序是通用的。后面第5章我会讲为什么采样频率必须整除300Hz这直接关系到N的取值。3. Simulink模型分层搭建全流程3.1 主电路与LCL滤波器参数选择模型搭建从主电路开始。AC侧用三相380V/50Hz理想电压源串联一根线路阻抗模拟实际电网。APF在PCC点并联接入APF本体是三相VSI逆变器直流侧接一个大电容。Simulink里用Universal Bridge模块建模桥臂数选3功率器件选IGBT/Diode开关频率设置成15kHz和外部的PWM生成模块保持一致。直流侧电压选多少是一开始就要定好的。Vdc必须大于电网线电压峰值否则逆变器没有能力输出足够高的补偿电压通常取700V到800V。我仿真里用Vdc750V直流电容取2mF电容太小的话电压外环波动大谐波检测环节里容易混入直流电压纹波电容太大则动态响应慢系统建压时间会拖很长。LCL滤波器参数设计是另一个重点。LCL比单L滤波器高频衰减特性更好但多了一个谐振尖峰不加阻尼的话会在谐振频率处放大扰动。我的参数是逆变器侧电感L11.5mH滤波电容C15μF电网侧电感L20.5mH无源阻尼电阻Rd3Ω串联在电容支路。这个参数对应的谐振频率大约在1.6kHz正好落在控制带宽之外但和开关频率15kHz也有足够距离不会在PWM边带处激发出明显的谐振。3.2 谐波电流检测环节的实现细节谐波检测是APF的“眼睛”检测不准控制器再好也白搭。我用的方法基于三相瞬时无功功率理论完整链路是三相电流经abc/αβ变换Clark变换再经αβ/dq变换Park变换得到d轴和q轴电流然后用低通滤波器提取直流量再反变换回到abc域。这里的核心技巧是低通滤波器的截止频率选择。dq轴下的基波正序电流是直流量谐波是300Hz、600Hz等交流量。低通滤波器要把直流量保留下来、把谐波滤掉截止频率就不能设太高。我取80Hz到120Hz之间一阶或二阶低通都行。截止频率设太高的话300Hz分量滤不干净检测出的“基波”里混着谐波反变换后的谐波指令就不准设太低的话动态响应变慢负载突变时检测环节会拖后腿。整个过程可以用Simulink里的坐标变换模块和传递函数模块搭出来每一步都有现成模块不需要手写代码。唯一的额外输入是电网电压相位θ用PLL锁相环模块锁定A相电压相位保证dq变换的角度准确。3.3 离散化控制器落地细节控制器必须在离散域实现因为它最终要跑在数字信号处理器上。我把电流内环的PI和重复控制全部用Discrete Transfer Fcn模块搭建采样时间统一设Ts1/15000。PI环节的离散化直接用Simulink自带的离散PID模块就行但要注意积分器形式和采样时间设置。重复控制的周期内模Simulink里最容易实现的方式是用离散传递函数模块分子分母按z的降幂排列。假设N50、Q0.98内模的传递函数是H_internal(z) z^50 / (z^50 - 0.98)在Discrete Transfer Fcn模块里分子系数填[1, zeros(1,50)]分母系数填[1, zeros(1,49), -0.98]。这个写法等价于1/(1-0.98*z^(-50))但Simulink要求按z的降幂填系数所以要把分子分母的系数向量长度都补齐到51。完整重复控制支路在内模输出之后继续串联超前补偿z^k和增益Kr然后再经过S(z)零相移低通滤波器。S(z)用(z2z^-1)/4这个形式时分子系数是[0.25, 0.5, 0.25]分母是[1]实现起来非常简单却能把高频噪声压下去同时基本不引入幅值衰减。如果你想用Simulink里更接近C语言实现的写法也可以写一个MATLAB Function模块把重复控制写成带N个元素的数组循环移位function y rep_control(e, N, Q, Kr, buffer) persistent mem; if isempty(mem) mem zeros(N,1); end mem [e; mem(1:end-1)]; % 移入当前误差 y Kr * mem(end) Q * mem(end-1); end这只是一个示意实际实现里还要把相位超前和补偿器加进去。我更推荐直接用Simulink原生模块仿真速度更快也不容易写出数组越界的bug。3.4 PWM调制与模型配置的关键选项各路控制信号计算完成后输出的是d、q轴的调制电压。把它反变换到αβ坐标系再生成三相调制波然后和三角载波比较生成IGBT的开关脉冲。Simulink里我直接给Universal Bridge模块的G端接六路PWM脉冲PWM生成用Repeating Sequence模块当载波频率15kHz调制波经过比较器后输出0/1脉冲。这里有一个非常容易翻车的设置整个模型的求解器必须用定步长离散求解器步长和采样时间保持一致也就是1/15000秒。如果用默认的变步长求解器PWM比较器产生的开关脉冲会和电气模型的数值积分步长错位导致波形莫名其妙地抖动甚至出现“开关噪声”淹没了真正控制效果的情况。我刚开始做这个模型时就吃过这个亏换成定步长离散求解器后所有波形立刻干净了。模型配置里还有两个细节。一是电气部分要把“离散电源”模式选上Simulink在定步长离散求解器下才能保持一致性二是在Universal Bridge模块内部开关器件的缓冲电阻默认值很可能影响仿真结果建议把缓冲电阻调到很大比如1e6缓冲电容调到很小避免开关转换瞬间的数值冲击。4. 仿真结果解读稳态精度与动态响应的权衡4.1 纯PI控制下的补偿效果先跑一组对照组只接通PI电流内环重复控制支路断开。系统从t0开始运行逆变器经过一段建压过程后进入稳态取t0.5s后的数据做FFT分析。这组参数下负载侧THD约28%投入纯PI控制的APF后电网电流THD下降到约7.2%。从波形上看电网电流已经接近正弦但波峰附近还能看到明显的毛刺和高频小锯齿。FFT频谱里5次谐波残余约2.1A7次谐波残余约1.3A11次和13次也还有少量残余。这其实已经能过一些基本标准了但离“高品质补偿”还差得远。7.2%这个数字看着不大可对应的5次谐波电流依旧有2A左右对精密设备来说还是会有明显影响。关键是此时你再加大Kp想把残余压下去系统就开始震荡电流波形出现明显的高频振铃说明PI参数已经到稳定性边界了。4.2 投入重复控制后的补偿效果对比接通重复控制支路之后一开始波形不会立刻变化因为重复控制需要积累一个周期的误差才能开始修正。大约经过2到3个重复周期6k倍基频也就是每个周期3.33ms波形肉眼可见地变得光滑。等系统完全稳定后电网电流THD从7.2%降到了3.1%。FFT频谱的变化更直观5次谐波从2.1A降到0.35A7次谐波从1.3A降到0.22A11次和13次的残余基本可以忽略。300Hz和600Hz处的频谱分量几乎被削平这正是重复控制内模对周期信号提供高增益的直接体现。我把两组数据整理成对比表控制策略电网电流THD5次残余7次残余波形特点未补偿28.3%9.6A6.2A明显马鞍形畸变严重纯PI7.2%2.1A1.3A接近正弦波峰有毛刺PI重复控制3.1%0.35A0.22A正弦度高FFT干净需要说明的是这组数字对应的是前面给出的那套具体主电路和控制参数换一套LCL参数或开关频率THD会有出入但“纯PI卡在5%到8%叠加重复控制后降到3%到4%”这个趋势是稳定的。4.3 负载突变下的动态过程分析只看稳态THD不够APF控制策略最怕的是负载突变。我在t0.6s时把负载电阻从5Ω突降到2.5Ω模拟一个负载加重的过程。纯PI控制下的表现是负载加重瞬间电网电流立刻增大直流侧电压Vdc跌到约720V随后电压外环开始动作大约30到40ms恢复到750V附近电流波形在过渡过程中畸变稍大但整体没有明显超调。叠加重复控制后负载突变瞬间的表现和纯PI几乎一样快——这是PI支路在起作用。但注意观察FFT窗口在突变后的第一个重复周期内残余谐波反而比稳态时高一些因为重复控制器还在用旧周期的误差数据。大约经过3个重复周期后THD回落回3%左右的水平。这个现象说明了一个核心分工PI管快动态重复控制管稳态精度。两者缺一不可。如果只用重复控制负载突变后要等一整周期才能开始修正动态性能会很差如果只用PI稳态谐波压不到理想水平。复合控制把两者的优势拼在一起用一个不算复杂的叠加结构同时兼顾了动态和稳态。5. 调试中踩过的坑与工程落地建议5.1 周期延迟N不整除引发的模型发散我在第一章说过dq轴下重复控制周期取300Hz对应的周期采样频率必须能整除300。这里展开讲一下为什么。重复控制内模的实现依赖一个固定点数N的周期延迟。如果N不是整数Simulink里的离散延迟模块无法表示“延迟49.333拍”仿真要么报错要么用插值近似而插值会改变内模的谐振频率对300Hz的误差不再有理论上的无限增益甚至会在其他频率引入错误的谐振峰。早期我用10kHz采样频率做这个模型时N10000/300≈33.33怎么调参数都不行FFT里总是有几个说不清的尖峰在漂。后来把采样频率改成15kHzN变成了整数50问题立刻消失。如果硬件采样频率已经定死了且不能整除300Hz可以考虑用角度域重复控制也就是把延迟轴从采样点数改成电角度这样不管采样频率多少每个周期都对应固定的角度步数。但Simulink里实现角度域延迟要复杂很多能用整数N就先别折腾这个。5.2 谐波检测低通滤波器的相位滞后问题谐波检测环节里的低通滤波器会引入相位滞后这个滞后直接污染指令电流信号。我在3.2节提到截止频率取80到120Hz但就算取100Hz在dq轴下滤波器对直流基波的相位滞后其实是趋近于零的——问题出在另一个地方滤波器输入信号里含有直流分量和谐波分量除非滤波器在300Hz处增益极其低否则谐波泄露会通过相位关系影响反变换后的谐波指令精度。实操中遇到的现象是重复控制投入后THD能降但降到一定程度就停住了比如说3.5%左右死活进不了3%。这时候我检查了检测指令和实际补偿电流的相位差发现dq轴d、q两路的低通滤波器如果截止频率存在细微差异会引起谐波指令的相位偏转导致补偿电流和实际谐波方向不完全对齐。解决方法是确保d、q两路滤波器参数完全一致最好只写一个传递函数模块复制给两路使用。另外可以在检测环节输出端加一个超前校正增益补偿滤波器带来的等效延迟但这个操作需要先用扫频工具测出检测环路的实际滞后角不能瞎选。5.3 从仿真走向实物需要额外处理的环节最后聊两句从Simulink模型到实际控制器移植的问题。很多人以为仿真跑通了模型换到DSP或者MCU上就能直接跑实际差距不小。重复控制在C代码里的实现非常便宜本质就是一个环形缓冲区存N个历史误差样本每周期做一次乘加运算。Q(z)的乘法、Kr增益、超前拍数都是固定常数不涉及矩阵运算计算量比PI大不了多少。真正的坑在两个地方一是PWM触发时刻和采样时刻的时序对齐重复控制对误差采样点非常敏感如果采样点在PWM的“占空比更新点”附近抖动等效于给误差信号叠了一个高频噪声二是饱和限幅重复控制输出和PI输出叠加后进调制器如果合成调制波超过三角载波范围控制器会在周期内限幅而重复控制内模还在继续积分导致“积分饱和”式的超调。为此我在模型输出端加了一个饱和限幅模块限制调制波幅值并在重复控制支路里加了清空逻辑当限幅超过一定次数时把延迟缓冲区清零重新累计误差。还有一个小经验仿真里用的补偿器S(z)是理想化的零相移低通实物中开关死区、IGBT管压降会引入额外误差这些误差是周期性的重复控制能自动补偿一部分但死区时间过大时超过开关周期的2%重复控制的效果会明显下降。这时候优先做死区补偿而不是加重复控制增益去硬压否则容易振荡。总的来说PI加重复控制的组合是APF谐波抑制里性价比很高的方案模型简单参数规律清晰效果也稳。如果你仿真卡在THD压不下去先别急着怀疑主电路重点检查一下重复控制的周期延迟N是不是整数、采样频率和开关频率是否一致、谐波检测的低通滤波器有没有做好两路对称这三个点排查完大部分问题都能解决。
返回列表