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.

CCS4调试C2x

大家好!

我使用的是C28x芯片,利用其中2组PWM(共4路PWM输出口)作为驱动信号。我的设置方式为:

EPWMxA与EPWMxB之间有死区,死区方式为DB_ACTV_HIC。

然后我发现,如果在程序运行时点HALT,EPWM 的A/B两个输出中一定有一个是输出为高的(即一高一低)。但是这样对我的硬件会造成损害。

我的理解是,因为我把EPWM配置成了互补的方式,所以当程序停下来的时候两者仍是处于互补状态的,所以一定是A/B两个口一个为高一个为低。

我的问题是,有没有办法在我HALT的时候,让EPWM输出全部归零? 或者如果是现实中假设电路出于保护的原因需要封闭PWM输出,那么我要如何设置才能使所有的PWM A/B口都为0,而不是一高一低地停下来?

谢谢各位!

  • 我有一个比较笨的办法,抛砖引玉一下。

    连续设置2个breakpoint,第一个breakpoint的properties中选择execute expression,在GEL中,利用GEL修改EPwm1Regs.TZFRC,利用TZ让PWM在breakpoint的时候置低。

    第二个breakpoint进行HALT.

  • 1. 建议使用pause而不用halt;

    2. 尝试使用TBCTL的FREE,SOFT位设置看看。

  • 谢谢你,我用的是CCS4,好像没有看到breakpoint可以设置properties。 能不能请你告诉我在哪里设?给个截图也行。

    谢谢。

    或者换个方式说,如果我的EPWM正在正常输出,我突然来个中断需要把EPWM输出全部置0(在已设置为A/B路为互补的情况下),在软件上如何实现呢?我试过关断EPWM的时钟,不过好像不起作用。

  • 谢谢,我用的是CCS4,好像软件里没有PAUSE这一项,只有HALT。

    TBCTL的FREE-SOFT位我试过了,没有作用。我感觉是因为A/B被设成了互补的原因,所以无论什么状态下软件停下来,两路输出总会是一高一低的。

    大家还有没有其它建议可以让我试试? 谢谢咯

  • 尝试一下使用TZ软件触发,在你上面提到的中断里加入以下配置:

    在不需要PWM输出时:

     EALLOW;

       EPwm1Regs.TZSEL.bit.OSHT1 = 0x1;

       EPwm1Regs.TZCTL.bit.TZA = 0x02;

       EPwm1Regs.TZCTL.bit.TZB = 0x02;

       EPwm1Regs.TZFRC.bit.OST = 0x1;

       EDIS;

    在需要PWM输出时:

      EALLOW;

         EPwm1Regs.TZCLR.bit.OST = 1;

         EDIS;

  • 谢谢你。这下解决了