
if (toggle == 0) {
// EPWM3、5配置为50%占空比,EPWM4、6配置为高电平
EPWM_setDeadBandDelayMode(EPWM3_BASE, EPWM_DB_RED, true);
EPWM_setDeadBandDelayMode(EPWM3_BASE, EPWM_DB_FED, true);
EPWM_setActionQualifierContSWForceAction(EPWM3_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_SW_DISABLED);
EPwm3Regs.CMPA.bit.CMPA = 2500;
EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm3Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm3Regs.AQCTLA.bit.CAD = AQ_NO_ACTION; // 递减阶段CTR=CMPA时,不执行动作
EPwm3Regs.AQCTLA.bit.PRD = AQ_NO_ACTION; // CTR=TBPRD时,不执行动作
EPWM_setDeadBandDelayMode(EPWM5_BASE, EPWM_DB_RED, true);
EPWM_setDeadBandDelayMode(EPWM5_BASE, EPWM_DB_FED, true);
EPWM_setActionQualifierContSWForceAction(EPWM5_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_SW_DISABLED);
EPwm5Regs.CMPA.bit.CMPA = 2500;
EPwm5Regs.AQCTLA.bit.CAU = AQ_SET;
EPwm5Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm5Regs.AQCTLA.bit.CAD = AQ_NO_ACTION; // 递减阶段CTR=CMPA时,不执行动作
EPwm5Regs.AQCTLA.bit.PRD = AQ_NO_ACTION; // CTR=TBPRD时,不执行动作
// 前800中断(正半周)
if (negative_flag) {
// 仅从负半周切到正半周时执行配置
EPWM_setDeadBandDelayMode(EPWM4_BASE, EPWM_DB_RED, false);
EPWM_setDeadBandDelayMode(EPWM4_BASE, EPWM_DB_FED, false);
EPWM_setActionQualifierContSWForceAction(EPWM4_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_SW_OUTPUT_HIGH);
EPWM_setDeadBandDelayMode(EPWM6_BASE, EPWM_DB_RED, false);
EPWM_setDeadBandDelayMode(EPWM6_BASE, EPWM_DB_FED, false);
EPWM_setActionQualifierContSWForceAction(EPWM6_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_SW_OUTPUT_HIGH);
negative_flag = 0;
positive_flag = 1;
}
} else {
EPWM_setDeadBandDelayMode(EPWM4_BASE, EPWM_DB_RED, true);
EPWM_setDeadBandDelayMode(EPWM4_BASE, EPWM_DB_FED, true);
EPWM_setActionQualifierContSWForceAction(EPWM4_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_SW_DISABLED);
EPwm4Regs.CMPA.bit.CMPA = 2500;
EPwm4Regs.AQCTLA.bit.CAU = AQ_SET;
EPwm4Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm4Regs.AQCTLA.bit.CAD = AQ_NO_ACTION; // 递减阶段CTR=CMPA时,不执行动作
EPwm4Regs.AQCTLA.bit.PRD = AQ_NO_ACTION; // CTR=TBPRD时,不执行动作
EPWM_setDeadBandDelayMode(EPWM6_BASE, EPWM_DB_RED, true);
EPWM_setDeadBandDelayMode(EPWM6_BASE, EPWM_DB_FED, true);
EPWM_setActionQualifierContSWForceAction(EPWM6_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_SW_DISABLED);
EPwm6Regs.CMPA.bit.CMPA = 2500;
EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm6Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm6Regs.AQCTLA.bit.CAD = AQ_NO_ACTION; // 递减阶段CTR=CMPA时,不执行动作
EPwm6Regs.AQCTLA.bit.PRD = AQ_NO_ACTION; // CTR=TBPRD时,不执行动作
// 后800中断(负半周)
if (positive_flag) {
// 仅从正半周切到负半周时执行配置
// EPWM3、5配置为高电平,EPWM4、6配置为50%占空比
EPWM_setDeadBandDelayMode(EPWM3_BASE, EPWM_DB_RED, false);
EPWM_setDeadBandDelayMode(EPWM3_BASE, EPWM_DB_FED, false);
EPWM_setActionQualifierContSWForceAction(EPWM3_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_SW_OUTPUT_HIGH);
EPWM_setDeadBandDelayMode(EPWM5_BASE, EPWM_DB_RED, false);
EPWM_setDeadBandDelayMode(EPWM5_BASE, EPWM_DB_FED, false);
EPWM_setActionQualifierContSWForceAction(EPWM5_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_SW_OUTPUT_HIGH);
positive_flag = 0;
negative_flag = 1;
}
}