Hi QJ,
DO you have any sample code available for synching 3 EPWMS , all of them are left aligned?
How do we verify it is left aligned?
Thanks
SB
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.
Hi QJ,
DO you have any sample code available for synching 3 EPWMS , all of them are left aligned?
How do we verify it is left aligned?
Thanks
SB
Hi SB,
The ePWM modules are chained together via a clock synchronization scheme that allows them to operate as a single system when required. Each ePWM has a synchronization input (EPWMxSYNCI) and a synchronization output (EPWMxSYNCO). The input synchronization for the first instance (ePWM1) comes from an external pin. Each ePWM module can be configured to use or ignore the synchronization input.
You can also force a sync pulse (SWFSYNC) to OR the EPWMxSYNCI.
How do you configure PWMs as left aligned?
What is left aligned? Do you mean up-count mode or down-count mode? The PWM module supports up-count, down-count and up-down-count modes. Please refer to ePWM chapter in TRM.
_enable_interrupt_();
/* Setup ADCs */
adcStartConversion(adcREG1, adcGROUP1);
adcStartConversion(adcREG2, adcGROUP1);
kickerReg->KICKER0 = 0x83E70B13U;
kickerReg->KICKER1 = 0x95A4F1E0U;
pinMuxReg->PINMMR35 = 0x0000;
kickerReg->KICKER0 = 0x00000000U;
kickerReg->KICKER1 = 0x00000000U;
/* setup etPWM */
etpwmSetCount(etpwmREG1, 1000);
etpwmSetCount(etpwmREG2,500);
etpwmSetCount(etpwmREG3, 300);
etpwmSetCounterMode(etpwmREG1, CounterMode_UpDown);
etpwmSetCounterMode(etpwmREG2, CounterMode_UpDown);
etpwmSetCounterMode(etpwmREG3, CounterMode_UpDown);
etpwmSetSyncOut(etpwmREG1,SyncOut_CtrEqZero);
etpwmSetSyncOut(etpwmREG2,SyncOut_EPWMxSYNCI);
etpwmSetSyncOut(etpwmREG3,SyncOut_EPWMxSYNCI);
etpwmREG2->TBCTL |= (uint16)2U << 1U; // PHSEN
etpwmREG3->TBCTL |= (uint16)2U << 1U;
/* Configure mthe module to set PWMA value as 1 when CTR=0 and as 0 when CTR=CmpA */
etpwmActionQualConfig_t configPWM;
configPWM.CtrEqPeriod_Action = ActionQual_Disabled;
configPWM.CtrEqZero_Action = ActionQual_Disabled;
configPWM.CtrEqCmpAUp_Action = ActionQual_Set;
configPWM.CtrEqCmpADown_Action = ActionQual_Clear;
configPWM.CtrEqCmpBUp_Action = ActionQual_Disabled;
configPWM.CtrEqCmpBDown_Action = ActionQual_Disabled;
etpwmSetActionQualPwmA(etpwmREG1, configPWM);
etpwmSetActionQualPwmA(etpwmREG2, configPWM);
etpwmSetActionQualPwmA(etpwmREG3, configPWM);
/* Enable trigger for SOC */
etpwmEnableSOCA(etpwmREG1, CTR_ZERO, EventPeriod_FirstEvent);
etpwmClearEventFlag(etpwmREG1, Event_SOCA);
etpwmTriggerEvent(etpwmREG1,Event_SOCA);
etpwmDisableCounterLoadOnSync(etpwmREG1);
etpwmEnableCounterLoadOnSync(etpwmREG2, 0, 0x2000);
etpwmEnableCounterLoadOnSync(etpwmREG3, 0, 0x2000);
etpwmEnableTimebasePeriodShadowMode(etpwmREG1);
etpwmEnableTimebasePeriodShadowMode(etpwmREG2);
etpwmEnableTimebasePeriodShadowMode(etpwmREG3);
etpwmEnableCmpAShadowMode(etpwmREG1, LoadMode_CtrEqZero);
etpwmEnableCmpAShadowMode(etpwmREG2, LoadMode_CtrEqZero);
etpwmEnableCmpAShadowMode(etpwmREG3, LoadMode_CtrEqZero);
etpwmDeadBandConfig_t deadbandconfig;
deadbandconfig.halfCycleEnable = true;
deadbandconfig.inputmode = PWMA_RED_FED;
deadbandconfig.outputmode = PWMB_FED_PWMA_RED;
deadbandconfig.polarity = Invert_PWMB;
etpwmSetDeadBandDelay(etpwmREG1,112,112);
etpwmSetDeadBandDelay(etpwmREG2,112,112);
etpwmSetDeadBandDelay(etpwmREG3,112,112);
etpwmEnableDeadBand(etpwmREG1, deadbandconfig);
etpwmEnableDeadBand(etpwmREG2, deadbandconfig);
etpwmEnableDeadBand(etpwmREG3, deadbandconfig)
Do you think this will work? How can we verify?