做光伏储能并网仿真的人很多,但网上铺天盖地的教程基本都是三相逆变器(DC/AC),很少有人专门讲前端这一级——也就是把电网交流电变成直流电的三相PWM整流器。储能要充电、光伏系统要从电网取电维持启动、直流母线要建立电压,全都离不开这一级。我最早也是顺着逆变器的思路去理解整流,结果发现完全是另一套逻辑:功率要双向流动、母线要稳得住、相位要对得准,任何一个环节没想明白,模型跑起来就是报错或者发散。
这篇文章我会按自己做项目的完整流程,把“基于Simulink的光伏/储能前端三相PWM整流并网控制”这件事从头到尾拆开讲。从主电路建模、PLL锁相、电压外环电流内环双闭环、SVPWM生成,到光伏MPPT和储能端Buck/Boost的接口配合,再附上我实测踩过的坑。适合三类人看:正在做毕业论文或课程设计的电气专业学生、做储能PCS或者充电桩前端变换器的硬件/控制工程师、以及刚接触Simulink电力电子仿真、被各种报错卡住的新手。目标只有一个:让你看完能直接动手搭,而且清楚每一步为什么要这么做。
1. 项目拆解:光伏/储能前端为什么非要用三相PWM整流
1.1 前端整流器在系统中的位置
先把这个系统的拓扑结构描述清楚:电网三相交流电进入前端变换器,变换器直流侧接一条直流母线,母线上并联光伏Boost电路、储能双向Buck/Boost电路,以及后级负载或逆变器。储能系统充电时,前端变换器工作在整流状态,把电网交流电变成直流电给电池充电;放电时,前端变换器工作在逆变状态,把电池的能量送回电网。所以这个前端本质上是一个双向PWM变换器,整流只是它的一个工作象限。
很多教程把“整流”和“逆变”分开讲,但在储能PCS(Power Conversion System)里它们是同一个硬件,只是功率流向不同。光伏侧虽然主要靠Boost升压后并网,但在夜间、阴雨天或者启动阶段,光伏无法提供能量,直流母线必须由前端整流器从电网取电建立。换句话说,只要系统里有储能,或者光伏需要黑启动,三相PWM整流就是绕不开的一环。
1.2 三种整流方案对比:为什么是PWM整流器胜出
前端整流有几种传统方案,我先做个对比,你就明白为什么标题里专门强调“三相PWM整流”。
| 方案 | 谐波特性 | 功率因数 | 能量双向 | 动态响应 | 成本与复杂度 |
|---|---|---|---|---|---|
| 二极管不可控整流 | 谐波大,需大L/C滤波 | 低,约0.8左右 | 不支持 | 慢 | 低,简单 |
| 晶闸管相控整流 | 谐波大,低次谐波明显 | 可控但偏低 | 不支持(有源逆变可,但复杂) | 慢 | 中 |
| 三相PWM整流 | 谐波小,THD可做到5%以内 | 可调,接近1 | 完全支持 | 快,毫秒级响应 | 高,需要控制算法 |
我最早做样机时用过二极管整流加PFC后级,结果充电桩和储能并网测试时谐波超标好几次。换了PWM整流之后,功率因数可以稳定调到0.99以上,电流波形也干净。Simulink仿真里同样是这个结论:不可控整流方案简单,但你想验证储能双向充放电,或者验证并网电能质量,绕不开PWM整流。
1.3 标题背后的三个典型应用场景
这个标题不是凭空造出来的,实际对应三类需求。
第一类是光伏系统辅助电源。大型光伏电站逆变器启动需要外部电源建立直流母线,或者夜间辅助变压器要从电网上取电给控制系统供电,这时前端整流器负责把交流变成稳定的直流,给后级提供电压支撑。
第二类是储能PCS的充电侧。储能电池充电时,PCS前端就是整流模式;放电时切换成逆变模式。储能系统的并网控制策略、充放电切换逻辑、低电压穿越支持,都建立在前端PWM整流器正确工作的基础上。
第三类是园区微网和充电桩。光储充一体化充电站里,光伏发电、储能充电、充电桩取电共用一条直流母线,前端整流器负责在光伏不足时从电网补充能量。这种场景下三相PWM整流不仅是能量入口,还承担了母线电压稳定、功率调度的职责。
2. Simulink主电路建模:先把硬件底盘搭对
2.1 整流桥器件模型怎么选
Simulink里电力电子建模的主流工具是Simscape Electrical,里面最常用的整流桥模块是Universal Bridge和Three-Phase Bridge。我的习惯是直接用Universal Bridge,它支持两电平、三电平、不同器件类型(IGBT/二极管/MOSFET)的自由组合,一个模块覆盖整流和逆变两种模式,省得后面切换工作模式时还要换模型。
器件建模有两条路线,你必须先分清楚。
一条是详细开关模型。IGBT带反并联二极管,由驱动脉冲控制通断,能真实反映开关过程、纹波和死区影响。做SVPWM算法验证、看电流谐波、分析开关损耗时要用这个。缺点是仿真速度慢,步长要设得很小,模型跑起来像蜗牛。
另一条是平均模型(Average Model)。它不考虑开关过程,直接把变换器等效成一个受控电压源或电流源,仿真速度飞快,适合先验证控制策略和PI参数。我建议初学阶段先用平均模型把双闭环跑通,不要一上来就上详细开关模型。我就是吃过这个亏,一开始全用IGBT开关模型,调一次参数要等十几分钟,后来先把控制逻辑在平均模型上调通,再切回详细模型验证,效率高很多。
2.2 电网、滤波电感和直流母线电容参数怎么定
电网侧用Three-Phase Programmable Voltage Source模块,设置线电压有效值380V、频率50Hz、三相相位依次相差120度。内阻按工程惯例设0.01Ω左右,太小容易仿真振荡,太大电压跌落明显。
滤波电感是整流器能不能正常工作的关键参数。电感太小,电流纹波大,谐波超标;电感太大,动态响应慢,电感压降也大,直流母线带载能力下降。工程上常用电流纹波限制来选,经验公式是L ≥ (Vdc - √3·Vm) / (2·ΔI·fsw) 左右,其中Vm是相电压峰值,fsw是开关频率。对380V电网、开关频率10kHz、输出功率10kW的系统,电感取1mH到3mH之间比较合理。我做仿真时习惯从2mH起步,看电流波形再微调。
直流母线电容的作用是稳定母线电压、缓冲功率波动。容量太小,母线电压纹波大;容量太大,充电时间变长,动态响应迟钝。粗略按功率等级估算,每千瓦取500uF到2000uF。10kW系统我常用4700uF,仿真里先用这个值跑,后面调电压环PI时再根据超调量修正。实际硬件设计还要通过电压纹波和掉电维持时间反推电容容量,但仿真阶段按这个经验值起步完全够用。
2.3 求解器、步长与powergui设置
这是新手最容易忽略的地方。很多人在Simulink里跑电力电子模型,一跑就崩,或者波形离谱,问题往往不在电路,而在仿真求解器设置。
Simscape Electrical模型里必须放一个powergui模块,相当于整个电力电子模型的“管理器”。在powergui里要选择仿真类型:连续(Continuous)还是离散(Discrete)。只要涉及PWM开关,我都建议用离散仿真,并设置一个合理的采样时间。详细开关模型采样时间通常取1e-6秒,也就是1微秒;平均模型可以放宽到1e-5秒,跑得明显更快。
求解器方面,连续仿真用ode23tb或ode15s这类刚性求解器,适合电力电子这种开关变化剧烈的系统;离散仿真一般用ode4或ode5即可。关键点是最大步长(Max step size)必须小于PWM载波周期。比如载波10kHz,一个周期是1e-4秒,最大步长至少要设到1e-5秒,否则开关时刻对不上,波形完全不对。我见过太多人卡在波形异常上,最后发现就是最大步长太大。
3. 控制算法落地:锁相、双闭环与SVPWM
3.1 PLL锁相环:让坐标系跟上电网
三相PWM整流控制的基础是坐标变换,而坐标变换的前提是知道电网电压矢量的实时角度。这个角度就是PLL的输出。
我用的是同步旋转坐标系锁相环(SRF-PLL),原理不复杂:把三相电压变换到dq坐标系,正常锁相时q轴分量为0,所以用一个PI控制器把q轴分量调到0,PI的输出就是电网频率的补偿,叠加在基准频率上再积分,就得到实时角度。
Simulink里有现成的PLL(Three-Phase)模块,可以直接用。如果你想深入理解内部结构,也可以自己搭:三相电压→abc/dq变换→q轴进PI→加2π·50基准→积分→角度。PI参数按工程经验,Kp取180到200,Ki取1500到2000,锁存时间大约一个工频周期左右就够了。电网畸变严重时可以再加一个前置滤波或平均值滤波器,但正常仿真环境下先不用折腾。
3.2 电压外环与电流内环PI参数整定
三相PWM整流并网控制的标准结构是电压外环加电流内环。电流内环负责把dq轴电流快速跟踪到给定值,电压外环负责稳住直流母线电压。两个环一快一慢,内环响应快,外环响应慢,这个原则必须守住,否则系统会振荡。
电流内环的PI参数和被控对象直接相关。被控对象是滤波电感加等效串联电阻,传递函数近似一阶惯性加纯延时。工程简化整定方法是:Kp按电感值和PWM增益比例来取,Ki按电感电阻比来取。对380V电网、2mH电感、10kW系统,电流环Kp取10到20,Ki取500到1500是合理的起步范围。判断标准是dq轴电流跟随速度快、没有明显超调。
电压外环的带宽要比电流内环低一个数量级。Kp_v取0.5到2,Ki_v取20到100比较常见。外环输出就是电流内环的d轴电流给定,比如电压外环检测到母线电压低了,就会增大d轴电流给定,让整流器多从电网取电。注意这里的符号方向:整流模式下d轴电流为负表示从电网吸收功率,不同教材定义不一样,你必须在模型里统一好参考方向,不然无论怎么调PI都稳不住。
3.3 SVPWM生成的两种实现方式
SVPWM(空间矢量脉宽调制)是三相PWM整流器主流的调制算法,对比SPWM,它的直流电压利用率高约15%,谐波特性更好。在Simulink里有两条实现路线。
第一条是用现成模块。Simscape Electrical里带SVPWM Generator(Two-Level)模块,给定参考电压矢量的dq分量、直流母线电压、载波频率,它直接输出六路PWM脉冲。优点是省事,参数设置界面直观,适合快速验证。缺点是灵活性差,你不太好往里面添加死区补偿、中点电位控制这类高级功能。
第二条是自己搭。SVPWM的算法流程是:先把参考电压矢量变换到αβ坐标系,然后根据角度和幅值判断它落在哪个扇区,再计算相邻矢量作用时间T1、T2,最后用三角载波比较生成PWM。这部分逻辑在Simulink里大概需要十几个模块,我用MATLAB Function封装过,也用过S-Function,本质上都是一个东西。自己搭虽然费点事,但你能彻底搞懂调制原理,而且后续做三电平、做中点平衡都能复用。
我个人的建议是:第一版模型先用现成SVPWM模块把闭环跑通,然后再把自定义SVPWM替换进去对比波形,两个都动过一次手,你才算真正会了。
3.4 光伏MPPT与储能双向DC/DC的接口设计
这个标题下不只是整流器,还牵扯光伏和储能,所以我必须把接口关系讲明白。前端整流器负责稳定直流母线电压,光伏和储能则通过各自的DC/DC变换器挂在母线上削峰填谷。
光伏侧用Simscape Electrical的PV Array模块,参数按照实际组件设置:开路电压、短路电流、串联/并联数量。控制用MPPT(最大功率点跟踪),工程上最常用的是扰动观察法(P&O),它的输出是Boost电路的占空比或者光伏电流给定。Simulink里可以自己写P&O算法,也可以直接用Boost Converter模块搭光伏升压电路。
储能侧是双向Buck/Boost。充电时Buck模式把母线电压降压给电池充电,放电时Boost模式把电池电压升压送回母线。控制上可以做成双闭环:外环根据SOC或功率需求给出电流给定,内环控制电池充放电电流。Simulink里有Battery模块,需要设置额定电压、容量、初始SOC。电池模型要注意初始SOC不要从0开始,否则内阻和端电压波动很大,容易引起仿真发散。
4. 从零搭建完整模型:实操全流程
4.1 模型整体结构与模块清单
先列一个完整的模块清单,你在搭之前把所有需要的元素从库浏览器里拖过来,心里有个底。我做这个系统时模型分成四个子系统:主电路、测量与坐标变换、控制器、脉冲生成。
| 功能 | 推荐模块 | 关键设置 |
|---|---|---|
| 电网 | Three-Phase Programmable Voltage Source | 线电压380V,50Hz |
| 整流桥 | Universal Bridge | IGBT/Diode,两电平 |
| 滤波电感 | Three-Phase Series RLC Branch | 2mH,0.1Ω |
| 直流母线 | Capacitor / Series RLC Branch | 4700uF |
| 光伏 | PV Array + Boost Converter | 按组件参数设置 |
| 储能 | Battery + 双向Buck/Boost | 额定电压/容量/SOC |
| 锁相 | PLL (Three-Phase) | 输出角度theta |
| 坐标变换 | abc_to_dq0 Transformation | 输入theta |
| 控制器 | PI Controller (2DOF) | 内环快,外环慢 |
| 调制 | SVPWM Generator (Two-Level) | 载波10kHz |
| 测量 | Three-Phase V-I Measurement | 输出Simulink信号 |
4.2 主电路搭建步骤
打开Simulink,新建空白模型,先放powergui模块并设为离散仿真,采样时间选1e-6秒。这一步别偷懒,后面所有模块的信号类型和步长都由它决定。
搭电网到整流器这一段:Three-Phase Programmable Voltage Source出线接Three-Phase V-I Measurement,再串三根线到滤波电感(Three-Phase Series RLC Branch,电感2mH,电阻0.1Ω),电感输出端接Universal Bridge的交流侧。Universal Bridge参数里选IGBT/Diode,A、B、C三个交流端子对应三相进线,直流正负极端子接母线电容。
直流母线电容正负极跨接在Universal Bridge直流侧,电容旁边并联一个直流电压测量模块。母线电压的采样点必须放在电容两端,这是电压外环的反馈信号。再往下就是直流侧负载或储能/光伏接口,可以用一个可调的直流电流源模拟后级负载,也可以接我前面说的Buck/Boost加电池。
连接时注意Simscape物理信号的端口颜色是深蓝色,Simulink常规信号是黑色或蓝色单线。物理信号必须通过PS-Simulink Converter转成常规信号才能进控制器,测量模块用的就是这种转换。新手最容易混淆这两种信号线,连不上或者报类型错误基本都是这个原因。
4.3 控制回路搭建与信号连接
控制回路是整个模型的灵魂,我按信号流向一步步说。
先从Three-Phase V-I Measurement引出三相电压和三相电流的常规信号,电压信号进PLL,PLL输出角度θ。电压和电流都要做abc到dq变换,需要用到sin/cos旋转矩阵。可以直接用abc_to_dq0 Transformation模块,注意它要求输入是三相信号加θ角,输出是d、q、0轴分量。
dq变换之后,电网电压的d轴分量和q轴分量用于锁相验证,d轴电压应稳定在电网电压幅值附近,q轴电压趋近于0。电流的dq分量则送进电流内环PI控制:id_ref来自电压外环输出,iq_ref设为0,因为整流器通常希望无功为0,纯有功传输。
两个PI控制器的输出经过反dq变换得到αβ参考电压,送进SVPWM Generator。SVPWM模块输出六路脉冲,接到Universal Bridge的六个门极输入。这里要注意:Universal Bridge内部的门极输入顺序是A相上管、A相下管、B相上管、B相下管、C相上管、C相下管,接错顺序会导致上下桥臂直通或者相序混乱,模型直接崩溃。
电压外环的反馈是直流母线电压测量值,给定是母线电压参考值,比如600V。外环PI输出经过一个限幅环节再作为id_ref,限幅值按系统额定电流设置,比如20A。这个限幅非常重要,没有限幅时启动瞬间外环输出会冲到很大,电流内环跟着饱和,系统振荡甚至发散。
4.4 仿真运行、波形判读与验收标准
模型搭完后运行仿真,重点看四个波形:直流母线电压、网侧三相电流、dq轴电流、光伏和储能的充放电曲线。
母线电压的验收标准:启动后大约0.1到0.5秒内达到给定值,稳态误差在2%以内,加载或卸载时超调不超过5%。我用600V母线参考值,实测通常是0.3秒左右稳定到600V附近,然后电压环的PI会有一点过冲,只要在可接受范围就继续调Ki。
网侧电流的验收标准:三相正弦度好,THD低,电流与电网电压相位一致(功率因数接近1)。你可以用Power Spectral Density或者Simscape里的THD测量模块看总谐波畸变率,正常情况下应该低于5%。如果电流波形明显削顶或者有锯齿,优先检查是不是电感太小或者载波频率太低。
dq轴电流的验收标准:id跟随id_ref,iq维持在0附近。这里我提醒一个常见认知问题:整流模式下id可能是负值,这取决于你定义的参考方向。我的习惯是定义从电网流向变换器为正,这样整流时id为正,储能放电回馈时id变负。你看看你的模型里符号方向是否统一,别因为符号问题怀疑PI参数。
5. 常见问题与排查技巧实录
5.1 Bus Selector没有可选信号怎么处理
这是网上搜“simulink bus selector 没有可选信号”的高频问题,我也踩过。最典型的场景是:用一个Bus Selector去选Three-Phase V-I Measurement输出里的电压或电流信号,但下拉列表里空空如也,一个可选信号都没有。
原因很简单:Bus Selector只能处理Simulink Bus类型信号,而很多测量模块输出的其实是向量(Vector)信号或Simscape物理信号转换后的常规数组。向量信号没有字段名,Bus Selector当然不知道该给你列出什么。解决办法有三个方向:
一是检查上游信号类型。如果上游是Demux或向量合并产生的信号,直接把Bus Selector换成Demux或者Selector模块,按端口序号取信号。二是如果上游是Bus Creator生成的Bus信号,检查Bus Creator里面各个信号的名称是否规范,不要用空格和中文,选中后Bus Selector会列出所有元素。三是如果你确实需要把向量转成Bus,可以在上游加一个Bus Creator,把向量拆成多个标量再合并成Bus,但这属于绕路,一般不推荐。
还有一个隐蔽问题:Simscape Electrical的物理信号经过PS-Simulink Converter后输出的是数组信号,直接接Bus Selector同样选不出来。正确做法是用Demux拆分,或者直接用To Workspace导出数据再分析。记住一个原则:Bus Selector只认Bus,向量用Demux,物理信号先转换再做常规信号处理。
5.2 仿真发散、PI输出爆炸怎么办
仿真一运行就报错,或者波形直接吹到几千伏,是电力电子仿真入门时最崩溃的问题。我总结下来,80%的原因是PI控制器没有限幅和初始条件不合理。
先给所有PI控制器加限幅。Simulink的PI Controller模块自带限幅参数,把输出上下限设成合理值。电流内环PI的输出是调制电压,限幅不能超过SVPWM的最大线性输出范围;电压外环PI的输出是电流给定,限幅按额定电流设。我见过太多人把PI限幅放空,结果启动瞬间积分器饱和到巨大数值,电流内环根本跟不上,系统直接爆炸。
然后是积分器的初始条件。PI控制器里的积分器初始值设为0,这是标准做法。如果模型在某个非零工作点启动,积分器初值需要按这个工作点的稳态输出设置,否则启动瞬间会有很大的冲击。另外检查初始时刻电网电压相位和PLL输出角度是否同步,三相电源模块的初始相位设为0度是通常做法,PLL输出初始角度也从0开始,避免启动时刻的大幅震荡。
还有步长问题。详细开关模型下,最大步长大于载波周期的十分之一就会出问题。比如10kHz载波对应100微秒周期,最大步长必须小于10微秒,否则开关时刻丢失,脉冲乱跳,母线电压发散。检查一下你的powergui采样时间和求解器最大步长,这两个参数是亲密关系的,改了其中一个必须同步检查另一个。
5.3 并网电流谐波大、功率因数低
模型能跑了,稳定了,但电流波形丑得没眼看,THD超过10%,功率因数只有0.9出头。这个问题要从四个方面排查。
第一是滤波电感是否偏小。电感小,电流纹波就大,谐波自然高。试着把电感从2mH加大到3mH或4mH,看THD是不是明显下降。代价是动态响应变慢,但仿真阶段优先满足谐波指标。
第二是载波频率。对于两电平SVPWM,10kHz是常规选择;如果谐波还是大,可以提到15kHz甚至20kHz试试。载波频率提高后电流纹波减小,但仿真速度会明显变慢,需要权衡。
第三是SVPWM模块的同步设置。检查PWM脉冲的载波是否与电网电压相位对齐,如果载波不同步,会产生低频拍频,电流波形出现周期性畸变。用示波器对比电网电压过零点和PWM脉冲,正常情况下过零点附近脉冲密度应该有规律变化。
第四是死区效应。仿真里如果Universal Bridge没有设置死区时间,上下桥臂直通保护没有模拟,电流在小幅过零时会有额外的畸变。Simscape的桥臂模块可以设置死区时间,默认可能为0。加上微秒级死区(比如2微秒),谐波特性会更接近真实硬件,但要注意死区时间不能太大,否则输出电压畸变反而增加。
5.4 双向切换时直流母线冲击
储能系统从充电切到放电,或者PV从停机切到MPPT,直流母线电压经常会出现明显的跌落或尖峰,严重时导致保护动作。
我排查后发现主要原因是模式切换时序不对。前端整流器从整流切到逆变时,电流内环的给定方向会突然反转,如果电压环来不及响应,母线能量就会出现短时不平衡。解决办法是加一个预充电和软启动逻辑:切换前先把电流给定斜坡过渡到目标值,而不是阶跃跳变。Simulink里可以用Rate Limiter模块限制电流给定的变化速率,或者用一个小时间常数的惯性环节,把阶跃变成斜坡。
另一个原因是直流侧储能化成冲击。电池初始SOC设置不当,接入母线瞬间电池等效内阻低、电容充电电流大,母线电压被拉低。我的习惯是把电池模块的初始SOC设置成50%以上,同时给Buck/Boost输出端加一个预充电阻,仿真里用一个小电阻模拟预充回路,母线电压建立后再切掉。这个细节在纯仿真实测中不太起眼,但对模型稳定性和后面硬件移植非常有参考价值。
我个人做这套仿真下来,最大的体会是:带光伏和储能做双向并网仿真,最忌讳一上来就追求“全功能大模型”。把MPPT、储能、整流、逆变全堆在一个模型里,跑一次半小时,出了问题根本不知道找谁。我的习惯是分级验证:先跑纯整流并网,母线电压稳了,电流正弦了;再加储能侧Buck/Boost验证双向充电放电;最后才接光伏MPPT。每一级都留好Scope和To Workspace数据,对比波形看变化,这套流程至少帮我省了一半的调试时间。
最后分享一个小技巧:把PI限幅和SVPWM饱和逻辑全做进模型里,而不是指望外部条件保证。哪怕参数给得再激进,模型也不容易崩,这比任何谨慎的参数设置都管用。希望这篇能帮你少走点弯路。