Please help me to check it this algorithm, I think is not changing the duty cycle:
function dc = PyO( V, I, Adc, dcinit)
%#codegen
%Algoritmo P&O mi referencia es la tension de salida
% Isc=input ('Corriente de corto circuito=');
% Voc=input('Voltaje de circuito abierto=');
% Adc=3e-4; %variacion de ciclo de trabajo
persistent dcold Vold Pold Iold
dataType = 'double';
if isempty(Vold)
Vold=0;
Iold=0;
Pold=0;
dcold=dcinit;
end
% dc= dcinit;
%calculo de errores de potencia y tension
P= V*I;
dcmax=0.7636; %esto sale del producto de 24*1.2 como margen superior aceptable, entre 110 que es la salida de los paneles
dcmin=0.15; %esto sale del producto de 24*0.8 como margen inferior aceptable, entre 110 que es la salida de los paneles
%
if P-Pold == 0
dc=dcold;
return
else
if P-Pold>0
if V-Vold>0
dc = dcold + Adc; %incrementa V
else
dc = dcold - Adc; %reduce V
end
end
if V-Vold>0
dc = dcold - Adc; %reduce V
else
dc = dcold + Adc; %incrementa V
end
end
if dc>=dcmax || dc