Part Number:TMS320F28027
EPWM4的PWM输出禁用了死区功能,PWM4A和PWM4B两个的占空比设置为不同的值时,发现占空比按CPMA设置的来与CPMB无关 ,能否把两路PWM输出按不同的占空比输出?
还有个问题当使用死区功能后并且采用CPMA做源,PWM4B是PWM4A输出的取反,发现当CPMA的值小于两个死区设置值即DBFED和DBRED时PWM4A几乎没输出,而PWM4B有输出,PWM4A在一个周期内存在量个毛刺
这是为什么?
谢谢!
Green Deng:
1、我不太了解你的PWM模块工作方式是怎么样的,我的想法是虽然禁用死区了,是不是你的工程里面还是配置了两个波形互补输出?
2、这里没有太理解你的意思,方便的话可以画个草图什么的说明一下吗?
,
jun liu:
我的设置如下
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设置没有起到作用
我想两路输出的频率一样只是占空比不一样就可以 谢谢!