ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于MATLAB/Simulink的光伏组件遮阳仿真与失配分析

基于MATLAB/Simulink的光伏组件遮阳仿真与失配分析 做光伏电站评估和组件设计的人十有八九见过这种场景晴天下午的发电功率曲线突然塌下去一块逆变器既不报警也不停机运维到现场查了半天最后发现只是旁边广告牌、新栽的行道树或者隔壁楼栋的阴影扫过了阵列末端几块组件。之后乌云一走、阴影挪开曲线又自己恢复正常了。这类现象背后的机理就是局部遮阳引发的组件失配。想把它彻底研究透靠室外实测成本高、天气不可控、重复性也差最靠谱的手段就是用MATLAB/Simulink做光伏组件遮阳仿真。这篇文章我会从光伏电池的等效电路出发把遮阳仿真模型的搭建过程、参数设置、I-V/P-V曲线判读方法完整过一遍同时结合我实际建模过程中踩过的坑给你一些文档里不会写的提醒。如果你正准备研究光伏失配机理、做电站遮挡方案评估或者要给MPPT算法找一组可复现的测试场景这篇文章可以直接作为起步参考。1. 遮阳引发的功率拐点串联失配如何把少量阴影放大成主功率损失光伏组件和普通电源最大的区别在于它内部是一大串电池片串联起来的串联回路的电流处处相等。这句话说起来简单但它直接决定了局部遮阳的破坏力一旦某一小块电池片因为被阴影挡住、电流输出能力下降整串组件的工作电流都会被这块短板电池拖住输出功率出现远超遮挡面积比例的断崖式下跌。我举个直观的例子。一块72片电池串联的组件假设其中只有3片电池被树叶遮住遮挡面积不到4%。如果没有旁路二极管介入这3片电池的电流输出能力从9A左右掉到1A左右串联回路为了迁就它们整块组件的电流全部被拉到1A附近输出功率从300W级别直接掉到几十瓦损失比例不是4%而是接近80%。这就是失配效应和简单面积比例的差别。为了缓解这种灾难性的失配损耗组件内部会预先布置旁路二极管把整串电池分成几个子串。当某个子串因为遮阳电流受限时旁路二极管导通把该子串短路掉让其余子串继续输出电流。这个机制很聪明但它会带来两个新问题旁路二极管导通时会损失约0.5V到0.7V的压降这部分是纯粹的功率损耗。被旁路掉的子串从发电单元变成了累赘组件I-V曲线会出现多个台阶P-V曲线则可能出现多个峰值MPPT算法很容易被局部峰值骗到。这就是为什么光伏遮阳仿真如此重要。它不是为了画几根漂亮的曲线自我欣赏而是为了精确回答几个工程问题特定遮阳场景下组件还有多少功率可用最大功率点到底在哪个电压位置旁路二极管的布置是否合理MPPT在双峰、多峰情况下能不能稳定收敛这些问题不做仿真基本只能靠猜。2. 单二极管等效电路与遮阳的数学表达2.1 光伏电池等效电路的物理拆解工程上描述光伏电池输出特性使用最广的是单二极管五参数模型。它把整块光伏电池抽象成四个并联/串联元件的组合一个电流源模拟光生电流一个二极管模拟PN结的暗电流特性并联电阻描述漏电流路径串联电阻描述体电阻和接触电阻。对应的输出电流方程为I Iph − I0 × [exp((V I × Rs) / (n × Ns × Vt)) − 1] − (V I × Rs) / Rsh其中各符号的含义如下表所示符号含义典型量级Iph光生电流正比于辐照度短路电流附近的安培级I0二极管反向饱和电流10^-8 A级别n二极管理想因子1~1.5Ns串联电池片数量60/72等Vt热电压 kT/q25°C时约25.7mVRs串联电阻0.1~0.5ΩRsh并联电阻数百到数千Ω这个方程理解起来并不难。光生电流Iph是正资产在整个电压范围内基本恒定二极管项是消耗随着电压升高二极管支路分走的电流越来越多并联电阻项反映漏电损失在低电压下几乎可以忽略但在高电压下会拉低曲线尾巴。整条I-V曲线就是这三股电流赛跑的最终结果。2.2 遮阳条件下光生电流的线性退化与参数修正遮阳如何进入这个方程核心逻辑是遮阳降低了电池片接收到的有效辐照度而光生电流Iph与辐照度近似成正比。因此对一个被阴影遮挡的电池片Iph_shaded ≈ (G_shaded / G_ref) × Iph_ref举例来说标准测试条件G_ref1000W/m²组件短路电流Isc9.2A。如果某电池片被阴影压到200W/m²它的光生电流大约只有1.84A。这个线性关系在晶体硅电池上非常近似成立是遮阳仿真最关键的简化假设。温度对参数也有影响但幅度比辐照度小一个量级。工程仿真中我通常只在整块组件层面施加温度修正遮阳子串层面直接用辐照度修正Iph不再单独做温度迭代这样既能保证精度又不会让模型复杂到难以收敛。I0和n主要影响开路电压附近的行为遮阳时它们的变化不大如果不做极端低温研究按常数处理完全可以接受。2.3 旁路二极管的建模逻辑组件遮阳仿真绕不开旁路二极管。在Simulink里建旁路二极管模型最实用的方式是把它当成一个受控开关加上一个导通压降当子串两端正向电压足以让二极管导通通常在-0.5V到-0.7V附近该子串电压被钳位在二极管压降否则二极管截止子串正常参与串联输出。这一逻辑在纯数学建模阶段就要想清楚否则到Simulink里会画成一团乱麻。我的做法是先把组件按子串拆成独立电池模型每个子串的输出端并联一个二极管模型整体再串联成组件Simulink里用子系统封装每个子系统只管一个子串的I-V关系互不干扰。3. Simulink仿真模型搭建从参数提取到遮阳场景控制3.1 我为什么不用现成的Simscape PV模块MATLAB/Simulink里其实有Simscape Electrical自带的PV Array模块支持设置串联电池数量、并联电池数量、旁路二极管参数界面很友好。但我做遮阳仿真时仍然优先选择从单二极管方程自建模型原因有两个第一Simscape PV Array的阴影设置虽然可以通过外部信号改变辐照度但要精细到第37片电池被遮住、第38片不受影响这种电池级分布控制参数映射很不直观。自建模型里我可以精确控制每一个子串甚至每一片电池的辐照度输入。第二研究性模型经常要和MPPT算法、功率优化器、组件级电子设备联动自建模型所有状态变量都是显式的方便我把Iph、二极管电流、子串电压这些中间量全部引出到示波器和MATLAB工作区后期调试会省下大量时间。当然如果你只是快速验证一个方案Simscape PV Array足够了没有必要重复造轮子。3.2 用MATLAB脚本完成参数提取与初始化建议把所有组件参数放在一个单独的MATLAB初始化脚本里Simulink模型通过工作区变量引用它们。这样做的好处是换组件型号、换温度工况时只需改脚本不用动Simulink模型结构。%% 光伏组件遮阳仿真参数初始化 % 以某72片单晶组件为例 q 1.602176634e-19; % 电子电荷 (C) k 1.380649e-23; % 玻尔兹曼常数 (J/K) T 298.15; % 电池温度 (K) Vt k * T / q; % 热电压 (V) Ns 72; % 串联电池片数 Isc 9.20; % 短路电流 (A) Voc 46.3; % 开路电压 (V) Impp 8.67; % 最大功率点电流 (A) Vmpp 37.6; % 最大功率点电压 (V) % 单二极管模型参数初值 n 1.04; % 二极管理想因子 Iph Isc; % 光生电流初值 I0 Isc / (exp(Voc / (n * Ns * Vt)) - 1); % 饱和电流初值 Rs 0.15; Rsh 350; % 若需要更准确的参数可基于上述初值用非线性最小二乘拟合 % 这里展示最简化的迭代求解思路 % options optimoptions(lsqnonlin, Display, off); % ... 实际拟合时需构造 I-V 残差函数 ...参数提取的完整流程里还有一步很关键就是让模型计算出的I-V曲线必须同时穿过(Isc, 0)、(Vmpp, Impp)和(0, Voc)三个数据表点。只用初值计算出来的曲线最大功率点通常对不上数据表需要进一步迭代优化Rs、Rsh、n、I0这四个参数直到最大功率点误差小于0.5%。这一步建议直接在MATLAB命令行里用lsqnonlin做不要放在Simulink模型内部模型内迭代会拖慢仿真速度。3.3 Simulink模型的分层结构与核心子系统整个遮阳仿真模型我习惯分成四层第1层场景管理层。通过Signal Builder或Constant模块定义每一个子串的辐照度输入信号。第2层电池串模型层。每个子串封装成一个子系统内部是若干个电池模型串联。第3层旁路二极管层。每个子串的输出端并联二极管支路。第4层输出与监测层。汇总电压、电流、功率后送Scope或者输出到工作区做后处理。单个电池模型我用MATLAB Function块实现输入是工作区参数结构体、当前电池电压和辐照度输出是电流。求解单二极管方程时由于方程中含有I自身直接代入会形成隐式方程我采用fzero内置函数在仿真过程中实时求根function I pv_cell_current(V, G, T, p) % p 为包含全部参数的结构体 Vt p.k * T / p.q; Iph p.Iph_stc * G / 1000; % 辐照度线性修正 fun (x) Iph ... - p.I0 * (exp((V x * p.Rs) / (p.n * p.Ns_cell * Vt)) - 1) ... - (V x * p.Rs) / p.Rsh - x; I fzero(fun, Iph); endfzero对初值比较敏感我通常把光生电流Iph作为初值传入在绝大多数工作点下都能快速收敛。这里有一个非常实用的工程建议Simulink在仿真过程中会频繁调用这个函数fzero的每一步迭代都会消耗仿真时间。如果你想做几百秒的动态遮阳仿真建议先在MATLAB里把I-V表离线算好Simulink里改用Lookup Table查表方式速度和稳定性都会好很多。3.4 子串遮阳场景控制遮阳场景控制是整个模型里最灵活的部分。我的做法是给每个子串单独设置一个辐照度输入端口然后在场景管理层用不同的信号源定义不同的遮阳模式恒值遮阳某子串从t0开始固定接收200W/m²模拟固定遮挡物。动态遮阳用Ramp或Signal Builder让遮阳辐照度按时间线性变化模拟云层漂移。多子串组合遮阳不同子串接受不同的辐照度信号模拟半片组件被斜向阴影扫过时电池间差异。值得强调的是辐照度信号不要直接从1000突跳到200中间加一个50ms到200ms的斜坡过渡否则Simulink的变步长求解器很可能在突变点附近反复调步仿真速度锐减少数情况下还会报数值奇异错误。4. 仿真曲线解读均匀光照与三种典型遮阳场景4.1 基线场景无遮阳组件的单峰特性先把模型跑一遍无遮阳基线辐照度1000W/m²、温度25°C。得到的结果是标准单峰I-V曲线短路点电流9.2A开路点电压46.3V最大功率点落在(37.6V, 8.67A)Pmax约为326W。这个时候P-V曲线只有一个峰值MPPT无论用扰动观察法还是电导增量法都能比较轻松地收敛到全局最大点。这个基线很关键它是所有遮阳场景的参照系。后面每次修改遮阳配置我都会把基线和遮阳曲线画在同一张图里做对比。4.2 单子串部分遮阳的双峰现象现在做第一个典型场景一块组件被分成3个子串每个子串24片电池。假设第1个子串中有3片电池被遮到200W/m²其余子串保持1000W/m²。这个时候I-V曲线会呈现典型的台阶状。高电流段第1子串因为旁路二极管导通而被短路掉了大半组件电压主要来自第2、第3子串的叠加再减去二极管压降所以工作电压明显低于基线低电流段当外部电压把组件电流压到1.84A以下时第1子串的电池又能正常工作了组件电压可以恢复到接近满电压。对应的P-V曲线出现了两个明显的峰值。最高峰的电压位置、电流位置、功率值都可能和基线完全不同而且最高峰并不一定出现在电压最高的区域。具体Pmax值取决于被遮电池的数量、遮阳辐照度、旁路二极管压降等多个因素叠加。4.3 多子串组合遮阳的复杂多峰特性第二个场景更贴近真实屋顶电站组件从左上到右下被斜向阴影扫过3个子串分别接收1000W/m²、600W/m²、200W/m²的等效辐照度。此时I-V曲线的台阶可能多达三个P-V曲线可能出现多个局部峰值全局最大功率点的位置变得极其隐蔽。第三个场景是整片云遮3个子串全部降到400W/m²。这种情况下虽然总功率下降明显但各子串之间没有失配I-V曲线仍然是平滑单峰MPPT依然可以正常工作。这说明一个容易被误解的事实遮阳本身的功率损失不可避免但真正让MPPT头痛的是不均匀遮阳而不是均匀降辐照。4.4 曲线判读的几个要点从仿真曲线里读信息我有几个固定习惯先数台阶。I-V曲线有几个台阶就说明有几个子串处于失配状态。再看最大功率点电压位置。双峰情况下如果全局峰值出现在低电压侧说明旁路二极管正在大量导通功率损耗主要来自二极管压降。最后算失配损耗比例。把遮阳场景的Pmax除以该组件在1000W/m²下的Pmax得到剩余功率比这个指标在做组件选型和阵列布局对比时会反复用到。5. 遮阳仿真的工程应用与建模时最容易踩的坑5.1 用遮阳仿真验证MPPT算法很多做控制算法的朋友拿光伏模型当背景板重点放在MPPT算法本身。但如果你不把遮阳场景建模你的MPPT测试就漏掉了真正困难的场景。我曾经把扰动观察法、电导增量法和一个简单的粒子群MPPT算法放到同一个遮阳模型上对比结果显示在双峰场景下传统扰动观察法有较大概率收敛到低功率局部峰值而粒子群方法虽然收敛慢一些但几乎总能找到全局最大点。这个结论只有通过遮阳仿真才能稳定复现室外实测很难控制阴影形态和时间。5.2 建模中的一个常见整洁陷阱刚开始搭遮阳模型的项目很容易把每个电池片都单独建一个子系统结果模型图里上百个方块连线密密麻麻跑起来奇慢无比。我的经验是对于常规组件仿真把子串作为最小建模单元就够了没必要到电池片级。只有做半片组件研究或者要分析电池片内部热斑温度时才需要考虑电池片级模型而且这时建议把I-V关系预先离线算成查找表别在Simulink里实时解方程。保持模型越简单越能快速迭代研究方案。5.3 热斑效应遮阳仿真外延到可靠性分析遮阳仿真的输出不仅是电学曲线它还可以给出每个子串上被旁路掉那段电压的分布粘上热能模型之后就能初步估计被遮电池片的热斑温升。这对于评估组件长期运行风险很有价值。我见过一个实际案例某电站组件背面温度正常但通过仿真发现某子串常年处于旁路导通状态对应电池片长时间承受反偏电压和热量积累最终引发封装材料老化开裂。这就是遮阳仿真外延到可靠性分析的价值。5.4 现实项目中选用遮阳仿真工具的取舍坦白讲如果只是给客户出一个电站阴影评估报告商业仿真软件如PVsyst就足够专业不需要自己用MATLAB搭模型。但是如果你面对的是以下三类问题自建Simulink模型的优势会非常明显MPPT算法开发与验证、新型组件拓扑半片、叠瓦、多主栅的失配特性研究以及光伏组件与储能、优化器等周边设备的联合仿真。在这些场景下Simulink可以提供完全透明的内部状态和灵活的对外接口这是通用光伏仿真软件做不到的。我在实际做遮阳仿真项目时还有一个体会模型建立之后的参数校准和实验验证重要性远超模型本身。对称采用标准数据表参数算出来的曲线和实际组件的I-V曲线之间通常有3%到5%的偏差而这个误差在不同遮阳比例下会被放大。有条件的话我建议至少用一台太阳模拟器测几组不同遮阳形态下的真实I-V曲线把仿真结果和实测数据对比反向修正Rs和n的取值。用修正后的模型去预测新遮阳场景思路会可靠得多。这套从等效电路到Simulink模型的遮阳仿真方法我目前在组件失配研究、MPPT测试和电站阴影评估中反复使用整体稳定性很好。后续如果你需要我可以把半片组件的仿真建模和动态云遮的自适应场景构建也整理出来这两个方向是在这套基础模型上的自然延伸。
返回列表