ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

MATLAB/Simulink搭建100kW光伏并网仿真:MPPT、逆变器与LCL滤波全流程

MATLAB/Simulink搭建100kW光伏并网仿真:MPPT、逆变器与LCL滤波全流程 MATLAB/Simulink 里搭一套 100kW 光伏并网发电系统仿真模型这个需求不管是毕业设计还是分布式光伏项目前期验证最后都会落到同一件事把光伏阵列、MPPT、逆变器、滤波器一直到电网侧连成一条完整链路用仿真去观察辐照度突变时的动态响应、并网瞬间的冲击电流和功率波动。这个容量级别很尴尬比户用小户用一般 10kW 到 50kW又比集中式地面电站小动辄几十兆瓦但恰恰是工商业屋顶、村级分布式电站的主力区间电网接入条件、逆变器选型、滤波器设计都有自己的特点值得单独建一套模型来研究。下面这篇内容我会按我自己从零搭模型时的思路来讲先定拓扑再逐级建模最后并网联调中间穿插我在 Simulink 里实际踩过的坑和调参经验给打算复现这套模型的人一条能走通的路径。1. 先弄清楚100kW 这个容量级到底对应什么工程场景1.1 100kW 在真实项目里的位置100kW 不是一个随便拍出来的数字。实际工程中工商业屋顶光伏单点装机容量一般就在 80kW 到 150kW 之间再往上就要考虑 10kV 中压并网涉及的保护、计量、调度逻辑都会变复杂。而 100kW 正好卡在“低压 380V 并网”和“中压 10kV 并网”的分界线上多数情况下可以按 380V 低压并网处理但具体要看当地电网公司的接入方案。所以建模时你要先假设一个边界电压等级 0.4kV 低压并网公共连接点处等效为一个三相电压源加短路阻抗。这个边界决定了逆变器交流侧、滤波器和变压器部分的建模深度。1.2 电网接入条件直接决定模型边界光伏并网仿真和独立光伏仿真最大的区别在“网”。并网意味着逆变器必须与电网电压相位、频率同步输出功率能被电网吸收。在 Simulink 里电网可以用 Three-Phase Source 加一个 RL 阻抗来等效短路容量比SCR如果设得很小比如 SCR5就相当于接在较弱的电网末端这时候 PLL 和电流环容易振荡这其实是很多模型“并网失败”的隐藏原因。反过来如果 SCR 设成 100电网接近无穷大母线模型就稳定得多。我搭模型时习惯先在 SCR50 左右的强网下把控制器调通再降到 SCR10、SCR5 去考验锁相和控制鲁棒性。这一套思路对做微电网、多机并联仿真的朋友也适用。1.3 单级式还是两级式先定拓扑再谈建模光伏逆变器拓扑主要有两条路。单级式拓扑光伏阵列直接接三相逆变器MPPT 靠控制逆变器直流侧电压来实现结构简单、效率高但要求组件串的 MPP 电压落在逆变器可接受范围内两级式拓扑前面加一级 Boost 变换器先把光伏电压抬到稳定的直流母线电压再由逆变器完成并网。100kW 这个级别工程上两种都有。我在做仿真时如果目的是研究并网控制、高低穿、谐波等电网侧问题优先用单级式因为少了一个开关级仿真速度更快如果目的是研究宽范围 MPPT、组串失配或者优化直流侧设计那就必须把 Boost 级加进去。正文里讲的这套主模型基于单级式三相两电平 VSC但在后面我会讲清楚 Boost 级怎么往上挂避免你换场景时推倒重来。2. 光伏阵列建模从组件参数表到阵列 I-V/P-V 曲线的折算2.1 Simulink 里 PV Array 模块的参数映射逻辑Simulink 的 Simscape Electrical 库里有现成的 PV Array光伏阵列模块位置在 Specialized Power Systems / Electrical Sources 下。这个模块的建模核心是单二极管五参数模型需要你输入短路电流、开路电压、最大功率点电压电流、串联电阻、并联电阻、二极管理想因子等。参数来源有两种一种是从模块内置的预设组件型号里直接选比如 SunPower SPR-305E-WHT-D另一种是选择 User-Defined手动填你从组件数据手册里抄来的参数。我个人强烈建议用 User-Defined因为内置型号大多是大功率组件或老旧型号跟国内常见的 450W、550W 组件对不上。填参数时最容易错的点是单位。PV Array 模块的温度输入是摄氏度°C还是开尔文K不同版本有差异。R2023b 里 irradiance 是 W/m²温度是 degC但你连接到 Signal Builder 或 Constant 时务必看清楚端口说明否则温度传错 273 度MPP 位置完全漂移仿真结果根本没有参考价值。另外模块提供一个“Max.Power”显示框填完参数后它会按当前辐照和温度自动算出理论最大功率你可以拿这个值和组件手册对一下如果差太多说明五个基础参数里有录入错误。2.2 组串设计串并联数怎么由逆变器 MPPT 范围倒推100kW 阵列的设计不是随便把组件堆到 10 万瓦。我举一个典型例子用 550W 双面组件每个组件的 Voc 约 49.6V、Vmp 约 41.7V、Imp 约 13.2A。假设你选的 100kW 组串式逆变器 MPPT 电压范围是 200V 到 1000V最大直流输入电压 1100V那设计逻辑如下先算串联数下限逆变器 MPPT 最低电压 200V而组件在高温高辐照下 Vmp 会降到 80% 左右每串至少需要 200 / (41.7 × 0.8) ≈ 6 块再算串联数上限组件在低温和高辐照下 Voc 可能升高到额定值的 110% 甚至 120%以 1100V 为限每串最多约 1100 / (49.6 × 1.1) ≈ 20 块所以工程上取每串 20 块Vmp 约 834VVoc 约 992V留了必要的温度余量每串功率 20 × 550W 11kW100kW 需要 9 串并联额定总功率 99kW也符合光伏项目“超配逆变器但组件略低于逆变器容量”的常见做法。然后把“20 串 9 并”填进 PV Array 模块的 Series-connected strings per string 和 Parallel strings 参数里。这里有一个很容易看晕的地方Simulink 的 PV Array 模块里一个 string 就是一串组件的串联结构而 Parallel strings 是并联的串数两个参数别填反。填反之后电压电流特性完全错乱MPPT 会持续误判。2.3 辐照与温度变化在仿真里的注入方式仿真不是只看额定工况。光伏系统的灵魂是动态响应。PV Array 模块的 irradiance 和 temperature 两个输入端口可以接 Signal Builder、Step、Repeating Sequence 或 Lookup Table用来模拟云遮和早晚温度变化。我在做这套模型时用 Signal Builder 设置了三段典型工况先 1000W/m²、25°C稳定 0.5 秒然后在 0.6 秒时让辐照突降到 600W/m²持续到 1 秒再恢复到 900W/m²。这样能一次性观察 MPPT 的跟踪方向、跟踪速度、稳态振荡幅度以及直流母线电压在功率突变时的动态跌落。要注意辐照突变点最好避开并网合闸的瞬间否则两个暂态叠加在一起你很难分清冲击电流是来自并网还是来自光伏侧突变。3. MPPT 控制在 Simulink 中的落地PO 与 INC 的取舍3.1 扰动观察法PO的实现与步长选择光伏组件有唯一最大功率点MPPMPPT 算法就是不断搜索这个点。扰动观察法最初级也最直观在参考电压或占空比上加一个小扰动观察功率变化如果功率变大说明方向对继续同向扰动功率变小就反向。Simulink 里你可以用 MATLAB Function 模块写 MPPT 逻辑也可以直接搭逻辑电路。对做研究的人来说用 MATLAB Function 写最灵活还能把算法封装成子系统方便换算法对比。PO 算法最核心的参数是扰动步长。步长取得太大MPP 附近功率振荡明显稳态时 99kW 的系统功率波动可能有几百瓦甚至上千瓦并网功率曲线会很难看步长取太小辐照突降时跟踪速度太慢要花一两秒才重新找到最大功率点。100kW 系统我建议初始步长按直流电压的 1%~2% 来取比如 MPPT 电压范围 700V 到 900V步长取 10V 到 18V先用大步长快速逼近然后切小步长精细调整。这种变步长方案在工程里很常见Simulink 里实现也不复杂用一个计数器判断功率变化趋势连续多次一致时恢复大步长否则回落小步长。3.2 电导增量法INC为什么更适合大型系统扰动观察法有个天生的窘境辐照快速变化时功率同时受“扰动”和“环境变化”影响算法可能搞错方向短时间内会偏离 MPP。电导增量法INC用 dP/dV 和 0 的关系判断工作点位置比 PO 对快速变化的工况更稳所以大型光伏电站和组串式逆变器普遍用 INC 或其变体。实现逻辑并不复杂每一步采样当前电压和电流计算实际电导 I/V 和增量电导 dI/dV然后判断如果 dI/dV -I/V说明工作点就在 MPP 上不需要调整如果 dI/dV -I/V就在 MPP 左侧需要升压否则降压。在 Simulink 的 MATLAB Function 里你可以直接用 global 变量保存前一次的电压和电流也可以用 Persistent 变量每次调用时更新。要注意的是dI/dV 在仿真里容易因为采样噪声产生误判建议稍微加一个死区判断“接近零”而不是“严格等于零”否则 MPPT 会反复横跳。3.3 采样频率、执行周期和控制周期怎么匹配这可能是新手最容易忽视的问题。MPPT 是一个“慢环”不一定每个仿真步长都更新输出。我通常把 MPPT 的采样周期设为 0.01 秒10ms也就是 100Hz 左右这与实际逆变器中 MPPT 的刷新频率接近。而电流内环、电压外环是“快环”离散仿真步长可以设成 1e-5 秒甚至 2e-6 秒PWM 开关频率 10kHz 对应周期 100μs开关周期由相 应的 PWM 发生器决定。我见过很多模型卡在 MPPT 这里MPPT 子系统触发频率太高比如每个 1e-6 步长都触发一次不仅仿真速度慢而且逆变器控制环还没来得及反应MPPT 就已经输出一堆抖动的参考电压整个直流侧控制完全乱掉了。正确做法是用 Simulink 里的 Rate Limiter 或离散采样模块把 MPPT 输出限幅并降频降频后直流电压参考值是一条平滑的阶梯波而不是连续跳变的毛刺波。MPPT 输出还要加限幅比如 650V 到 950V防止算法初始阶段输出过低或过高的电压导致逆变器过调制。4. 逆变器与并网控制dq 坐标系下的双闭环设计4.1 三相 VSC 在 Simscape 中的惯用建模方式逆变器模型有三种建法全开关模型用 Universal Bridge 加 PWM 脉冲、平均模型用受控电压源/电流源、以及 Simscape 里的 Three-Phase VSC 模块。全开关模型最真实能看 PWM 纹波、谐波分布但仿真速度慢100kW 系统加 LCL 滤波器后步长 2e-6 秒跑 1 秒仿真可能要十几分钟甚至更久。平均模型快得多因为相当于滤掉了开关纹波缺点是看不出 THD 和谐波。我给这套 100kW 模型定的方案是主电路用 Universal BridgeUniversal Bridge 模块选 Three-phase bridgepower electronics device 选 IGBT/Diodes调制信号用 SVPWM 或 SPWM 生成 6 路脉冲驱动。如果你只关心并网控制和 MPPT 动态可以先把 Average-Model Based VSC 跑通再切换到 PWM 开关模型看谐波。这两种模型在 Simulink 里可以做成同一个子系统的两个版本调参数时用平均模型最终产图时用开关模型效率和精度都能兼顾。4.2 PLL 锁相与并网相位对齐并网逆变器必须知道电网电压矢量的实时角度否则输出电流和电网电压相位对不上一合闸就是大冲击电流。最常用的是同步旋转坐标系锁相环也就是 SRF-PLL核心思路是三相电网电压 Clarke 变换到 αβ再 Park 变换到 dq其中 q 轴电压稳定到 0 即表示 d 轴与电网电压矢量对齐。Simulink 里可以直接用 Simscape Electrical 自带的 PLL 模块也可以自己搭。我这里提醒一个细节SRF-PLL 的 PI 参数如果带宽太低锁相慢并网瞬间的相位误差大带宽太高弱电网下电压畸变容易被放大引起振荡。一般取 50Hz 到 100Hz 左右的带宽。100kW 系统接入 380V 电网电网电压为 380V/50Hz锁相环的输入要处理好标幺化否则 PI 参数要随电压幅值变化补偿工程上通常先归一化到 1pu 再进 PI参数更容易整定。PLL 不收敛的表现是 theta 持续漂移逆变器输出电流频率不对仿真曲线上一眼就能看出来。碰到这种情况先检查三相电压相的连接顺序是不是 UVW 对上了接线反相是最常见的低级错误。4.3 电流内环与电压外环的 PI 参数估算把逆变器等效成一个电压源连接滤波电感和电网电压在 dq 坐标下建立方程后会发现 d 轴和 q 轴电流之间存在耦合所以实际控制里要引入解耦项d 轴控制的有功电流 id 和 q 轴控制的无功电流 iq。电压外环稳定直流母线电压电流内环快速跟踪电流指令。PI 参数估算方法如下电流环的简化被控对象是 1/(L·s R)其中 L 是逆变器侧滤波电感加等效线路电感R 是整个回路等效电阻。电流环带宽一般取开关频率的 1/10开关频率 10kHz 则带宽取 1kHz 左右角频率 ωc ≈ 6283 rad/s。根据零极点对消法Kp ≈ L × ωcKi ≈ R × ωc。假设 L 0.436mH、R 0.05ΩKp ≈ 2.74Ki ≈ 314离散化后在此基础上往小区间调整。电压外环带宽取电流环的 1/5 到 1/10也就是 100Hz 到 200HzKpv ≈ C_dc × ωv直流母线电容取 10mF、带宽 628rad/sKpv ≈ 6.28Ki 也要配套。这几个值不是抬杠用的精确参数而是给你一个可靠的起步点进了 Simulink 再用响应曲线微调。这一块我强烈建议别只用试错法。把参数先按公式算出来然后用 Simulink Control Design 工具做一次闭环波特图分析看相位裕度和幅值裕度再上仿真验证。一次把环路的理论裕度搞清楚比在 Scope 里瞎拧 PI 参数高效得多。4.4 LCL 滤波器参数设计与阻尼需求逆变器输出 PWM 波形里含有大量开关频率谐波不能直接并网必须加滤波器。LCL 滤波器比单纯 L 滤波器在高频段衰减特性更好但多了一个谐振峰设计不好反而会放大谐波甚至振荡。工程上常用步骤是逆变器侧电感 L1 按电流纹波约束取L1 Udc / (8 × fsw × ΔImax)Udc750Vfsw10kHz额定电流峰值按 215A纹波取 10% 峰值L1 ≈ 0.44mH网侧电感 L2 通常取 L1 的一半左右约 0.15mH 到 0.22mH滤波电容 C 按无功功率不超过额定 5% 来取C ≤ 5% × P / (3 × 2πf × U²)U220V相电压约 30μF谐振频率约 2.8kHz满足 10 倍基波和 1/2 开关频率之间的经验区间。但谐振峰必须处理否则电容和电感之间会发生谐振放大并网电流会出现明显振荡。最简单的办法是电容支路串联阻尼电阻取值按谐振频率处电容阻抗的 1/3 到 1 倍比如 30μF 电容在 2.8kHz 处的阻抗约 1.9Ω阻尼电阻 R_d 取 0.5Ω 到 1Ω虽然有些损耗但对教学和快速验证足够实用。有条件做有源阻尼通过算法产生阻尼效果更好对效率更友好但建模仿真复杂度高一些。5. 全系统拼装顺序从光伏侧到电网侧的仿真链路5.1 分模块自测先光伏再逆变最后并网整套系统包含 PV、MPPT、逆变器、滤波器、PLL、并网开关、电网如果一步到位连起来出问题根本没法定位。我习惯分成三个阶段自测。第一阶段光伏阵列接纯电阻负载跑一下不同辐照下的 I-V 和 P-V 曲线确认串并联参数没错MPPT 能找到最大功率点。这一阶段不接逆变器完全验证光伏侧。第二阶段直流侧用一个理想直流电压源代替光伏阵列接逆变器和 LCL 滤波器接入一个可调三相 RLC 负载人为给定 id/iq 指令验证电流内环跟踪能力。第三阶段接回 PV 阵列和 MPPT合上并网开关完整并网运行。我在第一阶段吃过不少亏很多时候问题不在算法而在组件参数先把光伏侧独立跑通能省掉后面一多半的排查时间。5.2 功率潮流与直流母线稳压逻辑完整模型跑起来以后要理解系统的功率流向。光伏阵列输出直流功率MPPT 控制其运行在最大功率点逆变器在 dq 控制下id 指令决定有功输出iq 指令决定无功输出。理想情况下光伏阵列发的功率全部通过逆变器送进电网直流母线电压就稳定在一个设定值。如果电网侧突然有扰动或者辐照突降逆变器不能瞬时改变输出功率时功率不平衡就会体现在直流母线电容上表现为母线电压波动。所以直流母线电容大小的设计很重要。粗略的经验法是按 1kW 对应 0.1mF 到 0.2mF 来算100kW 系统取 10mF 到 20mF。电容太小电压波动大电压外环压力大电容太大成本高且开机充电时间变长。在实际 Simulink 模型里直流母线电容用 Series RLC Branch 模块把 Capacitance 填进去初始电压最好设成接近逆变器期望母线电压的状态比如 750V否则仿真一开始就是一个剧烈的充电暂态很多“仿真发散”其实是这个原因。5.3 求解器、步长与离散化设置的经验值仿真参数对这套模型的影响很多人低估了。光伏并网系统是一个强非线性、多时间尺度的系统MPPT 时间尺度是百毫秒级功率环时间尺度是几十毫秒级电流环和开关过程是微秒级。Simulink 里如果用连续求解器加变步长模型会在开关切换频繁时自动把步长压缩到很小导致仿真跑得极慢。我的做法是直接走离散仿真Powergui 模块里的 Simulation type 选 Discrete步长根据开关频率来定。10kHz 开关频率对应 100μs 周期离散步长取 1e-6 秒到 5e-6 秒能采到 PWM 波形细节又不至于太慢。如果只关心平均值动态可以选离散步长 1e-5 秒但此时 PWM 纹波会被当成分辨率噪声THD 分析不再可信。仿真时长方面1 秒足够看两到三次辐照突变和一次并网暂态再长反而增加等待时间。在调新参数时先用平均模型和较大的离散步长把趋势跑出来再用细步长开关模型出最终波形这是我自己调试的标准流程。6. 仿真结果判读与常见翻车现场6.1 辐照突变时 MPPT 跟踪曲线怎么看辐照从 1000W/m² 突降到 600W/m² 时你会在功率曲线上看到两个阶段首先是瞬间跌落因为光伏阵列可用功率立刻就变少了然后是 MPPT 算法从旧的 MPP 电压往新的 MPP 电压爬功率缓慢回升。两个阶段的区分非常明显。如果你的功率曲线在突变后直接掉下去、没有明显的“爬升”阶段说明 MPPT 还没反应过来可能采样周期太长或步长太小如果功率出现大幅过冲甚至反向震荡说明步长太大或算法判断方向错误。稳态运行时功率曲线上能看见小幅周期波动这就是 MPPT 扰动造成的属于正常现象波动幅度在 1%~2% 范围内可以接受如果超过 5%建议减小步长或者改用 INC 算法。6.2 启动瞬间电流冲击太大怎么压并网合闸瞬间逆变器输出电压和电网电压哪怕有几十伏的差异或几度的相位差电流冲击都能达到额定电流的好几倍。仿真里巨幅尖峰之后往往跟随一串衰减振荡这是滤波器谐振被激励的表现。解决思路有三层第一保证合闸前 PLL 已经稳定锁相把合闸命令延时到 PLL 稳定之后比如 0.6 秒后合闸第二合闸前逆变器先输出一个与电网电压同步的电压幅值实现“软启动”也就是 pre-charge 过程第三给电流环的指令加斜坡或限幅不要瞬间给定 100kW 功率指令功率爬坡时间设 0.1 到 0.3 秒。三招齐上冲击电流能压到额定值内。很多仿真模型一启动就振荡发散第一步先去查这里而不是怀疑 PI。6.3 模型跑不动、发散、THD 超标的一线处理思路跑不动第一优先检查求解器和步长这是 90% 的卡顿根源。如果一个模型步长设 1e-6 秒还要跑 5 秒仿真时间不卡才怪。切换到平均模型或者调大步长能立刻缓解。发散问题最常见的几个原因直流母线初始电压设置不对、PLL 初始角度和电网初始相位没对齐、电容初始电压为 0 导致瞬间充电。应对办法是净化初始条件在 Powergui 里点 Set Initial States先把所有状态设成合理的稳态值再开始仿真几乎所有“一启动就爆炸”的问题都能治。至于 THD 超标一般集中在 LCL 参数和阻尼电阻上。用 Powergui 的 FFT Analysis 工具分析并网电流如果是开关频率附近的谐波尖峰先调阻尼电阻如果在 2.8kHz 附近有很高的峰基本是阻尼不够加大阻尼电阻如果整个频谱都高先看电流采样有没有混叠再看 PWM 调制是不是达到过调制区域。最后说一个我个人的体会仿真模型永远是真实系统的影子不要追求每个模块都是器件级开关模型而是追求“该研究的问题能被仿真现象正确反映”。做好 MPPT 和并网控制两件事是这套 100kW 模型的骨架。后续想扩展也很方便把单台逆变器复制成三台做多机并联把电网模型换成带线路阻抗的微电网或者加入低电压穿越的检测和抑制逻辑都能在现有骨架上继续长肉。先把主线跑通再往里面堆功能这条路吃起来不累。
返回列表