尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

光储直流微电网Simulink仿真建模:从拓扑设计到MPPT与双闭环控制实战

光储直流微电网Simulink仿真建模:从拓扑设计到MPPT与双闭环控制实战 在新能源方向摸爬滚打这些年光储直流微电网一直是个绕不开的话题。不管你是做毕业设计的研究生还是刚进微电网团队跟项目的工程师在动手搭硬件之前用Simulink把系统跑通、把控制逻辑验证一遍基本是性价比最高的路线。今天就把我自己搭建光储直流微电网仿真模型的一整套思路、参数计算方法和调试踩坑记录整理出来希望能帮正在做这块的朋友少走点弯路。1. 内容整体设计与思路拆解1.1 为什么非要用直流母线拓扑我早期也纠结过一个问题既然现在交流微电网那么多为什么还要专门搭一个直流微电网的仿真实际上光伏组件本身发出来就是直流电储能电池也是直流部件如果走交流母线每一个端口都得加DC-AC逆变器、锁相环、同步控制环节多了损耗大、效率低、控制复杂。直流母线的好处在于光伏通过DC-DC升压后直接挂在直流母线上储能通过双向DC-DC变换器接上去负载如果是直流负载那就更省事整条链路中间只多了一道电压变换不牵扯频率和相位同步的问题。从仿真角度看直流微电网比交流微电网好搭的地方在于DC-DC变换器本质上是开关电路状态量少控制目标单一就是母线电压不像逆变器那样还得考虑dq变换、无功功率、谐波电流。但别觉得直流就简单母线电压能不能稳得住多个变换器并联协调怎么设计光照突变怎么办这些反而是直流系统最核心的难点。1.2 系统层级怎么划分我在建模之前习惯先把系统拆成三层物理层、控制层、调度层。物理层就是光伏阵列、Boost电路、双向Buck-Boost电路、母线电容、负载电阻这些功率器件控制层负责各个变换器的PWM信号生成比如光伏侧用MPPT产生参考电压外环电压环内环电流环做双闭环储能侧用母线电压外环和电感电流内环做双向控制调度层则是根据光照、负载、电池SOC来决定系统工作模式比如母线电压给定值怎么变储能充电还是放电是否限功率。仿真模型里前两层必须建模第三层可以简化为有限状态机Finite State Machine或者用MATLAB Function写逻辑判断。我在实际搭建过程中第三层用状态流图Stateflow比较多比纯逻辑框图清晰得多后文会详细讲。1.3 仿真步长和模型结构的取舍不少刚开始做仿真的同学上来就把IGBT的开关频率设成几十kHz然后跑一个持续好几秒的工况结果电脑风扇狂转半天跑不完。这里有个关键认知微电网仿真分为电磁暂态仿真和动态仿真两种目的。如果关注的是IGBT通断瞬间的电压电流尖峰、死区效应那必须用微秒级步长加详细器件模型如果关注的是系统级的功率平衡、电压调节、模式切换那用平均值模型Average Model就够了跑一天工况也没有压力。我自己的习惯是先搭平均值模型验证控制逻辑一周内把系统跑通再针对研究点比如故障穿越、环流抑制切换成详细模型做精确分析。仿真步长方面平均值模型建议设置成Ts1e-5到1e-4秒详细模型至少要Ts1e-6秒以下否则开关动作不准确。2. 核心模块建模与原理分析2.1 光伏电池模型不能只会查表光伏电池的仿真模型在Simulink里最常用的是工程数学模型也就是用光照强度和温度算出光生电流、饱和电流然后根据二极管方程得到I-V曲线。核心方程虽然各个文献写法略有区别但原理都是一样的光生电流方程$$ I_{ph} (I_{sc} K_i \cdot \Delta T) \cdot \frac{S}{S_{ref}} $$反向饱和电流近似$$ I_0 I_{rs} \cdot \left(\frac{T}{T_{ref}}\right)^3 \cdot \exp\left(\frac{q \cdot E_g}{k \cdot A} \cdot \left(\frac{1}{T_{ref}} - \frac{1}{T}\right)\right) $$如果你只是想要一个能用的光伏模型直接用Simulink自带的PV Array模块属于Simscape Electrical也挺好参数设置界面里有厂商数据表可以导入常见的组件参数。但我要提醒一点用这个模块做MPPT验证没问题如果后续做小信号分析或者自定义控制最好还是用自己写的光伏方程模型因为SPICE级别的模型封装太深中间变量不容易拿出来用。我自己最常用的做法是用MATLAB Function写一个光伏模型的函数模块输入是光照强度S、温度T、端口电压V_pv输出是端口电流I_pv。核心就是根据模型参数生成每个电压点对应的电流值组合成一条完整的I-V曲线供后面的Boost电路使用。这样做的好处是整个模型是透明的我可以在任何时刻看到最大功率点的变化轨迹。2.2 光伏侧Boost变换器与MPPT光伏板和直流母线之间我选的是Boost升压拓扑。为什么必须是Boost因为光伏板的MPP电压一般只有30~50V以常见的72片电池板为例而直流母线是400V量级只能升压不能降压。用Boost拓扑还有一个好处光伏侧的电流是连续的MPPT算法采样到的电流纹波比Buck要小得多对占空比的调整更平滑。MPPT算法这块实际工程中用得最多的是扰动观察法PO和电导增量法INC。扰动观察法思路非常朴素给工作电压一个小的正扰动deltaV看功率是增大了还是减小了如果增大了就继续往这个方向扰动如果变小了就反过来。这种算法的优点是实现简单、不需要光照传感器缺点是稳态时会在最大功率点附近来回振荡光照强度快速变化时还可能误判方向。电导增量法的判断依据是最大功率点处的功率导数为零即$$ \frac{dP}{dV} I V \cdot \frac{dI}{dV} 0 $$实现起来比PO多算一次微分和判断分支但对光照突变的响应速度更快。我建议初学者先用PO把整个系统的电压控制逻辑跑通后面再升级成INC算法也不迟。MPPT输出的参考电压经过电压环和电流环后产生Boost的PWM占空比。2.3 储能双向DC-DC变换器储能电池要既能充电又能放电所以必须用双向DC-DC变换器。我选的是两象限半桥式双向Buck-Boost电路它的结构简洁电池侧接一个电感电感另一端接两个IGBT组成的半桥半桥中点接电感上管集电极接母线正极下管发射极接母线负极电池组并接在半桥中点与负极之间。工作模式可以这样理解放电模式Buck模式上桥臂的IGBT以PWM方式工作下桥臂完全关断。这个时候电能从直流母线流向电池侧的电感输出电压被降到电池电压锂电池对外放电。占空比D满足关系U_bat D * U_dc。充电模式Boost模式下桥臂的IGBT工作上桥臂完全关断。电池通过电感向母线抬升电压电能从电池流向直流母线电池被充电。此时母线电压U_dc U_bat / (1 - D)。双向变换器的控制目标是维持母线电压恒定。正常工作时母线电压给定值设为400V电压外环的输出作为电感电流的给定值如果母线电压低于400V说明系统功率不足储能需要放电外环给出一个正的电感电流参考如果母线电压高于400V说明光伏发的电用不完储能进入充电状态电感电流参考变成负值。这个电流参考经过电流内环控制后生成PWM信号电流内环可以用PI控制器限幅要特别注意以防止过大的电流冲击损坏器件。2.4 直流母线电容的参数选择直流母线电容在整个系统中最好理解但又最容易忽视。它本质上是一个能量缓冲池光伏和储能与负载之间的瞬时功率差值都靠它来吸收或释放。电容越大电压波动越小但动态响应变慢、成本变高、体积变大。电容越小电压波动越大系统越容易失稳。工程上常用的经验公式是$$ C_{dc} \frac{2 \cdot P_{rated} \cdot \Delta t}{U_{dc,rated}^2 - (U_{dc,rated} - \Delta U_{dc})^2} $$其中P_rated是变换器的额定功率Δt是允许的暂态持续时间一般取1~5msΔU_dc是允许的最大电压跌落。比如额定功率5kW母线电压400V允许暂态时电压跌落到380V以下不超过5ms那么电容应该至少取多大代入公式算一下$$ C_{dc} \frac{2 \times 5000 \times 0.005}{400^2 - 380^2} \approx 0.0032F 3200\mu F $$实际仿真中我一般取4000μF左右留一点余量。这个公式同样适用于直流母线电容的实物选型值得收藏。3. 实操过程与核心环节实现3.1 从零搭模型的环境准备和整体接线打开Simulink之后我建议先不要急着拖模块。第一步是新建一个模型文件打开Simscape Electrical库把电源、变换器、负载等主功率模块拖出来。在主电路层面顺序是这样的光伏阵列模块接到Boost变换器的输入侧光伏阵列正极接Boost输入电感负极接输入电容的负极。Boost输出正极接直流母线正极Boost输出负极接直流母线负极。直流母线之间并一个大容值的母线电容同时加一个电压测量模块这个测量值就是整个系统控制的反馈量。储能电池通过双向DC-DC变换器接到母线上电池正极接双向变换器的电感端变换器的高压侧接到直流母线。直流负载用可调电阻R_load模拟或者用可控电流源模拟更复杂的动态负载。注意Simulink里电气连接一定要通过电气端口蓝色端口控制信号是普通信号线单箭头两者混接会导致错误。还有一点电路必须要有参考地。功率电路如果不接地很多仿真器会报矩阵奇异错误或者数值不收敛。在参数设置里IGBT/MOSFET我建议先用Ideal Switch或者MosfetIdeal仿真速度更快。等到做损耗分析时再换成具体的器件型号。3.2 光伏MPPT控制子系统搭建MPPT子系统我会放在Boost变换器控制信号的前面。以一个1000W的光伏阵列为例V_mpp大概30VI_mpp大概33A实际受光照变化时工作点肯定不是固定不变的。PO算法的流程图大致是采样当前光伏电压V_pv和电流I_pv计算功率P_pv V_pv * I_pv。与上一周期的功率P_old做差得到dP。如果dP 0说明扰动方向正确继续沿原方向扰动电压如果dP 0说明方向错了反向扰动。将新的电压参考值V_ref更新到下一次循环作为电压外环的给定值。用Simulink实现时我会用Unit Delay模块保存上一周期的功率和电压参考值用MATLAB Function写一整个判断逻辑最后输出到电压外环的参考端。需要注意PO的扰动步长deltaV的选取太小会导致跟踪速度极慢太大则稳态功率振荡严重。我测试下来针对一个1000W的电池板0.5V~1V的步长比较合适。扰动周期也要做控制。我习惯把MPPT的控制周期设为0.01秒100Hz而电流环的周期是1kHz这样MPPT的调制频率远低于内环响应频率系统和稳定性都能保证。如果MPPT和电流环一样快很容易引起整个控制环路振荡。3.3 储能双向变换器双闭环控制实现储能侧的控制是整个直流微电网里最关键的环节。整个闭环采用电压外环电流内环的传统结构母线电压测量值V_dc与参考值V_ref400V比较偏差送入电压外环PI控制器。电压外环PI输出作为电感电流的参考值I_L_ref。I_L_ref与实测电感电流I_L比较偏差送入电流内环PI控制器。电流内环输出叠加前馈电压后生成PWM占空比。为什么要用双闭环而不是单电压环因为电感电流是变化比较快的物理量单电压环直接控制占空比时相位裕度小、响应慢、抗扰动性差。加了电流内环之后电压环只需要给出电流指令内环以极快的速度跟踪这个指令整个系统带宽更高、稳定性更好。这就像公司管理一样总经理定目标电压环中层去执行并快速调整策略电流环。PI参数怎么给我提供一下我自己惯用的整定顺序你可以按这个思路去调先断开电压外环给一个固定的sine信号给电流参考从零开始调电流内环Kp和Ki。Kp从小到大加加到电流波形出现明显振荡后回调30%~50%Ki的整定是消除稳态误差大概设为Kp的5%~20%。电流内环稳定后接上电压外环。电压外环的响应速度要明显慢于电流内环所以它的带宽通常是电流环的1/10到1/5。如果电压环太慢母线电压恢复时间太长如果太快两个环之间会相互干涉出现低频振荡。我用经验法初调后典型值大概是电流内环Kp0.8、Ki20电压外环Kp2、Ki50放电方向限幅[0, 100]A充电方向限幅[-100, 0]A。实际模型里PI控制器的输出限幅极其重要我见过太多人忘了加限幅导致占空比跑飞或者电流冲到几千安直接把仿真搞发散。3.4 模式切换逻辑与能量管理策略光储直流微电网最核心的工作模式可以总结成四句话光照充足、负载较小光伏供负载多余电量给电池充电。光照充足、负载很大光伏和电池同时放电给负载。光照不足、负载较小光伏和电池共同维持母线电压。光照不足、负载过大且电池SOC低为了安全需要切掉次要负载保障重要负载供电。这些模式切换怎么实现我在Stateflow里画一个状态机状态分别为MPPT模式储能充电/放电跟随母线电压偏差自动决定、限功率模式电池SOC过低或过高时的保护和负载投切模式。仿真中电池SOC的获取可以用Simulink自带的Battery模块它会输出SOC在0~100之间。SOC高于90%说明电池满了这时候如果光伏功率还有富余应该让Boost退出MPPT模式改为恒压控制直接把母线电压稳住就好SOC低于20%说明电池亏电应该限制光伏侧的最大输出功率同时适当降低非关键负载功率防止电池过放加速老化。这个控制逻辑看着简单但在工程中做错的人真不少。很多人只顾着让MPPT永远输出最大功率不给储能剩一点充电空间导致电池充到105%才报警。我建议你在Stateflow里加一个光伏功率参考值的输出端口然后用这个参考值去限制Boost变换器的最大输出功率而不是让Boost完全自主运行。3.5 仿真参数设置和运行准备模型接线完毕、控制参数和工作模式配置好后一定要做以下几项检查直流母线的初始电压仿真开始瞬间母线电容上是没电的如果直接把母线电压给定为400V储能会瞬间输出巨大电流容易导致仿真发散。在电容的Initial voltage参数里设一个合理初值比如350V让母线电压平滑过渡到400V。光伏输入电容的初始电压同理设置一个接近MPP电压的初始值比如25V让Boost电路一开始工作点就在合理范围。求解器我用的是discrete离散求解器采样时间设为1e-5秒。如果在平均值模型下用Continuous变形长失步倾向小一些但切换时容易碰到过零检测问题。电源波动时序光照强度用Signal Builder或者Step信号组合来模拟突变。我常用的是从1000W/m²突变到800W/m²再恢复到1200W/m²的工矿温度设置成恒定25°C。每隔0.5秒做一次切换观察母线电压的动态恢复过程。运行完毕后要做的第一件事不是看波形漂不漂亮而是用Scope同时观察母线电压、光伏输出功率、储能电感电流和电池SOC四个变量。如果母线电压在模式切换后2秒内恢复到±5%以内储能电流没有持续振荡光伏功率变化平滑就说明控制参数基本可用。4. 常见问题与排查技巧实录4.1 仿真分分钟就发散步长与代数环的锅这是几乎每个初学者都会碰到的问题仿真一跑就报“Solver was unable to reduce the step size without violating minimum step size”或者“Singularity可能会出现在...”。我从自己的调试经历出发给几个排查方向步长太大如果你用的是变步长求解器把最大步长改小一个数量级试试。比如从1e-3改成1e-5跑得慢一点不要紧先把结果跑稳定。代数环Simulink会在控制回路里自动检出代数环当输入输出之间存在瞬时反馈时就会出现“Algebraic Loop”。解决的通用做法是在反馈回路的某一处加一个很小的Unit Delay模块比如把采样时间设成1e-6秒打碎这个环。占空比跑到边界用Scope看一下PWM的信号是否在0到1之间。如果PI输出饱和在100%说明限幅设宽或者PI整定过大减小Kp是首选。开关管间歇导通有些模型在参数突变时会出现开关信号抖动这也容易导致数值发散。给PWM发生器加一个很小的滞环或者用平均值模型绕开开关细节。4.2 母线电压稳不住储能SOC越界或者MPPT突变母线电压跌落或抬升首先怀疑功率不平衡。我调试时喜欢把光伏输出功率和负载功率画在同一张图上如果两者之和跟储能功率对不上说明中间模型接错了。但也有两个坑是特别隐蔽的一个是储能SOC越界。仿真很久之后电池SOC降到10%以下储能已经无法继续放电但控制系统还在按双闭环输出电流指令这时候母线电压就会持续降低且无法恢复。排查方法很简单看SOC是否长期处于边界如果是需要把运行时间缩短或在能量管理中加上SOC保护逻辑。另一个是MPPT跟踪速度跟不上光照突变。当光照从1000跃变到200时光伏功率瞬间跌落如果储能电压环响应不够快母线电压会出现几十伏的暂降。这是实际电站也会遇到的情况处理办法是适当提高电压外环PI比例系数或者在前馈支路增加光伏输出功率的测量值实时前馈到电流参考端提高动态响应。4.3 储能电流波形发尖发毛PWM频率与采样频率不匹配如果电感电流波形出现锯齿状的毛刺且在平均值模型下特别明显大概率是PWM载波频率、功率模块的采样率和控制模块的采样率不匹配导致的混叠效应。比如PWM开关频率是10kHz但你用Scope的采样频率也是10kHz刚好采到开关周期与开关周期对齐的位置波形就显得不自然。解决方法在Scope里把采样时间设为远小于开关周期或者加一个平均滤波器再显示。4.4 双向变换器模式切换瞬间电压尖峰储能从充电切到放电的瞬间电感电流要从负值穿越到正值如果控制环里的积分项没有及时清零或者切换逻辑有死区设置不合理会出现明显的电压过冲。我一般在Stateflow的模式切换状态里加一个Mode_Change标志位当标志位发生变化时对两个PI控制器执行Reset操作Simulink里的PI模块自带外部重置端口。另外在电流参考值上加一个速率限制器Rate Limiter限制电感电流的变化率防止瞬间过流。这个在实物直接切换时会烧管子仿真阶段务必练好这个保护习惯。4.5 实物联调前必做的仿真验证如果你后面打算把控制算法下载到DSP或PLC上建议在仿真阶段就做好两件事第一把Simulink里的控制部分改成离散形式采样时间尽量与实际控制器的中断周期一致比如10kHz控制频率对应100μs周期第二做一次硬件在环HIL测试前把所有饱和限制、故障标志、手动/自动切换逻辑在仿真里完整模拟一遍不要等到上柜子了才发现逻辑漏洞。写在最后的一点体会这套光储直流微电网Simulink模型我搭建和迭代了大半年期间经历了从平均模型到详细模型的转换也经历了控制参数从“能跑”到“跑得稳”的漫长调试。如果让我给刚上手的读者一个建议先追求闭环稳定再追求动态最优先跑通系统再叠加各种扰动。还有一个深有体会的点不要过度迷信Simulink自带的默认参数。母线电容值、PI限幅、初始电压这些细节每一次看似不经意的参数设定背后都应该有公式推导或者物理理解作为支撑。仿真里那些“看似能过但有隐患”的设置在实物上多半会变成冒烟测试。后续如果你想继续扩展可以试着往这个基础模型里加更多内容比如低压配电网里的多台储能变换器并联协调、光伏阵列局部遮挡时的多峰值MPPT、以及故障状态下的穿越控制策略等。这些方向我在实际项目中陆续做过等有时间了再单独拿出来写一写。
返回列表