FOC2.0 编码器 永磁同步电动机在对准阶段的转矩和磁通调节
FOC2.0的库里面 关于电机启动时候需要知道转子位置,是不是通过void ENC_Start_Up(void)这个函数实现的,这个函数为什么又是变压器,又是磁通。直接给一个D {静态u32 wTimebase = 0;
if((wGlobal_Flags&FIRST_START)== FIRST_START)
{
//首次启动电动机,必须使用
wTimebase ++ 进行对齐;
if(wTimebase <= T_ALIGNMENT_PWM_STEPS)
{
hFlux_Reference = I_ALIGNMENT * wTimebase / T_ALIGNMENT_PWM_STEPS;
hTorque_Reference = 0;
Stat_Curr_a_b = GET_PHASE_CURRENTS(); //在这里增大启动血压电流。
Stat_Curr_alfa_beta = Clarke(Stat_Curr_a_b);
Stat_Curr_q_d = Park(Stat_Curr_alfa_beta,ALIGNMENT_ANGLE_S16);
/ *加载扭矩调节器输出参考电压Vqs * /
Stat_Volt_q_d.qV_Component1 = PID_Regulator(hTorque_Reference,
Stat_Curr_q_d.qI_Component1,&PID_Torque_InitStructure);
/ *加载磁通调节器输出参考电压Vds * /
Stat_Volt_q_d.qV_Component2 = PID_Regulator(hFlux_Reference,
Stat_Curr_q_d.qI_Component2,&PID_Flux_InitStructure);
RevPark_Circle_Limitation();
/ *执行反向Park转换,
即在
固定参考系上将定子电压Vqs和Vds转换为Valpha和Vbeta * /
Stat_Volt_alfa_beta = Rev_Park(Stat_Volt_q_d);
/ * Valpha和Vbeta最终驱动了功率级* /
CALC_SVPWM(Stat_Volt_alfa_beta); //和PARK()函数总是成对使用,所以thea角度不变。
}
else
{
wTimebase = 0;
ENC_ResetEncoder();
Stat_Volt_q_d.qV_Component1 = Stat_Volt_q_d.qV_Component2 = 0;
hTorque_Reference = PID_TORQUE_REFERENCE;
hFlux_Reference = PID_FLUX_REFERENCE;
wGlobal_Flags&=〜FIRST_START; //仅进行一次对齐
// //清除对齐阶段的速度获取
ENC_Clear_Speed_Buffer();
#ifdef ENCODER
State = RUN;
#endif
}
}
else
{
#ifdef ENCODER
State = RUN;
#endif
}
}
页:
[1]