TMS320F280049: F280049的Epwm7 TBPHS设置值生效,实际波形未移相

Part Number: TMS320F280049

F280049的Epwm7 TBPHS设置值生效,实际波形未移相:

CCS Debug查看了TBPHS寄存器,值是正常的,示波器看Epwm1A和Epwm7A是同相位的,是哪里配置错了吗?28377D和28335都是这么配置的正常。

下面是配置文件:

void EpwmModule1(void)
{
EPwm1Regs.TBCTR = 0; //Clear counter
EPwm1Regs.TBPRD = (Uint16)(PWM_MODULE_FREQUENCY/DAB_EXECUTE_FREQUENCY-1);
EPwm1Regs.CMPA.bit.CMPA = (Uint16)(0.5f*(PWM_MODULE_FREQUENCY/DAB_EXECUTE_FREQUENCY-1)); //adjust duty;
//Phase register;
EPwm1Regs.TBPHS.bit.TBPHS = 0;
//EPwm1Regs.TBPHS.bit.TBPHS = (Uint16)(0.0f*(PWM_MODULE_FREQUENCY/DAB_EXECUTE_FREQUENCY-1));
//Init time base;
EPwm1Regs.TBCTL.bit.PHSDIR = TB_UP; //Count UP on sync (=0 degree)
EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; //0x1
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; //PWM module clock prescale,1:1
EPwm1Regs.TBCTL.bit.CLKDIV = 0; //PWM module clock postscale,1:1
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; //0, shadow register

//Init duty control register;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//Set action
EPwm1Regs.AQCTLA.all=0x0000;
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;

//init software force register;
EPwm1Regs.AQSFRC.bit.RLDCSF = 2; //Load on event equals zero or equals period;
EPwm1Regs.AQSFRC.bit.ACTSFB = 0; //Action disable;
EPwm1Regs.AQSFRC.bit.ACTSFA = 0; //Action disable;
EPwm1Regs.AQCSFRC.bit.CSFA = 0; //Force disable;
EPwm1Regs.AQCSFRC.bit.CSFB = 0; //Force disable;
//Init deadband register;
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; //0x3;
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //0x3;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //2,
EPwm1Regs.DBFED.bit.DBFED = (Uint16)(PWM_MODULE_FREQUENCY*DAB_DEAD_BAND_TIME/1000000.0f);
EPwm1Regs.DBRED.bit.DBRED = (Uint16)(PWM_MODULE_FREQUENCY*DAB_DEAD_BAND_TIME/1000000.0f);
//Init PWM interrupt;
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //Orginal is ET_CTR_PRD,2014.04.03; //2,
EPwm1Regs.ETPS.bit.INTPRD = EPWM_INTPRD;
EPwm1Regs.ETCLR.bit.INT = 1;
EPwm1Regs.ETSEL.bit.INTEN = 1;
//Init AD trig;
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_PRD; //Orginal is ET_CTR_ZERO,2014.04.03;
EPwm1Regs.ETPS.bit.SOCAPRD = EPWM_INTPRD;
EPwm1Regs.ETCLR.bit.SOCA = 1;
EPwm1Regs.ETCLR.bit.SOCB = 0;
EPwm1Regs.ETSEL.bit.SOCAEN = 1;
EPwm1Regs.ETSEL.bit.SOCBEN = 0;
//Init TZ
EALLOW;

EPwm1Regs.TZSEL.all = 0x0000;
EPwm1Regs.TZSEL.bit.OSHT1 = 1;
EPwm1Regs.TZSEL.bit.OSHT2 = 1;
EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_LO; //2
EPwm1Regs.TZCTL.bit.TZB = TZ_FORCE_LO; //2
EPwm1Regs.TZCLR.bit.OST = 1;
EPwm1Regs.TZCLR.bit.INT = 1;
EPwm1Regs.TZEINT.bit.OST = 0;
EPwm1Regs.TZFRC.bit.OST = 1;

//Init chop;
EPwm1Regs.PCCTL.bit.CHPEN = CHP_DISABLE;
EDIS;
}

