I cant seem to be able to synchronize the etPWM modules 1, 2 and 3.
My current code is as follows:
etpwmActionQualConfig_t pwm_hi_config, pwm_lo_config; etpwmDeadBandConfig_t pwm_deadband_config; // etpwmChoppingConfig_t pwm_chop_config; memset(&pwm_hi_config, 0, sizeof(etpwmActionQualConfig_t)); memset(&pwm_lo_config, 0, sizeof(etpwmActionQualConfig_t)); memset(&pwm_deadband_config, 0, sizeof(etpwmDeadBandConfig_t)); etpwmStopTBCLK(); etpwmInit(); etpwmSetClkDiv(etpwmREG1, ClkDiv_by_1, HspClkDiv_by_1); etpwmSetTimebasePeriod(etpwmREG1, drive_pwm_period); etpwmSetClkDiv(etpwmREG2, ClkDiv_by_1, HspClkDiv_by_1); etpwmSetTimebasePeriod(etpwmREG2, drive_pwm_period); etpwmSetClkDiv(etpwmREG3, ClkDiv_by_1, HspClkDiv_by_1); etpwmSetTimebasePeriod(etpwmREG3, drive_pwm_period); etpwmSetCount(etpwmREG1, 0); etpwmSetCounterMode(etpwmREG1, CounterMode_UpDown); etpwmSetCount(etpwmREG2, 0); etpwmSetCounterMode(etpwmREG2, CounterMode_UpDown); etpwmSetCount(etpwmREG3, 0); etpwmSetCounterMode(etpwmREG3, CounterMode_UpDown); etpwmSetSyncOut(etpwmREG1, SyncOut_CtrEqZero); etpwmSetSyncOut(etpwmREG2, SyncOut_EPWMxSYNCI); etpwmSetSyncOut(etpwmREG3, SyncOut_EPWMxSYNCI); etpwmDisableCounterLoadOnSync(etpwmREG1); etpwmEnableCounterLoadOnSync(etpwmREG2, 0, COUNT_UP); etpwmEnableCounterLoadOnSync(etpwmREG3, 0, COUNT_UP); etpwmEnableTimebasePeriodShadowMode(etpwmREG1); etpwmEnableTimebasePeriodShadowMode(etpwmREG2); etpwmEnableTimebasePeriodShadowMode(etpwmREG3); pwm_hi_config.CtrEqCmpAUp_Action = ActionQual_Toggle; // pwm_hi_config.CtrEqCmpBUp_Action = ActionQual_Clear; pwm_lo_config.CtrEqCmpAUp_Action = ActionQual_Toggle; // pwm_lo_config.CtrEqCmpBUp_Action = ActionQual_Set; etpwmSetActionQualPwmA(etpwmREG1, pwm_hi_config); etpwmSetActionQualPwmB(etpwmREG1, pwm_hi_config); etpwmSetActionQualPwmA(etpwmREG2, pwm_hi_config); etpwmSetActionQualPwmB(etpwmREG2, pwm_hi_config); etpwmSetActionQualPwmA(etpwmREG3, pwm_hi_config); etpwmSetActionQualPwmB(etpwmREG3, pwm_hi_config); etpwmSetCmpA(etpwmREG1, sine_qtz_lut_u[0]); etpwmSetCmpA(etpwmREG2, sine_qtz_lut_v[0]); etpwmSetCmpA(etpwmREG3, sine_qtz_lut_w[0]); pwm_deadband_config.halfCycleEnable = false; pwm_deadband_config.inputmode = PWMA_RED_PWMB_FED; pwm_deadband_config.outputmode = PWMB_FED_PWMA_RED; pwm_deadband_config.polarity = Invert_PWMB; etpwmSetDeadBandDelay(etpwmREG1, 1000, 1000); etpwmEnableDeadBand(etpwmREG1, pwm_deadband_config); etpwmSetDeadBandDelay(etpwmREG2, 10, 10); etpwmEnableDeadBand(etpwmREG2, pwm_deadband_config); etpwmSetDeadBandDelay(etpwmREG3, 10, 10); etpwmEnableDeadBand(etpwmREG3, pwm_deadband_config); // etpwmTriggerSWSync(etpwmREG1); // etpwmTriggerSWSync(etpwmREG2); // etpwmTriggerSWSync(etpwmREG3); etpwmStartTBCLK(); etpwmTriggerSWSync(etpwmREG1);
