Skip
Skip
Skip
1. Basic Circuit
2.PSIM circuit
3. Result
4. incomplete code
void transform();
void current_control();
void in_transform();
void sw();
double V_grid_ab = 0., V_grid_bc = 0., V_grid_ca = 0.;
double V_grid_a = 0., V_grid_b = 0., V_grid_c = 0.;
double wc = 0., zeta = 0.7, wn = 200;
double V_grid_ds = 0., V_grid_qs = 0.;
double V_grid_de = 0., V_grid_qe = 0.;
double V_grid_m = 0.;
double V_grid_de_err = 0., V_grid_de_err_int = 0.;
double kp_PLL = 0., ki_PLL = 0.;
double wrate = 0., we = 0.;
car = in[0];
i_a_in = in[1];
i_b_in = in[2];
i_c_in = in[3];
dc_link = in[4];
car_u = in[5];
car_d = in[6];
V_grid_ab = in[7];
V_grid_bc = in[8];
V_grid_ca = in[9];
wc = 1. + 2. * zeta*wn;
V_grid_de_err = 0. - V_grid_de;
V_grid_de_err_int += V_grid_de_err*T_samp;
kp_PLL = 2. * zeta*wn / (V_grid_m + 0.0000001);
ki_PLL = (wn*wn) / ((V_grid_m + 0.00000001)*wc);
wrate = 2. * pi*f;
f = 60.;
theta += we*T_samp;
if (theta < 0.) { theta += 2.*pi; }
if (theta > 2.*pi) { theta -= 2.*pi; }
L_f = 0.002;
R_f = 0.1;
wc_i = 1000.;
v_a_ref = v_ds_ref;
v_b_ref = (-1.*v_ds_ref + sqrt(3.)*v_qs_ref) / 2.;
v_c_ref = (-1.*v_ds_ref - sqrt(3.)*v_qs_ref) / 2.;
T_cnt -= T_samp;
}
if (v_a_ref_scale > car) { sa1 = 1, sa2 = 1, sa3 = 0, sa4 = 0; }
else { sa1 = 0, sa2 = 0, sa3 = 1, sa4 = 1; }
out[0] = V_grid_a;
out[1] = V_grid_b;
out[2] = V_grid_c;
out[3] = V_grid_ds;
out[4] = V_grid_qs;
out[5] = V_grid_de;
out[6] = V_grid_qe;
out[7] = i_de_in;
out[8] = theta;
out[9] = i_de_in;
out[10] = i_de_in_ref;
out[11] = i_qe_in;
out[12] = i_qe_in_ref;
out[13] = sa1;
out[14] = sa2;
out[15] = sa3;
out[16] = sa4;
out[17] = sb1;
out[18] = sb2;
out[19] = sb3;
out[20] = sb4;
out[21] = sc1;
out[22] = sc2;
out[23] = sc3;
out[24] = sc4;
}
void transform()
{
i_ds_in = (2. *i_a_in - i_b_in - i_c_in) / 3.;
i_qs_in = (1. / sqrt(2.))*(i_b_in - i_i_c_in);
}
void in_transform()
{
}
void sw()
{
}
void PLL()
{
wc = 1. + 2. + zeta*wn; zeta = 0.7 wn = 200
Vds = (2. *Va - Vb - Vc) / 3.;
Vqs = (Vb - Vc) / sqrt(3.);
Vm = sqrt(Vde*Vde + Vqe*Vqe);
wrate = 2. * pi * f;
thetae += we*T_samp;
theta += wrate *Ts;