做微电网仿真,最怕的就是“看起来模型很多,实际点开发现全是封装好的黑盒子”。尤其是风光柴储这种多能源混杂的系统,涉及到并网离网切换和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控制器给出,我这里选用最常用的扰动观察法(P&O),逻辑很朴素:每隔一个控制周期,给占空比加一个小的扰动量,然后判断输出功率是变大了还是变小了,如果功率变大,就沿当前方向继续扰动,否则反向。
在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 Converter(Simscape里)或者直接用DataType Conversion转成double。类似的坑还有:把布尔信号直接送给示波器时,波形只有0和1,这是正常的;但如果把布尔信号送到PI控制器里,大多数情况下会报错。
5. 参数整定与仿真波形验证:怎么判断模型真的搭对了
5.1 先定系统基准,再调控制器
微电网仿真和单台变频器仿真最大的区别就是“多机并联”。多台变换器并联存在环流问题,所以滤波电感、直流母线电容和线路阻抗的归一化参数必须统一。
我给的基准参数仅供参考,算是一个通用起点:
| 参数 | 数值 | 说明 |
|---|---|---|
| 直流母线电压 | 750V | 储能/光伏共用 |
| 交流母线电压 | 380V/50Hz | 三相四线制微网 |
| 储能容量 | 150Ah | 锂电池,SOC初值80% |
| 双向DC-DC开关频率 | 10kHz | 含死区2μs |
| 逆变器开关频率 | 5kHz | 三相两电平VSC |
| 交流滤波电感 | 1mH | L型滤波器 |
| 直流母线电容 | 3mF | 支撑母线电压 |
| 柴油发电机额定功率 | 100kVA | 400V/50Hz |
5.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启动,直流母线电压从零爬升到750V;
- 0.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μs,5μs的步长还没把开关边沿采样清楚,产生的脉冲宽度是被“强制量化”的。所以,我把固定步长改成1μs后,毛刺基本消失。仿真时间和精度之间,一定要先保证步长相对开关频率足够小。
以上这些坑,如果模型是我自己一步步从零搭建的,出现问题还能立刻定位到模块;但如果用的是网上下载的别人封装好的模型,遇到问题真的只能抓瞎。所以我始终建议,初学阶段哪怕慢一点,也要亲手把每个功能块搭一遍,老话说得没错:模型可以复用,但认知不能复用。