一、PVmodule_IUPUcurve.m
这个是利用光伏电池工程数学模型绘制输出特性用的程序,运行后直接输出光伏电池在相同温度、不同光照强度以及相同光照强度、不同温度下的I-U、P-U特性曲线。组件参数如下:
开路电压Uoc | 43.6V |
短路电流Isc | 8.35A |
最大功率点电压Ump | 35V |
最大功率点电流Imp | 7.6A |
光伏电池的工程数学模型是用拟合的方法在工程精度上复现光伏电池的输出特性,陆文婷、邓元实、傅望、苏建徽的论文里都有介绍。
二、ThreePeaks_POMPPT.slx
对光伏阵列利用普通扰动观察法进行MPPT,阵列由三块上述的组件串联而成,三块光伏组件温度均为25℃,光照强度分别为1000W/m2、800 W/m2、600 W/m2。仿真模型采用的是直接扰动占空比的算法,参考方波的两篇论文。
1、 光伏阵列
2、 Boost电路
3、 MPPT算法
4、 光伏输出功率波形
在用普通扰动观察法进行MPPT时,改变MPPT算法的占空比初始值,可以获得不同的最大功率,当占空比初始值分别为0.1、0.5、0.9时,获得的最大功率如图
三、多峰输出特性和粒子群寻优
main.m、update.m、compute.m 这三个程序是未加Boost MPPT的程序,main是主程序,只需运行这个,其余两个是粒子更新、计算的程序。主程序可以先绘制出光伏阵列在多峰情况下的I-U、P-U输出特性,然后绘制粒子群算法的寻优过程,并输出找到的最大功率点电压、最大功率。在与上述相同的工况下,结果如图
四、粒子群MPPT(PSO_MPPT.m必须在matlab当前文件夹下!)
把上面的程序封装到S-Function中进行MPPT仿真,PSO_MPPT.m是仿真中所用的PSO计算程序,包含了上面的主程序、更新、计算,采样时间也可以调整,这里我设的是1ms,也就是每过1ms进行一次采样、计算、输出。ThreePeaks_PSOMPPT.slx是simulink仿真模型,标红的示波器第一个显示的是光伏输出功率,第二个显示的是PSO算法得到的最大功率点电压和光伏阵列的实际工作电压。
clcclearclose all%%%---------------阵列P-U特性计算---------------Uoc=43.6;Ump=35.0;Isc=8.35;Imp=7.6;%光伏组件参数S=[1000 800 600]';T=[25 25 25]';%组件的温度、光照强度,行为串联,列为并联[r,c]=size(S);% r串联数,c并联数Im1=cell(r,c);Um1=cell(r,c);Pm1=cell(r,c);for i=1:c for j=1:r upv=[]; ppv=[]; dS=S(j,i)/1000-1; dT=T(j,i)-25; Iscn=Isc*S(j,i)/1000*(1+0.0025*dT); Impn=Imp*S(j,i)/1000*(1+0.0025*dT); Uocn=Uoc*(1-0.00288*dT)*log(exp(1)+0.5*dS); Umpn=Ump*(1-0.00288*dT)*log(exp(1)+0.5*dS); C2=(Umpn/Uocn-1)/log(1-Impn/Iscn); C1=(1-Impn/Iscn)*exp(-Umpn/C2/Uocn); ipv=0:0.001:Iscn; for k=1:length(ipv) I=ipv(k); U=log(((1-I/Iscn+C1)/C1))*C2*Uocn; upv(k)=U; ppv(k)=U*I; end Im1{j,i}=ipv; Um1{j,i}=upv; Pm1{j,i}=ppv; endendIb=cell(1,c);Ub=cell(1,c);Pb=cell(1,c);%支路输出特性for i=1:c L=[]; for j=1:r L=[L length(Um1{j,i})]; end U=zeros(1,max(L)); for j=1:r if L(j)~=max(L) Um1{j,i}=[Um1{j,i},zeros(1,max(L)-L(j))]; U=U+Um1{j,i}; else U=U+Um1{j,i}; I=Im1{j,i}; end end Ib{1,i}=I; Ub{1,i}=U; Pb{1,i}=U.*I;endumax=[];for i=1:length(Ub) umax=[umax Ub{1,i}(1)];endUmax=max(umax);U=0:0.1:Umax;I=zeros(1,length(U));for i=1:length(Ub) for j=1:length(U) [~,k]=min(abs(Ub{1,i}(:)-U(j))); I(j)=I(j)+Ib{1,i}(k); endendglobal P;P=U.*I;figure(1)plot(U,I)set(gcf,'NumberTitle','off','Name','阵列IU特性')figure(2)hold onplot(U,P)set(gcf,'NumberTitle','off','Name','阵列PU特性')%%%---------------粒子群寻优计算---------------%------给定初始化条件-------------------------------------------------------global c1 c2 w Vmax Vmin Xmax Xmin;c1=0.5; %学习因子1c2=0.5; %学习因子2w=0.7; %惯性权重maxDD=100; %最大迭代次数n=50; %粒子群粒子个数Xmax=length(U); %最大位置Xmin=1; %最小位置Vmax=ceil(Xmax/100); %最大速度Vmin=-Vmax; %最小速度%------初始化粒子群,定义结构体---------------------------------------------%结构体中的元素分别是粒子的坐标、速度、适应度、最佳适应度、最佳坐标par=struct([]);for j=1:n par(j).x=round(0+Xmax*rand()); %位置随机初始化 par(j).vx=round(Vmin+(Vmax-Vmin)*rand()); %粒子速度随机初始化 par(j).fit=0; %粒子适应度为0初始化 par(j).bestfit=0; %粒子最佳适应度为0初始化 par(j).bestx=par(j).x; %粒子最佳位置初始化endpar_best=par(1); %初始化粒子群中最佳粒子%------迭代计算过程--------------------------------------------------------for k=1:maxDD plot(U(par_best.x),P(par_best.x),'r*') %画出最佳粒子的位置 for l=1:n [par(l),par_best]=update(par(l),par_best); %更新粒子信息 endendUbase=Ump*r;Umpp=U(par_best.x)Pmpp=P(par_best.x)
往期回顾>>>>>>
【模式识别】Matlab指纹识别【图像处理】LSB水印技术matlab自动识别银行卡号【基础教程】MATLAB导出高清晰图片无参考图像质量评价之基于多特征的增强图像质量评价资源获取
公众号中回复“ QQ ”加入QQ群;回复“ 微信 ” 加入微信群;回复 “ 投稿 ” 与大家分享智慧;回复 “ 资源获取 ”免费下载 该资源 。