氢能圈子里最近聊得最多的,除了电解槽本身,就是“怎么把风光这类不靠谱的电源喂给一个必须要稳定吃饭的电解槽”。纯并网制氢还好说,电网兜底,波动全被掩盖了;一旦往离网、弱并网、或者“自发自用为主”的方向走,光伏MPPT追踪出来的功率曲线和PEM电解槽要求的恒功率输入,基本就是一对天生的冤家。我去年一整年就在折腾这个“光伏MPPT+蓄电池储能+风机发电互补的电解槽恒功率PEM制氢”模型,从Simulink里的第一个光伏阵列模块,到最终把恒功率控制跑通,中间踩了不少坑,也把不少“看起来合理但实际跑不通”的方案重新推翻过。这篇文章就把整个建模思路、控制策略、参数整定和仿真验证过程完整梳理一遍,给正在做类似课题或者准备往风光制氢方向转的朋友一个可以参考的完整框架。
这个模型的核心价值在于:它不是简单把光伏、风机、电池和电解槽四个模块堆在一起,而是需要回答一个工程本质问题——在风光出力随机波动的情况下,怎么通过储能和能量管理调度,让PEM电解槽始终工作在设定功率附近,保证制氢效率和安全。内容会比较长,涉及光伏MPPT算法原理、风机模型简化、蓄电池SOC管理、PEM电解槽极化特性、恒功率控制器的设计逻辑,以及整个系统在Simulink里的搭模和调参技巧。无论你是刚开始接触制氢仿真,还是已经跑过一些基础模型但被能量管理策略卡住,这篇都值得花点时间看完。
1. 为什么单一光伏或风机直接制氢,跑不通“恒功率”这道坎
1.1 光伏MPPT输出和电解槽恒功率需求之间的天然矛盾
光伏阵列的出力曲线,本质上由光照强度和温度共同决定。哪怕是MPPT算法做到了教科书级别的完美追踪,输出的也是“随天气变化的一条波动曲线”,而不是一条设定好的直线。PEM电解槽这边,虽然比碱性电解槽的动态响应快很多,可以在秒级甚至毫秒级范围调整电流,但它对电源侧的功率稳定性是有明确要求的——特别是当系统目标设为“恒功率制氢”时,输入功率的持续波动会让电解槽的工作点频繁漂移,造成三个实际问题。
第一个问题是效率损失。PEM电解槽的效率曲线并不是平坦的,它在中低电流密度区有一个相对高效的工作区间,过高或过低的功率输入都会让单位制氢电耗上升。如果光伏在中午猛晒太阳时电解槽顶着高电流跑,到了下午光照衰减,功率又掉下来,就相当于让电解槽不断在高低效率区之间横跳,整体电耗自然不划算。第二个问题是热管理压力。电解槽的产热和散热系统通常是按某个设计功率点配置的,输入功率大幅波动时,电堆温度会跟着波动,温度一旦偏离最佳区间(PEM一般是60到80摄氏度),膜电极的耐久性就会受到明显影响。第三是产氢压力波动。恒功率控制如果做不到位,氢气产量会随着输入功率一起波动,后端的氢处理系统、储氢罐的压缩机控制都会跟着遭殃。
所以问题的本质就很清楚了:光伏和风电是“看天吃饭”的电源,PEM电解槽是“要稳定饭量”的负载,中间必须有一个缓冲环节来消化这种不平衡,这也正是蓄电池在这套系统里存在的根本意义。
1.2 风光互补到底能弥补多少,储能为什么仍是不可替代的一环
风电和光伏在时间尺度上的互补性是真实存在的。白天光照好但往往风小,夜晚风大但光伏完全没输出;夏季日照强但气旋活动弱,冬季大风天又经常是阴雨天。把风机和光伏放在同一个制氢系统里,从年尺度上看确实能提高总发电量的平稳度。但这里要泼一盆冷水:风光互补只能改善“长时间尺度上”的出力波动,对“分钟级”“秒级”的随机波动几乎无能为力。一片云飘过来,光伏出力可能在十几秒内掉一半,风机出力更是随着风速突变来回抖,这种尺度的波动,靠风光互济是互补不掉的,必须靠储能来压。
蓄电池在这套系统里的角色可以理解为“功率平衡器”。光伏和风机加起来发的电,优先满足电解槽设定功率;发多了,多余的电充进电池;发少了,电池放电补上差额。这样一来,电解槽看到的外部电源特性就“相当于”一个相对稳定的直流源,恒功率控制才有实现的基础。蓄电池的容量和功率配置,直接决定了系统能扛住多大的扰动、能维持多长时间的恒功率输出,这也是后面会重点展开的内容。
2. PEM电解槽建模:先把负载特性吃透,才知道要控什么
2.1 极化曲线和等效电路模型,是恒功率控制的“底层地图”
PEM电解槽建模的起点是极化曲线。简单说,就是电解槽电压随电流密度变化的关系。这个关系可以拆成三部分来看:可逆电压(也叫开路电压,是电化学反应热力学决定的)、活化过电位(克服电化学反应活化能需要的额外电压)、欧姆过电位(质子交换膜和接触电阻带来的电压降)。另外还有传质过电位,在电流密度特别高的时候才明显,常规工况下可以先忽略。
如果要把模型做成Simulink里的仿真模块,比较实用的做法是用一个等效电路加数学方程来描述。等效电路大致是:一个理想电压源(可逆电压)串联一个电荷转移电阻和一个欧姆电阻,再并联一个双电层电容。这个电容的存在,对应的是电解槽的动态响应特性——电压不会瞬间跳变,而是有一个短暂的电暂态过渡过程。对于恒功率控制来说,这个动态过程很关键,如果忽略它,设计出来的控制器在实际电解槽上可能超调严重。
电流密度和温度对极化曲线的影响也很明显。温度升高时,活化过电位和欧姆过电位都会下降,曲线整体往下压,同样电流下需要的电压更低,制氢效率更高。这也是PEM电解槽运行温度要尽量稳定在最佳区间的原因。在建模时,建议把温度作为输入参数而不是固定常数,这样后面可以方便地做温度扰动对恒功率控制影响的测试。
2.2 恒功率目标值怎么定,不能拍脑袋
在开始设计控制器之前,得先把“恒功率”的功率值定下来。这个值可不是简单拿光伏装机容量乘一个系数就完事,它需要考虑电解槽的额定工作区间、电源侧的全年出力统计特性、蓄电池的容量约束,三者放一起才能算出来。
第一步,看电解槽的额定功率和允许工作范围。PEM电解槽通常允许在30%到100%额定功率之间运行,低于这个范围,产氢效率下降明显,甚至可能因为电流密度过低导致气体纯度波动。所以恒功率目标值至少要在电解槽最小允许功率以上。第二步,看风光资源的年出力特性。如果你所在地区光伏冬季出力严重下降,而风机容量又不够大,那恒功率目标定得太高,蓄电池会在夜间或连续阴天时被深度放电,系统根本撑不住。第三步,算蓄电池的经济容量。功率目标每提高1千瓦,意味着需要蓄电池承担的补充功率缺口更大,容量和放电倍率要求也跟着提高,成本上升非常明显。
我最后定的恒功率目标值大约在系统峰值发电功率的50%到60%之间。这个比例下,蓄电池不需要经常大倍率放电,SOC能维持在一个健康区间,电解槽也基本处在中高电流密度的效率亮点附近。具体多少合适,跟当地风光资源曲线强相关,做模型的人手里有数据,可以跑一年时序仿真统计一下再拍板,别凭感觉定,后面调控制参数会非常痛苦。
2.3 制氢量、电耗和气体输出端怎么同步建模
恒功率控制最终要体现到制氢量上。PEM电解槽的产氢速率服从法拉第定律,理想情况下电流每通过96500库仑电量,就产生0.5摩尔氢气。但实际因为电流效率不是100%,计算产氢量时要乘一个效率系数,这个系数在高电流密度区会略有下降。
Simulink里建模时,可以把电流信号直接用增益模块换算成氢气摩尔流量,再接一个积分器就得到累计产量。电耗方面,实时功率的积分就是累计电量,再和累计产氢量做除法,就能得到实时制氢电耗,单位是千瓦时每标方。这个值在仿真后期分析里的用处非常大,它能把“恒功率控制是否真的让系统高效运行”这件事具象化。我在跑完仿真后常用的一条曲线就是电耗随时间的变化,看它是否稳定在一个窄区间内,比盯着功率曲线判断控制效果好直观得多。
3. 光伏MPPT模型与风机模型的参数整定:仿真能跑和跑得准是两回事
3.1 光伏阵列建模的工程简化思路
Simulink里的光伏阵列模块已经做得很成熟,可以直接用,关键是怎么配置参数才能匹配你要研究的场景。光伏阵列的等效模型由一个电流源并联一个二极管、并联电阻和串联电阻组成,模块需要输入的典型参数是组件开路电压、短路电流、最大功率点电压和最大功率点电流,以及标准测试条件下的光照和温度。在实际做法中,你可以直接用一组真实组件的铭牌参数填进去,组件厂商提供的数据表中这些值都有。
阵列规模怎么定?这取决于你系统里电解槽的功率等级。举个例子,如果恒功率目标设为10千瓦,考虑光伏单独供电时的最大出力要留出一定余量,光伏阵列峰值功率做到15到20千瓦比较合适。模块里会要求串并联配置,串联数量由直流母线电压决定,并联数量由总功率决定,两条约束一夹,数值范围基本就锁定了。
需要特别提醒的是,光伏组件的输出特性受温度和光照影响的规律,一定要在模型里做变量而非常量处理。Simulink模块可以直接接收光照和温度的同步变化,我建议做一个时间序列输入——比如一个60秒的光照变化序列,模拟“云层飘过”的场景,这样后面测试恒功率控制响应时,激励才真实。
3.2 MPPT算法选型:扰动观察法和电导增量法的实战对比
光伏系统要最大程度利用光照资源,MPPT算法是必备的。最常见的两个选择是扰动观察法和电导增量法。扰动观察法实现简单,周期性给电压加一个小扰动,观察功率变化方向来决定下一步扰动方向,优点是好写、计算量小,缺点是稳态时会在最大功率点附近来回震荡,而且光照快速变化时可能追踪方向判断错。电导增量法通过判断电导变化率和瞬时电导之间的关系来定位最大功率点,追踪精度更高、光照突变时响应更快,但计算复杂一些,步长选择也需要更小心。
在这套制氢系统里,我最终选了电导增量法。原因不是它精度比扰动观察法高多少,而是在光照快速突变场景下,电导增量法误判方向的可能性更低。制氢系统对功率连续性要求高,MPPT如果频繁误判,直流母线上会出现明显的功率抖动,后端的恒功率控制器就要忙着补偿,蓄电池充放电切换也会变得更频繁,对寿命不友好。当然,如果你的模型里光照变化比较平缓,扰动观察法也完全够用,选型标准是“扰动强度是否在你的系统承受范围内”。
MPPT的输出是参考电压或占空比,需要接一个DC-DC变换器来实现电压跟踪。常用的是Boost升压电路,MPPT算法算出的参考电压与实测光伏电压比较后,通过PI控制器产生占空比信号。这里PI参数要配合开关频率来整定,别直接抄别人的值,因为你的电容、电感参数不同,环路特性完全不一样。
3.3 风力发电模型怎么简化才既合理又不失真
风机建模如果做全阶气动模型,算叶轮上的空气动力学特性,会非常复杂,但研究风氢互补系统时,没有必要做到那么细。工程上常用的做法是简化模型:输入风速,用功率系数曲线计算出风机输出功率。风机的输出功率公式为P = 0.5 × 空气密度 × 扫风面积 × 风速的三次方 × 功率系数。功率系数是叶尖速比和桨距角的函数,现实中由风机控制器保证它尽量维持在最大值附近。在仿真模型里,可以把功率系数简化为一个查表模块,输入风速和转速,输出对应的机械功率。
我建议在风机模型后面加一个一阶惯性环节,用来模拟传动链和发电机的动态响应。风机的功率不是瞬时跟随风速变化的,它有一定滞后,这个惯性时间常数大概在几百毫秒到几秒之间,具体看你参考的机组类型。忽略这个惯性,直流母线上的功率波动会看起来特别“尖锐”,导致蓄电池频繁动作,这和实际系统是不符的。
风速序列的生成也有讲究。用一组固定的正弦波叠加不同频率分量的方法来构成风速,比直接用常数风速要真实得多。典型做法是:基本风加渐变风加阵风再加随机噪声分量。每种分量对应实际气象中不同尺度的风速变化,组合起来就能模拟实际风况。算例中我用的是一组6到14米每秒之间变化的风速序列,4秒左右一个波动周期,偏小风时段用蓄电池顶上,偏大风时段给蓄电池充电,整个系统的交互逻辑能充分跑出来。
4. 蓄电池储能系统:容量配置、SOC管理和双向变换器控制
4.1 蓄电池在“补充缺口”和“吸收盈余”两个角色之间切换
蓄电池在这套系统里不是独立供电源,它是光伏、风机和电解槽之间的功率调节器。当光伏加风机的总出力高于电解槽设定功率时,功率盈余给蓄电池充电;低于设定功率时,蓄电池放电补差额。这种角色定位意味着蓄电池的充放电功率必须能双向连续调节,而且响应速度要足够快。
电池建模方面,Simulink里有电池模块可以直接用。参数需要设定的包括额定容量、额定电压、初始SOC、内阻和充放电特性曲线。锂电池在制氢应用里的优势是高倍率充放电能力强、循环寿命长,模型里建议选磷酸铁锂特性,因为它平台期宽、安全性好,也是目前制氢项目配套储能的常见选择。
额定容量的选取,我用了一个简化估算方法:先确定需要蓄电池连续支撑的最长无光弱风时长,比如设计目标是夜间连续8小时维持电解槽恒功率运行,那么需要的能量就是恒功率目标值乘以8小时。再考虑电池放电深度不能超过80%,以及系统效率系数,最终容量等于需要能量除以放电深度再除以效率。这个估算值是底线,实际配置最好再乘1.2到1.5的系数,给SOC管理留出调节空间。
4.2 SOC限值与充放电优先级,是保护电池和保障制氢平衡的平衡点
SOC管理策略的核心是两套限值:工作限值和保护限值。工作限值范围可以设定在20%到90%之间,在这个范围内,蓄电池可以自由充放电,充放电优先级由系统功率差额自然决定。到达上限90%时,如果风光出力还大于电解槽需求,系统就要进入限功率模式,让光伏或风机适当弃掉一部分功率,防止电池过充。到达下限20%时,电池停止放电,此时如果电源侧出力不足,电解槽也只能降功率运行,恒功率目标暂时无法维持。
这里有一个在设计时很容易忽略的细节:SOC工作区间不能设得太窄。有人为了保证电解槽恒功率稳定,把SOC范围压缩到40%到60%之间,结果电池容量利用率极低,稍微一个小的功率扰动就触顶或触底,反而没起到缓冲效果。我试下来的感觉是,SOC工作范围给宽一些,让电池有足够的“活动空间”,恒功率控制才更从容。当然,具体范围还要结合电池的健康管理要求来平衡。
双向变换器控制方面,蓄电池侧用一个双向DC-DC变换器,控制目标就是维持直流母线电压稳定或者直接控制充放电功率。在恒功率制氢的场景下,我建议采用功率控制模式:根据能量管理模块下发的功率参考值,正值为放电,负值为充电,变换器执行电流内环跟踪。功率外环加电流内环的双闭环结构是标准做法,关键是电流内环的PI参数要按变换器电感电流的响应速度来整定,别让电流响应慢于功率参考值的变化速度,否则蓄电池就会变成“拖延症患者”,电解槽功率波动就压不住。
5. 能量管理协调控制:恒功率电解制氢的调度核心
5.1 三层结构:从全局决策到设备执行的完整链路
能量管理系统是这套模型的大脑,我按三层结构来搭。第一层是预测和计划层,根据未来几个小时的天气预报数据,估算光伏和风机的预期出力曲线,结合电解槽恒功率目标和电池SOC状态,制定一个基础调度计划。这层在实际工程里对应的是日前或日内调度系统,在仿真模型里可以先简化,用一个期望功率数组表示即可。
第二层是实时协调层,这是仿真的核心。它实时采集光伏出力、风机出力、母线电压、电池SOC和电解槽当前功率,按照一个功率平衡方程计算系统功率差额,然后根据SOC状态决定功率分配指令。第三层是设备执行层,MPPT控制器、风机控制器、蓄电池双向变换器控制器、电解槽恒功率控制器分别接收下发的指令,完成具体执行。
这种分层的好处是职责清晰,每层可以独立测试。以前我习惯把所有逻辑写在一个大模块里,后来发现调试的时候,任何一个参数变化都会耦合影响其他部分,根本没法定位问题。拆成三层之后,每层都有明确的输入和输出边界,有问题直接看哪一层的数据异常就行。
5.2 恒功率控制的功率平衡方程与模式切换逻辑
实时协调层的核心逻辑可以用一个简单方程描述:P_pv + P_wind + P_battery = P_electrolyzer。这里P_electrolyzer就是恒功率目标值,P_pv和P_wind是当前时刻的实测出力,P_battery是需要蓄电池提供的功率,正值为放电负值为充电。协调层做的事,就是根据这个式子实时算出P_battery指令,下发给电池变换器。
但运行中会出现几个特殊工况不能按这个简单式子执行。第一种是电池SOC达到上限,此时P_battery被钳位为0,如果光伏加风机出力超过电解槽目标值,就必须触发弃光或弃风,也就是给光伏或风机发送限功率指令。第二种是电池SOC到下限,P_battery同样被钳位为0,如果电源侧不足,电解槽只能转为跟随模式,功率目标值实时下调到电源侧总出力。第三种是电源总出力加电池最大放电功率仍然小于电解槽最低运行功率,此时电解槽需要进入待机状态,不能勉强维持过低功率运行。
模式切换逻辑在Simulink里用状态流模块来实现比较合适。可以定义三个主状态:恒功率制氢模式、降功率制氢模式、待机模式。状态机里的切换条件就是上面提到的SOC限值和功率差额限值。我在调试中遇到最多的问题是模式切换瞬间的功率指令跳变,如果不在切换路径上设置斜坡限制器,电解槽功率会突然跃升或跌落,恒功率控制直接失效。后来在每条切换路径上都加了一个斜坡模块,限制功率变化率,这个问题才彻底解决。
6. Simulink模型搭建与仿真验证中的踩坑记录
6.1 模型架构、模块选型和仿真步长的匹配
整个模型我按信号流方向分块布置:光伏子系统、风机子系统、蓄电池子系统、PEM电解槽子系统、能量管理子系统。每个子系统内部自包含,输入输出都通过Goto和From标签连接,这样模型结构清晰,也方便单独注释。子系统之间不要直接用跨模块的物理连接线,特别是多人协作时,乱七八糟的连线会让你改一个参数找半天。
仿真步长这里有个大坑。MPPT算法里的PWM开关频率一般设置成10到20千赫兹,但整个系统仿真如果按这个步长跑,仿真速度慢到没法看,而且光伏MPPT和能量管理在时间尺度上完全不是一个量级。我的做法是把模型拆成两个时间尺度:高频部分,比如DC-DC变换器和MPPT,单独用一个子系统跑较大步长但带离散PWM的版本;低频部分,能量管理和电解槽热动态,用连续求解器大步长跑。仿真配置里选择变步长求解器,最大步长限制在1e-3秒左右,PWM逻辑不单独显式建模,而是用平均值模型替代——用占空比直接计算电压电流关系,避免在每个开关周期都做详细计算。
很多人会低估平均值模型和开关模型之间的差异。如果你研究的核心是能量管理策略,平均值模型完全够用,而且你会有更多精力去调控制参数而不是等仿真时间。如果研究的是变换器自身的纹波和谐波特性,那必须上开关模型。做系统级制氢仿真,前者是更理性的选择。
6.2 数值发散和代数环问题:不是设置问题就是结构问题
我遇到过的仿真报错,排名第一的是“代数环无法求解”。最典型的场景出现在能量管理模块中,如果你在功率平衡计算中使用的光伏功率信号又反向影响MPPT限制指令,而这个指令又回过去影响光伏输出功率,信号链路里形成了一个瞬时的反馈闭环,Simulink就会报代数环。解决方法通常是在反馈路径上插入记忆模块或者一阶惯性环节,把瞬时耦合变成有延迟的耦合。插记忆模块的代价是会有一步的计算延迟,但在这个控制场景下完全可接受。
第二个高频问题是数值发散。光伏模型在光照剧烈变化时,最大功率点快速移动,Boost电路里的电流或电压信号可能出现尖峰,超过求解器的默认容差,仿真就崩了。解决办法是把求解器容差适当放宽,然后检查控制器的饱和限幅是否都加到位。控制器的输出一定要有饱和限幅,特别是PI控制器,没有限幅的积分项在输入突变时会导致严重的超调和振荡。我习惯给每个PI控制器输出都套一个饱和度模块,并把积分器限幅也加上,这是避免发散的最有效手段。
6.3 仿真结果分析:从功率曲线到电解槽工作点检查
模型跑通之后,光看功率曲线是不够的,要形成一个系统性的结果分析流程。我会依次检查四组曲线。第一组是功率平衡曲线,光伏、风机、电池、电解槽四路功率放在同一张图里,确认每个时刻都满足功率平衡关系。重点看蓄电池功率指令是否超过其最大允许充放电功率,如果超了,说明容量配置偏小。第二组是直流母线电压,正常的母线电压应该稳定在设定值附近,波动幅度不能超过5%,如果母线电压跌落,说明能量管理模块的下发指令和变换器执行的功率不匹配。
第三组是电解槽状态曲线,包括电流、电压、功率、产氢速率和累计制氢电耗。这里重点确认电解槽功率是否严格维持在恒功率目标附近,波动幅度有多少,电耗曲线是否稳定。如果功率波动在±5%以内,电耗曲线基本水平,我认为恒功率控制是合格的。第四组是SOC曲线,看蓄电池SOC是否一直徘徊在工作限值以内,如果频繁触顶或触底,说明容量配置或SOC工作区间设置不合理,需要回头调整。
我在一次仿真中曾发现SOC在500秒内从40%冲到90%然后快速回落到30%以下,对照功率曲线才发现是模式切换时电池功率指令出现了反复反转——一会儿大功率充电一会大功率放电。后来排查发现,能量管理模块里功率差额计算有个符号错误,判断条件写反了。这类问题单看SOC曲线很难定位,要结合切换状态和功率指令一起查,所以建议在模型里加一个“模式指示”输出端口,方便查问题。
7. 实测中总结的几条优化心得和后续方向
整个模型跑通之后,有几条经验我想特别拎出来说。第一条是光伏限功率策略要提前设计好,不要等SOC触顶了才被动弃光。可以在能量管理模块里加一个SOC预测功能,根据当前功率差额和SOC变化率,预估到达SOC上限的时间,提前几秒钟启动减载指令,这样能避免频繁触顶导致的功率抖动。第二条是电解槽的功率变化率限制值,最好做成一阶低通滤波的形式而不是简单斜坡,低通滤波可以同时滤掉高频毛刺,让电解槽的工作点更平滑。实测下来这个改动对电耗曲线的平稳度很有帮助。第三条是蓄电池在低SOC时的放电功率限制不能和正常状态一样,我建议把最大放电功率做成SOC的函数,SOC越低,允许的最大放电功率越小,这能有效保护电池不过放。
后面可以在这个基础上做的方向,一是把光伏、风电的时序数据换成实际场站的一年8760小时数据,跑全年仿真看系统的年制氢量和电解槽利用率,这个指标对项目经济性测算特别有用。二是把电解槽模型从集中参数升级到温度分布参数,研究负载变化对电堆内部温度梯度的影响。三是加入制氢系统的动态响应实验数据,对模型做参数校正,让仿真结果更贴近真实电解槽。每一步扩展都会引出新的问题,但基础框架一旦搭好,后续就是往里面增加细节的事了。