This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

M/T测速问题,机器实测测得速度波动较大,开发板上面测试的稳定度很好,不知道啥问题,求助

下面是实际测量波形

下面是我用M法测得波形,比我用m/t的波形好多了;

附:我做m/t的程序代码,哪位大神指导下,

void eQEP_pos_speed_get_Init(EQEP_POS_SPEED_GET *p)

{

 Uint32 QUPRD;

  EALLOW;

#if (CPU_FRQ_150MHZ)

  QUPRD=(Uint32)150000000>>9;    // Unit Timer for speed_intfre at 150 MHz

#endif

EQep1Regs.QUPRD=QUPRD;

EQep1Regs.QDECCTL.bit.QSRC=00;      // QEP quadrature count mode

EQep1Regs.QEPCTL.bit.FREE_SOFT=2;

EQep1Regs.QEPCTL.bit.PCRM=1;        // PCRM=3 mode - QPOSCNT reset on unit time

EQep1Regs.QEPCTL.bit.UTE=1;         // Unit Timeout enable

EQep1Regs.QEPCTL.bit.QCLM=1;        // time out锁存计数值

EQep1Regs.QPOSINIT=0;

EQep1Regs.QPOSCNT=EQep1Regs.QPOSINIT;

EQep1Regs.QPOSMAX=0xffffffff;

EQep1Regs.QEPCTL.bit.QPEN=1;        // QEP enable

 

//设置eQEP Edge Capture功能

EQep1Regs.QCAPCTL.bit.CCPS = 4;     //设定CAPCLK时钟为SYSCLK的16分频=4.6875M

EQep1Regs.QCAPCTL.bit.UPPS = 1;     //11: 设定UPEVNT事件为QCLK的1分频

EQep1Regs.QCAPCTL.bit.CEN  = 1;      //1:QEP CAP enable

EDIS;

}

void posspeed_calc(POSSPEED *p)

{

long m1,m2,fc;

if(EQep1Regs.QEPSTS.bit.UPEVNT==0)

return;

if(EQep1Regs.QEPSTS.bit.COEF==0)            // No Capture overflow

m2=(unsigned long)EQep1Regs.QCPRDLAT;

else             

m2=0xFFFF+(unsigned long)EQep1Regs.QCPRDLAT;

 

//采用MT法进行测速

//speedhz_raw_h=m1*fc/(m2*enc_rev)*pole_pairs

m1=LSign(p->cnt_delta)*2;//LSign取正传反转符号

fc=CPU_FRQ>>4;//系统时钟分频

p->SpeedHz_raw_h=IQdiv(m1*fc, m2*(p->enc_rev), MOTOR_FRQ_Q);

p->SpeedHz_raw_h=IQmpy(p->SpeedHz_raw_h,p->pole_pairs,0);

EQep1Regs.QEPSTS.all=0x88;

return;

}