
做电网侧分布式光伏的人都知道光伏出力跟着辐照走云飘过来功率就往下掉云飘过去又冲上去这种波动如果不处理就直接并网对电网频率和电压的冲击非常大。我以前用纯光伏并网仿真的时候波形难看是一回事更麻烦的是逆变器控制容易乱——直流母线电压被光伏输出拖着晃MPPT那点功率变化根本稳不住母线。后来把储能电池加进直流母线侧整个系统的状态完全不一样了母线电压稳了逆变器并网电流的波形也干净了光伏本身还能始终压在最大功率点上工作。这篇文章就把我最近做的这个“光伏MPPT储能电池单向并网逆变器”的Simulink仿真项目拆开讲包括储能电池参与频率调节的思路、逆变器单向并网的控制链以及整个模型搭建过程中那些不写进教材里的调试坑。先说明一下系统定位这个方案适合分布式屋顶光伏、小型工商业光伏这类应用特点是容量不大、以自消纳和就地并网为主不需要做双向潮流和离网运行所以逆变器侧采用单向并网设计——能量从光伏和储能侧流向电网不搞反向充放电控制复杂度低很多也符合很多地区对分布式光伏并网的实际要求。1. 系统拓扑与能量流光伏、储能、单向并网逆变器怎么搭1.1 为什么一定要加储能电池先说个直观的结论MPPT负责让光伏出力保持在最大功率点但MPPT本身不解决功率波动的问题。光伏阵列在最大功率点附近的输出是随辐照实时变化的辐照从1000W/m²跳到600W/m²输出功率可能瞬间掉40%以上。如果直流母线直接挂在这种波动源上母线电压就会跟着大幅波动后级逆变器的输入条件不稳定并网电流质量必然恶化。储能电池的第一个作用就是平抑这种瞬态功率波动。电池并联在直流母线上相当于一个能量缓冲池光伏功率瞬时大于并网指令功率时多余的能量充进电池光伏功率突然跌落时电池放电补上缺口保证流入逆变器的功率相对平滑。这是储能电池在直流侧最核心的价值也是这个方案能稳定运行的前提。储能电池的第二个作用是参与电网频率调节。逆变器并网后输出的是具有一定频率和相位的交流电但当电网频率偏离额定值比如50Hz±0.2Hz范围之外时储能系统可以通过自动调整输出功率来响应频率偏离——电网频率偏低时增加放电功率电网频率偏高时转为充电吸收功率。这种“按频率自动调功率”的特性就是标题里说的“储能电池实现功率的自动频率调节”本质上是借鉴了传统发电机的一次调频下垂特性。1.2 拓扑方案对比与选择光伏、储能、逆变器三者的连接方式有几种主流做法仿真前必须先选型。我在这项目里对比过两种直接列个表说明差异拓扑方案连接方式优点缺点是否推荐方案A共直流母线光伏经Boost升压接入母线电池经双向DC-DC接入母线母线统一供给逆变器控制相对独立各模块可分别优化仿真模型最直观多一级变换器效率有损推荐本例采用方案B电池直接并联母线光伏经Boost接入母线电池直接并联母线电容少一级变换器效率高母线电压被电池电压钳位MPPT可调范围变小充放电控制受限适合特定小功率场景方案C交流侧耦合光伏逆变器和储能变流器分别接交流侧模块化程度高需要两个并网接口控制协调复杂仿真成本高不太适合本项目我做这个仿真选的是方案A。原因是共直流母线拓扑里每个模块的功能边界很清楚Boost负责MPPT电池接口变换器负责母线电压稳定和功率平衡逆变器只管把直流功率逆变成交流并到电网上。调试时哪一路出问题直接看对应模块的波形就能定位不用在模块间来回追根因。1.3 整个系统的能量流逻辑完整能量流是这样的光伏阵列输出直流电经Boost变换器升压占空比由MPPT算法实时调节保证光伏组件工作点贴在最大功率点附近。直流母线电压维持在某个设定值——这个设定值由母线电压控制器给出储能电池接口变换器通过充放电来维持母线电压稳定。逆变器从直流母线取电通过PWM调制输出交流电流经过LCL滤波器滤除高频开关纹波并网电流与电网电压同频同相单位功率因数。当电网频率偏移额定值时频率检测模块输出偏差信号叠加到电池功率指令上自动调整充电或放电功率。这个逻辑如果翻译成Simulink里的模块连线其实就是“直流侧三个源光伏、电池、逆变器汇在一条母线上功率平衡决定母线电压母线电压反馈给电池控制器逆变器只负责把能量搬出去”。2. 光伏阵列建模与MPPT算法准确追踪最大功率点的软硬协同2.1 光伏电池等效模型与输出特性光伏电池的经典等效模型是一个电流源并联一个二极管再串上串联电阻和并联电阻。这个模型直接决定了PV曲线的形状。稍微简化一点说光伏电池的输出电压和电流关系满足I I_ph - I_sat * [exp(q*(V IR_s) / (nkT)) - 1] - (V IR_s) / R_sh这个公式不用手工算Simulink的PV Array模块已经内置了完整的模型。但理解这个公式的意义在于你才能看懂为什么MPPT要存在光伏电池的P-V曲线是一条先升后降的单峰曲线。在曲线左侧功率随电压升高而增大到达最大功率点Maximum Power Point, MPP后电压继续升高功率反而下降。MPPT算法本质上就是沿着这条曲线找到峰值的动态过程。我在用Simulink的PV Array模块时设置了如下关键参数这是模拟一块250W左右的组件参数数值开路电压Voc37.5V短路电流Isc8.5A最大功率点电压Vmp30V最大功率点电流Imp8.0A串联电池数这种组件内部通常N_ser60并联电池串数1光照强度1000W/m²标准测试条件温度25°C仿真时如果你用的是模块内置光伏阵列光照和温度都可以直接作为外部输入接到模块上方便你做辐照阶跃测试——这是验证MPPT跟踪速度最常用的手段。2.2 扰动观察法PO的实现细节MPPT算法种类很多最常见的三个是恒定电压法、扰动观察法PO和电导增量法INC。恒定电压法最简单但精度差只适合粗略估算INC精度高但实现复杂PO是精度和实现复杂度之间最平衡的选择也是我做这个仿真时的首选。PO的核心逻辑只有四句话对输出电压施加一个扰动每次加或减一个固定步长计算扰动后的功率与扰动前的功率比较如果功率增大说明扰动方向正确继续朝同方向扰动如果功率减小说明方向反了下一次反方向扰动在Simulink里实现PO我建议用MATLAB Function模块或S-Function。如果用MATLAB Function参考代码如下function Vref mppt_pand0(V, I, V_prev, P_prev, step) % 当前功率 P_curr V * I; % 判断扰动方向 if P_curr P_prev if V V_prev Vref V step; else Vref V - step; end else if V V_prev Vref V - step; else Vref V step; end end % 更新参数用memory模块或延迟模块保证时序 end注意这套代码里用了Vref作为MPPT的参考电压后续要接一个PI控制器把实际光伏电压调节到VrefPI控制器输出再限幅后作为Boost变换器的占空比。这比直接用MPPT输出占空比更稳妥因为在闭环控制下电压是缓变量不容易因为辐照突变导致占空比大幅跳变。2.3 从仿真结果判断MPPT是否收敛仿真跑完怎么判断MPPT做得好不好我的经验是抓三个信号光伏输出功率P、光伏输出电压V、MPPT参考电压Vref。把这三路信号放到同一个Scope看以下几点稳态时P是否稳定在设定辐照下的最大功率附近。比如1000W/m²时理论上应该是260W仿真稳定后功率波动不超过3%说明MPPT精度OK。辐照阶跃变化时P能否快速重新收敛。比如辐照从1000W/m²降到800W/m²MPPT跟过去的时间一般在0.1s到0.5s之间算合格。Vref是否存在持续振荡。如果Vref在稳态时还来回跳说明扰动步长太大需要把步长减小但步长太小又会影响跟踪速度所以步长选择本质上是个权衡。我实测下来步长选0.5V左右、采样周期选0.01s到0.02s在大多数场景下都能兼顾精度和速度。当然如果你用的是电导增量法参数逻辑会有些区别但验证思路一样。提示幅照突变瞬间MPPT给出的是新的Vref但Boost变换器把光伏电压拉到新参考点需要时间所以这段时间内输出功率会有短暂波动不是算法出了错而是执行机构的固有响应。3. 储能电池的自动频率响应下垂控制核心逻辑与SOC保护3.1 电池建模与充放电约束在Simulink中我用的是Simscape Electrical库里的Battery模块选锂电池类型Lithium-Ion设置额定电压、容量Ah、初始SOC等参数。仿真层面的电池模型不需要太精细但必须体现两个特性端电压随SOC变化和充放电内阻差异。我用的参数如下额定电压96V由额定容量下串联单体数决定额定容量60Ah初始SOC70%充放电响应时间1s左右内阻根据电池类型自动计算默认值就可以电池接口变换器我习惯用一个双向Buck-Boost模型简化代替。虽然实际工程里电池接口变换器的设计很讲究但仿真阶段核心是它能否响应功率指令、能否维持直流母线电压。双向DK的占空比由母线电压控制器产生——母线电压偏高说明光伏功率过剩电池进入充电模式拉低母线母线电压偏低电池放电补充功率。3.2 有功-频率下垂控制的仿真实现储能电池“自动频率调节”并不是什么玄学核心就是一条下垂曲线Droop Curve。频率下垂控制的思想来自电力系统一次调频当电网频率偏离额定值时具备调频能力的电源自动调整输出功率。默认下垂公式P_ref P_base - K_f * (f - f_nom)其中f_nom 50Hz或60Hz取决于项目所在电网额定频率f是并网点实测频率P_base是额定工作点下的基础功率指令K_f是下垂系数单位通常是kW/Hz或者是W/HzP_ref是储能电池的目标功率指令为正表示放电为负表示充电。举一个我这套仿真里的具体数值参数数值额定频率f_nom50Hz基础功率P_base5kW放电下垂系数K_f10kW/Hz频率上限保护50.5Hz频率下限保护49.5Hz假设电网频率从50Hz降到49.9Hz那么P_ref 5kW - 10kW/Hz * (49.9 - 50) 5kW - 10kW * (-0.1) 5kW 1kW 6kW电池从5kW放电增加到6kW辅助支撑电网频率。反过来如果频率升到50.2HzP_ref 5kW - 10kW/Hz * (50.2 - 50) 3kW——电池减少放电甚至可能转成充电模式那就是吸收功率帮助频率回落。在Simulink里实现这个逻辑很简单用频率测量模块PLL的输出频率做一个数学运算经过限幅后作为电池功率指令再送到电池接口变换器的电流控制器。关键是要在功率指令后面加一个带限速的Rate Limiter模拟电池充放电切换不能太快的物理限制不然仿真里会出现不真实的瞬态冲击。3.3 SOC保护不能省这是很容易被忽略但仿真验证必须做的一步。如果电池一直在充SOC会冲到100%然后电池就充不进去了你还在按下垂曲线给它发充电指令仿真模型很快发散或者波形出现异常尖峰。反过来SOC过低也会出问题。我的做法是在电池控制器前面加SOC保护逻辑写一个简单的优先级判断function Pref soc_limit(SOC, Pref) if Pref 0 SOC 95 % 请求放电但SOC过高限制放电功率 Pref Pref * 0.2; elseif Pref 0 SOC 20 % 请求充电但SOC过低限制充电功率 Pref Pref * 0.2; end end限幅比例按实际需求调。更严谨的做法是设定SOC的死区范围比如SOC在30%~80%区间内不做限制超出区间才开始线性限制这样能避免SOC保护频繁启动导致控制抖动。3.4 频率测量的精度对下垂控制影响很大下垂控制的输入是电网频率而电网频率测量一般来源于PLL。PLL的带宽和滤波参数直接影响频率测量的动态响应。如果PLL带宽太高频率信号里会混入大量电网电压畸变的高频分量下垂控制输出就会抖如果PLL带宽太低频率响应滞后调频效果又会打折扣。我一般在Simulink里用SRF-PLL同步旋转坐标系锁相环模块带宽设在20Hz到50Hz之间实测对50Hz工频的锁定是够用的。注意仿真中模拟频率阶跃时可以直接改电网源模块的频率参数但改的时候要加一个平滑过渡直接跳变容易让PLL短时间失锁波形乱掉之后容易误判成你的下垂逻辑出了问题。4. 单向并网逆变器的控制链路PLL、电流内环与功率外环4.1 单相全桥逆变与并网电流要求本项目的逆变器拓扑选单相全桥H Bridge由四个IGBT/MOSFET开关管组成。直流母线电压通常在350V到400V之间我仿真里用400V交流侧通过LCL滤波器连接到220V/50Hz电网。这里必须强调单向并网不意味着逆变器可以随便开环工作。并网逆变器的控制核心是把输出电流控制成与电网电压同频同相的正弦波也就是单位功率因数并网。正因为是单向我们不考虑无功反送目标就是纯有功注入电网。并网电流的控制性能有两个关键指标稳态精度并网电流的幅值和相位要精确跟踪参考值THD总谐波失真尽量低于5%动态响应直流侧功率变化时并网电流能快速跟随功率指令调整。4.2 PLL锁相环的作用逆变器要并网第一件事就是知道电网电压此刻的相位和频率。PLL就是干这个的。单相系统中最常用的是单相SRF-PLL同步参考坐标系锁相环它的思路是把单相电压构造成一个虚拟的两相系统再通过Park变换计算出角度。在Simulink里可以直接用Simscape Electrical里的PLL模块也可以自己搭。自己搭的好处是能调内部PI参数这里贴一个简化思路输入电网电压瞬时值v_g内部产生一个与v_g正交的虚拟电压v_β延时90°或使用SOGI滤波器经过Park变换得到d轴分量v_d和q轴分量v_qq轴分量的误差信号送进PI控制器输出频率修正再经积分得到相位角θPLL的PI参数整定目标锁相时间在0.05s到0.1s之间稳态相位误差趋近于零。锁相时间太长并网瞬间会出现较大的冲击电流。4.3 电压外环电流内环双闭环设计逆变器并网控制我采用的是典型双闭环结构外环功率/电压环外环的任务是产生电流参考值。输入是直流母线电压或功率指令输出是并网电流的幅值参考Imax。我在这个项目里用的是母线电压外环逻辑是母线电压稳定在400V附近如果母线电压偏高说明光伏电池侧能量注入大于并网输出这时候电流参考幅值增大多送到电网一部分如果母线电压偏低减少电流参考。外环PI控制器输出的是电流幅值指令但因为我们要并网的是与电网同相的正弦电流实际电流参考指令是Iref(t) Imax * sin(θ_pll)其中θ_pll是PLL输出的电网相位。注意这里只能乘以sin(θ)不能自己随便定相位。内环电流环内环负责让实际并网电流紧紧跟随Iref(t)。这里的关键是选择控制器类型。单相并网电流是正弦量如果用传统PI控制器对正弦参考的跟踪会存在稳态误差因为PI对直流信号能实现无静差跟踪但对交流信号是有静差的。工程上有两个解决思路PR控制器比例谐振控制在50Hz处引入无限增益的谐振项实现正弦无静差跟踪dq坐标系下的PI控制将正弦量变换到旋转坐标系下变成直流量再用常规PI。在单相系统里我习惯用PR控制器。PR控制器的传递函数是G_PR(s) Kp Kr * s / (s² 2 * ζ * ω0 * s ω0²)其中ω0 2 * π * 50 rad/s。在Simulink里用零极点模块或直接搭传递函数都能实现。整定Kp和Kr的经验是先调Kp保证动态响应再加Kr消除稳态误差最后通过ζ控制带宽避免谐振峰过高。4.4 LCL滤波器参数设计要点逆变器输出是PWM高频开关信号必须经过低通滤波才能得到干净的正弦电流。LCL滤波器比单个L电感滤波效果好、体积小但会引入谐振峰设计不当会造成系统不稳定。我的设计流程是先根据额定功率和开关频率确定总电感感值范围把总电感按比例分配到逆变器侧电感L1和电网侧电感L2一般L1L2在4:1到6:1之间在L1和L2之间并上滤波电容Cf电容值按无功功率不超过并网额定功率5%来选对谐振频率f_res进行校验理想情况f_res在10倍工频和开关频率的1/2之间。仿真参数我用的这组可以当起点参数数值开关频率10kHz逆变器侧电感L12.5mH电网侧电感L20.6mH滤波电容Cf10μF谐振频率f_res约1.8kHzLCL滤波器的谐振峰容易导致电流振荡。解决的办法是在滤波电容支路上串联一个小阻尼电阻有源阻尼或无源阻尼仿真里最简单的做法是直接串电阻阻值按谐振阻抗的1/3到1/5估算。虽然实际硬件里无源阻尼会有损耗但对仿真验证控制逻辑完全够用。5. Simulink仿真模型搭建从模块选型到参数配置5.1 直流侧建模——光伏、Boost、电池接口直流侧是整个模型的源头搭建时有几个要点光伏阵列在Simulink库路径Simscape Electrical Specialized Power Systems Sources里拖出PV Array模块。双击后在参数表里填写前面那组电参数。特别说明PV Array模块的输入端口是辐照Irradiance和温度Temperature这两个可以直接接常数模块也可以接Signal Builder用于做辐照阶跃测试。Boost变换器用MOSFET或IGBT加电感和二极管、电容搭出来。也可以用Simscape Electronics里的DC-DC变换器模块不过自己搭更能看清控制逻辑。Boost的输入是光伏正负端输出是直流母线。电池接口变换器这里我用的是一个受控电流源模型简化——电池接口变换器的动态特性用PI控制器加电流源表示电池模块输出给电流源的指令。Simscape Electrical有双向DC-DC变换器模块可以直接搭但我们仿真验证重点是控制逻辑受控电流源的方式更直观、仿真速度更快。5.2 交流侧建模——全桥逆变、LCL滤波、电网全桥逆变器推荐用Universal Bridge模块桥臂数选2对应单相全桥功率开关器件选IGBT/Diode。触发信号来自PWM Generator模块载波频率设10kHz。LCL滤波器用三个串联元件搭出来L1、Cf、L2依次连接然后接入电网。电网模型用AC Voltage Source模块电压幅值设220V*sqrt(2)≈311V频率50Hz。仿真时电网内阻用一个很小的串联电阻0.1Ω左右表示避免阻抗过高导致并网电流控不进去。5.3 控制回路连接与求解器设置控制回路我习惯分成三块放在同一个Subsystem里方便梳理MPPT控制子系统输入光伏电压电流输出Boost占空比电池功率控制子系统输入频率偏差、母线电压、SOC输出电池电流指令逆变器控制子系统输入电网电压PLL、母线电压、并网电流输出PWM信号。求解器设置方面仿真步长非常关键。我之前用可变步长ode23tb仿真速度慢还偶尔发散。后来改成固定步长求解器参数推荐设置类型固定步长Fixed-step求解器ode4四阶Runge-Kutta固定步长1e-6s1μs仿真时长1s到2s足够看瞬态和稳态开关频率10kHz的PWM步长设1μs可以保证每个开关周期有100个采样点仿真精度足够又不至于慢到跑不动。如果只做控制逻辑验证可以把开关频率降到5kHz但波形会毛糙一些。5.4 模型验证标准模型建完不是能跑就行要看几个关键波形证明系统工作正常光伏输出功率曲线稳态时贴合当前辐照下的理论最大功率辐照阶跃后能快速重新收敛直流母线电压稳态在400V附近纹波在2%以内并网电流与电网电压同频同相电流波形THD小于5%储能电池SOC在合理区间内变化不越限交换功率验证光伏输出功率 电池放电功率 - 电池充电功率 并网功率这个能量守恒关系在仿真的最后1s要基本成立。6. 仿真调试中踩过的坑与参数整定心得6.1 代数环和收敛性问题这是Simulink仿真最容易踩的坑。MPPT算法里如果用电流值直接计算功率再反馈回去常常出现代数环——Simulink报错说无法求解代数环。解决办法是在反馈路径上加Memory模块或者用Unit Delay模块把信号延迟一个仿真步长。MPPT本来就是离散采样逻辑延迟一个步长完全不影响效果。母线电压外环和电池电流内环之间如果控制器之间直接串联而没有经过被控对象模型比如没有经过电容或惯性环节也可能出现代数环。记住一个原则每个PI控制器输出到输入之间的信号链路上必须存在至少一个积分环节或延迟环节这在物理上对应的是“被控对象本身是惯性系统”。6.2 固定步长设大了波形毛刺明显刚开始我把固定步长设成10μs发现并网电流波形边缘有非常明显的台阶状毛刺看起来像开关噪声但加大到开关频率的十分之一以下对比后确认就是步长太大。把步长改成1μs后毛刺基本消失。所以如果你在仿真正弦波形时看到锯齿状颗粒先查求解器步长不要急着怀疑滤波参数。6.3 PLL锁定失败导致并网电流失控我试过在电网电压波形加5次谐波畸变后PLL锁相噪声明显增大并网电流出现了低频振荡。后来给PLL前级加了一阶低通滤波器截止频率设在200Hz左右把谐波分量滤掉锁相信号就干净了。注意PLL前级滤波会引入相位延迟这个延迟会影响并网功率因数。一般来说200Hz截止频率对50Hz信号的相位延迟很小通过仿真对比确认功率因数仍在0.98以上就没问题。6.4 MPPT和母线电压控制器的配合问题这个坑最隐蔽。本来是Boost负责MPPT、电池负责母线电压但两个控制器都在调同一根直流母线相互会抢“控制权”。我第一版仿真里辐照突变后两个控制器同时响应母线电压出现约0.2s的振荡。后来我明确了一个原则MPPT控制器的带宽要低于母线电压控制器的带宽。具体操作是MPPT采样周期设0.02s控制带宽低电池母线电压控制器的PI时间常数设0.01s以内控制带宽高。这样辐照突变时母线电压控制器先把母线稳住MPPT再慢慢把光伏工作点移过去整个系统就不会出现两个执行器抢着动的情况。6.5 硬件移植时的参数差异提醒仿真调好了不等于硬件可以直接抄。几个需要保留心眼的地方仿真里的电池内阻是线性的实际电池内阻随SOC和温度变化频率响应曲线也会不一样PWM死区时间在仿真里可以设为零但实际IGBT必须有死区通常2μs到5μs死区会引入低次谐波和电压损失实际并网电流THD会高一些LCL滤波器的阻尼电阻在仿真里是理想电阻实际电阻的电感效应和温漂都会影响谐振抑制效果单向并网不等于完全不控制功率反向实际系统中母线电压异常高时还需要保护逻辑主动封锁PWM防止故障工况下能量倒灌。7. 个人实操体会把这套系统从头搭到能稳定跑出理想波形我最深的体会有两条。第一个是模块先行还是控制先行的顺序问题。我第二次搭类似系统时就学乖了先把光伏BoostMPPT这条链路单独跑通确认MPPT能跟踪然后把电池加进来跑通母线电压稳定再去动逆变器并网控制。顺序最关键的是每个阶段只有一个变量是新的出了问题立刻能定位。一上来就全连起来波形乱了根本不知道是MPPT慢了、电池保护起作用了还是PLL没锁上排查时间会翻好几倍。第二个是波形分析比模型搭建更花时间。模型搭建其实模块都是现成的真正耗时间的是反复看Scope波形、改参数、再跑、再看的循环。后来我习惯把关键信号统一导出到MATLAB工作区写个小脚本自动计算THD和能量守恒误差不用每次用肉眼盯波形参数调优的效率明显提升。这个脚本很简陋但非常实用% 仿真结束后分析 t scope_data.time; P_pv scope_data.signals(1).values; % 光伏功率 V_bus scope_data.signals(2).values; % 母线电压 I_grid scope_data.signals(3).values; % 并网电流 V_grid scope_data.signals(4).values; % 电网电压 % 稳态段取最后0.5s mask t t(end) - 0.5; disp([母线电压均值: , num2str(mean(V_bus(mask)))]); disp([母线电压纹波: , num2str(max(V_bus(mask)) - min(V_bus(mask))), V]); % 并网电流有效值 I_rms sqrt(mean(I_grid(mask).^2)); disp([并网电流有效值: , num2str(I_rms), A]); % 相位差粗算过零点时间差 end_time t(mask); grid_zero_idx find(diff(sign(V_grid(mask))) 0); curr_zero_idx find(diff(sign(I_grid(mask))) 0); ... 相位差计算略这套“光伏MPPT储能电池单向并网逆变器”方案我后来还往两个方向扩展过一是把下垂控制的K_f变成自适应参数根据SOC动态调整调频深度二是把电池接口从受控电流源模型换成完整的双向DC-DC变换器拓扑直接对比两种模型的动态差异。如果你们也正在搭类似的并网仿真建议先把直流侧的功率平衡吃透再去碰交流控制——直流侧的功率平衡逻辑理顺了逆变器并网就是水到渠成的事。