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.

TMS320F28069M: ECAP捕获CAP1计数异常

Part Number: TMS320F28069M
Other Parts Discussed in Thread: C2000WARE

在捕获一个短沿的时候CAP1计数未能正常捕获:利润CAP1捕获上升沿,在捕获一个占空比低于3.4%的沿的时候,没能正常捕获到这个上升沿的下降沿,捕获到了下一个周期的下降沿。

  • 你好,目前来说怀疑的只有中断优先级导致的问题。不知道你的工程中是否有其他持续时间比较长的高优先级中断?

    另外,你可以用例程先测试一下,看能否正确采集上升下降沿:C:\ti\c2000\C2000Ware_4_01_00_00\device_support\f2806x\examples\c28\ecap_capture_pwm

  • 您好;

      实验是基于这个例程修改了部分PWM的生成代码用来产生不同占空比的波形。目前的话是使用的ECAP1,GPIO5作为输入端;目前寄存器CAP1~CAP4中只有CAP1出现了这个问题,当该CAP1记录一个短沿的时候会多记录一个周期。

  • 你好,也就是说,你的例程只是修改了PWM的占空比,然后出现的问题是CAP1会捕获当前一个脉冲的上升沿和下一个脉冲的下降沿?

    方便给出一下你的程序修改了哪些语句吗?

  • InitEPwmTimer()
    {
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;

    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//TB_COUNT_UP; // Count up
    EPwm1Regs.TBPRD = 8000;//PWM3_TIMER_MAX;
    EPwm1Regs.TBPHS.all = 0x00000000;

    EPwm1Regs.CMPCTL.bit.SHDWAMODE = 1;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = 1;
    EPwm1Regs.CMPA.half.CMPA =4000;
    EPwm1Regs.CMPB = (Uint16)4000;

    EPwm1Regs.AQCTLA.bit.CAU = 2;
    EPwm1Regs.AQCTLA.bit.CAD = 1;
    EPwm1Regs.AQCTLB.bit.CAU = 2;
    EPwm1Regs.AQCTLB.bit.CAD = 1;
    //EPwm1Regs.AQCTLA.bit.PRD = AQ_TOGGLE; // Toggle on PRD

    EPwm1Regs.DBCTL.bit.IN_MODE = 2;
    EPwm1Regs.DBCTL.bit.POLSEL = 2;
    EPwm1Regs.DBCTL.bit.OUT_MODE = 3;
    //
    // TBCLK = SYSCLKOUT
    //
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1;
    EPwm1Regs.TBCTL.bit.CLKDIV = 0;

    //EPwm6TimerDirection = EPWM_TIMER_UP;

    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
    EDIS;
    }

    将原ecap1_isr代码PWM修改部分删除添加了

    EPwm1Regs.TBPRD = tpwm;
    EPwm1Regs.CMPA.half.CMPA = a;
    TSt1 = ECap1Regs.CAP1;
    TSt2 = ECap1Regs.CAP2;
    TSt3 = ECap1Regs.CAP3;
    TSt4 = ECap1Regs.CAP4;

  • 收到,我会跟其他工程师核对一下代码后看看是否有问题。

  • 好的,谢谢。

  • 目前还在等回复,有回复尽快通知你。

  • 额,工程师的建议是用例程代码测试,看看脉冲是否仍会丢失。

    另外,你们试图测量的脉冲宽度有多宽?

  • 3纳秒左右,占空比非常小,但是测试了CAP2~CAP4目前来说都没有发现这个问题。

  • 收到,已经反馈。

  • 你好,今天收到回复:

    eCAP 模块基于系统时钟运行。 该设备上的 Sysclock 周期约为 11ns,因此你的脉冲宽度远小于系统时钟。 因为 eCAP 不锁存输入,这些信号与GPIO缓冲区读取同时产生的话就可能导致相互竞争的情况。

    Cap2-4 可能适用于某些设备,但我不认为这是普遍适用的。

    HRCAP 也有一个最小脉冲宽度要求,所以这里也不能算是一个选项。

    也许可以在这里使用脉冲展宽器将脉冲展宽超过 1 个系统时钟周期,以确保设备始终能够看到上升沿和下降沿。

  • 您好,刚才看到打错字了,应该是在3微秒左右,是比时钟周期大的。

  • 昨晚追问了一下,刚收到回复的大致意思是捕捉3uS脉冲没有问题,不知道你这边有没有在其他设备上做过测试,虽然可能性很小,但是有怀疑是否跟芯片有关。

  • 您好,请问一下ECAP能够测量的最小脉宽是时钟周期的多少倍,目前没有在资料上查到相关的文件,因为是自发自收,pwm是由芯片产生的,那么按理来说能够生成的pwm使用捕获器应该捕获是没有问题的,现在是能够生成但是捕获时会出现问题,所有是不是捕获器也有捕获的最小脉宽,低于这个脉宽捕获将变得不可靠。

  • 这个有说明的,datasheet中:

    3us是远大于最小捕获周期的。所以那边工程师怀疑不太可能的器件问题

  • 您好,这是我测试的图 TSt1~TSt4分别对应CAP1~CAP4.

  • 或者这个图可能更能反馈问题吧 这里脉宽已经不止3us了但是CAP1依旧未能识别出下降沿导致多计数了一个周期。

  • 你好,这个情况已经帮你反馈了。

    不过我有点好奇,有没有测试过达到多少脉宽之后CAP1才能正确地捕捉到每个脉冲?

  • 这个测量过,大概需要将近9us的脉冲才能正常捕捉。

  • 好的,这个也更新了,但目前还没收到回复,还请耐心等待。

  • 你好,我这边的工程师希望你能在其他芯片上测试一下这个程序,看是否有同样的问题?

  • 目前没有第二套东西,可能要后面才能验证了;有消息我会回复的。

  • 嗯,对方工程师也没有其他什么建议,就最好确定一下是否只是这块芯片的问题。