如图所示,这是我使用的4对极电机,凸起正上方为机械零点
在调试HVPM_Sensored_Servo例程时,发现如果电机初始定位时,不是定位在正上方的电气零点,初始定位结束后,电机由lsw=1到lsw=2切换时,会有一个较大的冲击
经过调试分析,发现在lsw=1时,位置给定函数已经被调用,当定位结束后,如果电气零点不是定位在正上方的电气零点处,电机运转到Z脉冲出现的位置时,rc1.TargetValue会有一个累积值.
这样,当检测到Z脉冲时.lsw设置为2,就会导致有一个较大的位置给定,电机会震动一下.
if (!RunMotor)
lsw = 0;
else if (lsw == 0)
{
// set up initial angle conditions for control
EQep1Regs.QCLR.bit.IEL = 1; // QEP flag = 0
EQep1Regs.QPOSCNT = 0; // QEP position cntr = 0
rc1.SetpointValue = 0; // position = 0 deg
// for restarting from (RunMotor = 0)
rc1.TargetValue = rc1.SetpointValue;
qep1.CalibratedAngle = 0;
// alignment time
if (++cntr >= alignCnt)
{
lsw = 1;
cntr = 0;
}
// alignment current
IdRef = IdRef_start;
}
else if (lsw == 1)
{
if (EQep1Regs.QFLG.bit.IEL == 1) // Check the first index occurrence
{
qep1.CalibratedAngle = EQep1Regs.QPOSILAT; // Keep the latched position
// while (qep1.CalibratedAngle > QEP_PULSE_PER_POLEPAIR)
// qep1.CalibratedAngle -= QEP_PULSE_PER_POLEPAIR;
// Init_IFlag = 1;
rc1.TargetValue = 0;
lsw = 2;
IdRef = IdRef_run;
}
}
如上所示,加上一清零语句就没有这个问题了
不知道大家调试的时候遇到过这个现象没有
