做光伏和储能的朋友,十有八九都要跟“并网”这两个字打交道。光伏板出来的直流电、储能电池包里的直流电,最终都要变成符合电网要求的交流电才能送出去,或者反过来在低谷时把交流电整流成直流给电池充电。这套“交直流双向变换”的核心,就是三相PWM整流器。我这两年用Simulink搭过好几个类似的项目,从光储一体机的前端AC/DC,到储能PCS的双向变流器,控制框架基本都是一回事。这篇就把“基于Simulink的光伏/储能前端三相PWM整流并网控制”从原理到建模,再到常见的坑,完整梳理一遍,新手可以直接照着搭,老手可以看看有没有自己漏掉的细节。
这套模型解决的是这么一个问题:光伏或储能能量通过一个可控的三相桥式电路并入电网,既能工作在整流状态(电网能量流入直流侧),也能工作在逆变状态(直流侧能量馈入电网),同时保证输入电流正弦、功率因数可控、直流母线电压稳定。它适合正在学电力电子仿真、准备做毕业设计、或者刚接手储能变流器控制算法验证的工程师参考。
1. 整体设计思路拆解
1.1 为什么是“前端三相PWM整流”,而不是普通不控整流
很多人刚接触光伏逆变器时,会想“直接拿二极管整流桥加个逆变器不就行了?”其实不行。二极管不控整流有两个硬伤:电流谐波大,功率因数低,而且能量只能单向流动。光伏和储能系统需要能量双向流动,尤其是储能,谷时充电、峰时放电是基本操作。即便光伏系统通常只向电网馈电,它的前端也需要一个可控的DC-AC接口来维持直流母线电压恒定,MPPT则由前级的DC/DC变换器完成。
三相PWM整流器本质是一个电压型PWM变流器,用六个IGBT组成三相全桥,通过控制IGBT的开关占空比,让交流侧的电流波形逼近正弦,电流相位与电网电压相位可调,功率因数能到0.99甚至更高。它还能主动控制直流母线电压,在电网掉电、负载突变时维持母线稳定。这个拓扑在今天的储能PCS、光伏逆变器、充电桩前端、甚至电机回馈制动里都属于主流方案。
1.2 拓扑结构和能量流
整个系统可以拆成几个模块来看:
- 交流电网:三相380V/50Hz,或220V/50Hz,根据项目定
- 交流侧滤波电感:L或LCL,主要滤除PWM开关产生的高频纹波电流
- 三相全桥:IGBT或MOSFET,PWM整流器的执行机构
- 直流母线电容:稳定直流电压,吸收功率波动
- 直流侧负载/电源:光伏DC/DC输出、储能电池包、或直流母线负载
能量流有两个方向。整流模式:电网→电感→IGBT反并联二极管→直流母线→给电池充电或给直流负载供电;逆变模式:光伏/电池→直流母线→IGBT全桥→电感→馈入电网。而控制系统的任务,就是根据你想要的能量方向,实时算出IGBT的开关序列。
1.3 控制系统整体框架
三相PWM整流器的控制,主流用的是“电网电压定向矢量控制”。这个说法听着吓人,拆开其实就两步:
- 用锁相环PLL测出电网电压的实时相位θ;
- 把三相电流通过坐标变换转换到dq旋转坐标系下,和直流母线电压一起丢给两个PI控制器,PI输出转回abc坐标系,最终生成PWM波。
外加一个电压外环:把直流母线电压Udc稳住,输出d轴电流参考值;电流内环:控制d、q轴电流,d轴代表有功,q轴代表无功。整套控制就是“外环保电压、内环保电流、PLL保相位”这三件事。
2. 核心控制原理与关键参数解析
2.1 电网电压定向矢量控制怎么理解
我从实际调试的角度讲。三相电网电压和三相电流都是交流量,PI控制器最擅长控制直流量,直接拿交流量去给PI,基本调不稳。所以要先做Clarke变换,把三相静止abc坐标变成两相静止αβ坐标,再做Park变换,把αβ旋转坐标变成跟电网同步旋转的dq坐标。这样一来,基波分量在dq坐标系下就变成了直流量,PI就能稳稳地控制。
定向的意思就是把d轴对准电网电压矢量的方向。电网电压定向后,q轴电压是0,此时d轴电流和q轴电流分别是:
- id:有功电流分量,决定能量流动方向和大小
- iq:无功电流分量,决定功率因数,单位功率因数时iq=0
这就是“电网电压定向”的物理含义。实际模型里不需要手推坐标变换矩阵,Simulink里有现成的abc_to_dq0 Transformation模块,指定旋转频率和相位就行。
2.2 双闭环控制与PI参数计算
双闭环是这套控制的心脏。电压外环采样直流母线电压Udc,与参考值Udc_ref做差,通过PI控制器输出d轴电流参考值id_ref;电流内环采样三相电流,变换后得到id和iq,分别与id_ref和iq_ref做差,通过PI控制器输出电压指令vd和vq,再加上前馈解耦项,就得到了电压矢量。
PI参数不能乱填。我习惯按典型I型系统整定电流内环,再按典型II型系统整定电压外环。电流环的开环传递函数在忽略反电动势扰动时,可以简化为一阶惯性加积分环节。工程上有一个粗略公式:
电流环PI参数:
- 比例系数Kp = L × ω_c,其中ω_c是电流环带宽,一般取开关角频率的1/10~1/5
- 积分时间常数Ti = L/R,R是电感等效串联电阻加上线路电阻
电压环PI参数:
- Kp_u = C/(5×Ts_v),Ts_v是电压环采样周期
- Ki_u取Kp_u的1/10~1/20,具体看母线电容大小
实际调试时我从不直接算完就用,而是先在模型里用小步长试凑,观察阶跃响应。这里给一个我在MATLAB里常用的参数计算脚本,方便你换一套拓扑时快速出初值:
%% 三相PWM整流器PI参数估算 Udc = 800; % 直流母线电压 V L = 2e-3; % 交流侧电感 H R = 0.05; % 电感等效电阻 Ohm fs = 10000; % 开关频率 Hz fc = fs/20; % 电流环带宽 Hz omega_c = 2*pi*fc; Kp_i = L * omega_c; % 电流环比例 Ti_i = L / R; % 电流环积分时间常数 Ki_i = Kp_i / Ti_i; % 电流环积分 Udc_ref = 800; C = 2000e-6; % 直流母线电容 F f_v = 100; % 电压环带宽 Hz omega_v = 2*pi*f_v; Kp_u = C * omega_v / 3; % 工程经验系数 Ki_u = Kp_u / 15; fprintf('电流环: Kp=%.3f, Ki=%.3f\n', Kp_i, Ki_i); fprintf('电压环: Kp=%.3f, Ki=%.3f\n', Kp_u, Ki_u);注意:不同研究对象、不同电网条件,这个初值只能用来保证波形先跑起来,最终还是要通过阶跃响应再微调。我在实际中会把电压环带宽设得比电流环低5~10倍,这样内外环不会互相打架。
2.3 SVPWM与PWM生成方式的选择
获得了电压指令vd和vq,接下来要把它们变成开关信号。两条路:
- 路一:反变换回abc三相正弦波,与三角载波比较,生成SPWM。简单直观,但直流电压利用率低,对800V母线大概能输出到400V左右的交流线电压峰值。
- 路二:用SVPWM(空间矢量PWM),把vd、vq当作空间电压矢量,通过扇区判断和矢量作用时间计算,生成等效的PWM。直流电压利用率比SPWM高约15%,输出波形谐波含量更小,是目前三相整流器和逆变器的实际主流方案。
在Simulink里,可以直接用库里的“SVPWM Generator”或者“PWM Generator (Three-phase)”。前者更贴近实际DSP里的SVPWM实现逻辑,后者使用更简单、适合验证控制算法。我做毕业设计或前期算法验证时,喜欢先用PWM Generator (Three-phase),等控制环跑稳了,再替换成SVPWM Generator,把逻辑搞清楚。
2.4 光伏/储能前端怎么把MPPT、充放电策略接进来
回到标题里的“光伏/储能前端”。这套三相PWM整流器在系统里的角色,不是一个孤立的AC/DC,而是整机能量管理的执行层。
光伏系统典型做法是:光伏阵列→DC/DC Boost(实现MPPT)→直流母线→双向AC/DC并网。这种情况下,前端的双向AC/DC只负责稳住直流母线电压,MPPT由Boost自己干,两个变换器之间不需要通信,只需要保证直流母线电压参考值一致。
储能系统类似:电池包→双向DC/DC或直接接母线→双向AC/DC并网。双向AC/DC控制直流母线电压,电池充放电由DC/DC或者BMS给出功率指令。如果你做的是储能PCS一体机,甚至可以让AC/DC直接控制充放电电流,但那样直流母线电压会波动,需要额外协调。
模型的实现上,光伏和储能可以简化为一个可控直流源接到直流母线侧,重点关注双向AC/DC自身的控制性能。先把整流器并网逻辑调对,后面再接MPPT、BMS、功率调度,思路就清晰了。
3. 手把手搭建Simulink模型实操步骤
3.1 环境准备与库选择
我用的是MATLAB R2021b之后的版本,Simulink自带的“Simscape Electrical”里头有一个“Specialized Power Systems”库,三相全桥、电压源、电感、变压器这些都在里面。这里提醒一句:Simulink有三个电力电子相关库,千万别搞混。
- Simscape Electrical / Foundation Library:物理建模,适合多物理域联合和电力电子拓扑验证,但在实时仿真和控制算法验证时又慢又麻烦
- Specialized Power Systems:专门做电路仿真的,开关器件、三相电网、变压器、电机都在这里,跑得也快,我做并网仿真基本都用这个
- Simulink基础库里的受控电压源和电流源:适合做模型级验证,不用物理电路,控制信号直接接受控源
项目开始前,在MATLAB里执行一下powerlib,能快速打开Specialized Power Systems的库。检查一下自己有没有安装Simscape Electrical Toolbox,没有的话powerlib会报错。
3.2 主电路的搭建
模型结构从上到下:
第一步,从Specialized Power Systems库拖“Three-Phase Source”,设置电压参数为380V/50Hz,内部连接方式选Yg(带中性线接地)。
第二步,接一个“Three-Phase Series RLC Branch”,把R设成0.01Ω,L设成2mH,C设成inf,这就是并网电感加线路电阻。
第三步,接“Universal Bridge”模块,桥臂数选3,功率器件选IGBT/Diodes,导通压降按英飞凌IKW75N60T这类参数填个大概就行。
第四步,直流侧接一个“Series RLC Branch”当直流母线电容,C设为2000μF,R设成一个大电阻比如1e6(模拟漏电阻),再接一个“DC Voltage Source”或者可控电流源来模拟光伏/电池侧。
最后在桥和交流源之间加两个电压测量模块、在交流侧加三个电流测量模块,方便后面采样。
3.3 控制子系统搭建
控制部分我建议单独建一个子系统,保持界面清爽。主要模块:
- 锁相环:直接用Simscape Electrical里的“PLL (Three-Phase)”模块,输入三相电压,输出角度θ和频率。参数里把“Minimum Frequency”设成45Hz,“Maximum Frequency”设成55Hz,PI参数默认基本够用
- 坐标变换:用“abc_to_dq0”模块,输入三相电流和θ,输出id和iq。注意模块的“Rotation Frame”要选“Aligned with phase A axis”或根据锁相环输出匹配,不然id和iq的物理含义会反
- PI控制器:Simulink库里的“PID Controller”模块,勾选“Integrator anti-windup”和“Output saturation”,积分限幅很重要,不设的话启动瞬间很容易积分饱和导致波形飞车
- 前馈解耦:在电流环PI输出后面加两路交叉项,即vd_ff = -ωLiq,vq_ff = ωLid,并且把电网电压前馈加进来,可以明显改善动态响应
- 调制:先用“PWM Generator (Three-phase)”或者“SVPWM Generator”,加到Universal Bridge的触发端
一个关键设置:PWM Generator需要知道直流母线电压值,因为三相桥的调制比跟Udc有关,设置不当会出现“过调制”警告。
3.4 初始参数配置参考
给一套我调过比较稳的初始参数,750V直流母线、380V交流电网:
| 参数 | 数值 | 说明 |
|---|---|---|
| 交流线电压有效值 | 380V | 三相三线 |
| 电网频率 | 50Hz | |
| 并网电感L | 2mH | 电感越大,纹波越小,但动态响应变慢 |
| 电感等效电阻R | 0.1Ω | 实际电感的损耗 |
| 直流母线电压参考 | 750V | 要高于交流线电压峰值 |
| 直流母线电容C | 3000μF | 电容越大,母线越稳,成本越高 |
| 开关频率fsw | 10kHz | 工程常用值,听感上也能避开水声频段 |
| 电流环Kp/Ki | 12 / 600 | 按前面的脚本算出来微调 |
| 电压环Kp/Ki | 0.5 / 8 | 母线电容较大时适当调小 |
3.5 仿真求解器与观测设置
求解器选“ode23tb”或者“discrete”。电力电子开关模型是典型的刚性系统,用定步长“discrete”求解器能避免很多莫名其妙的收敛问题。步长设成1e-6,即1微秒,对应10kHz开关频率的100倍采样,足够看到PWM细节了。
仿真时间先设0.5秒,足够观察启动过程和稳态波形。在Scope里同时拉出Udc、三相电流ia/ib/ic、id和iq、θ这些信号。启动后你会看到直流母线从0慢慢爬升到750V,电流由大减小,最后稳定,整个过程有没有超调、有没有振荡,一眼就知道PI参数调得怎么样。
4. 常见问题与排查技巧实录
4.1 Bus Selector没有可选信号,信号选不出来
这是我在各个Simulink交流群里见过最多的提问。Bus Selector模块只能接收Bus信号,如果你给它的输入是一根普通Simulink信号线(也就是一个标量或向量信号),那么模块对话框里“Available Signals”区域就是空的。
解决办法有两个:
- 在信号源头加一个“Bus Creator”模块,把多路信号打包成总线,再接到Bus Selector,它就能列出总线包含的每个信号
- 如果压根不需要总线,直接换用“Selector”或“Demux”模块,按向量索引取值
还有一个隐蔽的原因是,来自特殊电力电子库的测量模块输出的可能是“mux”信号,看起来像总线,但其实是向量。判断方法是点一下信号线,看它旁边标识符是“Simulink.Bus”还是“[3x1]”之类的数组形式。如果是数组,Bus Selector必选不出来。
4.2 波形震荡发散,直流母线电压飙升
先别急着怀疑自己,这个几乎是所有三相PWM整流仿真新手共同的第一道坎。通常原因有四个:
- 电流环PI参数过大,Kp超出电流环带宽,系统就会出现高频振荡
- 电压环PI参数与电容大小不匹配,电压外环振荡
- 求解器步长太大,比如默认的ode45变步长在开关切换瞬间计算出错
- 初始状态不对,电容初始电压为0,启动瞬间冲击电流太大
我的排查顺序:先把PI参数整体调到比较保守的值(比如Kp减半、Ki减小到原来的1/5),再逐步加大;然后把求解器改为离散定步长1e-6;最后在直流电容模块的“Initial Voltage”里设置一个接近额定值的初始电压,比如750V母线就填600V,启动时冲击会小很多。
4.3 PLL锁不住,角度一直在漂
锁相环问题在并网模型里非常典型,表现为id、iq振荡严重,或者dq变换后波形严重不对称。排查顺序:
- 检查三相电压接入PLL的相序是不是ABC正序
- 检查“abc_to_dq0”模块的目标坐标系的初始角度和PLL输出有没有对齐
- PLL内部的PI参数是用“5%稳态误差 + 截止频率”整定的,默认通常偏慢,动态时锁不住。可以手动把PLL的PI带宽从默认调大一点
顺带提一嘴,在Simulink里还有一种“Three-Phase PLL”模块,它的输出是多维信号,其中第一个是角度,别接错了线。
4.4 光伏侧绝缘阻抗低报警
这个虽然更偏向硬件现场问题,但仿真里也会提前暴露风险。光伏阵列对地有寄生电容,尤其在薄膜组件、多雨潮湿环境下,寄生电容可以达到微法级。PWM整流器的高频共模电压会在寄生电容上产生漏电流,导致逆变器的绝缘阻抗检测(即绝缘阻抗监测模块)误报“绝缘阻抗低”。
仿真里你可以把光伏电池用一个直流源加一个对地电容来等效,然后用Common Mode Voltage测量模块看看共模电压的幅值和频率。如果共模电压尖峰很高,那说明你的调制策略或滤波参数需要调整,或者应该在交流侧加共模电感。
4.5 常见问题速查表
把上面这些整理成一个表,方便你直接对照排查:
| 现象 | 可能原因 | 排查手段 | 解决办法 |
|---|---|---|---|
| Bus Selector无可用信号 | 输入不是Bus信号,而是向量/标量 | 看信号线的数据类型标识 | 用Bus Creator打包,或改用Selector/Demux |
| 波形发散 | PI参数过大、步长过大 | 逐步减小PI,改定步长 | 按第2.2节脚本重新计算初值 |
| 直流母线电压不能建立 | 调制波方向反了 | 观察PWM驱动状态 | 交换触发信号相序,或检查SVPWM扇区 |
| id/iq剧烈振荡 | PLL相位错位 | 查看θ与实际A相电压相位 | 调整坐标变换旋转方向 |
| 并网电流THD偏大 | 电感量不足、开关频率太低 | 观察电流纹波 | 增大L或提高fsw |
| 储能电池侧母线倒灌 | 双向流动控制逻辑未切换 | 查看功率流向 | 把id_ref的正负根据充放电指令切换 |
4.6 联合仿真、代码生成与热词里提到的那些扩展问题
很多人在搭完这个基础模型后,会继续做一系列扩展,我在群里看到的热门话题集中在几个方向:
- Simulink模型转C代码:用Embedded Coder生成DSP或者ARM用的控制代码,注意要先把求解器改成定步长离散,并在模型配置里把“Code Generation”的“System target file”改成ert.tlc
- Simulink外部模式(External Mode):配合stm32或者TI的板卡,可以实现在线调参,Simulink的External Mode支持串口或以太网链路
- 储能电池BMU控制器和安时积分法:电池SOC估算在Simulink里常用安时积分法,核心是
SOC(k+1) = SOC(k) - (η·i_bat·Ts)/Q_capacity,这个模块接收母线上测量的充放电电流,再跟BMS的BMU控制器配合做保护 - 超短期光伏功率预测:预测结果作为并网变流器的功率指令,控制层面就是把这路指令换算成id_ref给到电流环
- MCDC报告:用于Simulink模型覆盖率分析,特别是DO-178C或ISO 26262相关的软件开发流程,用Simulink Coverage工具跑一下就能生成修改条件/判定覆盖率的报告
这些扩展都不是从零开始,都是在前面这套三相PWM整流控制模型的基础上叠加或者改造。先把基座弄扎实,后面做什么都有底气。
5. 从仿真到工程化落地的一些心得
5.1 仿真模型与实际量产硬件的距离
我记得有个热词叫“已量产48V-2kW储能逆变器硬件方案”,这类产品实际做的就是低压储能逆变器,光伏输入、储能电池、并网输出。从Simulink模型到量产硬件之间,隔着好几层活儿:控制板的DSP芯片选型、IGBT驱动电路、采样调理电路、绝缘阻抗检测电路、继电器控制逻辑、EMC滤波等等。但控制算法层面,你在Simulink里调出来的双闭环参数和SVPWM逻辑,是可以直接迁移到代码里的。
真正的经验是:在Simulink里可以用理想开关模型,但在硬件上IGBT有死区、有导通压降、有开关延迟。所以在工程验证时,我建议在仿真模型里就给IGBT模块设置一个合理的死区时间(Universal Bridge的参数里有“Post Switching Delay”或“Dead time”设置),否则做出来的波形在硬件上永远复现不出来。
5.2 硬件在环与联合仿真的实际作用
做车载类项目的人常提到“Carsim和Simulink联合仿真”,那种场景更多是车辆动力学和控制策略联合验证。对于电力电子并网控制,更常用的是“控制器硬件在环(HIL)”,把三相PWM整流器的仿真模型下载到实时仿真机里,控制器用真实的DSP板卡,在环路上跑。没条件上HIL的话,退而求其次用Simulink External Mode在真实控制器上在线调参,也算半实物验证。
5.3 我做这套模型的经验顺序
最后分享一个最核心的经验:调试这类模型,千万不能一上来就把所有闭环全接通。我习惯分成四步:
- 先开环,手动给一个固定的调制波,看交流侧波形是否正常,确认PWM模块和主电路接对了
- 只接电流内环,不给电压环输出,手动给定一个id_ref,看电流能不能跟随上
- 再接上电压外环,稳定直流母线电压
- 最后才加PLL、前馈、无功控制等花活
每一步调稳了再进下一步,出问题也知道是哪个环节。这个习惯帮我省下了无数仿真崩溃的时间。如果你现在正在调三相PWM整流并网模型,不妨把模型扔到桌面上,按这个顺序重新过一次,你会发现很多“玄学问题”其实都是前面某一步埋下的雷。