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,
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,
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