这次我们来看一个在 MATLAB/Simulink 里搭建太阳能光伏和风力发电模型的完整方案。很多刚接触可再生能源仿真的同学,最容易卡住的地方不是 Simulink 操作,而是不知道光伏阵列该用哪个模块、风机模型要不要自己推导气动公式、MPPT 控制器怎么和 DC-DC 变换器联调。这篇文章会把太阳能和风能 Simulink 建模从环境准备、模块选型、参数配置、MPPT 算法、联合仿真到批量参数扫描和常见报错全部过一遍。
如果你正在做毕业设计、课程项目,或者要完成新能源并网、微电网、混合储能方向的预研仿真,可以直接照着这套思路搭模型。下面先给核心能力速览,再逐个拆解建模步骤。
1. Simulink 太阳能与风能建模核心能力速览
| 能力项 | 说明 |
|---|---|
| 建模对象 | 光伏电池/光伏阵列、风力机气动模型、传动链、PMSG/DFIG 发电机、DC-DC 变换器、MPPT 控制器 |
| 关键工具箱 | Simulink、Simscape Electrical(Specialized Power Systems)、MATLAB 基础环境 |
| 建模方式 | 物理方程搭建、Simscape 模块拖拽、MATLAB Function 嵌入自定义算法 |
| 仿真范围 | 单机特性仿真、最大功率点跟踪、风光互补联合发电、并网/离网运行 |
| 扩展能力 | 参数扫描、脚本批量仿真、C/C++ 代码生成、与 Simscape Battery 联合建模 |
| 运行门槛 | 普通办公电脑可运行,模型复杂度决定仿真耗时 |
| 适合人群 | 电气工程、新能源科学与工程、自动化专业学生及工程师 |
| 可验证内容 | I-V/P-V 曲线、光照/温度影响、风速-功率曲线、MPPT 追踪效果、风光互补出力曲线 |
从实际使用来看,Simulink 建模太阳能和风能系统最大的优势在于:不用先造实验台,就能在模型里改变光照强度、温度、风速、负载电阻,观察系统的电气响应和控制效果。
2. 适用场景与使用边界
2.1 适合什么场景
太阳能和风能 Simulink 模型适用于以下几类典型工作:
- 光伏电池特性教学:通过仿真得到不同光照和温度下的 I-V 曲线、P-V 曲线,直观理解光伏电池的非线性输出特性。
- MPPT 算法验证:在光照突变条件或部分遮蔽条件下,对比扰动观察法、增量电导法、模糊控制等算法的追踪速度和稳态精度。
- 风力机特性研究:分析风速变化对桨距角、叶尖速比、功率系数 C_p 的影响,验证最大功率追踪策略。
- 风光互补发电系统设计:将光伏阵列和风力发电模型组合到同一个直流母线或交流母线上,观察负载变化时的功率分配。
- 储能容量配置预研:在模型中加入 Simscape Battery 电池模型,测试充放电策略,为后续硬件实验提供参数参考。
2.2 使用边界与合规提醒
Simulink 仿真模型本质上是理论简化,不能完全替代户外实测。光伏组件的老化、温度分布不均、阴影遮挡的复杂状态,仿真模型只能近似表达。风力机模型同样无法覆盖乱流风场、塔影效应、叶片疲劳等真实工况。
如果后续要把仿真结果用于工程项目投标、并网审查或论文发表,需要注意三点:第一,模型参数必须来自真实设备的数据手册;第二,MPPT 和变桨控制算法的仿真参数需要经过鲁棒性验证,不能只跑一组理想工况;第三,涉及真实项目数据、商业组件参数时,注意版权和数据授权问题。仿真本身是技术研究工具,用于学习和验证没有问题,但对外发布结果时应当注明模型假设条件。
3. 太阳能与风能 Simulink 建模环境准备
3.1 MATLAB 版本与工具箱
Simulink 建模太阳能和风能系统,首先需要确认 MATLAB 安装时选择了正确的工具箱。建议安装:
- MATLAB 基础环境:用于脚本编写、数据处理、绘图。
- Simulink:模型搭建和仿真。
- Simscape Electrical:提供光伏阵列、风力发电机、变压器、逆变器等电力电子和电机模块。这个工具箱是建模仿真的关键,很多使用者找不到光伏模块,就是因为没有安装它。
- Control System Toolbox:如果要做控制器设计,可以辅助分析闭环稳定性。
对应工具箱的安装检查命令:
% 检查工具箱是否安装 ver('simulink') ver('simscape') ver('sps') % Simscape Electrical 的 short name如果在命令行输出中看不到对应版本信息,就需要在 MATLAB 附加功能资源管理器中补装。
3.2 硬件环境建议
Simulink 仿真对显卡没有特殊要求,普通 CPU 电脑就可以运行。但如果模型规模较大,比如完整的风光储联合仿真系统包含 PWM 逆变器、三相电网、多个控制器,仿真速度会明显下降。建议至少使用 8GB 内存,16GB 内存会更从容。仿真加速方面,可以通过修改求解器类型、关闭不必要的示波器数据记录来提高效率。
3.3 工作目录规划
建议每个仿真项目单独建立文件夹,结构如下:
solar_wind_sim/ ├── models/ % Simulink 模型文件 .slx ├── scripts/ % MATLAB 脚本 ├── data/ % 输入参数、光照/风速时序数据 ├── results/ % 仿真结果和图片 └── docs/ % 笔记和文献这样在批量仿真时,结果文件不会散落在 MATLAB 默认路径里,后续清理和发布都方便。
4. 搭建太阳能光伏(PV)Simulink 模型
4.1 光伏电池数学模型
光伏电池的等效电路可以由单二极管模型表达。工程上常用的输出电流方程为:
I = Iph - Id - Ish其中:
- Iph 为光生电流,与光照强度和温度相关;
- Id 为二极管反向饱和电流项;
- Ish 为并联电阻漏电流。
在实际 Simulink 建模中,可以直接使用 Simscape Electrical 自带的光伏阵列模块。该模块的等效电路采用厂商数据或用户自定义参数,输出端等效为一个受控电流源并联二极管。这个模块包含在主库路径:
Simscape > Electrical > Specialized Power Systems > Power Electronics在模型窗口里输入pv_array搜索也可以快速定位。
4.2 光伏阵列参数配置
双击PV Array模块,可以看到两个标签页:
- Parameters:设置串联电池数、并联电池数、开路电压、短路电流、最大功率点电压和电流。
- Advanced:设置二极管品质因子、串联电阻、并联电阻、光照和温度系数。
以一块 250W 光伏组件为例,典型参数如下:
| 参数 | 数值 |
|---|---|
| 最大功率 Pmax | 250 W |
| 开路电压 Voc | 37.5 V |
| 短路电流 Isc | 8.8 A |
| 最大功率点电压 Vmpp | 30.2 V |
| 最大功率点电流 Impp | 8.3 A |
| 串联电池数 | 60 |
| 并联电池数 | 1 |
如果做的是光伏阵列,需要把多块组件串并联,可以在模块中直接修改“串联模块数”和“并联模块数”参数。
4.3 带 MPPT 的光伏发电模型
完整的光伏发电模型一般包括:
- 光伏阵列输出直流电;
- Boost 变换器抬升电压;
- MPPT 控制器输出 PWM 占空比;
- 负载或逆变器接收功率。
MPPT 控制器的核心逻辑在 MATLAB Function 或 Stateflow 中实现。经典的扰动观察法代码如下:
function D = MPPT_PO(V, I, D_prev, V_prev, P_prev) % 扰动观察法 MPPT P = V * I; if P > P_prev if V > V_prev D = D_prev + 0.01; else D = D_prev - 0.01; end else if V > V_prev D = D_prev - 0.01; else D = D_prev + 0.01; end end end这里D是 Boost 电路开关管的占空比,仿真时通过 PWM Generator 模块接到 MOSFET 门极。
扰动观察法参数固定,步长太大则稳态波动大,步长太小则跟踪速度慢。实际使用时可以先跑 0.5 秒仿真观察功率波形,再调整步长。
5. 搭建风力发电 Simulink 模型
5.1 风力机气动模型
风力机的机械功率由下式决定:
P_wind = 0.5 * rho * A * v^3 * Cp(lambda, beta)其中:
- rho 为空气密度;
- A 为风轮扫掠面积;
- v 为风速;
- Cp 为风能利用系数,是叶尖速比 lambda 和桨距角 beta 的函数。
在 Simulink 中可以用 MATLAB Function 块实现 Cp 曲面函数。一个常用的经验公式:
function Cp = Cp_model(lambda, beta) % 叶尖速比 lambda,桨距角 beta,返回风能利用系数 gamma = 1 / (lambda + 0.08*beta) - 0.035 / (beta^3 + 1); Cp = 0.5176 * (116*gamma - 0.4*beta - 5) * exp(-21*gamma); end这个模型结构适合做变桨距控制的仿真研究,通过改变 beta 可以控制高风速段的功率输出。
5.2 传动链与发电机模型
风力发电系统有两种主流建模路线:
路线一:使用 Simscape Electrical 的 Wind Turbine 模块
这个模块可以直接设置风速、桨距角、风轮半径、空气密度,输出机械转矩和功率。配合永磁同步电机(PMSG)模块,就能得到机侧变流器和网侧变流器的完整电路。
路线二:自己搭建传动链方程
如果研究对象是控制算法,可以简化传动链为单质量块模型:
J * domega/dt = T_wind - T_em - B * omega用积分模块即可实现。这种方式模型更轻量,适合快速验证。
5.3 风力发电仿真模型示意图
下面给出一个简化模型的搭建思路:
风速输入 --> 风力机气动模型 --> 传动系统方程 --> PMSG 电气模型 --> 整流器 --> 直流母线 ^ | | v 桨距角控制 <-- 转速反馈 <-- 最大功率追踪策略 <--- 负载/逆变器实际搭建时,可以在 Simulink 画布上依次摆放 Constant(风速)、MATLAB Function(Cp 计算)、Gain、Integrator、PMSG 模块、Universal Bridge 模块。控制器输出通过 Goto/From 标签连接,避免连线过多导致的视图混乱。
5.4 参数验证
搭建完成后,先做一个最简单的开环测试:给定恒定风速 10 m/s,观察风轮转速和发电机输出功率是否达到理论值范围。如果偏差过大,优先检查 Cp 模型中 lambda 的计算是否用了风速和风轮转速的统一单位,这是很容易出错的地方。
6. 风光互补联合仿真系统
6.1 系统拓扑
在 Simulink 中把太阳能和风能模型组合起来,常见拓扑是直流母线汇集方案:
光伏阵列 -> Boost + MPPT ---+ +--> 直流母线 --> 逆变器 --> 交流负载 永磁风机 -> 整流器 -------+ +--> 蓄电池(可选)--> DC-DC 双向变换器这种结构里,光伏和风机彼此独立控制,只在直流母线上做功率合成。优点是调试简单,适合作为课程设计和毕业设计的基础版本。
6.2 光照与风速时序输入
为了让仿真更贴近实际,可以在工作空间里定义一组 24 小时的光照和风速曲线,然后通过 From Workspace 模块引入 Simulink。例如:
% 生成一天 24 小时的简化数据 t = (0:0.1:24)' * 3600; % 单位转换为秒 % 光照强度:白天升高,晚上为0 irradiance = max(0, 800 * sin(pi * (mod(t, 86400)/86400))); irradiance(mod(t, 86400) > 12*3600 & mod(t, 86400) < 14*3600) = ... irradiance(mod(t, 86400) > 12*3600 & mod(t, 86400) < 14*3600) * 0.5; % 风速:给一段波动序列 wind_speed = 8 + 3 * sin(t / 3600 * 2 * pi / 8) + randn(length(t), 1); % 打包成 Simulink 可读的时间序列 solar_input = timeseries(irradiance, t); wind_input = timeseries(wind_speed, t);模型中使用From Workspace选择对应的solar_input和wind_input,即可在仿真过程中动态改变输入条件。
6.3 联合控制器
风光互补系统最简单有效的控制策略是:
- 光伏单元使用独立的 MPPT 控制,让光伏始终输出当前条件下的最大功率;
- 风机使用转速外环控制,运行在最大功率追踪模式;
- 直流母线电压由蓄电池或网侧逆变器维持。
如果暂不加入储能,可以先用固定直流电压源代替母线,先验证光伏和风机的功率输出是否符合预期。
7. 仿真测试与效果验证
7.1 光伏单体测试
测试目的:验证光伏阵列在不同光照下的 I-V 和 P-V 曲线。
操作步骤:
- 新建 Simulink 模型,拖入 PV Array 模块;
- 在 PV Array 输出端串联一个可变电阻或使用受控电流源扫描;
- 在 MATLAB 脚本中使用
sim函数逐步修改光照参数; - 记录输出电压和电流,绘制曲线。
对应脚本示例:
% 光照扫描:600, 800, 1000 W/m2 irr_list = [600 800 1000]; figure; hold on; for k = 1:length(irr_list) set_param('pv_test/PV Array', 'Irradiance', num2str(irr_list(k))); simOut = sim('pv_test', 'StopTime', '1'); V = simOut.Vout.Data; I = simOut.Iout.Data; plot(V, I, 'LineWidth', 1.5); end legend('600 W/m2', '800 W/m2', '1000 W/m2'); xlabel('输出电压 (V)'); ylabel('输出电流 (A)'); grid on;判断成功的标准:短路电流随光照升高而增大,开路电压变化较小;最大功率点位于曲线拐点附近。
7.2 MPPT 追踪测试
测试目的:验证 MPPT 控制器能否在光照突变时快速追踪新的最大功率点。
操作步骤:
- 在模型中把光照输入改为 Signal Builder 或阶跃信号;
- 设置仿真时间为 2 秒,0 到 1 秒光照 800 W/m²,1 秒后变为 1000 W/m²;
- 观察功率输出波形。
预期结果:功率在 1 秒后经过短时振荡上升到新稳态值,上升时间取决于扰动步长。
常见失败原因:
- PWM 频率设置过低;
- MPPT 采样时间与 PWM 周期不匹配;
- Boost 电路电感值过小,电流断续导致 MPPT 采样失真。
7.3 风机功率特性测试
测试目的:验证风机在风速变化下的输出功率是否遵循理论曲线。
操作步骤:
- 设置风速为斜坡信号,从 4 m/s 上升到 14 m/s;
- 记录风机输出功率和转速;
- 将仿真结果与理论 P-v 曲线对比。
判断标准:在额定风速以下,输出功率应随风速增大而增大;达到额定风速后,变桨距控制介入,功率维持在额定值附近。
7.4 风光联合运行测试
测试目的:验证光伏和风机在不同天气条件下合成输出功率是否平滑。
操作步骤:
- 使用第 6.2 节生成的光照和风速时序数据;
- 仿真 24 小时运行,观察直流母线功率波形;
- 检查负载功率突变时母线电压是否稳定。
如果母线电压跌落明显,说明直流母线电容容量不足,或发电机/Boost 控制动态响应太慢。
8. 接口调用与批量仿真脚本
Simulink 模型除了在图形界面手动运行,也可以用 MATLAB 脚本批量驱动。这个功能在做参数扫描、优化设计时非常有用,相当于给 Simulink 模型提供了一个“自动化 API”。
8.1 批量修改参数
以下脚本可以批量修改风速、光照、负载电阻等参数并保存仿真结果:
modelName = 'solar_wind_hybrid'; load_system(modelName); % 参数扫描列表 wind_list = [6 8 10 12]; irr_list = [600 800 1000]; results = table(); for i = 1:length(wind_list) for j = 1:length(irr_list) % 修改模型参数 set_param([modelName '/Wind Speed'], 'Value', num2str(wind_list(i))); set_param([modelName '/Irradiance'], 'Value', num2str(irr_list(j))); % 仿真并返回输出 simOut = sim(modelName, 'StopTime', '5'); % 读取结果 P_output = simOut.Pout.Data(end); % 记录到表格 results = [results; table(wind_list(i), irr_list(j), P_output, ... 'VariableNames', {'Wind', 'Irradiance', 'Power'})]; end end % 保存结果 writetable(results, 'results/simulation_result.csv');8.2 使用 Simulink Fast Restart 加速批量仿真
批量仿真时,如果模型结构不变化,只是参数变化,可以开启 Fast Restart 加速,避免每次仿真都重新编译模型:
set_param(modelName, 'FastRestart', 'on');开启后,第一次仿真的编译结果会复用,后续参数修改后的仿真启动速度会大幅提升。
8.3 结果自动绘图
批量仿真结束后,可以用脚本自动生成对比图:
% 读取仿真结果 data = readtable('results/simulation_result.csv'); % 绘制不同风速下的功率-光照曲线 figure; for wi = unique(data.Wind)' subData = data(data.Wind == wi, :); plot(subData.Irradiance, subData.Power, 'o-', 'DisplayName', ... ['风速 ' num2str(wi) ' m/s']); hold on; end legend('Location', 'best'); xlabel('光照强度 (W/m^2)'); ylabel('系统输出功率 (W)'); grid on; saveas(gcf, 'results/param_sweep.png');需要注意的是,set_param修改模型参数前,必须保证模型路径正确。如果模型中的模块被重命名,路径也要相应调整,否则会报错。
9. 资源占用与仿真性能观察
9.1 仿真慢在哪里
Simulink 仿真太阳能和风能系统时,耗时主要集中在三部分:
- 电力电子开关高频 PWM:PWM 开关频率越高,仿真步长越小,耗时越长;
- 三相逆变器和电网模型:三相电路状态变量多,求解器需要处理更细的电气动态;
- 24 小时长时域仿真:仿真时间跨度大,如果必须用小步长,数据量和计算量都会显著增加。
9.2 降低仿真耗时的方法
- 用平均值模型替代开关模型:不需要分析开关纹波时,可以把 PWM 逆变器和 Boost 电路的平均值模型用于长时域仿真;
- 调整求解器步长:电气系统使用
ode23tb或ode15s等刚性求解器,不要使用固定小步长; - 关闭示波器数据存储:仿真过程中不必要保存的波形可以在 Scope 设置里关闭数据记录;
- 使用 Simulink Accelerator:将模型编译为加速模式,长仿真提速明显;
- 参数扫描用 Fast Restart:避免重复编译模型。
9.3 仿真加速模式示例
% 将模型设置为加速模式 set_param('solar_wind_hybrid', 'SimulationMode', 'accelerator');加速模式比普通模式更快,但首次编译会多花一点时间。仿真完成后记得切回normal模式,以免后续调试时看不到模块内部信号。
10. 常见问题与排查方法
下面是 Simulink 建模太阳能和风能系统时最常遇到的问题清单:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 找不到 PV Array 模块 | Simscape Electrical 工具箱未安装 | 输入ver('sps')检查 | 安装 Simscape Electrical 工具箱 |
| PV 模块输出功率始终为 0 | 光照强度参数设为 0,或模块未连接负载 | 查看模块参数和输入端信号 | 设置光照为 1000 W/m²,接入负载电阻 |
| MPPT 输出占空比不变 | MPPT 采样时间设置太长或反馈信号未连接 | 添加 To Workspace 观察采样值 | 减小采样时间,检查反馈信号路径 |
| 仿真速度极慢 | 求解器步长过小或存在高频振荡 | 打开求解器报告,观察最大步长 | 改用刚性求解器,或降低 PWM 频率 |
| 风机转速无限增大 | 负载转矩未正确施加 | 检查传动链方程中负载转矩端子 | 接入发电机模型或制动转矩 |
| 批量仿真时 set_param 报错 | 模块路径错误或模型未加载 | 使用load_system并检查模块名称 | 打印模型路径确认模块名 |
| 24 小时仿真不收敛 | 模型中存在代数环或数值突变 | 检查是否存在闭环连接无记忆模块 | 在反馈通道中加 Memory/Unit Delay 模块 |
| Simulink 出现代数环警告 | 功率采集和占空比计算存在直接反馈 | 双击黄色警告查看代数环路径 | 加入 Memory 模块或滤波器消除代数环 |
11. 最佳实践与使用建议
11.1 建模分步走
第一次建模太阳能和风能系统,不要一次性搭完整的风光储模型。
建议顺序:
- 先搭光伏阵列单体,验证 I-V/P-V 曲线;
- 再搭 Boost 和 MPPT,验证最大功率追踪;
- 然后搭风机模型,验证功率-风速特性;
- 最后合入直流母线,加上负载和储能;
- 全部跑通后再考虑并网逆变器和三相电网。
每步验证通过再继续下一步,排查问题会容易很多。
11.2 参数管理
Simulink 模型中直接填写的参数,在项目变大后很难维护。建议在模型初始化回调中使用统一参数脚本:
% 在模型属性 Callback 中填写 InitFcn % 统一的参数初始化脚本 PV.Pmax = 250; PV.Voc = 37.5; PV.Isc = 8.8; PV.Vmp = 30.2; PV.Imp = 8.3; PV.Ns = 60; PV.Np = 1; Wind.rho = 1.225; % 空气密度 kg/m3 Wind.R = 2.5; % 风轮半径 m Wind.J = 2.8; % 转动惯量 kg*m2 % 模型中的参数直接引用 PV.Pmax / Wind.R 等变量这样在批量仿真时,只需要修改脚本中的参数,不需要打开模型对话框逐个改。
11.3 数据记录规范
建议在模型中统一使用 To Workspace 模块记录以下关键信号:
- 光伏输出电压、电流、功率;
- 风机转速、电磁转矩、输出功率;
- MPPT 占空比;
- 直流母线电压;
- 负载功率。
统一命名格式,例如V_pv、I_pv、P_wind,方便仿真后脚本一次性处理。
11.4 版权与数据合规
如果使用了商用光伏组件、风机厂商的参数表,或者参考了论文中的控制参数,在公开报告、论文或博客中要注明数据来源。涉及真实电力系统项目数据时,需要确认是否允许公开。Simulink 模型本身是研究工具,用于教学和课题学习完全没问题,但如果要把模型作为产品交付给企业,需要确认 MATLAB 许可证范围和模型知识产权归属。
12. 总结与下一步
Simulink 建模太阳能和风能系统,最值得投入时间的地方是三个:光伏阵列模块参数配置、MPPT 算法实现、风机 Cp 模型修正。这三个点跑通了,整个系统基本就能稳定工作。
最先应该验证的功能是光伏阵列的 I-V/P-V 曲线,因为它能快速暴露参数设置错误。最容易踩的坑是求解器选择和代数环问题,建议一开始就使用刚性求解器,并在反馈回路中预留 Memory 模块。
后续可以继续扩展的方向很多:
- 在现有系统中接入 Simscape Battery,研究储能充放电策略;
- 将 MPPT 算法换成增量电导法或滑模控制,对比追踪效果;
- 把 Simulink 模型通过 C 代码生成移植到嵌入式控制板,验证硬件在环;
- 结合 MATLAB App Designer 做一个仿真结果可视化界面,动态展示系统运行状态。
如果这篇文章对你有帮助,建议收藏备用。评论区可以说说你搭光伏和风机模型时卡在哪一步,遇到报错记得把现象发出来一起排查。