static void NPMRunISR0()
{
//先反clark变换
ClarkeTransformInv(&vars.v_ab_cmd_tot, &vars.v_uvw_n_cmd);
ctrl.volt_mod.uvw_idx_prev = ctrl.volt_mod.uvw_idx;
SortUVW(&vars.v_uvw_n_cmd, &ctrl.volt_mod.xyz_idx, &ctrl.volt_mod.uvw_idx);
float* v_uvw_cmd = STRUCT_TO_ARRAY(vars.v_uvw_n_cmd);
//这里求出中性点电压
ctrl.volt_mod.npm.v_neutral = -0.5f * (v_uvw_cmd[WORD_TO_BYTE(ctrl.volt_mod.xyz_idx, 0U)] + v_uvw_cmd[WORD_TO_BYTE(ctrl.volt_mod.xyz_idx, 2U)]);
//反变换结果和中性点相加得出需要的UVW电压
vars.v_uvw_z_cmd.u = vars.v_uvw_n_cmd.u + ctrl.volt_mod.npm.v_neutral;
vars.v_uvw_z_cmd.v = vars.v_uvw_n_cmd.v + ctrl.volt_mod.npm.v_neutral;
vars.v_uvw_z_cmd.w = vars.v_uvw_n_cmd.w + ctrl.volt_mod.npm.v_neutral;
//做限制
vars.d_uvw_cmd.u = SAT(0.0f, 1.0f, vars.v_uvw_z_cmd.u * ctrl.volt_mod.v_dc_inv + 0.5f);
vars.d_uvw_cmd.v = SAT(0.0f, 1.0f, vars.v_uvw_z_cmd.v * ctrl.volt_mod.v_dc_inv + 0.5f);
vars.d_uvw_cmd.w = SAT(0.0f, 1.0f, vars.v_uvw_z_cmd.w * ctrl.volt_mod.v_dc_inv + 0.5f);
//暂时不知道这里为什么要求调制比
ctrl.volt_mod.mi = vars.v_s_cmd.rad * ctrl.volt_mod.v_dc_inv * 1.5f; // 2/3Vdc = 100% modulation
}
|