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.

2806x ePWM ETSEL中断触发问题

我想用28062的ePWM1事件触发ADC中断。

在调试时发现,ETSEL寄存器只有选择1(TBCTR=0)时,PWM按照给定频率触发。

当设置为TBCTR=2(TBCTR=TBPRD)或TBCTR=3(TBCTR=0或TBCTR=TBPRD)时,PWM触发周期出现抖动现象。

想请教这种情况发生的原因是什么?

EPwm1Regs.TBPRD = 2250;
EPwm1Regs.TBPHS.half.TBPHS = 0x0000;
EPwm1Regs.TBCTR = 0x0000;

EPwm1Regs.TBCTL.bit.CTRMODE = 0x2; //up-down-count mode
EPwm1Regs.TBCTL.bit.PHSEN =0x0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x0; //high speed time-base clock prescale 0x0= /1
EPwm1Regs.TBCTL.bit.CLKDIV = 0x0; //time base clock prescale bit TBCLK = SYSCLKOUT/(HSPCLKDIV*CLKDIV)

EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0x0;
EPwm1Regs.CMPCTL.bit.LOADBMODE = 0x1;

EPwm1Regs.AQCTLB.bit.CBU = 0x2;
EPwm1Regs.AQCTLB.bit.CBD = 0x1;

EPwm1Regs.ETSEL.bit.INTSEL = 0x1;
EPwm1Regs.ETSEL.bit.INTEN = 1;
EPwm1Regs.ETPS.bit.INTPRD = 0x1;

  • 在调试时发现,ETSEL寄存器只有选择1(TBCTR=0)时,PWM按照给定频率触发。

    当设置为TBCTR=2(TBCTR=TBPRD)或TBCTR=3(TBCTR=0或TBCTR=TBPRD)时,PWM触发周期出现抖动现象。

    想请教这种情况发生的原因是什么?

    Eric:

    我看代码没什么问题。你是如何测试这种抖动的?增减模式下,TBCTR = PBPRD应该没啥区别。

  • 我在ADC的中断程序中翻转了一个GPIO,只有在TBCTR设为0的时候,是个准确的方波,其他情况是占空比变化的脉冲

  • 其他模式可能一个周期触发了多次  导致不同的波形输出  

    你看看是不是有规律  

  • 我在ADC的中断程序中翻转了一个GPIO,只有在TBCTR设为0的时候,是个准确的方波,其他情况是占空比变化的脉冲

    Eric:

    代码里面有没有其他的中断?

    你能否先试试用EPWM中断测试一下。

  • ADC中断触发抖动的问题找到了,是由于和其他中断源冲突造成的,感谢回复!

    另外,还想请教一个问题。

    我现在用ePwm触发ADC中断,在ADC中断完成采样以及PWM比较值刷新。

    但是系统还需要一个慢速周期函数(约4kHz),如果不使用DSPBIOS的调度,这个慢速函数会和SCI数据接受、上传(耗时较长,约1ms)冲突,请问对这种应用有什么好的策略

    谢谢!