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.
工具/软件: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。
您能提供一些建议吗?谢谢!
每个相位都有两个 ePWM,一个 TBCTR 示波器介于0和3200之间,另一个介于3200和6400之间, COMPA 介于0和6400之间(ePWM 具有一些 COMPA 值)。B 相和 C 相没有问题,但 A 相有问题,导致过冲。
作为主器件的 EPWM1存在问题、但当 CTR 为零时、会与其他 ePWM 模块同步、这一点我怀疑。 那么、我的 EPWM1寄存器配置是否错误?
在某处、COMPA 大于 EPWM1 (此时 PWM 为高电平)、也小于 EPWM2 (此时 PWM 为低电平)。 该 策略存在于 EPWM3和 EPWM4 (B 相)之间、在 EPWM5和 EPWM6 (C 相)之间。
在 EPWM1 (CTR 等于零)和 EPWM2 (CTR 等于周期)之间、加载 COMPA 的时间不同、我也尝试 将 COMPA 设置为相同的负载时间、但输出波上出现了缺陷。