Modeling pv (plot i-v, p-v characteristics of pv array)
How to plot i-v and p-v characteristics curves in Matlab/Simulink using this code:
%Initial Data
q = 1.6*10^(-19);
k = 1.38*10^(-23); %Boltzmann’s costant
T = 298; %Temperature in Kelvin(25+273)
%% Datasheet table STC value of panel
Isc = 3.45; % Short circuit current
Voc = 21.7; %Open circuit voltage
Imp = 3.15; %Maximum power current
Vmp = 17.4; %Maximum power voltage
N = 36; %number of cells connected in series
Pmax = Vmp*Imp; %Maximum power point
A = 1;
vt = (k*A*T*N)/q;
Rs = (Voc/Imp) – (Vmp/Imp) + ((vt/Imp)*log((vt)/(vt + Vmp)));
I0 = Isc/(exp(Voc/vt) – exp(Rs*Isc/vt));
Ipv = I0*((exp(Voc/vt)) – 1);
%% First step
iter = 10;000;
it = 0;
tol = 0.1;
A1 = A;
VmpC = (vt*(log((Ipv+I0-Imp)/I0))) – (Rs*Imp);
e1 = VmpC – Vmp;
Rs1 = Rs;
while (it < iter && e1 > tol)
if VmpC < Vmp
A1 = A1 – 0.01;
else
A1 = A1 + 0.01;
end
vt1 = (k*A1*T*N)/q;
I01 = Isc/(exp(Voc/vt1) – exp(Rs1*Isc/vt1));
Ipv1 = I01*((exp(Voc/vt1))- 1);
VmpC = (vt1*(log((Ipv1 + I01 – Imp)/I01))) – (Rs1*Imp);
e1 = (VmpC -Vmp);
it = it + 1;
end
vt1 = (k*A1*T*N)/q;
Rs1 = (Voc/Imp) -(VmpC/Imp) + ((vt1/Imp)*log((vt1)/(vt1 + VmpC)));
%% Second step
tolI = 0.001;
iter = 10000;
itI = 0;
I01 = Isc/(exp(Voc/vt1) – exp(Rs1*Isc/vt1));
Ipv1 = I01*((exp(Voc/vt1))-1);
Rp = (( – Vmp)*(Vmp + (Rs1*Imp)))/(Pmax – (Vmp*Ipv1) + (Vmp*I01*(exp(((Vmp + (Rs1*Imp))/vt1) – 1))));
%calculate I0 with new Rp value
I02 = (Isc*(1 + Rs1/Rp)- Voc/Rp)/(exp(Voc/vt1) – exp(Rs1*Isc/vt1));
Ipv2 = I02*((exp(Voc/vt1)) – 1) + Voc/Rp;
ImpC = Pmax/VmpC;
err = abs(Imp – ImpC);
Rpnew = Rp;
while err>tolI && itI<iter
if ImpC<Imp
Rpnew = Rp + 0.1*itI;
elseif ImpC>=Imp
Rpnew = Rp – 0.1*itI;
end
%Calculate I0 with Rpnew
I02 = (Isc*(1 + Rs1/Rpnew) – Voc/Rpnew)/(exp(Voc/vt1)- exp(Rs1*Isc/vt1));
Ipv2 = I02*((exp(Voc/vt1)) – 1) + Voc/Rpnew;
eqn = @(ImpC) Ipv2 – (I02*(exp((Vmp + (Rs1*ImpC))/vt1) – 1))- ImpC-(Vmp + Rs1*ImpC)/Rpnew;
current_c = Imp;
s = fzero(eqn,current_c);
ImpC = s;
itI = itI+1;
err = abs(Imp – ImpC);
end
X = sprintf(‘A = %.2f, I0 = %d, Ipv = %.3f, Rs = %f, Rp = %f’, A1,I02,Ipv2,Rs1,Rpnew);
disp(X);How to plot i-v and p-v characteristics curves in Matlab/Simulink using this code:
%Initial Data
q = 1.6*10^(-19);
k = 1.38*10^(-23); %Boltzmann’s costant
T = 298; %Temperature in Kelvin(25+273)
%% Datasheet table STC value of panel
Isc = 3.45; % Short circuit current
Voc = 21.7; %Open circuit voltage
Imp = 3.15; %Maximum power current
Vmp = 17.4; %Maximum power voltage
N = 36; %number of cells connected in series
Pmax = Vmp*Imp; %Maximum power point
A = 1;
vt = (k*A*T*N)/q;
Rs = (Voc/Imp) – (Vmp/Imp) + ((vt/Imp)*log((vt)/(vt + Vmp)));
I0 = Isc/(exp(Voc/vt) – exp(Rs*Isc/vt));
Ipv = I0*((exp(Voc/vt)) – 1);
%% First step
iter = 10;000;
it = 0;
tol = 0.1;
A1 = A;
VmpC = (vt*(log((Ipv+I0-Imp)/I0))) – (Rs*Imp);
e1 = VmpC – Vmp;
Rs1 = Rs;
while (it < iter && e1 > tol)
if VmpC < Vmp
A1 = A1 – 0.01;
else
A1 = A1 + 0.01;
end
vt1 = (k*A1*T*N)/q;
I01 = Isc/(exp(Voc/vt1) – exp(Rs1*Isc/vt1));
Ipv1 = I01*((exp(Voc/vt1))- 1);
VmpC = (vt1*(log((Ipv1 + I01 – Imp)/I01))) – (Rs1*Imp);
e1 = (VmpC -Vmp);
it = it + 1;
end
vt1 = (k*A1*T*N)/q;
Rs1 = (Voc/Imp) -(VmpC/Imp) + ((vt1/Imp)*log((vt1)/(vt1 + VmpC)));
%% Second step
tolI = 0.001;
iter = 10000;
itI = 0;
I01 = Isc/(exp(Voc/vt1) – exp(Rs1*Isc/vt1));
Ipv1 = I01*((exp(Voc/vt1))-1);
Rp = (( – Vmp)*(Vmp + (Rs1*Imp)))/(Pmax – (Vmp*Ipv1) + (Vmp*I01*(exp(((Vmp + (Rs1*Imp))/vt1) – 1))));
%calculate I0 with new Rp value
I02 = (Isc*(1 + Rs1/Rp)- Voc/Rp)/(exp(Voc/vt1) – exp(Rs1*Isc/vt1));
Ipv2 = I02*((exp(Voc/vt1)) – 1) + Voc/Rp;
ImpC = Pmax/VmpC;
err = abs(Imp – ImpC);
Rpnew = Rp;
while err>tolI && itI<iter
if ImpC<Imp
Rpnew = Rp + 0.1*itI;
elseif ImpC>=Imp
Rpnew = Rp – 0.1*itI;
end
%Calculate I0 with Rpnew
I02 = (Isc*(1 + Rs1/Rpnew) – Voc/Rpnew)/(exp(Voc/vt1)- exp(Rs1*Isc/vt1));
Ipv2 = I02*((exp(Voc/vt1)) – 1) + Voc/Rpnew;
eqn = @(ImpC) Ipv2 – (I02*(exp((Vmp + (Rs1*ImpC))/vt1) – 1))- ImpC-(Vmp + Rs1*ImpC)/Rpnew;
current_c = Imp;
s = fzero(eqn,current_c);
ImpC = s;
itI = itI+1;
err = abs(Imp – ImpC);
end
X = sprintf(‘A = %.2f, I0 = %d, Ipv = %.3f, Rs = %f, Rp = %f’, A1,I02,Ipv2,Rs1,Rpnew);
disp(X); How to plot i-v and p-v characteristics curves in Matlab/Simulink using this code:
%Initial Data
q = 1.6*10^(-19);
k = 1.38*10^(-23); %Boltzmann’s costant
T = 298; %Temperature in Kelvin(25+273)
%% Datasheet table STC value of panel
Isc = 3.45; % Short circuit current
Voc = 21.7; %Open circuit voltage
Imp = 3.15; %Maximum power current
Vmp = 17.4; %Maximum power voltage
N = 36; %number of cells connected in series
Pmax = Vmp*Imp; %Maximum power point
A = 1;
vt = (k*A*T*N)/q;
Rs = (Voc/Imp) – (Vmp/Imp) + ((vt/Imp)*log((vt)/(vt + Vmp)));
I0 = Isc/(exp(Voc/vt) – exp(Rs*Isc/vt));
Ipv = I0*((exp(Voc/vt)) – 1);
%% First step
iter = 10;000;
it = 0;
tol = 0.1;
A1 = A;
VmpC = (vt*(log((Ipv+I0-Imp)/I0))) – (Rs*Imp);
e1 = VmpC – Vmp;
Rs1 = Rs;
while (it < iter && e1 > tol)
if VmpC < Vmp
A1 = A1 – 0.01;
else
A1 = A1 + 0.01;
end
vt1 = (k*A1*T*N)/q;
I01 = Isc/(exp(Voc/vt1) – exp(Rs1*Isc/vt1));
Ipv1 = I01*((exp(Voc/vt1))- 1);
VmpC = (vt1*(log((Ipv1 + I01 – Imp)/I01))) – (Rs1*Imp);
e1 = (VmpC -Vmp);
it = it + 1;
end
vt1 = (k*A1*T*N)/q;
Rs1 = (Voc/Imp) -(VmpC/Imp) + ((vt1/Imp)*log((vt1)/(vt1 + VmpC)));
%% Second step
tolI = 0.001;
iter = 10000;
itI = 0;
I01 = Isc/(exp(Voc/vt1) – exp(Rs1*Isc/vt1));
Ipv1 = I01*((exp(Voc/vt1))-1);
Rp = (( – Vmp)*(Vmp + (Rs1*Imp)))/(Pmax – (Vmp*Ipv1) + (Vmp*I01*(exp(((Vmp + (Rs1*Imp))/vt1) – 1))));
%calculate I0 with new Rp value
I02 = (Isc*(1 + Rs1/Rp)- Voc/Rp)/(exp(Voc/vt1) – exp(Rs1*Isc/vt1));
Ipv2 = I02*((exp(Voc/vt1)) – 1) + Voc/Rp;
ImpC = Pmax/VmpC;
err = abs(Imp – ImpC);
Rpnew = Rp;
while err>tolI && itI<iter
if ImpC<Imp
Rpnew = Rp + 0.1*itI;
elseif ImpC>=Imp
Rpnew = Rp – 0.1*itI;
end
%Calculate I0 with Rpnew
I02 = (Isc*(1 + Rs1/Rpnew) – Voc/Rpnew)/(exp(Voc/vt1)- exp(Rs1*Isc/vt1));
Ipv2 = I02*((exp(Voc/vt1)) – 1) + Voc/Rpnew;
eqn = @(ImpC) Ipv2 – (I02*(exp((Vmp + (Rs1*ImpC))/vt1) – 1))- ImpC-(Vmp + Rs1*ImpC)/Rpnew;
current_c = Imp;
s = fzero(eqn,current_c);
ImpC = s;
itI = itI+1;
err = abs(Imp – ImpC);
end
X = sprintf(‘A = %.2f, I0 = %d, Ipv = %.3f, Rs = %f, Rp = %f’, A1,I02,Ipv2,Rs1,Rpnew);
disp(X); pv, array, arrays, equation, plot, plotting, matlab, simulink, simulation, fsolve, solve MATLAB Answers — New Questions