
做微电网仿真最怕的就是“看起来模型很多实际点开发现全是封装好的黑盒子”。尤其是风光柴储这种多能源混杂的系统涉及到并网离网切换和PWM控制如果对底层原理理解不透调起参来简直是在碰运气。这篇文章我从一个建模仿真工程师的角度把Simulink里搭建风光柴储微电网模型的完整逻辑、切换策略、PWM生成的底层细节以及我踩过的坑一次性讲清楚送给正在跟微电网死磕的同学。1. 先说清“风光柴储”各自的角色这套系统凭什么叫微电网微电网本质上就是一个“能自治的小型电力系统”。跟大电网不一样的是它必须自己解决“发电侧波动大、负荷侧不确定”这两个麻烦事。风光柴储四个字其实就是四种不同脾气并存的发电/储能单元的组合。搞清楚每个单元的性格才能在模型里给它们分配合理的任务。光伏单元是“随缘型选手”它的输出完全取决于光照强度和环境温度一天之内可能从满发掉到零而且毫无征兆。风电稍微好一点但同样受风速影响波动周期长还有“阵风冲击”这种突发工况。这两个可再生能源单元的最大特点就是出力不可控。柴油发电机组是“稳定型老好人”只要燃料充足、转速稳定它就能提供稳定的有功和无功支撑。缺点是响应慢启动需要时间而且成本高、有排放。在微电网里柴油机通常承担“兜底”的角色并网时它作为备用容量离网时它快速顶上为系统提供电压和频率的参考支撑。储能系统则是“快反应特种兵”。电池通过双向变换器既能充电又能放电响应速度在毫秒级。在微电网里储能的角色很灵活离网时它是“定海神针”用恒压恒频控制撑起整个孤岛系统并网时它又能切换成恒功率控制去平抑风光的波动。我见过不少初学者一开始就想把四个单元全部做得很精细结果模型卡得跑不动。我的建议是优先搞清楚每个单元在系统里的控制目标是什么再决定它的模型精度。比如如果你要研究并网离网切换过程中的暂态冲击那么风光单元可以先用受控电流源简化替代重点刻画储能和柴油机的响应特性。如果你要做MPPT算法优化再把光伏和风机的电力电子细节补上。一句话总结风光是“体能”柴储是“智力”微电网的控制核心就是三件事——平衡功率、稳住电压、维持频率。2. 建模得一步步来光伏、风电、柴油机、储能分别怎么在Simulink里落地2.1 光伏单元Boost变换器 扰动观察法MPPT光伏阵列在Simulink里直接用PV Array模块位于Simscape Electrical里就可以搭最省事的办法是直接选预设的厂商组件型号也可以自己输入开路电压、短路电流、MPPT电压电流参数。我用的典型参数是单块组件开路电压45V短路电流6A按照“16串×4并”的方式组阵最大输出功率约17.5kW。直流母线电压额定值设在750V所以光伏通过Boost电路升压接入母线。Boost的占空比由MPPT控制器给出我这里选用最常用的扰动观察法PO逻辑很朴素每隔一个控制周期给占空比加一个小的扰动量然后判断输出功率是变大了还是变小了如果功率变大就沿当前方向继续扰动否则反向。在Simulink里实现这个逻辑用一小段MATLAB Function就很干净写。核心代码逻辑类似function D MP PT(V, I, D_prev, P_prev, stepSize) P V * I; deltaP P - P_prev; if deltaP 0 D D_prev stepSize; else D D_prev - stepSize; end % 限幅保证占空比在合理范围 D max(0.1, min(0.9, D)); end扰动步长我用的是0.005太大会导致MPPT振荡明显太小又会让跟踪速度变得极慢。这个值没有标准答案需要结合开关频率和控制采样周期一起调。2.2 风力发电单元永磁同步发电机 背靠背变流器风电建模的选择比较多我推荐用永磁同步发电机PMSG 背靠背全功率变流器方案因为这种结构便于实现变速恒频控制也方便跟Simulink里的Simscape库配合。风机的原动机部分直接用公式建模桨叶捕获的机械功率为P 0.5 ρ A V³ Cp(λ, β)Cp是风能利用系数λ是叶尖速比β是桨距角。在Simulink里可以搭一个标准的计算模块也可以用风力机模型。为了方便演示我直接把一个“常数风速”输入到风力机模型里观察整个PMSG机侧和网侧变流器的响应。机侧整流器负责控制发电机转速让风机在不同风速下都能近似工作在最佳叶尖速比上。网侧逆变器负责稳定直流母线电压同时跟电网保持同步。背靠背变流器的PWM控制我在第4节细讲这里先记住一点风机能不能并入微电网关键看网侧逆变器跟系统的同步逻辑这个逻辑跟控制系统用的是强联网模式对接得不好切换瞬间就会过流保护。2.3 柴油发电机组内燃机调速 同步发电机励磁柴油机建模Simulink里最省事的是用Synchronous Machine Standard 柴油机调速器组合。调速器负责维持频率励磁系统简单用AVR模型负责维持机端电压。一个很关键的细节是柴油机的机械部分响应速度比电力电子响应慢一个数量级。它的调速器带宽一般在1~5 rad/s而PWM控制的电流环带宽可以到几千Hz。所以在微电网里柴油机和储能并联时两者之间一定要有明确的分工。我习惯用柴油机做慢速的频率支撑下垂控制储能做快速的暂态平衡V/f控制。如果反过来让柴油机去平抑毫秒级的功率波动那柴油机会一直在“哮喘”不仅并网振荡机械磨损也受不了。柴油机的初始参数我一般这样设置额定功率100kVA额定电压400V线电压额定频率50Hz极对数2。调速器用简单的PI环节加一个惯性环节。2.4 储能单元双向Buck-Boost变换器 SOC管理储能系统由电池模型和双向DC-DC变换器组成。电池用Simulink自带的Battery模块直接选“Lithium-Ion”容量可以按能量型配置比如150Ah额定电压600V左右。SOC初值我习惯设为80%这样无论是充电还是放电都有裕量。双向DC-DC有几种拓扑微电网仿真里最常用的是交错并联双向Buck-Boost。主电路很简单电感、上下两个IGBT、直流侧电容和交流侧滤波。控制目标决定了它的工作模式恒压模式直流母线电压作为控制目标在这种模式下储能实际上是系统的“电压源”离网运行时就靠它维持母线电压通过控制电感电流正向放电或反向充电来实现能量的双向流动。恒功率模式当并网运行时储能按设定功率充放电用来削峰填谷或平抑波动。在很多模型里储能那个“双向变换器”就在Boost/Buck模式之间切换注意占空比生成逻辑、软启动逻辑、以及限流逻辑尤其是离网带大负载启动的那一瞬间占空比饱和输出非常容易让直流母线过压。3. 并网与离网切换状态判断、预同步与手把手搭建逻辑3.1 切换条件与微电网“状态机”设计并网离网切换的前提是让微电网控制器清楚当前到底处于什么状态。我建议在模型里使用有限状态机来管理而不是用一堆散落的if模块。基本的运行状态有四个状态含义控制器模式GRID_CONNECTED并网运行恒功率PQ或下垂控制TRANSITION_ISLAND正在离网切换快速切换到V/f控制ISLANDED孤岛运行V/f控制TRANSITION_GRID正在并网切换预同步然后闭合静态开关在设计切换条件时要注意“区分原因”。是电网电压跌落频率越限还是有计划性的并转离不同原因对应的切换策略应该不一样。我一般的方式是并网时持续监测电网侧电压和频率一旦检测到电压低于阈值比如0.85pu持续100ms就判定为“非计划性离网”立刻打开并网开关切换控制模式如果是人为下达切换指令则是“计划性离网”可以走更平滑的先降功率后离网的流程。3.2 预同步并网不是“插上去就行”离网状态下的微电网电压和电网电压几乎不可能天然一致——幅值、频率、相位总有偏差。冒然直接闭合并网开关瞬间会产生很大的电流冲击轻则过流跳闸重则烧毁器件。预同步控制就是解决这个问题的。并网前调节微电网侧逆变器的输出电压让它无限逼近电网电压满足三个条件幅值偏差小于5%频率偏差小于0.1Hz相角偏差小于10度左右。Simulink里实现预同步我习惯用下面这种结构用PLL锁相环Simscape Electrical里有现成模块分别锁电网电压的相位θgrid和微网母线电压的相位θmg求相位差Δθ θgrid - θmg把Δθ输入一个PI控制器输出作为微电网侧电压的频率修正量并联到V/f控制器的额定频率上去幅值修正同理把电网电压幅值跟微电网输出电压幅值做差输入另一个PI控制器修正电压外环的参考值。当三个偏差量全部进入允许范围内才发送“允许并网”信号。这里我强烈建议加一个50ms左右的消抖延时避免因为瞬时扰动导致误判。注意并网开关在Simulink里用“Breaker”模块就可以但它接通瞬间的网络拓扑切换会导致数值计算上的一些高频振荡。建议在Breaker旁边并联一个小电阻比如1Ω并在控制回路里做短暂预充能明显缓解切换波形毛刺。3.3 控制模式切换的核心积分器抗饱和与初值追踪这是整个切换设计里最容易翻车、却最不被重视的环节。离网时使用V/f模式并网时使用PQ模式——两种模式下控制器输出占空比或调制波可能相差巨大。如果切换时PID控制器里的积分器没有处理好初值切换瞬间控制器输出会突变导致逆变器过流甚至系统失稳。解决办法有三个层次积分抗饱和Anti-windup所有PI控制器都配置条件积分功能限制积分器输出防止饱和初值追踪Initialization在切换前将新模式下PI控制器的积分器输出初始化为旧模式下对应控制信号的当前值使得切换前后调制波不发生突变切换过渡在离网模式切换时将电流内环的参考值先保持为切换前瞬间的测量值让系统“无感过渡”。在Simulink里PID Controller模块自带“Integrator saturation”和“Initial condition”接口可以直接接切换信号。这是很多现成模型里看不到的细节但我可以负责任地说切换时的冲击有80%以上都是因为这一块没处理好。3.4 切换瞬间的暂态波形正常的“正常异常”哪怕逻辑全对切换瞬间的电压电流波形也会有一些“毛刺”。这里面有个判断经验如果是幅值在短时间内1~2ms出现的尖峰往往是因为变压器漏感和线路寄生电容的谐振如果是持续几个工频周期的低频振荡往往是控制器带宽不足或相位裕度不够。我上次调试时离网切换后母线电压有大约30V的振荡初始以为是预同步没做好后来用频谱分析发现振荡频率约120Hz这是控制在整流侧直流电容和滤波电感之间谐振。调整了储能电流内环的PI参数把带宽从800Hz降到400Hz振荡就消下去了。所以切换表现不佳时先分清楚到底是硬件拓扑问题还是控制器问题别急着乱改参数。4. PWM控制的底层逻辑与Simulink接线细节4.1 从调制波到开关信号PWM到底在做什么PWM控制本质上就是一个“规则调制”的过程把一个可变宽度的脉冲信号送给功率开关管通过调节占空比来控制输出端的平均电压或电流。在微电网里PWM主要用在三个地方光伏的Boost变换器通过调节占空比实现MPPT储能的双向DC-DC变换器通过调节占空比控制充放电电流风电和储能的逆变器通过三相PWM产生期望的输出电压矢量。逆变器PWM最常用的是SPWM正弦脉宽调制和SVPWM空间矢量脉宽调制。在微电网控制型逆变器里SVPWM的表现通常更好一些因为它的直流电压利用率比SPWM高15%左右谐波也更小。不过Simulink自带的PWM Generator模块中用SPWM做起来最直接适合教学演示和前期验证。如果你做的是工程级模型建议用SVPWM算法自己搭一个调制模块。4.2 SPWM模块的接线方式Simulink里生成SPWM信号其实不需要额外的工具箱。核心元器件就两个Repeating Sequence生成三角载波Relational Operator把调制波和载波做比较。拿单相逆变器举例正弦调制波ref_sin和三角载波carrier比较当调制波大于载波时输出高电平上管导通、下管关断反之输出低电平。三相逆变器就是生成三路相位相差120°的正弦调制波分别和三路载波比较。不过直接用这种“裸比较器”生成的PWM没有死区时间。在实际逆变器中同一桥臂的上下两个IGBT不能同时导通否则会造成直流侧短路。死区时间的典型设置在1μs~5μs之间IGBT器件一般选2μs左右。Simulink里有几种做法如果用的是Simscape Electrical里的PWM Generator直接在参数面板里设置“Dead time(s)”如果自己搭比较电路可以将比较后的信号通过一个“On-Off Delay”即延迟模块实现上管信号延迟死区时间再给到下管的互补端。我在实际测试中吃过一个亏为了偷懒把死区设成0仿真能跑通但实际工程中这是绝对不行的。如果你在做硬件在环仿真一定要带上死区模型否则控制效果完全不具备参考价值。4.3 载波频率怎么选仿真步长的底层约束PWM载波频率开关频率的选择决定了两个问题谐波水平和仿真速度。开关频率越高输出波形谐波越小滤波器体积也可以更小但仿真的时间步长必须足够小才能捕捉到PWM脉冲的边沿否则仿真结果会失真。如果载波是10kHz一个周期100μs那你至少每个周期采50个点仿真步长得设到2μs左右。这意味着50ms的仿真时间会跑很久。我一般做系统级微电网仿真时用5kHz载波步长设为1μs~2μs。如果只是为了验证控制逻辑可以适当降低波形质量把开关频率降到2kHz仿真时间能快好几倍。但如果你研究的SVPWM谐波特性这类“偷懒”就不行了。4.4 IGBT驱动信号与Simulink逻辑信号的坑还有一个特别多新手踩的坑Simulink里逻辑信号类型。SPWM比较器输出的信号类型是“Boolean”但IGBT模块的G极输入端口需要的是“double”或者Simscape里的物理信号。很多人直接把比较器输出连到IGBT结果仿真报错“Input port expects double”。解决办法也很简单在信号中间加一个Logical to Physical Signal ConverterSimscape里或者直接用DataType Conversion转成double。类似的坑还有把布尔信号直接送给示波器时波形只有0和1这是正常的但如果把布尔信号送到PI控制器里大多数情况下会报错。5. 参数整定与仿真波形验证怎么判断模型真的搭对了5.1 先定系统基准再调控制器微电网仿真和单台变频器仿真最大的区别就是“多机并联”。多台变换器并联存在环流问题所以滤波电感、直流母线电容和线路阻抗的归一化参数必须统一。我给的基准参数仅供参考算是一个通用起点参数数值说明直流母线电压750V储能/光伏共用交流母线电压380V/50Hz三相四线制微网储能容量150Ah锂电池SOC初值80%双向DC-DC开关频率10kHz含死区2μs逆变器开关频率5kHz三相两电平VSC交流滤波电感1mHL型滤波器直流母线电容3mF支撑母线电压柴油发电机额定功率100kVA400V/50Hz5.2 PI参数整定从“拍脑袋”到“有依据”很多论文里喜欢直接甩出Kp、Ki看起来很高深其实整个微电网的PI整定是有规律可循的。我每次搭新模型都用“带宽法”来整定以储能双向DC-DC的电流内环为例电流内环的PI要确保开环穿越频率在开关频率的1/10~1/5左右。开关频率10kHz电流环带宽设在1kHz~2kHz。先用传递函数计算理论PI值再在Simulink里用Bode图或线性化工具验证。电压外环的带宽必须比电流内环低5~10倍一般取100~200Hz。实际调参时我习惯用“电阻负载试验”法离网模式下先把储能逆变器接一个纯电阻负载逐步加大负载观察母线电压恢复速度。如果电压不能快速恢复增大Kp如果出现持续振荡减小Ki并检查相位裕度。5.3 完整仿真时序怎么设计仿真波形不是跑起来就完事。我建议每次仿真都设计一个“带剧本”的时序验证不同阶段的控制行为。拿我最近做的一个模型举例完整时序如下0~0.3s光伏Boost启动直流母线电压从零爬升到750V0.3~0.5s储能逆变器启动微网作为受控电压源空载建压0.5~1.0s微网并入大电网储能切换为PQ模式1.0~1.5s光伏逐步增加出力风电接入并网1.5~2.5s模拟电网故障微网离网储能瞬间切到V/f模式柴油机启动2.5~4.0s柴油机稳定出功储能从大功率放电过渡到小幅波动实现呢功率平衡4.0~5.0s电网恢复执行预同步微网重新并网恢复正常运行。这个时序能覆盖建压、并网、离网、孤岛稳定、预同步、重新并网的全部关键过程。每个阶段观察对应的关键指标母线电压波动范围、频率波动、储能SOC、并网开关前后的电流冲击、三相电流的THD。5.4 三条判断模型“健康”与否的硬指标直流母线电压波动正常运行情况下波动不超过±5%离网切换瞬间不超过±10%并能在50ms内恢复并网瞬间电流冲击并网开关闭合瞬间的冲击电流峰值原则上不应超过额定电流的1.2倍如果超过2倍基本可以断定预同步没做好孤岛频率稳定性离网后频率稳态偏差不超过±0.1Hz暂态最大偏差不超过±1Hz。如果这些指标不满足先不要急着改控制参数回去检查主电路参数和切换逻辑大多数问题都出在那些看似不起眼的地方。6. 从搭建到调通的实测记录六次崩溃换来的避坑清单6.1 初值不一致导致切换瞬间直接发散第一次搭模型时我为了省事将储能逆变器预同步控制里的PI初值设成了0切换时调制波从0突然跳到0.6左右的正弦波相当于给电感加了一个阶跃电压电流直接冲到额定值的3倍。解决办法就是前面说过的“初值追踪”切换瞬间把旧模式的调制波信号值赋给新模式的PI积分器初值。这一步不能省。6.2 PLL在离网时会失锁有个现象很奇特并网时PLL锁定大电网相位锁得好好的一旦离网PLL反而失去了参考。为什么因为离网以后微网的频率和相位是被储能以V/f模式支撑起来的这本身是一个受控量如果用并网点电压的相位去反馈给PLL就形成了一个不稳定的循环——尤其是在相位跃变发生时PLL的PI输出饱和导致它锁到的频率一直在抖。我的做法是离网状态下直接把预同步PLL冻结掉切换成自由运行模式由储能V/f控制器的额定频率参考提供相位。等到需要重新并网时再重新启动预同步PLL去锁大电网的相位。6.3 死区时间导致波形畸变如果把死区时间设成10μs电流较小时轻载死区会导致输出电压产生明显的低次谐波波形看起来像削顶。后来我把死区压到2μs波形畸变立刻好很多。这提醒我仿真里的死区不能随便设个值它需要跟器件和电流采样频率相匹配。6.4 参数没成体系调了PI就崩了刚开始调PI只调其中一个环路的参数结果并网状态好了离网又振荡了。后来我意识到控制器参数是“成套”设计的。电流内环带宽定了电压外环的带宽也就定了两个环路之间还要留3倍以上的倍差不然内环和外环会共振。每改一个PI都要同时检查另一个环路是否还有足够的相位裕度。6.5 数据类型转换导致“找不到原因”的报错有一阵子模型时好时坏后来发现是“Repeating Sequence”输出的S函数信号类型问题。Simulink在快速仿真模式下有些模块默认数据类型是double而PWM比较器要求Boolean就会报“Dimension or data type mismatch”的错。解决方式是给所有比较器和与门加上显式的类型转换模块虽然是笨办法但有规律也方便排查。6.6 开关频率和仿真步长不匹配有一次把开关频率改成2kHz后为了提速把固定步长设成了5μs结果波形全是毛刺怎么看都不对。原因很简单一个载波周期是500μs5μs的步长还没把开关边沿采样清楚产生的脉冲宽度是被“强制量化”的。所以我把固定步长改成1μs后毛刺基本消失。仿真时间和精度之间一定要先保证步长相对开关频率足够小。以上这些坑如果模型是我自己一步步从零搭建的出现问题还能立刻定位到模块但如果用的是网上下载的别人封装好的模型遇到问题真的只能抓瞎。所以我始终建议初学阶段哪怕慢一点也要亲手把每个功能块搭一遍老话说得没错模型可以复用但认知不能复用。