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.

TMS570LS1224: Syncing 3 EPWMs ,left aligned PWM based ADC conversion - Code example

Part Number: TMS570LS1224

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.

  • Hi QJ,

    How do you configure PWMs as left aligned?

  • Hi QJ,

    Could you please share any example code if you have any?

  • Hi Sachin,

    Sorry I don't have example code.

  • 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.

  • Up-count mode.Do you have any example code for it?

  • _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?

  • Hi Sachin,

    I assume you have make your code work.