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.

TMS320F28335: ePWM Phase Shifting

Part Number: TMS320F28335
Other Parts Discussed in Thread: CONTROLSUITE

Hi,

I'm trying to generate six pwm pulses for a three phase inverter.

I used ePWM1A,2A,3A,4A,5A and 6A. The pulses must have the pahse shift required for 120 degrees control.

For this control the pulses must be at this queue:

5A 3A

3A 4A

4A 2A

2A 6A

6A 1A

1A 5A

These are the codes that generated from matlab. I added the EPwm1Regs.TBCTL.bit.SWFSYNC = 1 to start the phase shifting but nothing happens

and the pulses starts at a same place. Am I right in the phase shifting or I must try another way?


#include "epwm6p.h" #include "epwm6p_private.h" /* Real-time model */ RT_MODEL_epwm6p epwm6p_M_; RT_MODEL_epwm6p *const epwm6p_M = &epwm6p_M_; /* Model step function */ void epwm6p_step(void) { /* S-Function (c280xpwm): '<Root>/ePWM1A' */ EPwm1Regs.TBCTL.bit.SWFSYNC = epwm6p_P.Constant_Value; } /* Model initialize function */ void epwm6p_initialize(void) { /* Registration code */ /* initialize error status */ rtmSetErrorStatus(epwm6p_M, (NULL)); /* Start for S-Function (c280xpwm): '<Root>/ePWM1A' */ /*** Initialize ePWM1 modules ***/ { EPWMPARAMS EPwm1Params; /*-- Setup Time-Base (TB) Submodule --*/ EPwm1Params.TBPRD = 900; EPwm1Params.TBCTL_CTRMODE = 0; EPwm1Regs.TBCTL.bit.SWFSYNC = 1; EPwm1Params.TBCTL_SYNCOSEL = 0; EPwm1Params.TBCTL_PHSEN = 1; EPwm1Params.TBCTL_PHSDIR = 0; EPwm1Params.TBPHS = 600; EPwm1Params.TBCTL_HSPCLKDIV = 0; EPwm1Params.TBCTL_CLKDIV = 0; /*-- Setup Counter_Compare (CC) Submodule --*/ EPwm1Params.CMPCTL_LOADAMODE = 0; EPwm1Params.CMPCTL_LOADBMODE = 0; EPwm1Params.CMPA = 800; EPwm1Params.CMPB = 0; /*-- Setup Action-Qualifier (AQ) Submodule --*/ EPwm1Params.AQCTLA = 36; EPwm1Params.AQCTLB = 264; EPwm1Params.AQCSFRC_CSFA = 0; EPwm1Params.AQCSFRC_CSFB = 0; EPwm1Params.AQCSFRC_RLDCSF = 0; /*-- Setup Dead-Band Generator (DB) Submodule --*/ EPwm1Params.DBCTL_OUT_MODE = 0; EPwm1Params.DBCTL_IN_MODE = 0; EPwm1Params.DBCTL_POLSEL = 0; EPwm1Params.DBRED = 0.0; EPwm1Params.DBFED = 0.0; /*-- Setup Event-Trigger (ET) Submodule --*/ EPwm1Params.ETSEL_SOCAEN = 0; EPwm1Params.ETSEL_SOCASEL = 1; EPwm1Params.ETPS_SOCAPRD = 1; EPwm1Params.ETSEL_SOCBEN = 0; EPwm1Params.ETSEL_SOCBSEL = 1; EPwm1Params.ETPS_SOCBPRD = 1; EPwm1Params.ETSEL_INTEN = 0; EPwm1Params.ETSEL_INTSEL = 1; EPwm1Params.ETPS_INTPRD = 1; /*-- Setup PWM-Chopper (PC) Submodule --*/ EPwm1Params.PCCTL_CHPEN = 0; EPwm1Params.PCCTL_CHPFREQ = 0; EPwm1Params.PCCTL_OSHTWTH = 0; EPwm1Params.PCCTL_CHPDUTY = 0; /*-- Setup Trip-Zone (TZ) Submodule --*/ EPwm1Params.TZSEL = 0; EPwm1Params.TZCTL_TZA = 3; EPwm1Params.TZCTL_TZB = 3; EPwm1Params.TZEINT_OST = 0; EPwm1Params.TZEINT_CBC = 0; /*-- Initial ePWM1 --*/ config_ePWMRegs(&EPwm1Regs, &EPwm1Params); } /* Start for S-Function (c280xpwm): '<Root>/ePWM2A' */ /*** Initialize ePWM2 modules ***/ { EPWMPARAMS EPwm2Params; /*-- Setup Time-Base (TB) Submodule --*/ EPwm2Params.TBPRD = 900; EPwm2Params.TBCTL_CTRMODE = 0; EPwm2Params.TBCTL_SYNCOSEL = 0; EPwm2Params.TBCTL_PHSEN = 1; EPwm2Params.TBCTL_PHSDIR = 0; EPwm2Params.TBPHS = 400; EPwm2Params.TBCTL_HSPCLKDIV = 0; EPwm2Params.TBCTL_CLKDIV = 0; /*-- Setup Counter_Compare (CC) Submodule --*/ EPwm2Params.CMPCTL_LOADAMODE = 0; EPwm2Params.CMPCTL_LOADBMODE = 0; EPwm2Params.CMPA = 600; EPwm2Params.CMPB = 0; /*-- Setup Action-Qualifier (AQ) Submodule --*/ EPwm2Params.AQCTLA = 36; EPwm2Params.AQCTLB = 264; EPwm2Params.AQCSFRC_CSFA = 0; EPwm2Params.AQCSFRC_CSFB = 0; EPwm2Params.AQCSFRC_RLDCSF = 0; /*-- Setup Dead-Band Generator (DB) Submodule --*/ EPwm2Params.DBCTL_OUT_MODE = 0; EPwm2Params.DBCTL_IN_MODE = 0; EPwm2Params.DBCTL_POLSEL = 0; EPwm2Params.DBRED = 0.0; EPwm2Params.DBFED = 0.0; /*-- Setup Event-Trigger (ET) Submodule --*/ EPwm2Params.ETSEL_SOCAEN = 0; EPwm2Params.ETSEL_SOCASEL = 1; EPwm2Params.ETPS_SOCAPRD = 1; EPwm2Params.ETSEL_SOCBEN = 0; EPwm2Params.ETSEL_SOCBSEL = 1; EPwm2Params.ETPS_SOCBPRD = 1; EPwm2Params.ETSEL_INTEN = 0; EPwm2Params.ETSEL_INTSEL = 1; EPwm2Params.ETPS_INTPRD = 1; /*-- Setup PWM-Chopper (PC) Submodule --*/ EPwm2Params.PCCTL_CHPEN = 0; EPwm2Params.PCCTL_CHPFREQ = 0; EPwm2Params.PCCTL_OSHTWTH = 0; EPwm2Params.PCCTL_CHPDUTY = 0; /*-- Setup Trip-Zone (TZ) Submodule --*/ EPwm2Params.TZSEL = 0; EPwm2Params.TZCTL_TZA = 3; EPwm2Params.TZCTL_TZB = 3; EPwm2Params.TZEINT_OST = 0; EPwm2Params.TZEINT_CBC = 0; /*-- Initial ePWM2 --*/ config_ePWMRegs(&EPwm2Regs, &EPwm2Params); } /* Start for S-Function (c280xpwm): '<Root>/ePWM3A' */ /*** Initialize ePWM3 modules ***/ { EPWMPARAMS EPwm3Params; /*-- Setup Time-Base (TB) Submodule --*/ EPwm3Params.TBPRD = 900; EPwm3Params.TBCTL_CTRMODE = 0; EPwm3Params.TBCTL_SYNCOSEL = 0; EPwm3Params.TBCTL_PHSEN = 1; EPwm3Params.TBCTL_PHSDIR = 0; EPwm3Params.TBPHS = 200; EPwm3Params.TBCTL_HSPCLKDIV = 0; EPwm3Params.TBCTL_CLKDIV = 0; /*-- Setup Counter_Compare (CC) Submodule --*/ EPwm3Params.CMPCTL_LOADAMODE = 0; EPwm3Params.CMPCTL_LOADBMODE = 0; EPwm3Params.CMPA = 400; EPwm3Params.CMPB = 0; /*-- Setup Action-Qualifier (AQ) Submodule --*/ EPwm3Params.AQCTLA = 36; EPwm3Params.AQCTLB = 264; EPwm3Params.AQCSFRC_CSFA = 0; EPwm3Params.AQCSFRC_CSFB = 0; EPwm3Params.AQCSFRC_RLDCSF = 0; /*-- Setup Dead-Band Generator (DB) Submodule --*/ EPwm3Params.DBCTL_OUT_MODE = 0; EPwm3Params.DBCTL_IN_MODE = 0; EPwm3Params.DBCTL_POLSEL = 0; EPwm3Params.DBRED = 0.0; EPwm3Params.DBFED = 0.0; /*-- Setup Event-Trigger (ET) Submodule --*/ EPwm3Params.ETSEL_SOCAEN = 0; EPwm3Params.ETSEL_SOCASEL = 1; EPwm3Params.ETPS_SOCAPRD = 1; EPwm3Params.ETSEL_SOCBEN = 0; EPwm3Params.ETSEL_SOCBSEL = 1; EPwm3Params.ETPS_SOCBPRD = 1; EPwm3Params.ETSEL_INTEN = 0; EPwm3Params.ETSEL_INTSEL = 1; EPwm3Params.ETPS_INTPRD = 1; /*-- Setup PWM-Chopper (PC) Submodule --*/ EPwm3Params.PCCTL_CHPEN = 0; EPwm3Params.PCCTL_CHPFREQ = 0; EPwm3Params.PCCTL_OSHTWTH = 0; EPwm3Params.PCCTL_CHPDUTY = 0; /*-- Setup Trip-Zone (TZ) Submodule --*/ EPwm3Params.TZSEL = 0; EPwm3Params.TZCTL_TZA = 3; EPwm3Params.TZCTL_TZB = 3; EPwm3Params.TZEINT_OST = 0; EPwm3Params.TZEINT_CBC = 0; /*-- Initial ePWM3 --*/ config_ePWMRegs(&EPwm3Regs, &EPwm3Params); } /* Start for S-Function (c280xpwm): '<Root>/ePWM4A' */ /*** Initialize ePWM4 modules ***/ { EPWMPARAMS EPwm4Params; /*-- Setup Time-Base (TB) Submodule --*/ EPwm4Params.TBPRD = 900; EPwm4Params.TBCTL_CTRMODE = 0; EPwm4Params.TBCTL_SYNCOSEL = 0; EPwm4Params.TBCTL_PHSEN = 1; EPwm4Params.TBCTL_PHSDIR = 0; EPwm4Params.TBPHS = 300; EPwm4Params.TBCTL_HSPCLKDIV = 0; EPwm4Params.TBCTL_CLKDIV = 0; /*-- Setup Counter_Compare (CC) Submodule --*/ EPwm4Params.CMPCTL_LOADAMODE = 0; EPwm4Params.CMPCTL_LOADBMODE = 0; EPwm4Params.CMPA = 500; EPwm4Params.CMPB = 0; /*-- Setup Action-Qualifier (AQ) Submodule --*/ EPwm4Params.AQCTLA = 36; EPwm4Params.AQCTLB = 264; EPwm4Params.AQCSFRC_CSFA = 0; EPwm4Params.AQCSFRC_CSFB = 0; EPwm4Params.AQCSFRC_RLDCSF = 0; /*-- Setup Dead-Band Generator (DB) Submodule --*/ EPwm4Params.DBCTL_OUT_MODE = 0; EPwm4Params.DBCTL_IN_MODE = 0; EPwm4Params.DBCTL_POLSEL = 0; EPwm4Params.DBRED = 0.0; EPwm4Params.DBFED = 0.0; /*-- Setup Event-Trigger (ET) Submodule --*/ EPwm4Params.ETSEL_SOCAEN = 0; EPwm4Params.ETSEL_SOCASEL = 1; EPwm4Params.ETPS_SOCAPRD = 1; EPwm4Params.ETSEL_SOCBEN = 0; EPwm4Params.ETSEL_SOCBSEL = 1; EPwm4Params.ETPS_SOCBPRD = 1; EPwm4Params.ETSEL_INTEN = 0; EPwm4Params.ETSEL_INTSEL = 1; EPwm4Params.ETPS_INTPRD = 1; /*-- Setup PWM-Chopper (PC) Submodule --*/ EPwm4Params.PCCTL_CHPEN = 0; EPwm4Params.PCCTL_CHPFREQ = 0; EPwm4Params.PCCTL_OSHTWTH = 0; EPwm4Params.PCCTL_CHPDUTY = 0; /*-- Setup Trip-Zone (TZ) Submodule --*/ EPwm4Params.TZSEL = 0; EPwm4Params.TZCTL_TZA = 3; EPwm4Params.TZCTL_TZB = 3; EPwm4Params.TZEINT_OST = 0; EPwm4Params.TZEINT_CBC = 0; /*-- Initial ePWM4 --*/ config_ePWMRegs(&EPwm4Regs, &EPwm4Params); } /* Start for S-Function (c280xpwm): '<Root>/ePWM5A' */ /*** Initialize ePWM5 modules ***/ { EPWMPARAMS EPwm5Params; /*-- Setup Time-Base (TB) Submodule --*/ EPwm5Params.TBPRD = 900; EPwm5Params.TBCTL_CTRMODE = 0; EPwm5Params.TBCTL_SYNCOSEL = 0; EPwm5Params.TBCTL_PHSEN = 1; EPwm5Params.TBCTL_PHSDIR = 0; EPwm5Params.TBPHS = 100; EPwm5Params.TBCTL_HSPCLKDIV = 0; EPwm5Params.TBCTL_CLKDIV = 0; /*-- Setup Counter_Compare (CC) Submodule --*/ EPwm5Params.CMPCTL_LOADAMODE = 0; EPwm5Params.CMPCTL_LOADBMODE = 0; EPwm5Params.CMPA = 300; EPwm5Params.CMPB = 0; /*-- Setup Action-Qualifier (AQ) Submodule --*/ EPwm5Params.AQCTLA = 36; EPwm5Params.AQCTLB = 264; EPwm5Params.AQCSFRC_CSFA = 0; EPwm5Params.AQCSFRC_CSFB = 0; EPwm5Params.AQCSFRC_RLDCSF = 0; /*-- Setup Dead-Band Generator (DB) Submodule --*/ EPwm5Params.DBCTL_OUT_MODE = 0; EPwm5Params.DBCTL_IN_MODE = 0; EPwm5Params.DBCTL_POLSEL = 0; EPwm5Params.DBRED = 0.0; EPwm5Params.DBFED = 0.0; /*-- Setup Event-Trigger (ET) Submodule --*/ EPwm5Params.ETSEL_SOCAEN = 0; EPwm5Params.ETSEL_SOCASEL = 1; EPwm5Params.ETPS_SOCAPRD = 1; EPwm5Params.ETSEL_SOCBEN = 0; EPwm5Params.ETSEL_SOCBSEL = 1; EPwm5Params.ETPS_SOCBPRD = 1; EPwm5Params.ETSEL_INTEN = 0; EPwm5Params.ETSEL_INTSEL = 1; EPwm5Params.ETPS_INTPRD = 1; /*-- Setup PWM-Chopper (PC) Submodule --*/ EPwm5Params.PCCTL_CHPEN = 0; EPwm5Params.PCCTL_CHPFREQ = 0; EPwm5Params.PCCTL_OSHTWTH = 0; EPwm5Params.PCCTL_CHPDUTY = 0; /*-- Setup Trip-Zone (TZ) Submodule --*/ EPwm5Params.TZSEL = 0; EPwm5Params.TZCTL_TZA = 3; EPwm5Params.TZCTL_TZB = 3; EPwm5Params.TZEINT_OST = 0; EPwm5Params.TZEINT_CBC = 0; /*-- Initial ePWM5 --*/ config_ePWMRegs(&EPwm5Regs, &EPwm5Params); } /* Start for S-Function (c280xpwm): '<Root>/ePWM6A' */ /*** Initialize ePWM6 modules ***/ { EPWMPARAMS EPwm6Params; /*-- Setup Time-Base (TB) Submodule --*/ EPwm6Params.TBPRD = 900; EPwm6Params.TBCTL_CTRMODE = 0; EPwm6Params.TBCTL_SYNCOSEL = 0; EPwm6Params.TBCTL_PHSEN = 1; EPwm6Params.TBCTL_PHSDIR = 0; EPwm6Params.TBPHS = 500; EPwm6Params.TBCTL_HSPCLKDIV = 0; EPwm6Params.TBCTL_CLKDIV = 0; /*-- Setup Counter_Compare (CC) Submodule --*/ EPwm6Params.CMPCTL_LOADAMODE = 0; EPwm6Params.CMPCTL_LOADBMODE = 0; EPwm6Params.CMPA = 700; EPwm6Params.CMPB = 0; /*-- Setup Action-Qualifier (AQ) Submodule --*/ EPwm6Params.AQCTLA = 36; EPwm6Params.AQCTLB = 264; EPwm6Params.AQCSFRC_CSFA = 0; EPwm6Params.AQCSFRC_CSFB = 0; EPwm6Params.AQCSFRC_RLDCSF = 0; /*-- Setup Dead-Band Generator (DB) Submodule --*/ EPwm6Params.DBCTL_OUT_MODE = 0; EPwm6Params.DBCTL_IN_MODE = 0; EPwm6Params.DBCTL_POLSEL = 0; EPwm6Params.DBRED = 0.0; EPwm6Params.DBFED = 0.0; /*-- Setup Event-Trigger (ET) Submodule --*/ EPwm6Params.ETSEL_SOCAEN = 0; EPwm6Params.ETSEL_SOCASEL = 1; EPwm6Params.ETPS_SOCAPRD = 1; EPwm6Params.ETSEL_SOCBEN = 0; EPwm6Params.ETSEL_SOCBSEL = 1; EPwm6Params.ETPS_SOCBPRD = 1; EPwm6Params.ETSEL_INTEN = 0; EPwm6Params.ETSEL_INTSEL = 1; EPwm6Params.ETPS_INTPRD = 1; /*-- Setup PWM-Chopper (PC) Submodule --*/ EPwm6Params.PCCTL_CHPEN = 0; EPwm6Params.PCCTL_CHPFREQ = 0; EPwm6Params.PCCTL_OSHTWTH = 0; EPwm6Params.PCCTL_CHPDUTY = 0; /*-- Setup Trip-Zone (TZ) Submodule --*/ EPwm6Params.TZSEL = 0; EPwm6Params.TZCTL_TZA = 3; EPwm6Params.TZCTL_TZB = 3; EPwm6Params.TZEINT_OST = 0; EPwm6Params.TZEINT_CBC = 0; /*-- Initial ePWM6 --*/ config_ePWMRegs(&EPwm6Regs, &EPwm6Params); } } /* Model terminate function */ void epwm6p_terminate(void) { /* (no terminate code required) */ }

  • Hello,
    I am writing to let you know that a C2000 team member has been assigned to this post and should be answering shortly.

    Regards
    Baskaran
  • Hello,

    Have you had a chance to look at the configuration examples in the EPWM User Guide? Specifically Figure 56 is an example of 3-phase inverter with accompanying code that may be of interest to you.

    It is good to review the configuration differences between the EPWM master and the slave modules, especially the PHSEN and SYNCOSEL bits of the TBCTL register.

    Regards,
    Elizabeth

  • It was a nice guidance,
    and I have another question, Is it possible that I give different values to CMPA and CMPB?
    For example I made an array containing 200 values and I want to give them to CMPx every second.
    I put the array in a funtion and called it in main c file but it didn't work.

    Thank you.
  • Yes, it is possible to change CMPA and CMPB values to modify the duty cycle. You can configure a timer interrupt to generate every second and update the CMPx values in the interrupt service routine.

    Regards,
    Elizabeth
  • I set the registers so:

    /*** Initialize ePWM1 modules ***/
    {
    EPWMPARAMS EPwm1Params;

    /*-- Setup Time-Base (TB) Submodule --*/
    EPwm1Params.TBPRD = 7500;
    EPwm1Params.TBCTL_CTRMODE = 2;
    EPwm1Params.TBCTL_SYNCOSEL = 3;
    EPwm1Params.TBCTL_PHSEN = 0;
    EPwm1Params.TBCTL_PHSDIR = 0;
    EPwm1Params.TBPHS = 0;
    EPwm1Params.TBCTL_HSPCLKDIV = 0;
    EPwm1Params.TBCTL_CLKDIV = 0;

    /*-- Setup Counter_Compare (CC) Submodule --*/
    EPwm1Params.CMPCTL_LOADAMODE = 0;
    EPwm1Params.CMPCTL_LOADBMODE = 0;
    //EPwm1Params.CMPA = 250;
    //EPwm1Params.CMPB = 252;

    /*-- Setup Action-Qualifier (AQ) Submodule --*/
    EPwm1Params.AQCTLA = 384;
    EPwm1Params.AQCTLB = 576;
    EPwm1Params.AQCSFRC_CSFA = 0;
    EPwm1Params.AQCSFRC_CSFB = 0;
    EPwm1Params.AQCSFRC_RLDCSF = 0;

    /*-- Setup Dead-Band Generator (DB) Submodule --*/
    EPwm1Params.DBCTL_OUT_MODE = 3;
    EPwm1Params.DBCTL_IN_MODE = 0;
    EPwm1Params.DBCTL_POLSEL = 0;
    EPwm1Params.DBRED = 1.0;
    EPwm1Params.DBFED = 1.0;

    /*-- Setup Event-Trigger (ET) Submodule --*/
    EPwm1Params.ETSEL_SOCAEN = 0;
    EPwm1Params.ETSEL_SOCASEL = 1;
    EPwm1Params.ETPS_SOCAPRD = 1;
    EPwm1Params.ETSEL_SOCBEN = 0;
    EPwm1Params.ETSEL_SOCBSEL = 1;
    EPwm1Params.ETPS_SOCBPRD = 1;
    EPwm1Params.ETSEL_INTEN = 1;
    EPwm1Params.ETSEL_INTSEL = 1;
    EPwm1Params.ETPS_INTPRD = 1;

    /*-- Setup PWM-Chopper (PC) Submodule --*/
    EPwm1Params.PCCTL_CHPEN = 0;
    EPwm1Params.PCCTL_CHPFREQ = 0;
    EPwm1Params.PCCTL_OSHTWTH = 0;
    EPwm1Params.PCCTL_CHPDUTY = 0;

    /*-- Setup Trip-Zone (TZ) Submodule --*/
    EPwm1Params.TZSEL = 0;
    EPwm1Params.TZCTL_TZA = 3;
    EPwm1Params.TZCTL_TZB = 3;
    EPwm1Params.TZEINT_OST = 0;
    EPwm1Params.TZEINT_CBC = 0;

    /*-- Initial ePWM1 --*/
    config_ePWMRegs(&EPwm1Regs, &EPwm1Params);
    }




    every time TBCTR equals to zero an interrupt generates
    and I wrote this in DefaultIsr.c :

    interrupt void EPWM1_INT_ISR(void) // EPWM-1
    {
    // Insert ISR Code here

    // To receive more interrupts from this PIE group, acknowledge this interrupt
    // PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;

    EPwm1Regs.ETCLR.bit.INT = 1;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
    IER |= M_INT3;
    int i;
    int c[200]={250,252,257,266,278,293,312,334,360,389,421,457,496,538,583,631,683,737,795,855,
    918,984,1053,1125,1199,1275,1354,1435,1519,1605,1693,1783,1875,1968,2064,2161,2260,2360,2462,2564,
    2668,2774,2880,2986,3094,3202,3311,3421,3530,3640,3750,3860,3970,4079,4189,4298,4406,4514,4620,4726,
    4832,4936,5038,5140,5240,5339,5436,5532,5625,5717,5807,5895,5981,6065,6146,6225,6301,6375,6447,6516,
    6582,6645,6705,6763,6817,6869,6917,6962,7004,7043,7079,7111,7140,7166,7188,7207,7222,7234,7243,7248,
    7250,7248,7243,7234,7222,7207,7188,7166,7140,7111,7079,7043,7004,6962,6917,6869,6817,6763,6705,6645,
    6582,6516,6447,6375,6301,6225,6146,6065,5981,5895,5807,5717,5625,5532,5436,5339,5240,5140,5038,4936,
    4832,4726,4620,4514,4406,4298,4189,4079,3970,3860,3750,3640,3530,3421,3311,3202,3094,2986,2880,2774,
    2668,2564,2462,2360,2260,2161,2064,1968,1875,1783,1693,1605,1519,1435,1354,1275,1199,1125,1053,984,
    918,855,795,737,683,631,583,538,496,457,421,389,360,334,312,293,278,266,257,252};

    EPwm1Regs.CMPA.half.CMPA = c[i];
    EPwm1Regs.CMPB = c[i+1];
    i++;
    if(i == 200) i=0;
    }



    but the value of CMPA doesn't change. I appreciate your help.

    Regards,
    Pouriya.
  • You are declaring i within the interrupt routine. It has no memory of what the previous value was.
  • This also didn't work:
    in c file:

    void spwm(void)
    {
    int c[200]={250,252,257,266,278,293,312,334,360,389,421,457,496,538,583,631,683,737,795,855,
    918,984,1053,1125,1199,1275,1354,1435,1519,1605,1693,1783,1875,1968,2064,2161,2260,2360,2462,2564,
    2668,2774,2880,2986,3094,3202,3311,3421,3530,3640,3750,3860,3970,4079,4189,4298,4406,4514,4620,4726,
    4832,4936,5038,5140,5240,5339,5436,5532,5625,5717,5807,5895,5981,6065,6146,6225,6301,6375,6447,6516,
    6582,6645,6705,6763,6817,6869,6917,6962,7004,7043,7079,7111,7140,7166,7188,7207,7222,7234,7243,7248,
    7250,7248,7243,7234,7222,7207,7188,7166,7140,7111,7079,7043,7004,6962,6917,6869,6817,6763,6705,6645,
    6582,6516,6447,6375,6301,6225,6146,6065,5981,5895,5807,5717,5625,5532,5436,5339,5240,5140,5038,4936,
    4832,4726,4620,4514,4406,4298,4189,4079,3970,3860,3750,3640,3530,3421,3311,3202,3094,2986,2880,2774,
    2668,2564,2462,2360,2260,2161,2064,1968,1875,1783,1693,1605,1519,1435,1354,1275,1199,1125,1053,984,
    918,855,795,737,683,631,583,538,496,457,421,389,360,334,312,293,278,266,257,252};

    EPwm1Regs.CMPA.half.CMPA = c[i];
    EPwm1Regs.CMPB = c[i+1];
    i++;
    if(i == 200) i=0;
    }


    in defaltisr.c file:


    interrupt void EPWM1_INT_ISR(void) // EPWM-1
    {
    // Insert ISR Code here

    // To receive more interrupts from this PIE group, acknowledge this interrupt
    // PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;

    extern spwm();
    EPwm1Regs.ETCLR.bit.INT = 1;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
    IER |= M_INT3;
    }


    how should I link variables between c/main_c and defaultisr.c?

    Regards,
    Pouriya
  • Reference how they did it in this project.
    C:\ti\controlSUITE\device_support\F2837xS\v210\F2837xS_examples_Cpu1\adc_soc_epwm_tempsensor\cpu01