早上好。
我先设置 PWM、然后将 GPIO 设置为 PWM 功能。
此时、将出现 PWM 输出。
PWM 模式如下所示。
频率:50kHz
模式:向上向下
TBPRD:100M/50k/2=1000
DBRD 和 FED:TBPRD x 2 = 2000
初始化顺序如下:
void device_init (void)
{
Dint;
IER = 0x0000;
IFR = 0x0000;
InitSysCtrl();
PWM_peripheral_clock_stop ();
PWM_init();
PWM_GPIO_init ();
grid_PWM_protection_init ();
PWM_PERFICE_CLOCK_START ();
interrupt_init();
interrupt_enable();
}
PWM 设置如下所示。
void PWM_init (void)
{
EALLOW;
EPwm7Regs.TBCTL.bit.PRDLD = 0;
EPwm7Regs.TBPRD =((uint16)(grid_PWM_PERIOD)>> 1);
EPwm7Regs.TBCTR = 0;
EPwm7Regs.TBPHS.bit.TBPHS = 0;
EPwm7Regs.TBCTL.bit.CTRMODE = 2;
EPwm7Regs.TBCTL.bit.CLKDIV = 0;
EPwm7Regs.TBCTL.bit.HSPCLKDIV = 0;
EPwm7Regs.CMPA.bit.CMPA = 0;
EPwm7Regs.CMPCTL.bit.LOADASYS = 0;
EPwm7Regs.CMPCTL.bit.LOADAMODE = 0;
EPwm7Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm7Regs.AQCTLA.ALL = 0;
EPwm7Regs.AQCTLA.bit.CAU = 1;
EPwm7Regs.AQCTLA.bit.CAD = 3;
EPwm7Regs.AQCTLA.bit.ZRO = 2;
EPwm7Regs.DBCTL2.bit.SHDWDBCTLMODE = 1;
EPwm7Regs.DBCTL2.bit.LOADDBCTLMODE = 0;
EPwm7Regs.DBCTL.bit.LOADREMODE = 1;
EPwm7Regs.DBCTL.bit.LOADFEDMODE = 0;
EPwm7Regs.DBCTL.bit.HALFCYCLE = 0;
EPwm7Regs.DBRED.bit.DBRED = GGE_PWM_PERIOD;
EPwm7Regs.DBFED.bit.DBFED = GRGE_PWM_PERIOD;
EPwm7Regs.DBCTL.bit.OUT_MODE = 3;
EPwm7Regs.DBCTL.bit.IN_MODE = 0;
EPwm7Regs.DBCTL.bit.DEDB_MODE = 0;
EPwm7Regs.DBCTL.bit.POLSEL = 2;
EPwm7Regs.TBCTL.bit.PHSEN = 0;
EPwm7Regs.TBCTL.bit.SYNCOSEL = 1;
EPwm7Regs.TZFRC.bit.OST = 1;
EPwm7Regs.AQSFRC.bit.RLDSF = CLR;
//EPwm7Regs.AQCSFRC.bit.CSFA = 1;
//EPwm7Regs.AQCSFRC.bit.CSFB = 1;
EDIS;
}
GPIO 设置如下。
void PWM_GPIO_init (void)
{
EALLOW;
GpioDataRegs.GPADAT.bit.GPIO12=0;
GpioDataRegs.GPADAT.bit.GPIO13 = 0;
GpioDataRegs.GPACLEAR.bit.GPIO12=1;
GpioDataRegs.GPACLEAR.bit.GPIO13=1;
GpioCtrlRegs.GPADIR.bit.GPIO12=1;
GpioCtrlRegs.GPADIR.bit.GPIO13 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO12=0;
GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO12=1;//执行此部分时、PWM 输出发生。
GpioCtrlRegs.GPAMUX1.bit.GPIO13=1;//执行此部分时、PWM 输出发生。
EDIS;
}
PWM 跳闸设置如下所示。
void PWM_protection_init (void)
{
EALLOW;
///------------------ //
//---- ePWM7配置--- //
///------------------ //
//数字比较跳闸选择寄存器
EPwm7Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3;
EPwm7Regs.DCTRIPSEL.bit.DCALCOMPSEL = 4;
EPwm7Regs.DCTRIPSEL.bit.DCBHCOMPSEL = 6;
//Trip Zone 数字比较器选择寄存器
EPwm7Regs.TZDCSEL.bit.DCAEVT1 = 2;
EPwm7Regs.TZDCSEL.bit.DCAEVT2 = 4;
EPwm7Regs.TZDCSEL.bit.DCBEVT1 = 2;
//数字比较 A/B 控制寄存器
EPwm7Regs.DCACTL.bit.EVT1SRCSEL = 0;
EPwm7Regs.DCACTL.bit.EVT2SRCSEL = 0;
EPwm7Regs.DCBCTL.bit.EVT1SRCSEL = 0;
EPwm7Regs.DCACTL.bit.EVT1FRCSYNCSEL = 0;
EPwm7Regs.DCACTL.bit.EVT2FRCSYNCSEL = 0;
EPwm7Regs.DCBCTL.bit.EVT1FRCSYNCSEL = 0;
//TRIP 区域选择寄存器
EPwm7Regs.TZSEL.bit.DCAEVT1 = 1;
EPwm7Regs.TZSEL.bit.DCAEVT2 = 1;
EPwm7Regs.TZSEL.bit.DCBEVT1 = 1;
EPwm7Regs.TZSEL.bit.CBC6 = 1;
//TRIP 区域控制寄存器
EPwm7Regs.TZCTL.bit.TZA = 2;//执行此部件时、PWM 输出为低电平。
EPwm7Regs.TZCTL.bit.TSB = 2; //执行此部件时、PWM 输出为低电平。
//跳匣区域清除寄存器
EPwm7Regs.TZCLR.bit.OST = 1;
EPwm7Regs.TZCLR.bit.DCAEVT1 = 1;
EPwm7Regs.TZCLR.bit.DCAEVT2 = 1;
EPwm7Regs.TZCLR.bit.DCBEVT1 = 1;
//TRIP Znoe 强制寄存器
EPwm7Regs.TZFRC.bit.OST = 1;
EDIS;
}
黄色:PWM 输出 A (Vgs、高侧 FET)
蓝色:PWM 输出 B (Vgs、低侧 FET)