TMS320F280049: H_PWM-L_ON波形的EPWM寄存器配置

Part Number: TMS320F280049
Other Parts Discussed in Thread: CONTROLSUITE

Dear TI support:

根据应用场景,280049的三路EPWM需要配置如下图所示的波形,官方并无此配置。

但是从C:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.0\HVBLDC_Sensored可以看到这种配置,但是移植过来并无作用,似乎配置得并不完整。

如EPwm3Regs.AQCTLA.all = BLDCPWM_AQCTLA_INIT_STATE; 

            #define  BLDCPWM_AQCTLA_INIT_STATE  CAU_SET 

这是显然不对的。

所以我自己配置了一段240049的EPWM寄存器,但是PWM波形换相有比较大的延时。请问官方是否有这样的准确标准的配置波形?

以下是我的配置寄存器,麻烦你帮我看看有什么地方不对的。

void configHRPWM(uint16_t period)
{
uint16_t j=0;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the EPWM
EDIS;
for(j=0; j<PWM_CH; j++){
(*ePWM[j]).TBCTL.bit.PRDLD = TB_IMMEDIATE;//TB_SHADOW; // set Shadow load
(*ePWM[j]).TBPRD = period-1; // PWM frequency = 1/(2*TBPRD)
(*ePWM[j]).CMPA.bit.CMPA =0;//period/2;//- period / 20; // set duty 50% initially
(*ePWM[j]).CMPA.bit.CMPAHR = (1 << 8); // initialize HRPWM extension
(*ePWM[j]).CMPB.bit.CMPB = 0;//period- period / 20; // set duty 50% initially
(*ePWM[j]).CMPB.all |= 1;
(*ePWM[j]).TBPHS.all = 0;
(*ePWM[j]).TBCTR = 0;
(*ePWM[j]).TBCTL.bit.CTRMODE =TB_COUNT_UP;//TB_COUNT_UPDOWN;// //// Select up-downTB_COUNT_UP;// // count mode
(*ePWM[j]).TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
(*ePWM[j]).TBCTL.bit.PHSEN = TB_DISABLE;
(*ePWM[j]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
(*ePWM[j]).TBCTL.bit.CLKDIV = TB_DIV1; // TBCLK = SYSCLKOUT
(*ePWM[j]).TBCTL.bit.FREE_SOFT = 3;

(*ePWM[j]).CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // LOAD CMPA on CTR = 0
(*ePWM[j]).CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
(*ePWM[j]).CMPCTL.bit.SHDWAMODE = CC_IMMEDIATE;//CC_SHADOW;
(*ePWM[j]).CMPCTL.bit.SHDWBMODE = CC_IMMEDIATE;//CC_SHADOW;

(*ePWM[j]).AQCTLA.bit.CAU =AQ_CLEAR;//AQ_SET;//AQ_CLEAR; ; // PWM toggle high/low
(*ePWM[j]).AQCTLA.bit.CAD =AQ_SET ;//AQ_CLEAR;//AQ_SET ;

(*ePWM[0]).ETSEL.bit.INTSEL=ET_CTRU_CMPB; //Event Trigger Select,在计数到0触发EPWM4中断
(*ePWM[0]).ETSEL.bit.INTEN =1; //ET使能
(*ePWM[0]).ETPS.bit.INTPRD =ET_1ST; //first event generate an interrupt

(*ePWM[0]).ETSEL.bit.SOCASEL = ET_CTR_ZERO;//ET_CTRU_CMPB;// ET_CTRU_CMPA;// 选择EPWMx_SOCA产生的条件:TBCTR=ET_CTRU_CMPA时产生
(*ePWM[0]).ETPS.bit.SOCAPRD = ET_1ST; //ePWM触发采样(EPWMx_SOCA)周期选择:每发生1次事件产生中断信号EPWMx_SOCA
(*ePWM[0]).ETSEL.bit.SOCAEN = 1; //使能产生触发采样信号EPWMx_SOCA
(*ePWM[0]).ETCLR.bit.SOCA =1;

}
EALLOW;
PieVectTable.EPWM4_INT=&epwm4_isr; //将中断服务子函数的地址存放到相应的向量地址中
EDIS;
IER|= M_INT3; //CPU级∶使能CPU级的中断信号
PieCtrlRegs.PIEIER3.bit.INTx4=1;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;

}

void epwm_hpwm_lon(Uint16 ch1pwm,Uint16 ch2lon,Uint16 ch3low,Uint16 pwm){

(*ePWM[ch1pwm]).AQCSFRC.bit.CSFA = 0; /* Forcing disabledd on output A of EPWM1 */
(*ePWM[ch1pwm]).AQCTLA.bit.CAU = 2; /* Set high when CTR = CMPA on UP-count */
(*ePWM[ch1pwm]).AQCTLA.bit.ZRO = 1; /* Set low when CTR = Zero */
(*ePWM[ch1pwm]).CMPA.bit.CMPA =PWM_TB_PERIOD-pwm; /* PWM signal on output A of EPWM1 (Q15 -> Q0) */
(*ePWM[ch1pwm]).AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM1 */

(*ePWM[ch2lon]).AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM2 */
(*ePWM[ch2lon]).AQCSFRC.bit.CSFB = 2; /* Forcing a continuous High on output B of EPWM2 */

(*ePWM[ch3low]).AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM3 */
(*ePWM[ch3low]).AQCSFRC.bit.CSFB = 1;

}

我查看了霍尔波形和pwm波形,换相时,H_PWM和L_ON没有立即生效。这个在哪里改呢