工具/软件:TI C/C++编译器
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.
工具/软件:TI C/C++编译器
之前编写的程序、M 方法测试结果非常好。 现在、为了提高精度、请使用 M/T、希望提高测量精度。 但它非常不稳定,您有 QQ 吗? 向您发送测试波形、请帮我查看
我的程序如下
void eQEP_pos_speed_get_Init (eQEP_POS_SPEED_GET * p)
{
uint32 QUPRD;
EALLOW;
#IF (CPU_FRQ_150MHz)
QUPRD=(UINT32) 150000000>9; //针对速度为150 MHz 的 SPEED_intfre 的单位定时器
#endif
EQep1Regs.QUPRD=QUPRD;
EQep1Regs.QDECCTL.bit.QSRC=00; // QEP 正交计数模式
EQep1Regs.QEPCTL.bit.FREE_SOFT=2;
EQep1Regs.QEPCTL.bit.PCRM=1; // PCRM=3模式-单位时间的 QPOSCNT 复位
EQep1Regs.QEPCTL.bit.UTE=1; //单元超时使能
EQep1Regs.QEPCTL.bit.QCLM=1; //时间 out锁存计数值
EQep1Regs.QPOSIINIT=0;
EQep1Regs.QPOSCNT=EQep1Regs.QPOSIINIT;
EQep1Regs.QPOSMAX = 0xffffffff;
EQep1Regs.QEPCTL.bit.QPEN=1; // QEP 使能
//设置eQEP 边缘 Capture功能
EQep1Regs.QCAPCTL.bit.CCPS = 4; 设定CAPCLK时钟为SYSCLK的16分频= 4.6875M
EQep1Regs.QCAPCTL.BIT.UPPs = 1; //11:设定UPEVNT事件为QCLK的1分频 μ A
EQep1Regs.QCAPCTL.bit.CEN = 1; //1:QEP 电容启用
EDIS;
}
void posspeed_calc (POSSPEED * p)
{
长 M1、m2、fc;
if (EQep1Regs.QEPSTS.bit.UPEVNT=0)
返回;
if (EQep1Regs.QEPSTS.bit.COEF=0) //无捕捉溢出
M2=(无符号长整型) EQep1Regs.QCPRDLAT;
其他
M2 = 0xFFF+(无符号长整型) EQep1Regs.QCPRDLAT;
采用MT法进行测速 μ s
//speedhz_raW_h=M1*fc/(m2*enc_rev)*pole 对
M1=LSign (p->cnt_delt)*2;// LSign取正传反转符号
fc=cpu_FRQ>>4;//系统时钟分频
p->SpeedHz_raW_h=IQdiv (M1*fc,m2*(p->enc_rev),moter_FRQ_Q);
p->SpeedHz_raW_h=IQmpy (p->SpeedHz_raW_h、p->POLE_PAIRS、0);
EQep1Regs.QEPSTS.All=0x88;
返回;
}