Part Number: SPRC892
Tool/software: Code Composer Studio
I am using the following code to measure the low speed (it is basically the example "eqep_pos_speed" with minor modifications as indicated below)
// ********** LOW SPEED MEASUREMENT******************************
// SPEED_CONST = (2^UPPS / (N_total_pulses)) *(fclock/2^CPPS)*(2*pi); [rad/s]
SPEED_CONST = 9587.3799; // Calculated with UPPS=2 and CPPS=7; N_total_pulses=4096; fclock=2 MHz
int Spmax = 3000*2*pi/60; // rad/s
static float Nclspmax;
float Spaux, Speed_pr;
Nclspmax = SPEED_CONST / Spmax;
if(EQep1Regs.QEPSTS.bit.UPEVNT == 1)
{
if(EQep1Regs.QEPSTS.bit.COEF == 0) // No Capture overflow
temp1=EQep1Regs.QCPRDLAT; // temp1=t2-t1
else // Capture overflow; saturate the result
temp1=0xFFFF;
Spaux = Nclspmax / temp1;
if(Spaux > 1 )
Speed_pr = 1;
else
Speed_pr = Spaux;
omega_m = Speed_pr*Spmax; //in rad/s
EQep3Regs.QEPSTS.all = 0x88; // clear unit position event flag and clear overflow error flag
//even if the last line is: EQep1Regs.QEPSTS.bit.COEF=1 the results do not change
}
// ********** END LOW SPEED MEASUREMENT******************************
The problem is: "EQep1Regs.QCPRDLAT" most of the time gives the highest value possible, i.e., 65535, with occasionally low values. "temp1" changes its value but does not reach its maximum. The measured speed "omega_m" often gives the imposed limit value 314 rad/s, although the motor is operating at constant speed 5.12 rad/s.
Does anyone have an idea where the problem might be?
Thank you.