Problem in getting correct output for double diode model of pv array
조회 수: 8 (최근 30일)
이전 댓글 표시
the following is the code for solving current equation of a double diode model of a pv array, it throws an error when I run it
% Parameters
I_L = 8.3; % Light-generated current
I_01 = 1.22e-12; % Reverse saturation current for diode 1
I_02 = 1.22e-12; % Reverse saturation current for diode 2
n_1 = 1.36; % Ideality factor for diode 1
n_2 = 2.34; % Ideality factor for diode 2
k = 1.380649e-23; % Boltzmann constant
q = 1.60217662e-19; % Electronic charge
T = 298.15; % Temperature
R_S = 0.221; % Series resistance
% Voltage range
V_min = 0;
V_max = 32.9;
V_step = 0.01;
V = V_min:V_step:V_max;
% Double diode model
I = zeros(size(V));
for i = 1:length(V)
f = @(x) I_L - I_01*(exp(q*(V(i)+x*R_S)/(n_1*k*T))-1) - I_02*(exp(q*(V(i)+x*R_S)/(n_2*k*T))-1) - x/R_S;
I(i) = fsolve(f, 33);
end
% Plot current vs voltage
figure;
plot(V,I);
xlabel('Voltage (V)');
ylabel('Current (A)');
title('Double Diode Model');
댓글 수: 5
Joel Van Sickel
2023년 5월 22일
It's likely your equation for fsolve is incorrect, can you share the analytical formula that you are tryint to solve?
답변 (1개)
Sayan
2023년 9월 7일
I understand from your issue that the code you are trying to run to obtain the "I-V" characteristics of a PV cell array is throwing an error. Below are the possible workarounds for the issue:
- The number of function evaluations can be increased for the "fsolve" function to overcome the error.
- The initial condition to determine the value of current "I" defined in the "fsolve" function can be provided to the previous computed value of current rather than hard coding it to 33.
- The last term in the function handle expression "f" should be dictating the current through the shunt resistance. But shunt resistance is not declared in the code, and the expression "x/R_s" is wrong.
- The changes are shown in the below-mentioned code snippet. The code mentioned below should be included after the line "I = zeros(size(V));"
%declare the value of shunt resistance
R_sh=100;%say 100
%compute the initial value of current for 0 voltage
f1 = @(x) I_L - I_01*(exp(q*(x*R_S)/(n_1*k*T))-1) - I_02*(exp(q*(x*R_S)/(n_2*k*T))-1) - x*R_S/R_sh;
I(1)=fsolve(f1,0);
%declare the number of function evaluations for "fsolve" function
options = optimoptions('fsolve', 'MaxFunctionEvaluations', 1000);
for i = 2:length(V)
f = @(x) I_L - I_01*(exp(q*(V(i)+x*R_S)/(n_1*k*T))-1) - I_02*(exp(q*(V(i)+x*R_S)/(n_2*k*T))-1) - x*R_S/R_sh;%declare x*R_S/R_sh as the current through shunt branch
I(i) = fsolve(f,I(i-1),options);%provide the "options" to "fsolve" function call
end
%now plot the I-V data and change the value of the constants to meet the
%required curve
Further information on "fsolve" function can be found in the following documentation.
Hope this helps in resolving the issue.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Sources에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!