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; } }