做三相并网变流器带SVG的仿真,是很多搞电力电子和新能源并网的同学绕不过去的一个坎。外面很多资料讲原理一套一套的,但真正能照着把模型搭出来、跑出合理波形、写进报告里的没几个。我这次就把自己反复搭过、验证过的一套完整思路整理出来,从系统怎么拆、SVG的无功补偿怎么落到控制环、到Simulink里每个模块怎么连、参数怎么定、波形怎么看、坑在哪里,一次性讲清楚。
这套仿真的核心不只是“把逆变器跑起来”,而是在同一个直流母线、同一套变流器桥臂上,实现有功输送和无功补偿的独立控制,让设备在并网时既能送有功,又能根据负载或电网需要自动补无功,甚至抬升本地电压。它特别适合这几类人看:正在做并网逆变器或SVG课程设计的人、准备用Simulink做微电网或新能源场站无功支撑验证的人、还有刚接触瞬时无功理论、dq变换和控制环参数整定的初学者。文里所有关键参数我都会给出推导和工程取值参考,不会只丢几个不明不白的常量。
1. 项目思路拆解:为什么要把并网变流器和SVG放在一个系统里
1.1 系统的角色分配:一台变流器,两个身份
先把这个项目的定位说清楚。实际电网里,新能源电站或者一些工业负载现场,既需要变流器把直流侧的能量(光伏、储能电池)转换成交流电送入电网,又需要无功补偿装置来维持母线电压、提高功率因数。以前的做法是:并网逆变器管有功,再单装一台SVG管无功,两台设备各干各的。但这样做成本高、占地大,而且很多工况下,逆变器本身容量并没有用满,让它在送有功的同时“捎带手”补无功,是一种经济得多、集成度更高的方案。
这个仿真项目就是把这两种功能“合并”到一个三相电压源型变流器里。控制系统里有两条通道:有功通道维持直流母线电压稳定(或者按给定功率送有功),无功通道按照电网或负载需求输出容性或感性无功。也就是通过控制三相桥臂输出电流的d轴分量来管有功,q轴分量来管无功,两者解耦后互不干扰。
SVG在电网电压还算稳定的时候,主要扮演“电流源”的角色:根据需要向电网注入超前或滞后的无功电流。但当电网电压跌落时,它又可以切换到电压支撑模式,发容性无功把电压顶起来。这个双重行为在Simulink里集中体现为外环控制目标的不同配置——仿真里可以通过阶跃切换,直接把从“并网送有功+功率因数校正”切换到“系统电压支撑”的整个动态过程展示出来。
1.2 为什么选Simulink而不是手写代码或别的工具
对于这种带控制环路、要反复调参数、还要截波形写报告的场合,Simulink的优势非常明显。它搭主电路快,三相电源、IGBT桥、L滤波、负载这些都是现成库,连线就行,不用自己写微分方程求解。控制部分可以用Simulink标准模块,也可以用Matlab Function块嵌入代码,灵活性够。另外它的Scope、功率分析模块和Powergui都能直接看到电压电流瞬时波形、有功无功、THD等指标,报告最需要的“前后对比图”几乎可以直接截出来。
更重要的是,Simulink在离散仿真下的行为,和实际DSP里跑数字化控制非常接近。实际工程里控制器就是按固定采样周期工作,有延迟、有离散化误差。在Simulink里如果用PWM发生器加离散PID,仿真越贴近真实控制器的时序,后面移植到硬件时的意外就越少。这也是我做这个仿真时一开始就决定用离散求解器和离散控制器的原因,而不是图省事全用连续域。
整体框架挂在我脑子里是分三层的:第一层是主电路层,负责能量变换,包含电网、滤波电感、桥臂、直流电容和负载;第二层是检测层,负责把三相电压电流转换为d轴q轴分量,并提供准确的电网相位;第三层是控制层,包含直流电压环、无功环、电流内环和PWM调制。后面的所有内容都是围绕这三层展开的。
2. 核心原理和参数推导:从数学公式到仿真模块映射
2.1 dq变换是绕不开的起点:为什么要在旋转坐标系里控
三相系统里,电压电流都是50Hz的交流量,如果直接拿瞬时值做闭环控制,误差大、带宽低,而且有功无功纠缠在一起。工程上最通用的做法是Clark变换加Park变换,把静止abc坐标系的交流量转换到跟电网电压同步旋转的dq坐标系里。
我推荐一个大家更容易接受的解释方式:想象你坐在一辆和正弦波同步旋转的“旋转木马”上,本来在地面上看是交变的量,在木马上看就变成了静止的直流量。变成直流以后,就能用普通的PI控制器做到无静差跟踪。这才是整个SVG和并网控制能成立的数学基础。
具体来说,三相电网电压和变流器输出电流经过坐标变换之后,d轴分量和q轴分量分别对应有功和无功(前提是d轴定向于电网电压矢量上)。这句话是所有并网变流器调试的命门——一旦锁相环给出的角度偏了,d轴和q轴分量就会“串味”,本来补无功的q轴指令会拽动有功,整个系统就乱了。
在Simulink里,我习惯用标准的abc_to_dq0变换模块,旋转角度θ来自PLL。仿真里可以故意给PLL加一个初始偏移角,比如人为加0.1rad,观察有功和无功的耦合现象,这是理解dq解耦最好的实验,强烈建议尝试一下。
2.2 锁相环PLL:全系统的“定海神针”
SVG和并网变流器要正常工作,第一前提是准确知道当前电网电压的相位。Simulink的PLL模块用的是同步参考坐标系锁相环(SRF-PLL),它的核心就是把三相电压变换到dq系后,让q轴电压分量的误差趋于零,从而锁定d轴与电网电压矢量重合。
仿真里PLL的参数和电网频率扰动、三相不平衡直接相关。我用Simulink自带的PLL模块时,通常把PI参数设置成:自然频率大概在20到40Hz,阻尼比取0.707。这个设置能兼顾锁相速度和抗扰性。如果你用的是自己搭的PLL,结构上就是:三相电压→Park变换→q轴电压经过PI→得到角频率偏移→积分得到θ→反馈回Park变换。把PI带宽调到50Hz左右,输出角度就能稳定跟踪。
有个仿真里容易出问题的细节:PLL在仿真启动瞬间容易产生较大的相位超调,尤其是初始电网电压和PLL的θ初值差得远的时候。解决办法很简单,把PLL的θ初始值设置成与电网A相电压过零点一致,或者在PLL输出后再加一个一阶低通滤波。这个小动作能让整个系统起振时间缩短将近一半。
2.3 双闭环控制:外环管“目标”,内环管“执行”
控制器的整体结构是典型的双闭环:电压/无功外环,电流内环。外环的输入是直流母线电压参考值和无功参考值,输出是电流内环的d轴和q轴指令。内环直接控制变流器输出电流,输出是调制波,最后进PWM发生器。
并网变流器在送有功时,有功电流指令恒定的情况也存在,但带SVG功能时,通常采用电压外环控制直流母线。直流母线电容上的能量平衡决定母线电压:变流器送入电网有功越多,电容放电越快,电压掉得越多。电压外环检测母线电压偏差,输出有功电流指令,再经过电流内环调节桥臂,维持电容上的能量平衡,这样系统在负载突变时也不会出现母线电压大幅崩溃。
无功环路相对简单一点,直接比较无功参考值和瞬时无功值,误差进PI,输出无功电流指令iqref。瞬时无功的计算在dq坐标下就是1.5*(uqid – udiq)的简化形式,通常针对电网电压定向,进一步简化为-1.5udiq,符号按吸收或发出定义。这个计算在Simulink里用几个增益和乘法器就能实现,或者直接用功率测量模块。
电流内环要做得稳,关键是处理好d轴和q轴之间的交叉耦合。数学上,变流器输出电感的微分方程里,d轴电流变化会受到q轴电流和电感的乘积项影响,反之亦然。如果不管这个耦合,动态响应时有功和无功会互相拉扯。工程上最简单有效的办法是加前馈解耦:在d轴调制波里加一项负的ωLiq,在q轴调制波里加一项正的ωLid。这个解耦项在仿真里加不加差别很大,加了之后阶跃响应的稳定时间能从100ms缩短到40ms左右。
2.4 关键参数计算:直流母线、连接电感和开关频率怎么定
这部分直接决定仿真能不能开出正常波形。先说直流母线电压。对于三相380V交流系统,线电压峰值是380*√2约537V,直流母线电压至少要高于这个值,而且还要留出调制度余量。工程上一般取650V-750V,仿真里我取700V。如果直流电压太低,变流器输出根本拉不起所需电压,电流环就会饱和,波形直接切顶。
连接电感的取值有个工程经验范围:感值太大,电流纹波小,但无功补偿的动态响应慢、压降大;感值太小,纹波大,谐波高,还容易和电网阻抗发生谐振。我常用的快速估算方法,是从允许电流纹波角度入手:纹波电流峰值按额定电流的15%到20%算,公式是L≈Udc/(8fswΔI)。比如Udc=700V,开关频率fsw=10kHz,额定电流50A,纹波按20%即10A,算出来L≈0.875mH。再考虑滤波和动态性,最终取0.8mH左右就足够。如果还要兼顾SVG大无功输出时的电流跟踪能力,下限建议不低于0.3mH。
开关频率选择是个权衡。10kHz在实际系统里是主流选择,开关损耗和音频噪声都能接受。在仿真里,开关频率太高会导致仿真速度很慢,太低谐波太大看不出效果。我建议入门阶段先用5kHz跑通整体逻辑,等控制都验证完了再升到10kHz做最终波形,这样能节省大量调试时间。
PI参数的确定,我一般用带宽法和试凑结合。电流内环的带宽取开关频率的1/10到1/5,比如10kHz开关频率,电流环带宽取500到1000Hz。根据电感L和等效电阻R,比例系数Kp约等于L带宽,Ki约等于R带宽,再微调。直流电压外环带宽取电流内环的1/5左右,通常是20到50Hz。无功环的响应速度可以参考电压外环,但要稍微快一点,因为SVG动态补偿要求响应在10ms量级。具体的参数我会在后面的建模实操里再给一组实测过比较稳的值。
3. Simulink建模实操:从主电路搭到闭环控制的完整落地
3.1 第一步:主电路搭建,用Universal Bridge还是IGBT Bridge
打开Simulink,新建一个模型,先把Simscape/SimPowerSystem里的元件拖出来。三相电网直接用Three-Phase Source,电压设为380V(line-line),频率50Hz。电源内部参数里,我习惯把短路容量设得大一点,比如短路比10左右,这样电网阻抗很小,仿真里电网更接近理想电压源,SVG的效果看得更清楚。
滤波电感用Three-Phase Series RLC Branch,R设成0.1Ω(用于阻尼和模拟线损),L设成0.8mH。桥臂部分,Simulink里既可以用Universal Bridge,设置成IGBT/Diodes,也可以用离散的IGBT模块自己搭。我用Universal Bridge,里面选“IGBT/Diodes”,这种设置最接近实际逆变器的开关特性。直流侧用电容模块,容量C选的依据是满足母线电压动态要求,经验值是每kW大约1000μF到2000μF。仿真里直流母线电压700V、功率10kW,我取2200μF,充放电动态看起来比较真实。
负载部分用一个三相并联RLC负载,为了模拟需要补偿的场景,接入一个RL负载,让它既消耗有功又消耗感性无功。也可以用一个三相Breaker做投切,方便后面看动态响应。
3.2 第二步:PLL与坐标变换检测模块
从三相电网电压引出测量信号,接到PLL模块的输入。PLL输出包含角度wt和同步频率,用这个角度同时驱动电压和电流的dq变换模块。这里有个关键:电压电流的dq变换必须用同一个角度,不能各用各的,否则相位基准不一致,算出来的有功无功就是错的。
电流检测模块的输出是id和iq。要看补偿前后波形,还需要把电网电流、变流器电流分别引出来。为了计算SVG需要补偿多少无功,方法有好几种,最简单实用的就是瞬时无功理论:在电网电压定向dq坐标下,负载电流的q轴分量就是无功电流。但更准确的工程做法是:计算负载消耗的无功功率,然后把与它相反符号的无功指令作为SVG的参考值。在Simulink里,用功率测量模块直接测负载有功P和无功Q,把Q取反限幅后作为无功环参考值,这样逻辑最清晰,报告里也最好解释。
3.3 第三步:双闭环控制器与SVG指令生成
控制器我分成四个子模块来搭:外环、解耦、内环、PWM。
外环:直流电压参考值Vdc_ref(700V)与实测Vdc作差,进PI调节器(Kp=5,Ki=100左右),输出id_ref,同时做限幅处理,比如限制在±1.5倍额定电流范围内。无功外环:无功参考值Qref(比如-10kVar,表示发出感性无功)与实测无功作差,进PI(Kp=0.02,Ki=1左右),输出iq_ref,同样限幅。这里Kp比较小的原因是无功功率和iq之间有一个电压标幺化的比例关系,直接看单位调试容易迷惑,通过仿真慢慢微调。
解耦与内环:实测id和iq分别与ref作差,进两个PI(电流环Kp=20,Ki=2000),输出u’d和u’q,然后加上前馈解耦项。调制电压:
ud_mod = ud_pi - w * L * iq + ud_dq uq_mod = uq_pi + w * L * id + uq_dq其中w是电网角频率314rad/s,L=8e-4H。这里的ud_dq和uq_dq是电网电压在dq系下的前馈,加上它能让电流环输出直接跟踪电网电压,减小稳态误差。
PWM部分:如果调制成SPWM,把ud_mod和uq_mod逆变换成三相调制波,与10kHz三角载波比较,得到六路开关信号送进桥臂。如果调制成SVPWM就略微复杂,需要扇区判断和矢量作用时间计算,但谐波性能更优。我建议刚开始不要一上来就做SVPWM,先用SPWM把控制回路调通,再换成SVPWM做谐波对比。两种方式在这个仿真里都能稳定运行,SVPWM的直流电压利用率比SPWM高约15%,如果后续要接更高效率验证,值得切换。
3.4 第四步:求解器、步长和Powergui设置
这一步很多人忽视,但它决定了波形是平滑还是毛刺满天飞。打开Powergui,选择“Discrete”仿真类型,采样时间设为1e-5秒(对应10kHz开关频率的每个开关周期采样100次)。如果步长设太大,比如1e-4秒,PWM产生的开关纹波会被严重混叠,出来的正弦波全是锯齿。
求解器在Simulink设置里选“ode23tb”或者“discrete”(如果是纯离散模型),相对容差调高精度到1e-4。仿真时间一般设0.5到1秒就够,因为动态过程在0.3秒内基本稳定。为了采集稳态波形,可以把波形数据存到Base Workspace,用FFT分析工具分析电压电流谐波。
我习惯在投切负载这个时间点上做两段仿真对比:前0到0.2秒是纯逆变器并网不带补偿的状态,0.2秒时切入负载、同时启动SVG无功补偿,或者反过来用断路器模拟负载无功阶跃。这样一个仿真里就能完整看到补偿前、补偿后暂态到稳态的全过程,报告写起来非常有说服力。
4. 仿真结果分析:看哪些波形、怎么证明SVG起了作用
4.1 补偿前后的相位对比:最直观的验证方式
把电网A相电压和电网侧A相电流放到同一个示波器里看。补偿前的波形,电流要么超前要么滞后电压,功率因数明显小于1;启动SVG补偿后,电流和电压相位逐步对齐,功率因数接近1。这段话是判断SVG是否生效的第一感官证据。为了量化,再放一个功率因数测量模块,补偿前PF可能是0.72落后,补偿后PF提升到0.99以上。
相位对齐的机理,就是SVG在负载旁并联了一个可控的无功源,它发出的无功抵消了负载吸收的无功,让电网侧看不到额外的无功流动。仿真里可以看到SVG输出电流恰好是一个近似正弦、与电压相位相差90度的电流波形——这就是典型的无功电流特征。
4.2 动态响应:负载阶跃时系统怎么恢复
在0.2秒时通过断路器投入一个1kW、5kVar的RL负载,观察这些波形:直流母线电压Vdc、电网侧有功功率P、无功功率Q、SVG输出无功。投入瞬间,负载突然从电网吸收5kVar无功,母线电压会出现一个小凹陷(大概跌落10-20V),无功功率曲线会跳变到5kVar附近,然后SVG检测到无功变化,在几个毫秒内增加自己的无功输出,把电网侧无功重新拉回接近零。整个恢复时间在50ms以内算正常。
直流母线电压的恢复过程也值得单独展示:有功负载阶跃时,母线电压先下降,电压外环增加有功电流id,母线电压再回升到700V。这个暂态过程的阻尼比就由电压外环PI参数决定。如果发现母线电压振荡好几个周期才稳定,多半是电压环带宽设太高了,把Kp调小一点、Ki调大一点再来。
4.3 谐波与THD对比:证明补偿不只调了相位,还净化了波形
用FFT分析工具对补偿前后电网电流做谐波分析。补偿前电流THD可能在8%到10%左右(取决于负载和电感参数),补偿后如果控制策略得当,THD能压到3%以下。注意,这个改善不是SVG直接滤波的结果,而是SVG的快速电流环让变流器主动输出补偿电流,抵消了负载产生的谐波和无功分量。
在报告里,我建议给出这样一张表:
| 指标 | 补偿前 | 补偿后 | 变化 |
|---|---|---|---|
| 功率因数 | 0.75(滞后) | 0.99(滞后) | +0.24 |
| 电网电流THD | 9.8% | 3.1% | -6.7% |
| 电网侧无功功率 | +4.8kVar | +0.2kVar | 基本抵消 |
| 直流母线电压波动 | ±18V | ±9V | 显著改善 |
这张表能非常明确地说清楚SVG在这个系统里贡献了什么,也是整个仿真项目结论的核心支撑。做仿真报告时,这类数据比任何文字描述都更有说服力。
4.4 扩展场景:电压跌落时SVG的电压支撑功能
如果想进一步加分,可以在模型里加一个三相电压跌落发生器,比如在0.3秒时把电网电压跌落到额定值的80%,持续0.2秒再恢复。SVG检测到电压跌落后,无功参考值自动切换到大容性输出模式,向系统注入容性无功电流,把公共连接点电压抬高。你会看到,在SVG投入的情况下,电压跌落幅度比不投SVG时减小了3到5个百分点。这个仿真场景对应了工程里SVG最实际的应用之一:电压支撑。
电压跌落的检测,可以通过比较电压幅值和额定值的偏差来实现,偏差超过死区就触发电容性无功优先。死区设为±5%,输出无功电流上限要限幅,防止过流。
5. 常见问题与排查技巧实录
5.1 问题速查表:按症状直接对照
| 现象 | 可能原因 | 排查思路和解决手段 |
|---|---|---|
| 仿真开始阶段波形振荡剧烈 | PLL初始相位不对或锁相速度过慢 | 检查PLL初始角度设置,增加阻尼比,限制PLL带宽,初始几个周期忽略不看 |
| 电流波形切顶或畸变严重 | 直流母线电压设置过低,或调制波超过载波幅值 | 提高Vdc到700V以上,或降低调制深度,检查PI输出限幅是否合理 |
| id和iq互相牵制,有功一变无功就跳 | 缺少dq解耦前馈项 | 在调制波里补上±ωLiq和±ωLid的前馈,再观察动态 |
| SVG补偿后功率因数还在0.9以下 | 无功检测环节有延迟,或无功环PI输出到不了位 | 检查无功功率测量是否有滤波延迟,提高无功环带宽,加大Ki |
| 电流纹波特别大、谐波超标 | PWM载波频率低或采样步长太大 | 提高载波频率,把Powergui采样时间降到1e-6到1e-5量级 |
| 断开负载瞬间母线电压过冲 | 电压环PI参数太激进,或限幅动作太慢 | 降低电压环Kp,增加Ki,或者给Vdc参考值加斜坡 |
5.2 几个隐蔽的坑:采样、离散化、限幅方向
先说第一个坑:Simulink的连续模块和离散模块混用。如果控制回路里有的环节是连续PI、有的是离散PWM,仿真时会发生奇怪的次同步振荡。我踩过坑之后,现在一律把控制器全部放在离散域:用离散PI控制器,采样时间统一为1e-4秒或更小,PWM模块用自己的离散载体。这样仿真行为和实际数字控制的时序就非常接近,后期换到嵌入式平台时几乎不需要改结构。
第二个坑是限幅的方向和位置。无功环输出iq_ref要限幅,电流环输出ud_mod和uq_mod也要限幅,而且限幅的上下限要对称。很多人只限幅了外环,忘了内环输出限幅,导致调制波在某个极端工况下爆发出巨大尖峰。内环限幅一般按直流母线电压的一半来限制,比如Vdc=700V时,调制波幅值上限给350V左右。这个限制要放在前馈解耦项之后还是之前?我的做法是先做完解耦计算,再统一限幅,避免解耦项突破限幅边界。
第三个坑是测量信号的滤波延迟。无功功率测量模块里如果用了低通滤波器,会有几个毫秒的延迟,这个延迟会让补偿效果在负载快速突变时跟不上。更合理的做法是:检测不滤或少滤,控制环路的带宽足够高才能保证动态补偿速度。如果实在要滤,滤波器截止频率要远高于无功环带宽,同时把滤波带来的相位延迟考虑进PI参数里。
第四个坑是关于SVG启动瞬间冲击电流的。直接给无功参考值阶跃,会让变流器电流瞬间冲得很高。实际SVG设备都是通过预充电阻限流启动,仿真里可以用一个限幅斜坡发生器,让无功参考值在5到20ms内从零线性升到目标值。这样既符合工程实际,又避免了仿真初期因为冲击电流导致局部过压发散。
5.3 调参的习惯顺序:先开环,后闭环;先电流环,再外环
我每次搭新模型,无论多急,都坚持这个调参顺序:先断开SVG无功环和电压环,给一个固定的id_ref和iq_ref,只跑电流内环,确认电流环能稳定跟踪阶跃指令。这个阶段能看到电流波形跟着参考值平滑变化,没有发散的迹象。然后把电流环PI参数固定下来,再单独投电压外环,观察Vdc能否稳定在700V;最后再投无功环。用这个方法,即使最终参数还需要微调,也能快速定位是哪一环出了问题,而不是面对一团乱麻无从下手。
调试过程中的另一个好习惯是把关键变量用To Workspace模块记录,然后统一在Matlab脚本里画图。这样你可以自由控制时间轴范围,比如只看某个稳定后的窗口,而不必一直盯着Scope重跑仿真。脚本里还可以批量跑不同Kp、Ki参数组合,做简单的网格寻优,找到一组让THD和动态响应都满足要求的参数,整个过程比手调快很多倍。
6. 延伸玩法:这个仿真模型还能怎么扩展
我的体会是,SVG和并网变流器的仿真模型一旦搭通,就是一个可复用的核心资产,往里加新功能非常方便。后期我在这个模型基础上做过几个扩展,效果都不错,简单说几个方向。
第一个是把固定负载改成功率波动源,模拟光伏电站输出功率随机波动的场景,然后看SVG如何实时补偿波动带来的无功变化。这种工况下,仿真重点变成判断补偿策略的跟踪速度和过冲控制。
第二个是把电网模型升级成带一定短路容量的弱电网,加入背景谐波和三相不平衡,再验证PLL和SVG在非理想电网下的表现。三相不平衡时,负序分量会让普通PLL输出出现100Hz的脉动,这时候就需要加入正负序分离或者用双同步坐标系PLL。这部分内容讲起来又是另一个专题,但对你理解实际电网的复杂程度特别有帮助。
第三个是把SVG和多个分布式电源并联,做一个小型微电网系统,让SVG和储能逆变器协同工作,一个负责电压支撑,一个负责功率平衡。你可以观察它们之间的功率分配和环流问题,这基本上是业内做微电网能量管理时躲不开的仿真练习。
个人的实际心得是:仿真里遇到的问题,绝大多数和真实系统里遇到的问题是一致的——PLL相位不准、控制环带宽分配不合理、限幅饱和、离散化延迟,只是仿真里你能更快看清问题根源而已。所以这套模型搭好之后,不要急着删,多在上面做几个实验,把“为什么这样设计”想透,远比得到几个漂亮波形值钱得多。