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.

F28069的ecap模块,Ecap中的CAP1、CAP2、CAP3、CAP4寄存器的值都是一样的。

Other Parts Discussed in Thread: CONTROLSUITE

最近在调试F28069的Ecap模块,使用Ecap捕获PWM的上升下降沿来计算PWM的占空比,按照官方的例程进行配置

初始化程序如下:

在进入中断后查看,CAP1、CAP2、CAP3、CAP4的值与计数器TSCTR的值都相同。

测试的PWM的周期为1.8ms。

不知是何原因?

  • CTRRST4

    把这些位都改成0.

    Counter Reset on Capture Event 4
    0 Do not reset counter on Capture Event 4 (absolute time stamp operation)
    1 Reset counter after Capture Event 4 time-stamp has been captured
    (used in difference mode operation)

  • 感谢您的回答,改过之后,调试的结果还是一样的,捕获的值还是一样的。

  • 感谢您的回答,修改后调试的结果还是没有变化,四个CAP的值还是一样的

  • 你用例程对比测试一下吧。

    我按下面的修改是可以看到绝对值的变化的。当然,如果设置为1的话,那么就是差值,几个寄存器都是一样的。

    ECap1Regs.ECCTL1.bit.CTRRST1 = 0; // Difference operation
    ECap1Regs.ECCTL1.bit.CTRRST2 = 0; // Difference operation
    ECap1Regs.ECCTL1.bit.CTRRST3 = 0; // Difference operation
    ECap1Regs.ECCTL1.bit.CTRRST4 = 0; // Difference operation

    C:\ti\controlSUITE\device_support\f2806x\v151\F2806x_examples_ccsv5\ecap_capture_pwm

    // Cap input is syc'ed to SYSCLKOUT so there may be
    // a +/- 1 cycle variation

    // if(ECap1Regs.CAP2 > EPwm3Regs.TBPRD*2+1 || ECap1Regs.CAP2 < EPwm3Regs.TBPRD*2-1)
    // {
    // Fail();
    // }
    //
    // if(ECap1Regs.CAP3 > EPwm3Regs.TBPRD*2+1 || ECap1Regs.CAP3 < EPwm3Regs.TBPRD*2-1)
    // {
    // Fail();
    // }
    //
    // if(ECap1Regs.CAP4 > EPwm3Regs.TBPRD*2+1 || ECap1Regs.CAP4 < EPwm3Regs.TBPRD*2-1)
    // {
    // Fail();
    // }

    ECap1IntCount++;

    // if(EPwm3TimerDirection == EPWM_TIMER_UP)
    // {
    // if(EPwm3Regs.TBPRD < PWM3_TIMER_MAX)
    // {
    // EPwm3Regs.TBPRD++;
    // }
    // else
    // {
    // EPwm3TimerDirection = EPWM_TIMER_DOWN;
    // EPwm3Regs.TBPRD--;
    // }
    // }
    // else
    // {
    // if(EPwm3Regs.TBPRD > PWM3_TIMER_MIN)
    // {
    // EPwm3Regs.TBPRD--;
    // }
    // else
    // {
    // EPwm3TimerDirection = EPWM_TIMER_UP;
    // EPwm3Regs.TBPRD++;
    // }
    // }

  • 你好,你这个问题怎么解决的?
  • 我也是这个问题,一旦进入中断,Ecapx的值就和SCTR的值一样了。