File size: 2,402 Bytes
9677843
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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];