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.

F28335位置计数寄存器-eqep position counter register

在进行eqep测位置时,qep的 position counter register中的计数要么是0要么是最大值QPOSMAX,不论电机的转速是多少,position counter register中的计数始终在0和设置的最大值QPOSMAX之间跳动,不知道为什么,请大家帮忙分析一下,谢谢。下面是我的eqep的初始化:


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

EQep1Regs.QEPCTL.bit.FREE_SOFT=2;
EQep1Regs.QEPCTL.bit.PCRM=00; // PCRM=00 mode - QPOSCNT reset on index event
EQep1Regs.QEPCTL.bit.UTE=1; // Unit Timeout Enable
EQep1Regs.QEPCTL.bit.QCLM=1; // Latch on unit time out
EQep1Regs.QPOSMAX=0xffffffff;
EQep1Regs.QEPCTL.bit.QPEN=1; // QEP enable

EQep1Regs.QCAPCTL.bit.UPPS=5; // 1/32 for unit position
EQep1Regs.QCAPCTL.bit.CCPS=7; // 1/128 for CAP clock
EQep1Regs.QCAPCTL.bit.CEN=1; // QEP Capture Enable

EQep1Regs.QPOSCTL.bit.PCE = 1;
// EQep1Regs.QEINT.bit.QDC = 1;
 EQep1Regs.QEINT.bit.UTO = 1;

  • 条件:采用增量式编码器(只有ABZ信号,没有UVW);基于28335EQEP的速度和位置控制

    1: EQEP配置:
            EQep1Regs.QUPRD=Period_SD;                       
            EQep1Regs.QDECCTL.bit.QSRC=00;                // QEP quadrature count mode
                   
            EQep1Regs.QEPCTL.bit.FREE_SOFT=2;
            EQep1Regs.QEPCTL.bit.PCRM=00;                // PCRM=00 mode - QPOSCNT reset on index event
            EQep1Regs.QEPCTL.bit.UTE=1;                 // Unit Timeout Enable
            EQep1Regs.QEPCTL.bit.QCLM=1;                 // Latch on QPOSCNT :0, unit time out :1
            EQep1Regs.QPOSMAX=0xffff;//9999;
            EQep1Regs.QEPCTL.bit.QPEN=1;                 // QEP enable
                   
            EQep1Regs.QCAPCTL.bit.UPPS=0;           // 1/1 for unit position
            EQep1Regs.QCAPCTL.bit.CCPS=0;                // 1/1 for CAP clock
            EQep1Regs.QCAPCTL.bit.CEN=1;                 // QEP Capture Enable

            EQep1Regs.QPOSCNT=0;
            EQep1Regs.QCTMR=0;
            EQep1Regs.QPOSLAT=0;
            EQep1Regs.QCTMRLAT=0;
            EQep1Regs.QCPRD=0xffff;
    2:速度采样:无论高低速都采用M法
            if(EQep1Regs.QFLG.bit.UTO==1)
                   {
                         X=EQep1Regs.QPOSLAT;
                  。。。。。。
                         T = EQep1Regs.QCTMRLAT;
              }
            EQep1Regs.QCLR.bit.UTO=1;

     

    供参考