工具/软件:Code Composer Studio
大家好、
我 使用28377D 生成 PWM 波形、每个相位具有4个 PWM。EPWM1是主器件、EPWM2~EPWM6是从器件。 A 相使用 EPWM1和 EPWM2、B 相使用 EPWM3和 EPWM4.C 相使用 EPWM4和 EPWM5。
这种现象非常奇怪、相位 B 和相位 C 可以生成正常的波形、但 从相位 A 生成的波形具有一些较大的过冲、过冲 不会经常出现 、 并且在出现时将连续出现。
。、我怀疑它与 EPWM1和 EPWM2有关、也许有些寄存 器配置不正确。
我的寄存器配置如下。
初始部分:
void PWMchUpDwnCntConfig (Int16 n、Int16 mode、Int16相)
{
(* ePWM[n]).TBCTL.bit.HSPCLKDIV=1;
(* ePWM[n]).TBCTL.bit.CLKDIV=1;
(* ePWM[n]).TBCTL.bit.PRDLD = TB_SHADOW;
(* ePWM[n]).TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
(* ePWM[n]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
(* ePWM[n]).TBCTL.bit.CLKDIV = TB_DIV1;
if (mode = 1)//配置为主设备
{
(* ePWM[n]).TBCTL.bit.PHSEN = TB_DISABLE;
(* ePWM[n]).TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
}
否则、如果(MODE = 0)//配置为从器件
{
(* ePWM[n]).TBCTL.bit.PHSEN = TB_ENABLE;
(* ePWM[n]).TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
(* ePWM[n]).TBCTL.bit.PHSDIR = TB_UP;
}
如果(n % 2 = 0)
{
(* ePWM[n]).TBCTR = 0;
(* ePWM[n]).TBPHS.bit.TBPHS = 0;
(* ePWM[n]).TBPRD = 3200;
(* ePWM[n]).cmPCTL.bit.SHDWAMODE = CC_SHADOW;
(* ePWM[n]).cmPCTL.bit.SHDWBMODE = CC_SHADOW;
(* ePWM[n]).cmPCTL.bit.LOADAMODE = CC_CTR_ZERO;
(* ePWM[n]).cmPCTL.bit.LOADBMODE = CC_CTR_ZERO;
}
其他
{
(* ePWM[n]).TBCTR = 0;
(* ePWM[n]).TBPHS.bit.TBPHS = 3200;
(* ePWM[n]).TBPRD = 6400;
(* ePWM[n]).cmPCTL.bit.SHDWAMODE = CC_SHADOW;
(* ePWM[n]).cmPCTL.bit.SHDWBMODE = CC_SHADOW;
(* ePWM[n]).cmPCTL.bit.LOADAMODE = CC_CTR_PRD;
(* ePWM[n]).cmPCTL.bit.LOADBMODE = CC_CTR_PRD;
}
(* ePWM[n]).cmpa.bit.cmpA = 0;
(* ePWM[n]).AQCTLA.bit.CAU = AQ_CLEAR;
(* ePWM[n]).AQCTLA.bit.CAD = AQ_SET;
(* ePWM[n]).AQCTLA.bit.CBU = AQ_NO_ACTION;
(* ePWM[n]).AQCTLA.bit.CBD = AQ_NO_ACTION;
(* ePWM[n]).AQCTLA.bit.PRD = AQ_NO_ACTION;
(* ePWM[n]).AQCTLA.bit.ZRO = AQ_NO_ACTION;
(* ePWM[n]).AQCTLB.bit.CAU = AQ_CLEAR;
(* ePWM[n]).AQCTLB.bit.CAD = AQ_SET;
(* ePWM[n]).AQCTLB.bit.CBU = AQ_NO_ACTION;
(* ePWM[n]).AQCTLB.bit.CBD = AQ_NO_ACTION;
(* ePWM[n]).AQCTLB.bit.PRD = AQ_NO_ACTION;
(* ePWM[n]).AQCTLB.bit.ZRO = AQ_NO_ACTION;
(* ePWM[n]).DBCTL.bit.out_mode = DB_full_enable;
(* ePWM[n]).DBCTL.bit.POLSEL = DB_ACTV_HIC;
(* ePWM[n]).DBCTL.bit.in_mode = DBA_RED_DBB_FED;
(* ePWM[n]).DBRED.bit.DBRED = DB_RISE_EDGE_DELAY;
(* ePWM[n]).DBFED.bit.DBFED = DB_FALLING_EDGE_DELAY;
}
PWMchUpDwnCntConfig (0、1、0);//EPWM1为主器件
PWMchUpDwnCntConfig (1、0、0);
PWMchUpDwnCntConfig (2、0、0);
PWMchUpDwnCntConfig (3、0、0);
PWMchUpDwnCntConfig (4、0、0);
PWMchUpDwnCntConfig (5、0、0);
当定时器中断 出现时、ePWM (1~6)将更新 CMPA。
您能提供一些建议吗?谢谢!
