主题中讨论的其他器件:C2000WARE
/**ePWM initialization with phase shift*/ void epwm_init(uint32_t base, uint16_t phi) { /**Parameters*/ EPWM_setTimeBaseCounterMode(base, EPWM_COUNTER_MODE_UP); EPWM_setTimeBasePeriod(base, EPWM_TBPRD); EPWM_setTimeBaseCounter(base, 0U); EPWM_setClockPrescaler(base, EPWM_CLOCK_DIVIDER_4, EPWM_HSCLOCK_DIVIDER_4); /**Set up shadowing*/ EPWM_setCounterCompareShadowLoadMode(base, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO); /**Set actions For boost assembly*/ EPWM_setActionQualifierAction(base, SPWM_TOP, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA); EPWM_setActionQualifierAction(base, SPWM_TOP, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO); /**For buck assembly*/ EPWM_setActionQualifierAction(base, SPWM_BOT, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB); EPWM_setActionQualifierAction(base, SPWM_BOT, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO); /// To force command MOS ePWM at a low state. if((base == SPWM_U) || (base == SPWM_V) || (base == SPWM_W)) { EPWM_setActionQualifierContSWForceAction(SPWM_U, SPWM_BOT, EPWM_AQ_SW_OUTPUT_LOW); EPWM_setActionQualifierContSWForceAction(SPWM_V, SPWM_BOT, EPWM_AQ_SW_OUTPUT_LOW); EPWM_setActionQualifierContSWForceAction(SPWM_W, SPWM_BOT, EPWM_AQ_SW_OUTPUT_LOW); EPWM_setActionQualifierContSWForceAction(SPWM_U, SPWM_TOP, EPWM_AQ_SW_OUTPUT_LOW); EPWM_setActionQualifierContSWForceAction(SPWM_V, SPWM_TOP, EPWM_AQ_SW_OUTPUT_LOW); EPWM_setActionQualifierContSWForceAction(SPWM_W, SPWM_TOP, EPWM_AQ_SW_OUTPUT_LOW); } if(base == SPWM_FOR_ADC) { EPWM_setTimeBasePeriod(base, EPWM_TBPRD_ADC); /**Initialize PWM to add samples ADC in loop close regulation*/ EPWM_setCounterCompareValue(base, EPWM_COUNTER_COMPARE_A, CMPA_EPWM_ADC); } if(base == SPWM_REGU) { EPWM_setTimeBasePeriod(base, EPWM_TBPRD_REGU); /**Initialize PWM to regulation interrupt*/ EPWM_setCounterCompareValue(base, EPWM_COUNTER_COMPARE_A, CMPA_EPWM_REGU); } /**Configure ePMWs*/ // Todo comments to explain if(phi == 0) { EPWM_disablePhaseShiftLoad(base); EPWM_setPhaseShift(base, phi); EPWM_enableSyncOutPulseSource(base, EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO); } else { uint16_t tbphs = epwm_get_tbphs_from_phi(base, phi); EPWM_setSyncInPulseSource(base, EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM1); EPWM_enablePhaseShiftLoad(base); EPWM_selectPeriodLoadEvent(base, EPWM_SHADOW_LOAD_MODE_SYNC); EPWM_setPhaseShift(base, tbphs); EPWM_setTimeBaseCounter(base, tbphs); } } EPWM_setInterruptSource(SPWM_REGU, EPWM_INT_TBCTR_ZERO); EPWM_enableInterrupt(SPWM_REGU); Interrupt_register(INT_EPWM3, &isr_regulation); Interrupt_enable(INT_EPWM3); // Delete after test because it's active in case run in the state machine.
您好!
配置 ePWM 中断时遇到问题、我希望在 ePWM 信号的每个周期生成中断。 它不起作用,我从不输入中断,我必须忘记配置部件? 可以帮帮我吗?
谢谢
Damien