本博客介绍一下本人最近实现的基于卡尔曼滤波的maximum power point tracking(最大功率点跟踪)。simulink模型如下:
卡尔曼滤波部分的代码
function D = KalmanFilter(V, I, Vout)
% PARAMETERS DEFINATION
A = 1; %Matrix A
step = 5; %step size
B = step; %Matrix B
C = 1; %Matrix C
Vmpp = 273.5; %Maximum power point voltage (in volts)
Impp = 368.28; %Maximum power point current (in Amp)
Q = 50;
R = 50;
% KF PARAMETERS INTIALISATION
%STEP-I
persistent v_k
if isempty(v_k)
v_k = Vmpp;
end
persistent power_k
if isempty(power_k)
power_k = Vmpp*Impp;
end
persistent v_k_prev
if isempty(v_k_prev)
v_k_prev = 0;
end
persistent power_k_prev
if isempty(power_k_prev)
power_k_prev = 0;
end
persistent h_k
if isempty(h_k)
h_k = 1;
end
pv_slope = (power_k - power_k_prev)/(v_k - v_k_prev);
%KF IMPLEMENTATION
% STAGE - PREDICTION
%STEP-II: Project the state ahead
v_neg = v_k + step*pv_slope;
%STEP-III: Project the error covariance ahead
h_neg = h_k + Q;
% STAGE - UPDATION
% STEP-IV: Compute the kalman gain
K_ = (h_neg)/(h_neg + R);
% STEP-V: Update estimate with measurement Vout
v = v_neg + K_*(V - v_neg);
% STEP-VI: Update the error covariance
h = (1-K_)*h_neg;
% STEP-VII: Saving for next stage
h_k = h;
v_k_prev = v_k;
power_k_prev = power_k;
v_k = V;
power_k = V*I;
% OUTPUT DUTY CYCLE
D = 1 - (v/Vout);
end
实验效果如下:
实验一:恒定照度与温度
pv曲线
实验二:变化的照度与温度
代码下载链接:卡尔曼滤波MPPT代码