void EpwmModule7(void)
{
EPwm7Regs.TBCTR = 0; //Clear counter
EPwm7Regs.TBPRD = (Uint16)(PWM_MODULE_FREQUENCY/DAB_EXECUTE_FREQUENCY-1);
EPwm7Regs.CMPA.bit.CMPA = (Uint16)(0.5f*(PWM_MODULE_FREQUENCY/DAB_EXECUTE_FREQUENCY-1)); //adjust duty;
//Phase register;
// EPwm7Regs.TBPHS.bit.TBPHS = 0;
EPwm7Regs.TBPHS.bit.TBPHS = (Uint16)(0.5f*(PWM_MODULE_FREQUENCY/DAB_EXECUTE_FREQUENCY-1));
//Init time base;
EPwm7Regs.TBCTL.bit.PHSDIR = TB_UP; //Count UP on sync (=0 degree)
EPwm7Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; //0x1
EPwm7Regs.TBCTL.bit.HSPCLKDIV = 0; //PWM module clock prescale,1:1
EPwm7Regs.TBCTL.bit.CLKDIV = 0; //PWM module clock postscale,1:1
EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm7Regs.TBCTL.bit.PRDLD = TB_SHADOW; //0, shadow register

//Init duty control register;
EPwm7Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm7Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm7Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm7Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//Set action
EPwm7Regs.AQCTLA.all=0x0000;

EPwm7Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm7Regs.AQCTLA.bit.CAU = AQ_CLEAR

//init software force register;
EPwm7Regs.AQSFRC.bit.RLDCSF = 2; //Load on event equals zero or equals period;
EPwm7Regs.AQSFRC.bit.ACTSFB = 0; //Action disable;
EPwm7Regs.AQSFRC.bit.ACTSFA = 0; //Action disable;
EPwm7Regs.AQCSFRC.bit.CSFA = 0; //Force disable;
EPwm7Regs.AQCSFRC.bit.CSFB = 0; //Force disable;
//Init deadband register;
EPwm7Regs.DBCTL.bit.IN_MODE = DBA_ALL; //0x3;
EPwm7Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //0x3;
EPwm7Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //2,
EPwm7Regs.DBFED.bit.DBFED = (Uint16)(PWM_MODULE_FREQUENCY*DAB_DEAD_BAND_TIME/1000000.0f);
EPwm7Regs.DBRED.bit.DBRED = (Uint16)(PWM_MODULE_FREQUENCY*DAB_DEAD_BAND_TIME/1000000.0f);
//Init PWM interrupt;
EPwm7Regs.ETSEL.bit.INTEN = 0;
//Init AD trig;
EPwm7Regs.ETSEL.bit.SOCAEN = 0;
EPwm7Regs.ETSEL.bit.SOCBEN = 0;
//Init TZ
EALLOW;

EPwm7Regs.TZSEL.all = 0x0000;
EPwm7Regs.TZSEL.bit.OSHT1 = 1;
EPwm7Regs.TZSEL.bit.OSHT2 = 1;
EPwm7Regs.TZCTL.bit.TZA = TZ_FORCE_LO; //2
EPwm7Regs.TZCTL.bit.TZB = TZ_FORCE_LO; //2
EPwm7Regs.TZCLR.bit.OST = 1;
EPwm7Regs.TZCLR.bit.INT = 1;
EPwm7Regs.TZEINT.bit.OST = 0;
EPwm7Regs.TZFRC.bit.OST = 1;

//Init chop;
EPwm7Regs.PCCTL.bit.CHPEN = CHP_DISABLE;
EDIS;
}

#define PWM_MODULE_FREQUENCY 100000000.0f
#define DAB_EXECUTE_FREQUENCY 60000.0f

  • 您好

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待

  • 您好

    请注意,某些设备中的EPWM(增强型脉宽调制)版本/类型之间存在差异(随着设备的发展,我们有时会向外设添加/移除功能)。PWM(脉宽调制)的同步方案在不同版本之间也发生了变化。EPWM模块以前都是通过菊花链连接的,但后来被分成了不同的组。

    在F28004x中,EPWM实例被分为同步组(参见TRM第18.4.3.3节“时基计数器同步”,特别是图18-7“时基计数器同步方案”):EPWM 1/2/3分为一组,EPWM4/5/6分为一组,EPWM 7/8分为一组。如果您希望实现组间的相移同步,则需要配置EPWM同步选择寄存器以实现跨组同步。

    EPWM的SYNCSELECT寄存器控制每个组组长(如EPWM4、EPWM7)使用哪个同步源,并确保该同步源仅在该组内传递。因此,您必须根据您希望如何在PWM组之间连接同步方案来配置此SYNCSELECT寄存器。