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.

TMS320F28027: EPWM4的PWM输出禁用了死区功能,PWM4A和PWM4B两个的占空比设置为不同的值时,发现占空比按CPMA设置的来与CPMB无关

Part Number: TMS320F28027

EPWM4的PWM输出禁用了死区功能,PWM4A和PWM4B两个的占空比设置为不同的值时,发现占空比按CPMA设置的来与CPMB无关 ,能否把两路PWM输出按不同的占空比输出?

还有个问题当使用死区功能后并且采用CPMA做源,PWM4B是PWM4A输出的取反,发现当CPMA的值小于两个死区设置值即DBFED和DBRED时PWM4A几乎没输出,而PWM4B有输出,PWM4A在一个周期内存在量个毛刺

这是为什么?

谢谢!

  • 1、我不太了解你的PWM模块工作方式是怎么样的,我的想法是虽然禁用死区了,是不是你的工程里面还是配置了两个波形互补输出?

    2、这里没有太理解你的意思,方便的话可以画个草图什么的说明一下吗?

  • 我的设置如下

    for(i=4;i<5;i++)//ePWM4
    {
    EALLOW;

    PWMDef[i]->TBPRD = 3061-1; //频率19.6k
    PWMDef[i]->CMPA.half.CMPA = 0; //占空比
    PWMDef[i]->TBPHS.half.TBPHS = 0x0000; // Phase is 0
    PWMDef[i]->TBCTR = 0x0000; // Clear counter
    PWMDef[i]->CMPB= 0x0000;
    //对其模式PWM频率计算 T_PWM =2 x TBPRD x T_TBCLK
    PWMDef[i]->TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up down 中央对其模式
    PWMDef[i]->TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
    PWMDef[i]->TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
    PWMDef[i]->TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT;
    PWMDef[i]->TBCTL.bit.CLKDIV = TB_DIV1;
    PWMDef[i]->CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    PWMDef[i]->CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    PWMDef[i]->CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    PWMDef[i]->CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

    //见P54 ----->Figure 31. Configuration Options for the Dead-Band Submodule
    //这里采用CPMA做源,PWMxB的输出是PWMxA的取反
    PWMDef[i]->DBCTL.bit.IN_MODE = DBA_ALL; //S5 = 0; S4 = 0
    PWMDef[i]->DBCTL.bit.OUT_MODE =DB_DISABLE;//DB_FULL_ENABLE;// DB_DISABLE;//DB_FULL_ENABLE; //S1 = 1; S0 = 1
    PWMDef[i]->DBCTL.bit.POLSEL = DB_ACTV_HI;//DB_ACTV_HIC; //S3 = 1; S2 = 0

    //设置PWM输出极性,当TB计数到达CMPA时,PWM输出的高低电平确定
    PWMDef[i]->AQCTLA.bit.CAU = AQ_CLEAR;//AQ_SET; 当计数值达到CMPA时PWM模块的动作
    PWMDef[i]->AQCTLA.bit.CAD = AQ_NO_ACTION;//AQ_CLEAR; 本程序只有CAU并无CAD除非是中央对齐模式
    PWMDef[i]->AQCTLA.bit.ZRO = AQ_SET;//AQ_TOGGLE;//AQ_CLEAR; 自己添加
    PWMDef[i]->AQCTLB.bit.CAU =AQ_SET;// AQ_CLEAR;//AQ_SET; 当计数值达到CMPA时PWM模块的动作
    PWMDef[i]->AQCTLB.bit.CAD = AQ_NO_ACTION;//AQ_CLEAR; 本程序只有CAU并无CAD除非是中央对齐模式
    PWMDef[i]->AQCTLB.bit.ZRO = AQ_CLEAR;//AQ_SET;//AQ_TOGGLE;//AQ_CLEAR; 自己添加

    //P57 设置死区, 互补模式下,需要设置死区
    PWMDef[i]->DBFED = 60; // 死区设置 TBCLKs
    PWMDef[i]->DBRED = 60; //

    EDIS;
    }

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

    其中极性我是设置PWMDef[i]->DBCTL.bit.POLSEL = DB_ACTV_HI;这种应该不是互补输出吧  

    PWMxB的占空比我在定时中断中设置

    EPwm4Regs.CMPB =0x6F;

    我发现不管CMPB设置为多少,波形和CMPA是互补的 CMPB设置没有起到作用

    我想两路输出的频率一样只是占空比不一样就可以 谢谢!