基于MATLAB的光伏发电系统建模与仿真 (m脚本版)
项目简介
本项目是一个基于MATLAB脚本(.m文件)开发的光伏发电系统仿真程序。与通过Simulink图形化界面拖拽组件不同,该项目采用纯代码方式构建离散时间步长的数值仿真模型。系统集成了光伏组件物理模型、DC-DC Boost升压变换器控制逻辑、MPPT(最大功率点跟踪)算法以及并网逆变器的电压外环控制策略。
通过该仿真脚本,用户可以深入理解光伏发电系统在光照突变、温度变化等工况下的动态响应过程,验证P&O扰动观察法在Boost电路中的具体实现,并分析直流母线电压的稳压控制效果。
主要功能特性
- 高精度光伏阵列建模:基于单二极管等效电路模型,包含串联电阻($R_s$)、并联电阻($R_p$)、二极管理想因子($A$)等物理参数,能够精确计算不同光照($G$)和温度($T$)下的光伏输出电流($I_{pv}$)。
- 静态特性分析:在仿真开始前,自动生成并绘制不同工况下的I-V(电流-电压)和P-V(功率-电压)特性曲线,并标记最大功率点(MPP),用于理论验证。
- MPPT 最大功率点跟踪:实现了经典的扰动观察法(P&O),针对Boost变换器特性优化了扰动方向逻辑,确保系统始终工作在最大功率输出状态。
- 并网逆变器控制:包含基于PI控制器的直流母线电压外环,模拟了电网同步(PLL相位生成)及并网电流参考值的生成过程。
- 动态时域仿真:支持微秒级(1us)的时间步长仿真,能够模拟光照强度突变(如1000 W/m² 降至 600 W/m²)时的系统暂态过程。
系统要求
- MATLAB R2016b 或更高版本
- 无需额外的Simulink工具箱,仅需基础MATLAB环境即可运行
使用方法
- 确保项目文件夹中包含主程序及计算光伏曲线所需的函数文件(如
get_pv_curve 和 solve_pv_current)。 - 在MATLAB中打开主程序脚本。
- 点击运行。
- 程序将首先在 Figure 1 中绘制静态特性曲线。
- 控制台将输出仿真进度提示,随后进行时域循环计算(注意:由于仿真步长极小且循环次数多,运行可能需要一定时间)。
代码逻辑与实现细节分析
主程序采用纯脚本编写,逻辑结构清晰,主要分为以下三个部分:
1. 系统参数初始化
代码首先定义了仿真所需的全局物理参数和控制器增益:
- 时序参数:仿真步长设定为 $1mu s$ (Ts),总时长 $0.4s$。
- 环境工况:预设了光照强度的阶跃变化测试,在 $0 sim 0.2s$ 期间光照为 $1000 W/m^2$,在 $0.2s$ 后突降至 $600 W/m^2$,温度恒定在 $25^circ C$。
- 组件参数:定义了 $V_{oc}, I_{sc}, V_{mp}, I_{mp}$ 以及温度系数,用于后续物理模型计算。
- 电路参数:包含Boost电路的电感 $L$、输入输出电容以及电网电压有效值 $220V$ 和频率 $50Hz$。
- MPPT参数:设定了MPPT的更新周期为 $1ms$(即每1000个仿真步长执行一次),扰动步长 $Delta D$ 为 $0.002$。
2. 静态特性分析与绘图
在进入动态循环前,程序利用嵌套循环和辅助函数
get_pv_curve 预先计算并显示光伏阵列的理论特性:
- 工况A(不同光照):绘制 $1000, 800, 600, 400 W/m^2$ 四种光照下的曲线,并用红圈标记出理论最大功率点。
- 工况B(不同温度):绘制 $25, 45, 65^circ C$ 三种温度下的曲线,展示温度升高导致开路电压降低的特性。
- 这一步骤用于验证物理模型的准确性,并为后续动态仿真结果提供对比基准。
3. 动态时域仿真 (主循环)
这是程序的核心部分,通过
for k = 1:N 循环模拟每一時刻的系统状态。
#### A. 光伏模型解算
- 在每个时间步,读取当前环境参数 $G$ 和 $Temp$。
- 调用
solve_pv_current(v_pv, G, Temp, ...) 函数。这是一个代数环解算过程(通常采用牛顿迭代法),根据当前的输入电压 $v_{pv}$ 计算出光伏组件的输出电流 $I_{pv}$。
#### B. MPPT 控制器 (P&O 算法)
MPPT 逻辑并非每步执行,而是通过
MPPT.counter 计数器实现降频采样(每 1ms 执行一次),模拟真实数字控制器的采样频率。
- 算法原理:比较当前时刻功率与上一采样时刻功率的变化量 ($dP$) 以及电压变化量 ($dV$)。
- Boost电路特性适配:代码中特别针对Boost变换器调整了逻辑。由于Boost变换器的输入电压 $V_{in} = (1-D)V_{out}$,占空比 $D$ 减小会导致输入电压 $V_{in}$ 增大。
* 如果
$dP > 0$ 且 $dV > 0$(功率增加,电压增加):说明工作点位于MPP左侧,需要继续增加电压,因此控制器执行
减小占空比 D 的操作。
* 代码通过一系列
if-else 判断,决定 $D$ 是增加还是减小
delta_D,并对输出占空比进行了 $[0.1, 0.9]$ 的限幅保护。
#### C. 逆变器并网控制 (平均值模型)
- PLL模拟:通过积分电网角频率 $omega_{grid}$ 生成电网相位 $theta_{grid}$,并计算瞬时电网电压。
- 电压外环PI控制:
* 计算直流母线电压误差
err_bus = v_bus - V_bus_ref。
* 使用比例积分(PI)控制器处理误差。逻辑上,当光伏功率增大导致母线电压 $v_{bus}$ 升高时(误差大于0),PI控制器增加输出,从而增大并网电流参考值 $I_{grid_ref}$,将多余能量注入电网以维持母线电压稳定。
* 代码对PI输出进行了幅值限制 (
out_max),防止电流过流。
> 注意:提供的代码片段在计算完 I_grid_ref_peak 并进行限幅后结束。实际完整的仿真程序在这一步之后通常会包含Boost电路和逆变器输出侧的微分方程更新(计算 $di_L/dt$, $dv_{bus}/dt$ 等状态变量的下一时刻值),从而完成闭环仿真。