资讯动态

风电与压缩空气储能联合系统建模及Matlab/Simulink仿真全解析

发布时间:2026/9/8 8:52:51 来源:尧图企业网站定制
风电本身出力波动大这是所有做新能源的人绕不开的痛点。单独看风力涡轮机系统模型做再精细也解决不了“有风不能发、无风不能发”的尴尬单独看压缩空气储能又缺了一个真实的上游能量来源。所以把风力涡轮机系统和压缩空气储能CAES联合起来做建模与实验研究是一个特别典型的“源-储-荷”耦合优化问题。这篇内容我会从头拆解这个联合系统的建模思路、Matlab仿真实现细节、控制策略构建以及我在实际调试中踩过的坑希望能给正在做相关课题的同行一些参考。先说清楚这个项目是干什么的风力涡轮机将风能转化为机械能通过永磁同步发电机PMSG输出电能电能经过变换器后有两个去向——直接供给负载或电网或者带动压缩机把空气压缩并存储起来当风能不足时储气罐释放高压空气推动膨胀机带动发电机补电。整个系统的建模涉及空气动力学、热力学、电磁场与电力电子多个学科的交叉Matlab/Simulink是完成这类多物理域联合仿真的主力工具。这套仿真平台既能用来做控制策略验证也能为后续物理实验台的搭建提供参数依据适合做风电、储能方向课题的研究生以及从事微电网和可再生能源集成开发的工程师参考。1. 项目整体设计与建模思路1.1 为什么选择“风电 压缩空气储能”这个组合做联合运行建模前首先要回答一个问题储能的方案这么多锂电池、飞轮、超级电容为什么非要选压缩空气我的判断主要有三点。第一压缩空气储能的容量规模容易做大储气罐的容积决定了储能上限扩展成本远低于电池堆叠适合风电场的规模化配套。第二它的功率等级和风力发电机组的输出水平能对上位一台几百千瓦的压缩机配合对应容积的储气罐就能在一个风速周期内实现比较完整的能量吞吐。第三从研究角度看压缩空气储能过程中涉及的压力、温度、流量变化都是可以用经典热力学方程描述的这意味着模型精度可控这非常适合做机理建模和实验对照。不过也必须坦诚一个事实压缩空气储能尤其是传统CAES的往返效率通常只有40%到60%比电化学储能要低不少。但它在联合系统中承担的角色不是单纯“储电”而是“错峰调节”和“稳定出力”只要控制策略能把弃风和低风时段的风能有效吸收进去系统整体的能源利用率是明显提升的。这就引出了一个关键问题联合运行时的能量分配策略如何设计也就成了整个建模工作的核心主线。1.2 联合系统架构与能量流走向一套完整的联合运行系统从物理结构上可以分为四个子系统风力发电子系统包括风轮、传动链、永磁同步发电机和机侧变流器负责将风能转变成电能。储能子系统包括压缩机、储气罐、膨胀机涡轮机、换热器和相关阀门负责电能的“机械能—内能—机械能”转换与存储。电力电子接口包括AC/DC/AC变流器、DC母线以及储能子系统的电动/发电双向接口负责不同工况下功率方向的控制。负荷/电网侧即电能最终流向的终端。在建模时我不建议一开始就把所有细节都塞进模型里。正确的做法是“先主链、后辅链”先把“风轮—发电机—电能输出”这条主功率通道和“压缩机—储气罐—膨胀机”这条储能通道建好然后再加入控制回路和热交换环节。否则模型规模一大仿真的数值稳定性就非常难控制。整个系统的能量流分三种工况工况A风能充足负载较小多出来的风电驱动压缩机向储气罐充气完成储能。工况B风能不足负载较大储气罐放气膨胀机驱动发电机补足电能缺口。工况C风能匹配负载储能系统不工作或处于待机状态风电直接供给负载。这三种工况之间切换的判据就是风电输出功率与负载需求功率的差值。至于这个差值怎么处理涉及控制策略中的滞环设计这在后面第四节会展开说。2. 风力涡轮机系统建模的核心细节2.1 风能捕获模型不仅仅是一个Cp(λ,β)公式风力涡轮机建模的第一个模块是风轮它的核心任务是把风速转化为机械功率。标准的数学模型大家都见过% 风力机输出机械功率计算 function Pm windTurbinePower(rho, R, Vw, Cp) % rho: 空气密度, 单位 kg/m^3 % R: 风轮半径, 单位 m % Vw: 实际风速, 单位 m/s % Cp: 风能利用系数 A pi * R^2; % 扫风面积 Pm 0.5 * rho * A * Vw^3 * Cp; end这个公式看起来简单但实际建模时坑非常多。最大的坑在于Cp的计算。Cp不是常数它是叶尖速比λ和桨距角β的二元函数。不同的风机厂家、不同翼型这个特性曲线完全不同。通用的近似公式有很多种工程上用得比较多的是下面这种function Cp calcCp(lambda, beta) % 基于通用桨叶特性的Cp近似公式 % lambda: 叶尖速比, lambda omega_r * R / Vw % beta: 桨距角, 单位 deg lambda_i 1 / (1/(lambda 0.02*beta) - 0.003/(beta^3 1)); Cp 0.5176 * (116/lambda_i - 0.4*beta - 5) * exp(-21/lambda_i) 0.0068 * lambda; end在Matlab里建模时我强烈建议把λ的取值范围限制在4到15之间超出这个区间的Cp值直接置零。为什么因为在极低风速下风机还没启动切入风速以下高风速下又已经限功率运行切出风速以上你如果让数值计算在那些非物理区间继续跑就会出现“风速5m/s却输出兆瓦级功率”这种离谱结果。还有一个容易被忽视的细节空气密度ρ应该是温度的函数。很多教材为了简化直接取1.225kg/m³但如果你要做全年仿真温度从-20℃到35℃变化空气密度差大约有15%这直接影响了功率捕获的数值精度。我的做法是在模型中加一个温度输入口用下面的式子算实时密度function rho airDensity(T, P) % T: 环境温度, 单位 K % P: 大气压力, 单位 Pa R_air 287.05; % 空气气体常数, J/(kg*K) rho P / (R_air * T); end2.2 传动链与发电机模型两质块模型和dq轴方程风力机的传动链建模很多入门教程直接用单质块模型把风轮和发电机拧成一体。但做联合储能研究时我建议用两质块模型因为储能工况下压缩机的负载突变会对传动链产生明显的扭振冲击单质块模型完全反映不出这个动态过程。两质块模型的动力学方程% 两质块传动链模型 J_t * d(omega_t)/dt T_aero - T_damp - K_shaft * (theta_t - theta_g) - B_shaft * (omega_t - omega_g); J_g * d(omega_g)/dt K_shaft * (theta_t - theta_g) B_shaft * (omega_t - omega_g) - T_em;其中一个关键变量是扭转角度差θt−θg它直接决定了传动轴的扭矩。在实际代码中用状态空间法实现时需要把刚度系数K_shaft折减到合适的数量级。我记得第一次仿真时直接把刚度值取成10^8结果数值积分器步长被迫降到微秒级整个仿真慢到无法接受。后来把刚度折减到适合仿真的范围步长才恢复正常。发电机模型用同步旋转坐标系下的dq电压方程vd Rs*id Ld*d(id)/dt - omega_e*Lq*iq; vq Rs*iq Lq*d(iq)/dt omega_e*(Ld*id psi_f); Te 1.5 * p * (psi_f*iq (Ld-Lq)*id*iq);这一部分在Simulink里可以直接用标么值系统搭建但我个人更推荐用S函数或者Matlab Function模块来封装便于后续做批量参数扫描。这里有一个非常实用的经验电流环内环的PI参数调节至少要把带宽设定在基波频率的10倍以上否则发电机在额定转速运行时电流响应会出现明显的相位滞后导致输出功率波动。3. 压缩空气储能系统建模的实际考量3.1 压缩机与膨胀机的热力过程模型压缩空气储能系统建模的核心不在于那些管路阀门而在于压缩机、膨胀机和储气室这三个部件的热力过程描述。先说压缩机工程上最常用的是多变压缩过程模型假设空气是理想气体压缩机耗功为function Wc compressorPower(m_flow, cp, T_in, p_ratio, gamma, eta_c) % m_flow: 空气质量流量, kg/s % cp: 定压比热容, J/(kg*K) % T_in: 进口温度, K % p_ratio: 压缩机压比 % gamma: 绝热指数, 一般取1.4 % eta_c: 压缩机等熵效率 exponent (gamma - 1) / gamma; Wc m_flow * cp * T_in * (p_ratio^exponent - 1) / eta_c; end这里最重要的问题是效率ηc不是常数它会随着压比和转速变化。如果模型里固定效率会严重高估或低估压缩机的耗电量。更精确的做法是查特性图但这需要压缩机厂商的实验数据。在实际项目里我一般用效率修正公式来近似eta_c eta_c0 * (1 - 0.2 * abs(m_flow - m_flow_nom) / m_flow_nom);这个修正虽然粗糙但比常数效率要靠谱得多尤其在做变工况仿真时能明显改善模型响应。膨胀机透平的模型相对复杂一些因为它涉及高压气体经过喷嘴加速、冲击叶轮做功的过程。我在Matlab中采用了简化的焓降模型function Wt turbinePower(m_flow, cp, T_in, p_ratio, gamma, eta_t) exponent (gamma - 1) / gamma; Wt m_flow * cp * T_in * (1 - (1/p_ratio)^exponent) * eta_t; end膨胀机的关键特征是它对入口压力非常敏感。储气罐压力从5MPa降到1MPa的过程中如果控制阀不能及时调节开度膨胀机的输出功率会出现大幅度的跌落。所以在联合仿真里膨胀机前面必须加一个压力调节阀模块把进入膨胀机的压力稳定在一个参考值而不是直接让储气罐压力全压作用于膨胀机。这个细节非常关键直接影响储能放电工况下的电能质量。3.2 储气室容器模型等温还是绝热储气室的建模通常有两种极端假设等温储气模型和绝热储气模型。真实的情况介于两者之间。在我的项目里综合考虑仿真精度和复杂度我选择了带热损失项的改进绝热模型。核心是压力和温度的状态方程function [dP, dT] airStorageTank(P, T, m_in, m_out, V_tank, T_amb, R_air, cv, UA) % 储气室内空气质量变化 dm m_in - m_out; % 基于能量守恒的气体温度变化 % Q_loss 是储气室壁面热损失 Q_loss UA * (T - T_amb); % 内能变化 流入空气焓 - 流出空气焓 - 热损失 dT (m_in * cp * T_in - m_out * cp * T - Q_loss - cv * T * dm) / (cv * mass); % 理想气体状态方程体积固定时 P m*R*T/V dP (dm * R_air * T mass * R_air * dT) / V_tank; end这个模型里可调的参数是UA储气室的总传热系数乘以传热面积。如果UA设置得很大模型趋近于等温如果UA趋近于零模型趋近于绝热。根据储气罐的材料和保温层情况UA的取值差异非常大。我做实验台时用的是钢制储气罐无额外保温措施标定出来的UA大概在50W/K左右。如果你用的是地下盐穴储气这个参数就完全不同了。这里我想特地强调一个容易被忽略的问题储气室模型中空气质量流量m_in和m_out输入在数值上不能有突然的阶跃变化否则压力导数会非常大导致ODE求解器报错。我在仿真中给质量流量都加了一阶惯性滤波器时间常数取0.1秒左右实际效果非常好。4. 联合运行控制策略与Matlab平台实现4.1 能量管理控制策略滞环切换是保命的关键风电和储能联合运行最核心的控制部分是顶层的能量管理策略。它的任务是根据风速、储气罐压力、负载功率三个状态量,决定当前工作在哪个工况并分配功率流。我实现时采用了带有滞环的功率比较逻辑function mode energyManagement(P_wind, P_load, P_tank, P_max_tank, P_min_tank, dP_hyst) % 风电输出 P_wind, 负载需求 P_load % 储气罐可存储功率上限 P_max_tank, 下限 P_min_tank % 定义功率偏差 delta P_wind - P_load delta P_wind - P_load; % 滞环比较防止系统在工况边界频繁切换 if delta dP_hyst P_tank P_max_tank mode 1; % 储能充电模式 elseif delta -dP_hyst P_tank P_min_tank mode 2; % 储能放电模式 else mode 0; % 直接供电/待机模式 end end这个滞环的宽度dP_hyst必须根据风速波动的统计特性来设。如果设得太小比如只有100W那么风速稍微波动系统就会在工况A和工况C之间频繁切换机械阀门和变流器都要承受不必要的疲劳应力如果设得太大比如超过额定功率的30%那储能系统还没有开始工作就被判定为“功率不足”或者“功率过剩”白白浪费了储能容量。根据我的测试对于额定功率5kW的小型系统dP_hyst设置为额定功率的5%-8%左右比较合适。4.2 底层控制回路转速控制与压力控制相结合风力发电侧的底层控制是机侧变流器的转速控制它的目标是通过调节发电机的电磁转矩来实现风轮转速对最优叶尖速比的跟踪。经典的做法是MPPT查表法根据当前风速和转速计算对应的最优转速、最优功率然后作为参考值输入到转速外环、电流内环的双闭环结构中。储能侧的底层控制相对特殊因为它涉及两个完全不同的设备压缩机和膨胀机。电动机驱动压缩机时控制目标是“消耗给定的功率”同时保证压缩机的进口流量和排气压力在安全范围内。膨胀机发电时控制目标是“发出给定的功率”但需要优先保证储气罐压力不低于最低工作压力否则高压气体流量不足会导致膨胀机失控。这一部分的控制结构可以统一成功率外环加设备使能信号的模式。在Simulink里实现的话我建议把整个控制系统分为三层调度层s-function或Stateflow每100ms执行一次判断当前工况并计算功率指令。控制层PI控制器每10ms执行一次完成转速、电流、压力等信号的控制。设备层电力电子开关与机械执行器每1μs到1ms执行一次由Simulink的变步长求解器自动处理。三层结构的时间尺度不同是刻意设置的因为储能系统的机械热力响应时间常数在秒级电力电子响应却在毫秒或微秒级。如果全部用统一的小步长仿真速度会非常慢。4.3 Matlab仿真程序结构与典型算例整个仿真平台我用的是一个主脚本驱动Simulink模型的方式。主脚本负责初始化参数、调用运行、后处理绘图Simulink模型负责动态响应求解。主脚本的关键结构如下%% 风电-压缩空气储能联合系统仿真主脚本 clear; clc; close all; %% 一、参数初始化 % 环境参数 rho_air 1.225; % 空气密度 kg/m^3 T_amb 298.15; % 环境温度 K % 风力机参数 R 2.5; % 风轮半径 m J_t 1.2; % 风轮转动惯量 kg*m^2 J_g 0.08; % 发电机转动惯量 kg*m^2 K_shaft 5000; % 传动轴刚度 N*m/rad B_shaft 5; % 传动轴阻尼 N*m*s/rad % 发电机参数 Rs 0.05; % 定子电阻 ohm Ld 0.0008; % d轴电感 H Lq 0.0008; % q轴电感 H psi_f 0.06; % 永磁磁链 Wb p 4; % 极对数 % 储能系统参数 V_tank 1.5; % 储气罐体积 m^3 P_tank_init 1e6; % 储气罐初始压力 Pa P_tank_max 5e6; % 最大允许压力 Pa P_tank_min 0.8e6; % 最小允许压力 Pa eta_c 0.8; % 压缩机效率 eta_t 0.75; % 膨胀机效率 % 控制参数 dP_hyst 250; % 滞环宽度 W Kp_speed 5; Ki_speed 20; % 转速外环PI Kp_current 10; Ki_current 100; % 电流内环PI %% 二、风速输入信号模拟阵风随机波动 t_end 200; % 仿真时间 200s Ts_control 0.01; % 控制周期 10ms % 基础风速阵风叠加 Vw 8 2*sin(0.05*2*pi*t) 0.8*randn(size(t)); %% 三、运行仿真 sim(wind_caes_union.slx, t_end); %% 四、后处理与结果绘图 figure(1); subplot(2,1,1); plot(tout, P_wind_out); hold on; plot(tout, P_load_ref); hold off; legend(风电输出功率,负载参考功率); xlabel(时间 (s)); ylabel(功率 (W)); title(功率响应曲线); subplot(2,1,2); plot(tout, P_tank_out); xlabel(时间 (s)); ylabel(储气罐压力 (MPa)); title(储气罐压力变化);这个算例的仿真时长我设了200秒风速信号是基础风速8m/s叠加低频阵风和高频湍流。负载参考功率在40秒和120秒各有一次突增用来测试储能系统的响应能力。整套程序在普通PC上大概需要运行3到5分钟如果超过这个时间就要检查是不是求解器的误差容限设置得太苛刻了。仿真结果一般会呈现这样的规律风速低但负载高的时段储气罐压力明显下降膨胀机处于工作状态风速高但负载低的时段压力回升压缩机工作而在风速和负载都比较平稳的时段系统工作在待机模式。这证明联合运行系统能够根据源荷匹配情况自适应地切换工作模式实现错峰调节。4.4 实验验证平台的搭建要点光有仿真还不够题目里明确提到了“实验研究”。我做的实验台规模不大是一套5kW级的风电模拟器加小型压缩空气储能装置。风力涡轮机部分用一个直流电机模拟风轮输出特性通过转矩控制来复现不同风速下风轮的机械输出发电机用一台5kW永磁同步电机储能部分用一台1.5kW的活塞式压缩机和一台1kW的涡旋式膨胀机储气罐容积1.5m³最大压力5MPa。实验和仿真对照时我踩过最大的坑是仿真模型里忽略了压缩机启停时的过渡过程。实际压缩机的启动电流是额定电流的3到5倍启动时间至少需要5秒这个特性如果不加入仿真模型实验结果和仿真结果的功率曲线就对不上。后来我在模型里加了一个“压缩机状态机”用一阶惯性模拟启停过程实验与仿真的偏差才降到了10%以内。数据采集方面我建议至少采集以下信号风速实验台用变频器模拟、发电机转速和输出电功率、储气罐压力和温度、压缩机/膨胀机的转速与功率、负载功率。采样率不需要很高用于控制效果评估的话50Hz足够了。5. 常见问题与调试实录5.1 数值发散风轮功率计算“爆炸”这是新手最容易碰到的问题。现象是仿真开始后一两秒风力机的功率直接飙到几千千瓦然后模型卡死。原因基本上可以锁定在Cp(λ,β)函数没有做限幅。当转速很低而风速很高时λ趋近于零一些近似公式里的1/λ项会趋向无穷大Cp计算出非物理的极大值。解决办法就是给λ设置合理的区间限制同时对Cp输出做饱和处理lambda max(min(lambda, 15), 4); % 限幅 if lambda 4 || lambda 15 Cp 0; else Cp 0.5176 * (116/lambda_i - 0.4*beta - 5) * exp(-21/lambda_i) 0.0068 * lambda; end5.2 功率反向流动导致的状态冲突联合系统最麻烦的问题是工况切换瞬间的功率反向。比如在工况A储能充电下压缩机正在以2kW的功率消耗电能这时候风速突然降低风电输出从3kW降到1.5kW系统判断需要切到工况B储能放电。在这一瞬间如果功率指令直接从2kW跳到-2kW变流器电流环会剧烈震荡。解决方法是限制功率指令的斜率。我在程序中加了速率限制器rate_limit 500; % 功率变化率限制 500W/s P_cmd P_cmd_prev max(min(P_cmd_new - P_cmd_prev, rate_limit*dt), -rate_limit*dt);有了这个限制工况切换从“阶跃”变成了“斜坡”系统响应平滑了很多。这个技巧不仅适用于仿真模型在实际控制器里同样适用。5.3 模型验证如何判断仿真结果可信做模型的人最怕别人问“你的模型准不准”。我的经验是分三步验证法第一步验证子模块把风力机模型单独跑输入恒定风速看输出功率是否等于0.5ρAV³Cp的理论值把储气室模型单独跑输入恒定流量看压力上升是否和PVmRT一致。第二步验证联合系统静平衡设定一个恒定的风速和恒定的负载让系统长时间运行观察储气罐的压力是否趋向一个稳定的平衡点。如果压力一直朝一个方向漂移说明功率计算有一个固定的偏差。第三步验证动态响应对比实验数据重点看工况切换时刻的功率和压力曲线偏差在10%到20%以内就可以接受。如果偏差太大优先检查压缩机和膨胀机的效率取值是否和实验设备一致。5.4 排序参数扫描提速技巧在做参数影响分析时比如改变储气罐容量V_tank观察系统风电利用率变化需要跑大量次仿真。每一个仿真如果都要从零开始启动到稳态浪费时间。我的做法是分两步先用小时间步长跑到稳态保存工作点后续参数扫描时把这个工作点作为初始条件直接载入仿真时间可以缩短一半以上。具体实现% 第一次运行保存最终状态 save(init_steady.mat, x_end); % 后续参数扫描加载初始状态 load(init_steady.mat); sim(wind_caes_union.slx, t_end);整体下来一套包含参数扫描的完整研究用这个方法可以把总耗时从1个小时压缩到20分钟以内效率提升非常明显。这套“风电-压缩空气储能联合运行”的建模思路其实还可以继续往两个方向延伸。一个是加入热回收子系统把压缩过程的压缩热存储起来在膨胀阶段用来预热空气这一改进能把系统往返效率提升10到15个百分点是目前CAES研究的热点方向。另一个是把单机模型扩展为风电场级模型考虑多台风机的尾流效应和储能系统之间的协同调度。不过这些都是进阶玩法了先把单机联合运行的模型和控制策略吃透后面的扩展思路会顺很多。最后分享一个经验做这类多物理域耦合仿真不要追求一步到位建一个超大的全细节模型。先把主功率通道跑通再把储气和控制的细节逐步加进去每加一个环节就做一次单元验证。这样调出来的模型出问题的概率会小很多。仿真结果的物理合理性判断也很重要——如果某个数据点看起来不符合能量守恒那大概率是建模环节出了问题先别急着调控制器参数回头检查模型本身更靠谱。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价