Photovoltaic model (5 parameter model)

6 views (last 30 days)
Hi everyone
I have attempted to model the DC power output (at maximum power point, i.e max Impp_ and Vmpp_ values) for a set of photovoltaic modules. The open circuit voltage (Voc_) and Impp_ and Vmpp equations have been solved using numerical methods (which is where I think the mistake lies). Basically, there is a mistake(s) in the coding since in come case I get a power output that is higher than the nominal power output of the PV panel
Any ideas/suggestions are much appreciated
for iteration = 1:10 % for iteration = 1:10 %10000 iterations
Voc_(:,:,K)= Voc_ref(K) + b_Voc(K).*(Tc(:,:,K)-Tstc);
Voc_old(:,:,K) = Voc_(:,:,K);
Voc_(:,:,K) = ns(K).*Vt(:,:,K).*log((Iph_G(:,:,K).*Rsh_ref(K)-Voc_(:,:,K)./Io_ref(K).*Rsh_ref(K)));
error(:,:,K) = Voc_old(:,:,K) - Voc_(:,:,K);
if abs(error(:,:,K))/Voc_(:,:,K) < 1e-6 % The iteration has converged
break
end
end
Voc_G(:,:,K) = Voc_(:,:,K); %%% ???? check this ????? %%%%%
Voc_T(:,:,K) = Voc_ref(K) + b_Voc(K).*(Tc(:,:,K) - Tstc);
Io_T(:,:,K) = (Isc_T(:,:,K)-((Voc_T(:,:,K) - Isc_T(:,:,K).* Rs(K))./Rsh(:,:,K)))...
.*exp((-Voc_T(:,:,K))./(ns(K).*Vt(:,:,K))); % Dark saturation current temperature
Iph_T(:,:,K) = Io_T(:,:,K).*exp((Voc_T(:,:,K))./(ns(K).*Vt(:,:,K)))+(Voc_T(:,:,K)./Rsh(:,:,K));
Voc_GT(:,:,K) = Voc_G(:,:,K)+(b_Voc(K).*(Tc(:,:,K)-Tstc)); % Radiation and temp of Voc
Isc_GT(:,:,K) = Isc_G(:,:,K).*(1+(a_Isc(K)/100).*(Tc(:,:,K)-Tstc));
Io_GT(:,:,K) = (Isc_GT(:,:,K)-((Voc_GT(:,:,K)-Isc_GT(:,:,K).*Rs(K))./Rsh(:,:,K)).*exp(-1.*(Voc_GT(:,:,K)/ns(K).*Vt(:,:,K))));
Iph_GT(:,:,K) = Io_GT(:,:,K).*exp(Voc_GT(:,:,K)./ns(K).*Vt(:,:,K))+(Voc_GT(:,:,K)./Rsh(:,:,K));
%%Vmpp & Impp
%Initialization
Vmpp_(:,:,K) = Voc_GT(:,:,K)./Voc_ref(K).*Vmp_ref(K);
Impp_(:,:,K) = Isc_GT(:,:,K)./Isc_ref(K).*Imp_ref(K);
w = 0.04; % for SUR
for iteration = 1:10
Vmpp_(:,:,K) = (1-w).*Vmpp_(:,:,K)+w.*(Voc_GT(:,:,K)-Impp_(:,:,K).*Rs(K)+ns(K).*Vt(:,:,K)...
.*log(((Isc_GT(:,:,K)-Impp_(:,:,K)).*(Rs(K)+Rsh(:,:,K))-Vmpp_(:,:,K))./(Isc_GT(:,:,K)...
.*(Rs(K)+Rsh(:,:,K))-Voc_GT(:,:,K))));
Impp_(:,:,K) = (1-w).*Impp_(:,:,K)+w.*(Vmpp_(:,:,K).*(1./Rsh(:,:,K)+(Isc_GT(:,:,K)...
.*Rsh(:,:,K)-Voc_GT(:,:,K)+Isc_GT(:,:,K).*Rs(K)).*exp((Vmpp_(:,:,K)+Impp_(:,:,K)...
.*Rs(K)-Voc_GT(:,:,K))/ns(K)./Vt(:,:,K))./ns(K)./Vt(:,:,K)./Rsh(:,:,K))./(1+Rs(K)...
./Rsh(:,:,K)+Rs(K).*(Isc_GT(:,:,K).*Rsh(:,:,K)-Voc_GT(:,:,K)+Isc_GT(:,:,K).*Rs(K))...
.*exp((Vmpp_(:,:,K)+Impp_(:,:,K).*Rs(K)-Voc_GT(:,:,K))./ns(K)./Vt(:,:,K))./ns(K)./Vt(:,:,K)./Rsh(:,:,K)));
parameter_new(:,:,K) = [Impp_(:,:,K); Vmpp_(:,:,K)];
if iteration ~= 1
mismatch(:,:,K) = abs((parameter_new(:,:,K)-parameter_old(:,:,K))./parameter_new(:,:,K));
if (norm(mismatch(:,:,K),'inf') < 1e-6)
break;
end
end
parameter_old(:,:,K)= [Impp_(:,:,K); Vmpp_(:,:,K)];
PV_power_output(:,:,K) = Vmpp_(:,:,K).*Impp_(:,:,K);
end
end
  3 Comments
Andrew Alkiviades
Andrew Alkiviades on 1 Mar 2012
I emailed you all the info (m file and spreadsheet)
Hope thats ok!
Andrew
Lucardo Montreuil Jean
Lucardo Montreuil Jean on 18 Jun 2015
Hi everyone. I get the same probleme, could anyone send the m.file. Please.

Sign in to comment.

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!