尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

光伏电池模型仿真全解析:从五参数等效电路到Simulink工程实践

光伏电池模型仿真全解析:从五参数等效电路到Simulink工程实践 搞光伏发电系统设计的朋友应该都有这种体会真正动手做MPPT算法、并网逆变器控制或者微电网能量管理之前一个能反映光伏电池真实外特性的仿真模型是整个系统仿真的地基。而这个地基要是没打好后面所有控制策略都是空中楼阁。所以这次我把MATLAB/Simulink里搭光伏电池模型的过程从头到尾捋了一遍把模型原理、参数计算、仿真搭建、代码绘图和踩坑记录全部整理出来希望能让刚入门的同学少走弯路也能让有经验的老手互相印证一下思路。这个内容适合两类人来看一类是正在做毕业设计或者课程设计的电气工程、自动化专业学生需要快速搭出一个能用的光伏电池模型另一类是刚接触光伏系统仿真、想要理解模型内部机理而不是只会拖Simulink现成模块的工程师。文里既会有等效电路和数学方程的推导也会有完整的Simulink建模步骤和MATLAB绘图代码最后还会把我实测遇到的一堆问题整理成排查手册。1. 光伏电池模型的物理本质与工程需求1.1 光伏电池工作原理与等效电路光伏电池本质上是一个大面积PN结当光照照射到半导体材料上时能量大于禁带宽度的光子会激发价带电子跃迁到导带形成电子-空穴对。这些非平衡载流子在PN结内建电场的作用下被分离电子流向N区空穴流向P区从而在电池两端产生光生电动势。只要外电路闭合就会有电流流过负载——这就是光生伏特效应的基本过程。但是真实的光伏电池并不是一个理想的恒流源它的输出特性会受到材料电阻、漏电流等多方面因素影响。所以在工程仿真中我们通常用等效电路来描述它。最常用的是单二极管五参数模型也就是电流源、二极管、串联电阻和并联电阻的组合光生电流源I_ph用一个电流源表示PN结的整流特性用一个二极管表示二极管的饱和电流I_0和理想因子n反映PN结质量串联电阻R_s反映半导体体电阻、电极接触电阻和材料薄层电阻并联电阻R_sh反映PN结的漏电通道比如电池边缘漏电和材料缺陷引起的漏电。搞清楚了等效电路再去看那些复杂的数学方程就不会晕了。我在给学生讲这部分的时候喜欢打一个比方光生电流源相当于一个水泵它把光能转成水流电流往外泵二极管相当于一个单向阀阻止水流倒灌串联电阻相当于水管本身的阻力并联电阻相当于管道上的漏水孔。这样理解起来就形象多了。1.2 单二极管模型与双二极管模型的选型权衡在正式建模之前先要想清楚一个问题到底用单二极管模型还是双二极管模型单二极管模型结构简单只有五个参数I_ph、I_0、n、R_s、R_sh计算效率高在Simulink里仿真速度快对于大多数工程场景来说精度已经足够。但它的局限性在于对低辐照度下的拟合精度较差因为它在物理上没有考虑空间电荷区复合电流的影响。双二极管模型在单二极管模型基础上并联了第二个二极管专门用来描述空间电荷区载流子复合引起的电流损耗。这个模型在低辐照度条件下拟合精度更好但代价是参数增加到七个仿真收敛难度也明显提高。我在做分布式光伏并网仿真时遇到过这种情况用单二极管模型在标准工况下仿真结果挺好看一旦把辐照度降到200W/m²I-V曲线的弯曲部分就和实测数据出现明显偏差这就是复合电流项缺失导致的。所以我的建议很直接如果做的是常规的光伏阵列建模、MPPT算法验证、并网逆变器控制策略研究单二极管模型完全够用如果你要做的研究特别关注低辐照度下的效率分析或者需要和实测I-V曲线做高精度拟合那再考虑双二极管模型。这个决策直接影响后续所有的工作量不要一上来就上复杂模型。1.3 工程仿真对模型的现实需求实际工程项目中对光伏电池仿真模型的需求远不止“画出一条I-V曲线”这么简单。我参与过的光伏系统仿真项目中模型要满足几个现实需求模型参数要能直接从光伏组件数据手册中提取。市面上常见的组件比如天合、隆基、晶澳的产品数据手册都会给出标准测试条件STC即辐照度1000W/m²、电池温度25°C、AM1.5光谱下的开路电压、短路电流、最大功率点电压、最大功率点电流。模型必须能从这个几个基本参数出发反推出完整的五参数。模型要能够响应辐照度和温度的变化。光伏系统在实际运行中辐照度从几十W/m²到一千多W/m²变化电池温度从零下到七十度都有可能模型必须准确反映这种外特性变化。这就要用到温度修正系数和辐照度修正公式后面会详细展开。模型要适合嵌入到更大规模的控制系统中。Simulink里很多光伏模型只是单独搭出来看曲线但实际工程中是要把它接进Boost电路、逆变器、MPPT控制器里的。模型要稳定、不产生代数环、不拖慢仿真速度这些需求直接影响建模方式的选择。2. 核心建模参数计算从数据手册到仿真参数2.1 五个关键参数的物理意义与数值范围单二极管模型的五个关键参数是光生电流I_ph、二极管反向饱和电流I_0、二极管理想因子n、串联电阻R_s和并联电阻R_sh。这五个参数的物理意义分别是什么取值大概在什么范围至少要有个数感光生电流I_ph直接由辐照度决定标准测试条件下数值上接近短路电流I_sc略大于I_sc比如一块短路电流9A的组件I_ph大约在9.0到9.1A之间。反向饱和电流I_0是温度敏感性最强的参数数量级通常在10⁻¹⁰到10⁻⁸A之间。这个参数表示二极管在反向偏置时能通过的微小电流它决定了开路电压的数值。根据半导体物理I_0与温度的立方成正比同时与禁带宽度的负指数相关所以温度升高时I_0急剧增大开路电压就会下降。理想因子n在单二极管模型中通常在1到2之间工程上常取1.3附近。它反映了PN结的特性偏离理想整流方程的程度数值越大说明复合越严重。串联电阻R_s一般在0.1Ω到1Ω之间模块内部互联条、汇流条的电阻损耗都在这里体现。并联电阻R_sh通常在100Ω到1000Ω以上反映了漏电阻尼的强弱高高质量的晶硅电池R_sh通常做得比较大。2.2 基于数据手册的五参数工程计算方法五参数是没有解析解的一般要用数值方法迭代求解。不过工程上有个简化路线从数据手册给的四个点短路点、开路点、最大功率点出发先做合理假设再迭代修正。具体步骤我直接梳理一遍第一步初值设定。取n1.3R_s0R_sh为一个大值比如1000Ω。此时I_ph≈I_sc。第二步用开路电压点计算I_0。开路状态下输出电流为0流过二极管的电流等于光生电流得到 I_0 I_ph / (exp(V_oc / (n·V_t)) - 1) 其中V_t k·T/q是热电压25°C时约0.0257V。第三步用最大功率点迭代修正R_s和R_sh。最大功率点处有I_mp和V_mp代入输出方程 I_mp I_ph - I_0·[exp((V_mp I_mp·R_s)/(n·V_t)) - 1] - (V_mp I_mp·R_s)/R_sh 这个方程里两个未知数R_s和R_sh需要再加一个条件在该点模型输出功率等于数据手册最大功率P_max V_mp·I_mp。单独这条还不够通常的做法是让最大功率点处功率对电压的导数为零即dP/dV0。这样就有了两个方程可以联立求解。第四步数值迭代求解。手上没有专业工具的话直接在MATLAB里写个fsolve或者fminsearch就能搞定。目标函数就是让模型计算的最大功率点电压、电流与数据手册的V_mp、I_mp误差最小。迭代到误差小于0.1%就可以停手了。我在实际项目中用的就是这个方法。有次用一块300W的单晶组件数据手册来计算初始迭代大概几十步就收敛了算出来的R_s约0.35ΩR_sh约450Ω参数都在合理范围内。需要提醒的是R_s太小会让I-V曲线在最大功率点附近过于“直立”MPPT测试时控制器好像很厉害R_s太大会让曲线最大功率点明显左移导致仿真最大功率低于数据手册标称值。这两种情况都说明数值迭代有问题要检查初值设置。2.3 辐照度与温度修正公式光伏电池工作条件不会总是标准测试条件所以模型必须能处理辐照度和温度变化。这里有两组修正关系是必须掌握的辐照度对光生电流的影响近似线性 I_ph(S) I_ph(STC) · S / S_STC 因为光子数跟辐照度成正比激发出的电子-空穴对数量也成正比所以光生电流随辐照度线性变化这个式子物理上很好理解。温度对两个主要参数的影响 I_ph(T) I_ph(STC) · (1 α·(T - T_STC)) I_0(T) I_0(STC) · (T/T_STC)³ · exp(q·E_g/(n·k)·(1/T_STC - 1/T)) 其中α是短路电流温度系数数据手册会给出通常约0.05%/°CE_g是硅的禁带宽度约1.12eV。这里有个容易搞错的地方很多人只做温度对I_0的修正却忽略光生电流也有一个小的正温度系数。虽然α数值很小但累积起来对最大功率的影响还是可观的。我测过一块组件温度从25°C升到55°C短路电流大约会增加1.5%开路电压会下降10%左右最大功率大约损失17%。这些变化对MPPT策略的研究有直接影响不能忽略。2.4 标准工况I-V曲线和P-V曲线的特征把五个参数定好之后就可以画出标准测试条件下的I-V曲线和P-V曲线了。这两条曲线的特征必须心里有数I-V曲线有三个关键点短路点(V0, II_sc)、最大功率点(V_mp, I_mp)和开路点(V_oc, I0)。短路点由光生电流决定开路点由I_0和温度决定最大功率点是矩形面积最大的那个点。曲线从左到右分成两个区域恒流区电压较低时电流几乎是平的和恒压区电流即将跌到零时电压变化缓慢。P-V曲线则是一个有着单峰的类抛物线形状峰值就是最大功率点。看P-V曲线的峰值位置就能判断R_s参数设置是否合理峰值越靠右说明串联电阻越小最大功率点越接近开路电压峰值越靠左说明串联电阻越大模型内阻损耗严重。实际组件在标准工况下最大功率点电压大约是开路电压的75%至85%比如一块V_oc46V的组件V_mp通常在35V到38V之间。如果模型算出来的V_mp偏离这个范围太多要回头检查迭代计算和参数设置。3. Simulink建模实操与仿真绘图代码3.1 方法一Simscape Electrical组件库快速搭建如果追求速度和便捷Simscape Electrical组件库里有现成的光伏模块。操作路径是打开Simulink库浏览器在Simscape Electrical Specialized Power Systems Power Sources里找到PV Array模块拖到模型窗口。双击模块在参数配置界面选择预设的组件型号或者手动输入参数。PV Array模块的好处是可以直接在参数表里填入数据手册的开路电压、短路电流、最大功率点电压/电流模块内部会自动计算五参数。它还内置了辐照度输入端口和温度输入端口可以很方便地接常数或者信号源做工况变化仿真。输出端既给P、P-电气端口也给出V、I测量信号。这个模块最大的坑在于它属于Simscape物理域不能直接和普通的Simulink信号线相连。你要接测量信号的话必须用Simulink-PS Converter和PS-Simulink Converter这两个转换模块。块与块之间的连接线是蓝色物理连接线不是常规的黑色信号线刚上手很容易搞混。如果出现连接不上的情况基本就是物理域和被控对象模型域不匹配导致的。3.2 方法二基于数学方程的自建封装模块追求对模型内部结构的完全掌控用Simulink的基本模块手动搭建会更合适。这种方法的好处是每个环节都在你的控制之下方便加自定义逻辑而且不会出现物理域接口转换的问题。我分享一下我常用的建法用MATLAB Function模块作为核心计算单元输入为辐照度S、温度T、输出电压V输出为电流I。函数内部就用第二节讲到的输出方程直接计算function I pv_current(S, T, V) % 五参数由外部初始化或数据手册计算 Iph_ref 9.08; % STC下光生电流(A) I0_ref 1.2e-10; % 反向饱和电流(A) n 1.3; % 理想因子 Rs 0.35; % 串联电阻(ohm) Rsh 450; % 并联电阻(ohm) Vt_ref 0.0257; % 25C热电压(V) % 温度修正 Iph Iph_ref * (1 0.0005 * (T - 25)); I0 I0_ref * ((T 273.15) / 298.15)^3 * exp(1.12 * (298.15/(T273.15) - 1) / (n * Vt_ref)); Vt Vt_ref * (T 273.15) / 298.15; % 输出电流方程 I Iph * (S / 1000) - I0 * (exp((V I * Rs) / (n * Vt)) - 1) - (V I * Rs) / Rsh; end注意这个方程里I同时出现在等号两边直接算会报代数环错误。解决办法有两个一是用初值预估后迭代两三次二是把模块配置里“求解器代数环检测”关掉并设置合理的初始值。我的做法是在函数里先忽略串联电阻压降估一个I的初值然后再做迭代更新这样既能避开代数环又能保证精度。3.3 方法三纯M文件仿真与批量参数扫描有些场景不需要Simulink环境比如做参数敏感性分析、批量扫描不同辐照度下的功率曲线直接用M文件反而更方便。我平时做研究都是先用M文件把模型的正确性验证好再转到Simulink里搭闭环控制。纯M文件仿真的核心就是对输出电压V_oc范围内做扫描逐点计算输出电流并保存数据。完整代码我贴一份在这里% 光伏电池模型仿真脚本 % 输入辐照度S、温度T % 输出I-V曲线与P-V曲线数据 clear; clc; close all; % 模型参数以300W组件为例 Iph_ref 9.08; % 光生电流A I0_ref 1.2e-10; % 反向饱和电流A n 1.3; % 二极管理想因子 Rs 0.35; % 串联电阻ohm Rsh 450; % 并联电阻ohm Vt_ref 0.0257; % 热电压V V_oc 45.8; % 开路电压V % 工况条件 S_list [200, 400, 600, 800, 1000]; % 辐照度W/m2 T_list [25, 25, 25, 25, 25]; % 温度degC figure; colors lines(length(S_list)); for k 1:length(S_list) S S_list(k); T T_list(k); V linspace(0, V_oc * 1.05, 500); % 电压扫描范围 I zeros(size(V)); for i 1:length(V) % 温度修正 Iph Iph_ref * (1 0.0005 * (T - 25)) * S / 1000; Vt Vt_ref * (T 273.15) / 298.15; I0 I0_ref * ((T 273.15) / 298.15)^3 * exp(1.12 * (298.15/(T273.15) - 1) / (n * Vt_ref)); % 牛顿迭代求解输出电流 I_guess Iph; for iter 1:10 f I_guess - Iph I0 * (exp((V(i) I_guess * Rs) / (n * Vt)) - 1) (V(i) I_guess * Rs) / Rsh; f_prime 1 I0 * Rs / (n * Vt) * exp((V(i) I_guess * Rs) / (n * Vt)) Rs / Rsh; I_guess I_guess - f / f_prime; end I(i) I_guess; end P V .* I; % 绘制I-V曲线 subplot(1, 2, 1); plot(V, I, Color, colors(k, :), LineWidth, 1.5); hold on; xlabel(电压 V (V)); ylabel(电流 I (A)); title(不同辐照度下的I-V曲线); grid on; legend(cellstr(num2str(S_list, S%d W/m^2))); % 绘制P-V曲线 subplot(1, 2, 2); plot(V, P, Color, colors(k, :), LineWidth, 1.5); hold on; xlabel(电压 V (V)); ylabel(功率 P (W)); title(不同辐照度下的P-V曲线); grid on; legend(cellstr(num2str(S_list, S%d W/m^2))); end这段代码跑完之后左边是不同辐照度下的I-V曲线族右边是对应的P-V曲线族。正常情况下应该看到辐照度从200W/m²升到1000W/m²短路电流几乎按比例从1.8A涨到9A开路电压变化不大最大功率点电压也基本不变但最大功率几乎线性增加。如果曲线形态不符合这个规律基本就是参数或迭代过程出问题了。3.4 封装成子系统让模型可以复用在Simulink里建好模型之后有必要把它封装成子系统这样在搭建完整光伏发电系统时就可以直接拖拽复用。封装步骤很简单选中所有模型模块右键选择Create Subsystem from Selection然后用右键Mask选项创建掩码。在掩码编辑器里可以定义辐照度、温度作为外部输入五参数作为掩码参数这样在使用时双击子系统就能像使用Simulink自带模块一样配置参数。我自己的习惯是封装完之后加一个输出端口专门输出当前工况下的最大功率值这个信号在后面接MPPT控制器做参考对比时特别有用。封装的时候尽量把端口命名做得直观比如S_in、T_in、V_out、I_out这样半年之后翻回来看模型还能一眼看懂不用重新梳理端口含义。封装后还有一个好处可以给整个子系统加上注释和文档说明把参数来源、公式引用、修订记录都写在里面,这对团队协作或者自己后续复用都有很大帮助。3.5 说明文档的编写要点这个项目名里专门提到附带说明文档说明文档的重要程度不亚于模型本身。根据我交付多个仿真项目的经验一份合格的光伏电池模型说明文档应该包含以下内容模型概述要讲清楚这个模型用的是单二极管还是双二极管等效电路适用于哪些仿真场景有什么局限性。参数定义表要把五参数以及修正系数的符号、含义、单位、数值来源列清楚。参数计算过程要把从数据手册四参数反推五参数的迭代方法写明白最好附上收敛条件。仿真操作指南要写清楚模型文件怎么打开、参数在哪里修改、怎么改变辐照度和温度输入。验证结果要展示模型输出的I-V曲线和P-V曲线与数据手册或实测数据的对比结果让使用者确认模型可信。我见过太多模型文件发过去对方根本不知道怎么改参数也不知道模型精度如何最后租两个电话来回问。文档写清楚不仅是对使用者负责也是对自己的工作负责。4. 常见问题与排查技巧实录4.1 仿真不收敛或代数环报错这是Simulink光伏建模中最常见的问题我几乎每次帮人排查都能遇到。代数环出现的原因就是输出电流I的函数表达式里包含了I本身导致Simulink无法直接求解。解决办法有几个按我推荐的优先级排序第一种在MATLAB Function模块内部做迭代求解用初值预估加牛顿法或者简单迭代收敛到真解。这样模块输入输出关系变成一个确定性的赋值过程Simulink不会再检测到代数环。第二种在模块输入输出路径上串联一个Unit Delay或者Memory模块切断代数环。但这种方法会引入一拍延迟在高频控制场景下可能影响精度所以我只在验证模型时用它。第三种把模型改为基于电压源驱动的形式也就是给定电压求电流。光伏电池在Simulink里最常见的接法就是接在电容或者直流母线上电压由外部电路决定此时光伏模块只负责计算电流输入输出电压自然就解耦了不会出现代数环。4.2 初始化失败与数据导入问题Simulink模型初始化失败往往是因为MATLAB工作区里没有定义模型引用的变量。比如封装子系统里写的是Iph_refxxx但实际上工作区里没有这个变量。解决办法有两个要么把参数直接写到模块掩码的初始化窗口里要么在模型的PreLoadFcn回调函数里加载一个参数定义脚本。关于回调函数我要多说一句在模型属性(Model Properties - Callbacks)中配置PreLoadFcn是一个非常好的习惯把参数初始化统一写在一个脚本里每次打开模型自动运行参数就不会丢。我之前接过一个合作项目对方给我发来模型后说跑不通我一查是参数脚本没有放在模型文件夹里路径一换就全失效了。把所有参数初始化脚本和模型放在同一目录并在PreLoadFcn里用绝对路径加载这个问题就彻底解决了。4.3 曲线形状不合理的调试方法仿真跑通了但曲线形状不对我也碰到过好几种情况短路电流偏小但开路电压正常。这通常是I_ph没有按辐照度比例修正或者S端口输入的单位不对。很多人会把辐照度输入直接用S1000当作物理量本身但有些封装模块要求输入的是标幺值1对应1000W/m²这就要仔细看模块说明。P-V曲线最大功率点明显低于标称值。这和R_s、R_sh的数值有直接关系R_s过大会明显拉低最大功率。调试时可以先把R_s设得很小比如0.01Ω把R_sh设得很大比如10000Ω跑出来的最大功率如果接近理想值就说明问题确实出在电阻参数上从理想值逐步向真实值逼近就能定位到哪个参数影响最大。I-V曲线在最大功率点附近出现锯齿状跳变。这种问题通常不是模型本身的问题而是仿真步长太大导致数据采样点不足。把仿真步长调小到四分之一比如从1e-3调到2.5e-4然后再看曲线是否光滑。调节步长后仍然有锯齿就得考虑是不是求解器类型选错了光伏模型这种偏微分代数混合系统换用ode23t或者ode15s往往比默认的ode45更稳定。4.4 不同求解器下的仿真速度差异求解器选择对光伏并网系统仿真的影响非常大。我做光伏并网逆变器仿真时对比过几种求解器的表现ode45在纯信号处理场景下速度尚可但一旦接入电力电子开关器件IGBT、MOSFET仿真速度会急剧下降而且容易在开关切换点处产生数值振荡。这个时候建议改用ode23t它在中等精度下对刚性系统处理得更好。如果是大阵列的多电平逆变器仿真可以考虑ode15s稳定但是速度慢。没有一种求解器通吃所有场景要根据模型是否包含高频开关器件、是否包含状态机逻辑来定。另外仿真步长也要配合求解器设定。定步长求解器步长必须小于开关周期除以采样点数否则会出现混叠变步长求解器要设置合理的最大步长上限防止在某些持续状态段步长拉得过大导致曲线精度下降。4.5 数值病态与参数敏感性分析光伏电池模型在低辐照度下容易出现数值病态问题主要原因是辐照度很低时输出电流接近零方程中的指数项依然很大牛顿迭代容易出现振荡甚至发散。我的经验是辐照度低于50W/m²时简化模型可以直接把电流输出设为零不需要再迭代求解这样能大幅提高仿真稳定性。做参数敏感性分析时我一般用控制变量法对五参数逐一做±10%、±20%的扰动观察最大功率的变化幅度。实测下来影响最大的是I_ph和I_0其次是nR_s的影响中等R_sh只在低辐照度下才有明显影响。这也验证了光伏电池关键参数就是光生电流和反向饱和电流其他参数都是修正项。这组结论对调试很有用当模型输出不对时先检查和温度相关的I_0修正再检查辐照度相关的I_ph修正效率最高。4.6 拓展示例光强突变下的动态响应模型搭好之后除了看静态I-V曲线还可以做一个动态响应测试。具体做法是在Simulink里给辐照度输入一个阶跃信号比如从1000W/m²突降到400W/m²观察输出电压和输出电流的动态过渡过程。由于光伏电池本身的物理响应时间在微秒级甚至更快这个动态过程主要由外接电路的滤波电容和负载决定。我一般习惯在光伏模块输出端并联一个几十微法的电容再接一个可变电阻负载。辐照度突变时电容电压不能突变所以系统会先经历一个电压调整过程然后逐步过渡到新的稳态工作点。这个过程对验证MPPT算法的动态响应非常有用实测下来如果电容过大动态响应会拖得很慢电容太小电压波动又太大。选一个合适的中间值是仿真调参的一个重要环节。5. 项目的可扩展方向与实际体会5.1 从单块电池到光伏阵列的扩展单个光伏电池模型的输出参数大约几十瓦在实际系统中远远不够用。要做阵列扩展最直接的做法是在Simulink里把多个模型通过串联和并联组合起来。串联提高电压并联提高电流整串整并之后就可以模拟实际光伏方阵。但这里有个重要问题实际光伏阵列在部分遮挡条件下被遮挡的组件会进入热斑状态产生反向电压牵扯到旁路二极管和防反二极管的建模。如果你只是做均匀光照下的阵列仿真直接把单体模型串并联就够了如果想要研究遮挡下的失配现象就需要在每个组件旁边额外加上旁路二极管模型。这个扩展方向是光伏发电系统仿真中一个很有深度的研究方向后续值得单独开一篇来讲。5.2 与MPPT算法联调的建议把光伏模型接入MPPT算法是光伏仿真最常见的应用场景。用扰动观察法、电导增量法或者其他智能算法比如粒子群、模糊控制做MPPT时模型输出的P-V曲线准确性直接影响算法的收敛效果。我的建议是先把模型在M文件里验证通过确保I-V/P-V曲线形态正确并且最大功率值与数据手册一致然后再接入Simulink闭环控制。不要一开始就直接在Simulink里联调这样出了问题很难定位是模型的问题还是算法的问题。这种分层验证的思路做控制系统仿真的工程人都懂但真正执行的时候很多人会图省事跳过最后排查成本更高。5.3 项目交付后的维护与迭代模型交付之后后期维护同样要做足准备。我习惯在模型中每一块自定义模块里都加上详细注释并且保留一个参数版本记录表记录什么时候改过哪些参数、为什么改、效果如何。这样无论是自己三个月后回来看还是转交给同事都能快速上手。如果是用较老版本的MATLAB写的模型新版本打开时偶尔会出现模块库路径变化或者函数废弃的警告。遇到这种情况不要急着全部重写先用升级工具(Upgrade Advisor)跑一遍大部分问题都能自动解决。剩下的个别警告再手动修改通常也就是替换几个过时的函数名而已。到最后再说点实在的个人体会。光伏电池建模这个事说难不算难毕竟物理模型是固定的数学方程也是公开的但说简单也真不简单真正影响仿真结果质量的全是细节。我见过不少同学直接拖Simulink的PV Array模块出来曲线都挺好看但问起模型内部参数是什么意思、怎么验证精度就答不上来了。如果是做研究或者写论文这种“知其然不知其所以然”的状态很容易被答辩老师问倒。所以这篇文章花了大量篇幅讲五参数的物理意义、计算方法和修正规律目的就是让读者不仅能把模型跑通还能把模型的每一个细节都解释清楚。把模型的基础打扎实后面无论是做MPPT算法、并网控制还是系统优化都会顺手很多。
返回列表