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.

QEP计数,丢脉冲



请教各位,我用F28335的QEP对编码器输出的A,B两相信号计数,同时将A,B两相信号接入购买的数显表中,发现QEP丢脉冲,计的数比数显表计数值小,误差有时没有,最大时能达到30um,请教各位,要怎么处理才不丢脉冲?

  • 问题还没解决,请教各位,谢谢,帖子不要沉啊

  • 建议将A B相的波形经逻辑器件处理之后    输出两路   分别接入QEP和数显 

    或者去掉数显    直接用QEP采集  也是会丢脉冲吗

    还有当计数器溢出后你是怎么处理的    丢脉冲有规律吗   

  • 請問問題有解決嗎?
    我也遇到問題
    abz皆有訊號
    但是進入dsp之後卻讀不到
    以下是程式
    不知道是哪裡錯了

    我是直接將dsp28335 使用ccs6 然後接著看 theta_input的值
    卻一直是0
    希望有大大能幫檢查哪裡錯了
    謝謝

    ////角位設定////
    // GPIO-50 - PIN FUNCTION = EQEP1A
    GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 1; // 0=GPIO, 1=EQEP1A, 2=Resv,
    // GpioCtrlRegs.GPBDIR.bit.GPIO50 = 0; // 1=OUTput, 0=INput
    // GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1; // uncomment if --> Set Low initially
    // GpioDataRegs.GPBSET.bit.GPIO54 = 1; // uncomment if --> Set High initially
    //--------------------------------------------------------------------------------------
    // GPIO-51 - PIN FUNCTION = EQEP1B
    GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 1; // 0=GPIO, 1=EQEP1B, 2=Resv,
    // GpioCtrlRegs.GPBDIR.bit.GPIO51 = 0; // 1=OUTput, 0=INput
    // GpioDataRegs.GPBCLEAR.bit.GPIO51 = 1; // uncomment if --> Set Low initially
    // GpioDataRegs.GPBSET.bit.GPIO51 = 1; // uncomment if --> Set High initially
    //--------------------------------------------------------------------------------------
    // GPIO-53 - PIN FUNCTION = EQEP1I
    GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 1; // 0=GPIO, 1=EQEP1I, 2=Resv,
    // GpioCtrlRegs.GPBDIR.bit.GPIO53 = 0; // 1=OUTput, 0=INput
    // GpioDataRegs.GPBCLEAR.bit.GPIO53 = 1; // uncomment if --> Set Low initially
    // GpioDataRegs.GPBSET.bit.GPIO53 = 1; // uncomment if --> Set High initially
    //--------------------------------------------------------------------------------------


    void Init_qep(void)
    {
    EQep1Regs.QDECCTL.bit.QSRC=0; // Quadrature count mode
    EQep1Regs.QDECCTL.bit.XCR=0; // 2x resolution (cnt falling and rising edges)
    EQep1Regs.QDECCTL.bit.QIP=1; // QIP Active low
    EQep1Regs.QDECCTL.bit.SWAP=1; // reverse the counting direction
    EQep1Regs.QEPCTL.bit.FREE_SOFT=2; // Position counter is unaffected by emulation suspend
    EQep1Regs.QEPCTL.bit.PCRM=01; // QPOSCNT reset on Maximum position
    EQep1Regs.QEPCTL.bit.IEI=10; // Initialize the position counter at the rising edge of index event
    EQep1Regs.QPOSINIT=0; // the index position
    EQep1Regs.QPOSMAX=10000; // decided by motor (8P/2500)
    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
    }

    theta_input = EQep1Regs.QPOSCNT;
  • 請問問題有解決嗎?
    我也遇到問題
    abz皆有訊號
    但是進入dsp之後卻讀不到
    以下是程式
    不知道是哪裡錯了

    我是直接將dsp28335 使用ccs6 然後接著看 theta_input的值
    卻一直是0
    希望有大大能幫檢查哪裡錯了
    謝謝

    ////角位設定////
    // GPIO-50 - PIN FUNCTION = EQEP1A
    GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 1; // 0=GPIO, 1=EQEP1A, 2=Resv,
    // GpioCtrlRegs.GPBDIR.bit.GPIO50 = 0; // 1=OUTput, 0=INput
    // GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1; // uncomment if --> Set Low initially
    // GpioDataRegs.GPBSET.bit.GPIO54 = 1; // uncomment if --> Set High initially
    //--------------------------------------------------------------------------------------
    // GPIO-51 - PIN FUNCTION = EQEP1B
    GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 1; // 0=GPIO, 1=EQEP1B, 2=Resv,
    // GpioCtrlRegs.GPBDIR.bit.GPIO51 = 0; // 1=OUTput, 0=INput
    // GpioDataRegs.GPBCLEAR.bit.GPIO51 = 1; // uncomment if --> Set Low initially
    // GpioDataRegs.GPBSET.bit.GPIO51 = 1; // uncomment if --> Set High initially
    //--------------------------------------------------------------------------------------
    // GPIO-53 - PIN FUNCTION = EQEP1I
    GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 1; // 0=GPIO, 1=EQEP1I, 2=Resv,
    // GpioCtrlRegs.GPBDIR.bit.GPIO53 = 0; // 1=OUTput, 0=INput
    // GpioDataRegs.GPBCLEAR.bit.GPIO53 = 1; // uncomment if --> Set Low initially
    // GpioDataRegs.GPBSET.bit.GPIO53 = 1; // uncomment if --> Set High initially
    //--------------------------------------------------------------------------------------


    void Init_qep(void)
    {
    EQep1Regs.QDECCTL.bit.QSRC=0; // Quadrature count mode
    EQep1Regs.QDECCTL.bit.XCR=0; // 2x resolution (cnt falling and rising edges)
    EQep1Regs.QDECCTL.bit.QIP=1; // QIP Active low
    EQep1Regs.QDECCTL.bit.SWAP=1; // reverse the counting direction
    EQep1Regs.QEPCTL.bit.FREE_SOFT=2; // Position counter is unaffected by emulation suspend
    EQep1Regs.QEPCTL.bit.PCRM=01; // QPOSCNT reset on Maximum position
    EQep1Regs.QEPCTL.bit.IEI=10; // Initialize the position counter at the rising edge of index event
    EQep1Regs.QPOSINIT=0; // the index position
    EQep1Regs.QPOSMAX=10000; // decided by motor (8P/2500)
    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
    }

    theta_input = EQep1Regs.QPOSCNT;