根据例程“PMSM_FOC_SL_with_3-shunt”,在进入“Speed_CL”状态后,PHASE_ADV_RunISR0()会比FLUX_WEAKEN_RunISR0()先执行,PHASE_ADV_RunISR0()会根据电机参数Ld和Lq差值大小进行电流环输入的Id、Iq给定,只要电机参数满足,哪怕没有开启弱磁,也会输出Id为负值。
我的疑问是这个给定负值Id不是弱磁才会有的吗?为什么这一段代码没有放入弱磁函数中?这个应该也算弱磁吧?
PHASE_ADV_RunISR0()相关代码如下(vars.i_cmd_int是速度环的输出经过限制后的输出,ctrl.ph_adv.motor_type是程序根据电机参数自行判断的电机类型):
void PHASE_ADV_RunISR0()
{
if (ctrl.ph_adv.motor_type == SPM)
{
vars.i_qd_r_ref.d = 0.0f;
vars.i_qd_r_ref.q = vars.i_cmd_int;
}
else // IPM
{
vars.i_qd_r_ref.d = 0.25f * (ctrl.ph_adv.lam_over_dl - sqrtf(POW_TWO(ctrl.ph_adv.lam_over_dl) + 8.0f * POW_TWO(vars.i_cmd_int)));
vars.i_qd_r_ref.q = sqrtf(POW_TWO(vars.i_cmd_int) - POW_TWO(vars.i_qd_r_ref.d)) * SIGN(vars.i_cmd_int);
}
}
|
|