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.

TMS320F280049C: 关于0%和100%占空比

Part Number: TMS320F280049C


你好:

使用UPDOWN模式,部分配置如下:

EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO_PRD;//CC_CTR_ZERO_PRD;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO_PRD;//CC_CTR_ZERO_PRD;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;

EPwm1Regs.AQCTLA.bit.CAD = AQ_SET; 
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; 
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;

实际需要0%和100%占空比,最初的代码使用

EPwm1Regs.CMPA.bit.CMPA = 1;
EPwm1Regs.CMPB.bit.CMPB = f_ePWM_Timer_TBPRD - 1;

EPwm2Regs.CMPA.bit.CMPA = 1;
EPwm2Regs.CMPB.bit.CMPB = f_ePWM_Timer_TBPRD - 1;

实测在0%和100%占空比有很小的尖刺

查找280049的手册

认为CMPA/CMPB=TBPRD应该是可以的,然后继续查找

对这个的理解就是CMPA/B只能使用1到TBPRD-1的值,而且这种很小的尖刺还无法避免,但是这个尖刺是无法接受的。

然后使用0和TBPRD的值进行测试,这个尖刺消失,查找论坛,针对type4 EPWM,没有找到明确的结论说CMPA/B是否可以使用0和TBPRD的值,能不能帮忙确认一下,多谢?

如果不能使用0和TBPRD,我需要0%和100%占空比,有没有推荐的方案,多谢

  • 你可以看一下这个E2E帖子,针对type-4类型的PWM的:e2e.ti.com/.../tms320f28075-type-4-epwm-to-generate-full-range-0-100-duty-cycle-waveform-w-o-isr-intervention

    另外,还有一种产生0~100%占空比的方法是通过设置AQ动作模块来产生,即直接将输出拉高或者拉低。

  • 使用AQ动作来产生动作,代码如下:

    if(st_SPWM2R3S.f_A > f_DeadCntDuty) //A相
    {
    EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;
    EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;

    EPwm2Regs.AQCSFRC.all = 0x06;

    EPwm1Regs.CMPA.bit.CMPA = (f_ePWM_Timer_TBPRD * st_SPWM2R3S.f_A - DeadTime); //有效占空比
    EPwm1Regs.CMPB.bit.CMPB = (f_ePWM_Timer_TBPRD * st_SPWM2R3S.f_A + DeadTime);

    EPwm2Regs.CMPA.bit.CMPA = f_ePWM_Timer_TBPRD - 1;
    EPwm2Regs.CMPB.bit.CMPB = f_ePWM_Timer_TBPRD - 1;
    }
    else if(st_SPWM2R3S.f_A < -f_DeadCntDuty)
    {
    EPwm1Regs.AQCSFRC.all = 0x09;

    EPwm2Regs.AQCTLA.bit.CAD = AQ_SET;
    EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm2Regs.AQCTLB.bit.CBD = AQ_CLEAR;
    EPwm2Regs.AQCTLB.bit.CBU = AQ_SET;

    EPwm1Regs.CMPA.bit.CMPA = 1;
    EPwm1Regs.CMPB.bit.CMPB = 1;

    EPwm2Regs.CMPA.bit.CMPA = (f_ePWM_Timer_TBPRD * (1.0f + st_SPWM2R3S.f_A) - DeadTime) ;
    EPwm2Regs.CMPB.bit.CMPB = (f_ePWM_Timer_TBPRD * (1.0f + st_SPWM2R3S.f_A) + DeadTime);

    }
    else
    {
    // EPwm1Regs.CMPA.bit.CMPA = 1;
    // EPwm1Regs.CMPB.bit.CMPB = f_ePWM_Timer_TBPRD - 1;
    //
    // EPwm2Regs.CMPA.bit.CMPA = 1;
    // EPwm2Regs.CMPB.bit.CMPB = f_ePWM_Timer_TBPRD - 1;

    EPwm1Regs.AQCSFRC.all = 0x05;
    EPwm2Regs.AQCSFRC.all = 0x05;
    }

    实测波形如下

  • 从上到下依次位1A,2A,1B,2B

    从上面的波形可以看出,这些毛刺是互补存在的,不是干扰,是实际端口波形

    将上述互补尖刺展开,ns级别的信号

    能不能给点建议,多谢

  • 关于这个尖刺该如何消除,能不能给点建议,多谢

  • 你好,这个问题为你在E2E上咨询了一下,你留意一下工程师的回复:https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1007139/tms320f280049c-use-aq-module-to-generate-pwm-wave-with-0-100-duty-cycle 

  • 正在跟踪中,多谢