Part Number: TMS320F28069
Hello,
I hope everyone is safe and doing well during this time of Pendamic and hpe that all would be well in the days to follow.
I am having some dilemma in configuring the PWM Routine.
//
// Included Files
//
#include "F2806x_Device.h" // F2806x Headerfile
#include "F2806x_Examples.h" // F2806x Examples Headerfile
#include "F2806x_EPwm_defines.h" // useful defines for initialization
//
// Function prototypes
//
void HRPWM1_Config(Uint16);
void HRPWM2_Config(Uint16);
//
// Main
//
void main(void)
{
InitSysCtrl();
InitEPwm1Gpio();
InitEPwm2Gpio();
InitEPwm3Gpio();
InitEPwm4Gpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
EPwm1Regs.TBPRD = 2000; // Period = 2´600 TBCLK counts
//EPwm1Regs.TBPHS = 0; // Set Phase register to zero
EPwm1Regs.TBCTR = 0; // clear TB counter
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetric
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Phase loading disabled
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // TBCLK = SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
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;
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CBD = AQ_SET;
// Run Time
// = = = = = = = = = = = = = = = = = = = = = = = =
// Initialization Time
// = = = = = = = = = = = = = = = = = = = = = = = =
EPwm2Regs.TBPRD = 2000; // Period = 2´600 TBCLK counts
// EPwm2Regs.TBPHS = 0; // Set Phase register to zero
EPwm2Regs.TBCTR = 0; // clear TB counter
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetric
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Phase loading disabled
EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // TBCLK = SYSCLKOUT
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
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;
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;
EPwm2Regs.AQCTLB.bit.CBD = AQ_SET;
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
EPwm1Regs.CMPA.half.CMPA = 100; // adjust duty for output EPWM1A
EPwm1Regs.CMPB = 0; // adjust duty for output EPWM1B
EPwm2Regs.CMPA.half.CMPA = 100 ; // adjust duty for output EPWM1A
EPwm2Regs.CMPB = 0; // adjust duty for output EPWM1B
while (1)
{
}
}
In the above code I have Set the Frequency at 22 KHZ but I am bit confused in setting up the variable to output.
EPwm1Regs.CMPA.half.CMPA = 0; // adjust duty for output EPWM1A
EPwm1Regs.CMPB = 0; // adjust duty for output EPWM1B
EPwm2Regs.CMPA.half.CMPA = 0; // adjust duty for output EPWM1A
EPwm2Regs.CMPB = 0; // adjust duty for output EPWM1B
SITUATION ONE
A---High Side Mosfet (CMPA.half.CMPA = 100)--->|********************|<------High Side Mosfet (CMPA.half.CMPA = 0---------------C
| |
| IR2110 |
| MOSFET |
| |
D--LowSide Mosfet (CMPB = 0)-----------------> |********************|<-----Low Side Mosfet (CMPB = 100)------------------------B
SITUATION TWO
A---High Side Mosfet (CMPA.half.CMPA = 0)----->|********************|<-----High Side Mosfet (CMPA.half.CMPA = 100-------------C
| |
| IR2110 |
| MOSFET |
| |
D---LowSide Mosfet (CMPB = 100)--------------> |********************|<-----Low Side Mosfet (CMPB = 0)--------------------------B
As shown above these are the two scenarios for an h-bridge to work in reverse and forward direction, So I need to know how to properly assign the values of theEPwm1Reg & EPwm2Regs Registers.