Energy-management-system-program-framework / PID_Droopcontroller_DynModel.m
HanyangHe95's picture
Upload 20 files
9677843 verified
function [Edq,dotX]=PID_Droopcontroller_DynModel(Ref,FDBK,Xm_g,Zmv_g,controlParams,K_Vdp,K_fdp,X)
% control parameters
KP_PLL_pq=controlParams(1,1);
KI_PLL_pq=controlParams(2,1);
KI_outer_p=controlParams(3,1);
KI_outer_q=controlParams(4,1);
KI_inner_p=controlParams(5,1);
KI_inner_q=controlParams(6,1);
KP_outer_p=controlParams(7,1);
KP_outer_q=controlParams(8,1);
KP_inner_p=controlParams(9,1);
KP_inner_q=controlParams(10,1);
Kcross=0.00;
% input
Vset=Ref(1,1);
dw_set=Ref(2,1);
Pset = Ref(3,1);
Qset = Ref(4,1);
Vinv_g=FDBK(1,1);
Vpcc=FDBK(2,1);
% Droop coefficients
% K_Vdp=0;% set 0: GFL mode
% K_fdp=0;
% fdbk voltage and current calculation & xy->dq
Theta_g = mod(X(2,1),2*pi);
Vqs_g = -real(Vpcc)*sin(Theta_g) + imag(Vpcc)*cos(Theta_g);
I_in_g = ((Vinv_g - Vpcc)/(1j*Xm_g+Zmv_g));
Id_g = real(I_in_g(1,1))*cos(Theta_g) + imag(I_in_g(1,1))*sin(Theta_g);
Iq_g = -real(I_in_g(1,1))*sin(Theta_g) + imag(I_in_g(1,1))*cos(Theta_g);
Pg=real(Vpcc*conj(I_in_g));
Qg=imag(Vpcc*conj(I_in_g));
% Define the xdot = f(x,y) functions
dotX(1,1) = KI_PLL_pq*Vqs_g;
dotX(2,1) = KP_PLL_pq*Vqs_g + X(1,1);
dw=dotX(2,1);
Pref=Pset-K_fdp*(dw-dw_set);
dotX(3,1) = (Pref - Pg)*KI_outer_p;
id_ref_g = KP_outer_p*(Pref - Pg) + X(3,1);
V=abs(Vpcc);
Qref=Qset-K_Vdp*(V-Vset);
dotX(5,1) = (-Qref + Qg)*KI_outer_q;
iq_ref_g = KP_outer_q*(-Qref + Qg) + X(5,1);
% ----- reference current limitation -----
I_dq_ref_max = 1.2; % pu
I_ref_norm = sqrt(id_ref_g^2 + iq_ref_g^2);
if I_ref_norm > I_dq_ref_max
scale = I_dq_ref_max / I_ref_norm;
id_ref_g = id_ref_g * scale;
iq_ref_g = iq_ref_g * scale;
end
% -----------------------
dotX(4,1) = (id_ref_g - Id_g)*KI_inner_p;
dotX(6,1) = (iq_ref_g - Iq_g)*KI_inner_q;
% virtual impedence voltage droop (improve the robustness)
% Rv_pu=real(Zmv_pu);
% Xv_pu=imag(Zmv_pu);
% Vd_v = Rv_pu*(real(I_in_g)*cos(Theta_g) + imag(I_in_g)*sin(Theta_g)) ...
% - Xv_pu*(-real(I_in_g)*sin(Theta_g)+imag(I_in_g)*cos(Theta_g));
%
% Vq_v = Rv_pu*(-real(I_in_g)*sin(Theta_g)+imag(I_in_g)*cos(Theta_g)) ...
% + Xv_pu*( real(I_in_g)*cos(Theta_g)+imag(I_in_g)*sin(Theta_g) );
% output voltage modulation index
Edr_g = KP_inner_p*(id_ref_g - Id_g) + X(4,1)+Kcross*dotX(2,1)*Xm_g*Iq_g ;
Eqr_g = KP_inner_q*(iq_ref_g - Iq_g) + X(6,1)-Kcross*dotX(2,1)*Xm_g*Id_g ;
Edq=[Edr_g;Eqr_g];