1

I am working on vector control of PMSM. I've got a problem with the dead-band module, and I don't understand what I'm actually doing wrong here. The register setting for EPWM modules 1 and 2 is given as follows:

For EPWM module 1 configuration

  EPwm1Regs.TBPRD = PERIOD;// Period =  TBCLK counts
  EPwm1Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero
  EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetrical mode
  EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Master module
  EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
  EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // Sync down-stream module
  EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
  EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
  EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
  EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
  EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // set actions for EPWM1A
  EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
  EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
  EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary
  EPwm1Regs.DBFED = DEAD_TIME; //
  EPwm1Regs.DBRED = DEAD_TIME; //

For EPWM Module 2 Configuration

  EPwm2Regs.TBPRD = PERIOD; // Period = 1600 TBCLK counts
  EPwm2Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero
  EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetrical mode
  EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Slave module
  EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
  EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // sync flow-through
  EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
  EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
  EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
  EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
  EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // set actions for EPWM2A
  EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
  EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
  EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary
  EPwm2Regs.DBFED = DEAD_TIME; //
  EPwm2Regs.DBRED = DEAD_TIME; //

I'm following an example (3.4) from the technical manual "sprug04a." the compare values are initially initialized as

  EPwm1Regs.CMPA.half.CMPA = 0; // adjust duty for output EPWM1A
  EPwm2Regs.CMPA.half.CMPA = 0; // adjust duty for output EPWM2A

and compare values are updated in the code like:

    EPwm1Regs.CMPA.half.CMPA = PERIOD - Sa;
    EPwm2Regs.CMPA.half.CMPA = PERIOD - Sb;
    

where S_ab are the values obtained from modulation technique.

EPWM2 module is working well but EPWM1 isn't working. we are suppose to have EPWM1A complimentary signal across EPWM1B but EPWM1B shows same as EPWM1A. The scope is attached for better understanding. Need recommendation in this regards.EPWM1A&B EPWM2A&B reference, what should i need to check? as i checked technical manual and example codes but still i didnt get what i am doing wrong. Your suggestions will be valuable in this regards.

0 Answers0