大家好,我最近在学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;
}
}
}
Green Deng:请问这段程序的具体来源是什么?
增量式编码器没办法一上电就知道电机转子的位置,需要给个转矩矢量,让电机转到那个角度,然后接着以那个角度为起始角度。
有种算法叫IPD,就是初始位置检测,就是可以在电机没动之前,用注入高频的电流来测出转子的具体位置,然后这个角度就可以给到FOC算法。
大家好,我最近在学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;
}
}
}
user5956715:
回复 Green Deng:
你好,Green Deng,这个程序是我买的一套电机控制开发板上带的。根据你所说的我大概知道这个原理了,但是这个程序在中间一段给了电机零矢量,请问这是为什么呢?
大家好,我最近在学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;
}
}
}
mangui zhang:
回复 user5956715:
是不是还需要结合Z相位置和转过的脉冲数量可以判断转动的位置
上电的位置硬件是判断不出来的只能靠特殊的做法