大家好,我最近在学PMSM的矢量控制,然后看到一段程序,程序的作用是确定电机的零初始位置,但是我实在是不理解为什么是这么操作,还请懂得人给以解答,非常感谢!
void Motor_ZeorPosi_cs(void)//确定零点位置
{
if(logicContr.Start_order==1) //电机开始启动
{
logicContr.Qiehuan_count++;
IparkU.Ds=3*pi_spd.Ref; //将给定速度的3倍直接给反park变变换的输入d,接下来就是svpwm的计算。
if( IparkU.Ds>_IQ(0.2))
IparkU.Ds= _IQ(0.2);
IparkU.Qs= 0; //
if( logicContr.Qiehuan_count>1200)
{
logicContr.Start_order=2;
EQEPPare.initial_angle=EQEPPare.ElecThetaYS; //EQEPPare.ElecThetaYS是通过编码器测得的电角度
}
}
else if(logicContr.Start_order==2)
{
logicContr.Qiehuan_count++;
IparkU.Ds=0; //
IparkU.Qs= 0; //
if( logicContr.Qiehuan_count>1500)
logicContr.Start_order=3;
}
else if(logicContr.Start_order==3)
{
logicContr.Qiehuan_count++;
IparkU.Ds=3*pi_spd.Ref; //
if( IparkU.Ds>_IQ(0.2))
IparkU.Ds= _IQ(0.2);
IparkU.Qs= 0; //
if( logicContr.Qiehuan_count>2500)
{
logicContr.Start_order=4;
EQEPPare.initial_angle= EQEPPare.ElecThetaYS;
}
}
}