最近在做一个项目,用4个PWM信号驱动4块IGBT,需要产生一组同步的信号。通过配置可以产生图片上半部分的同步信号,使用的递减模式。为增加系统的可靠性需要添加死区延时,如图片下半部分所示,有比较好的解决方案吗,求指点。
附图说明:
附PWM初始化配置:
void PWMInit(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);
SysCtlPWMClockSet(SYSCTL_PWMDIV_1); // PWM时钟源1分频 80MHz
PWMGenDisable(PWM_BASE,PWM_GEN_1);
PWMGenDisable(PWM_BASE,PWM_GEN_2);
//PWM2 PF2 PWM3 PF3
GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_2); // 硬件功能,2MA,弱上拉
GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_3);
GPIOPinConfigure(GPIO_PF2_PWM2);
GPIOPinConfigure(GPIO_PF3_PWM3);
//PWM4 PE0 PWM5 PE1
GPIOPinTypePWM(GPIO_PORTE_BASE, GPIO_PIN_0); // 硬件功能,2MA,弱上拉
GPIOPinTypePWM(GPIO_PORTE_BASE, GPIO_PIN_1);
GPIOPinConfigure(GPIO_PE0_PWM4);
GPIOPinConfigure(GPIO_PE1_PWM5);
/****************************************************************************************************
PWMGen1
*****************************************************************************************************/
/*配置PWM*/
PWMGenConfigure(PWM_BASE,PWM_GEN_1,PWM_GEN_MODE_SYNC
|PWM_GEN_MODE_DOWN
|PWM_GEN_MODE_GEN_SYNC_GLOBAL
|PWM_GEN_MODE_FAULT_UNLATCHED
|PWM_GEN_MODE_FAULT_LEGACY
|PWM_GEN_MODE_FAULT_MINPER);
HWREG(PWM_BASE+PWM_O_1_GENA)=0X008C;
HWREG(PWM_BASE+PWM_O_1_GENB)=0X08C0;
/*开启输出 PWMGen1*/
PWMOutputState(PWM_BASE,PWM_OUT_2_BIT,true);
PWMOutputState(PWM_BASE,PWM_OUT_3_BIT,true);
PWMGenEnable(PWM_BASE,PWM_GEN_1);
/****************************************************************************************************
PWMGen2
*****************************************************************************************************/
/*配置PWM*/
PWMGenConfigure(PWM_BASE,PWM_GEN_2,PWM_GEN_MODE_SYNC
|PWM_GEN_MODE_DOWN
|PWM_GEN_MODE_GEN_SYNC_GLOBAL
|PWM_GEN_MODE_FAULT_UNLATCHED
|PWM_GEN_MODE_FAULT_LEGACY
|PWM_GEN_MODE_FAULT_MINPER);
HWREG(PWM_BASE+PWM_O_2_GENA)=0X08C0;
HWREG(PWM_BASE+PWM_O_2_GENB)=0X0C02;
/*开启输出 PWMGen2*/
PWMOutputState(PWM_BASE,PWM_OUT_4_BIT,true);
PWMOutputState(PWM_BASE,PWM_OUT_5_BIT,true);
PWMGenEnable(PWM_BASE,PWM_GEN_2);
HWREG(PWM_BASE + PWM_O_1_LOAD)=CMPA_T_hht1;
HWREG(PWM_BASE + PWM_O_1_CMPA)=CMPA_T_hht1*3/4;
HWREG(PWM_BASE + PWM_O_1_CMPB)=CMPA_T_hht1*2/4;
HWREG(PWM_BASE + PWM_O_2_LOAD)=CMPA_T_hht1;
HWREG(PWM_BASE + PWM_O_2_CMPA)=CMPA_T_hht1*2/4;
HWREG(PWM_BASE + PWM_O_2_CMPB)=CMPA_T_hht1*1/4;
PWMSyncUpdate(PWM_BASE,PWM_GEN_1_BIT|PWM_GEN_2_BIT);
PWMSyncTimeBase(PWM_BASE,PWM_GEN_1_BIT|PWM_GEN_2_BIT);
}
