PWM模块死区延时问题



最近在做一个项目,用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);

}