TI中文支持网
TI专业的中文技术问题搜集分享网站

关于开通PWM首个周期波形不确定问题

我的程序是1s开通PWM,1s关断PWM,开通时PWM出现首个周期不确定(有点像随机情况),如下图:

//初始化PWM

void InitEPwm2()
{
   // Setup TBCLK
   EPwm2Regs.TBPRD =EPWM2_TIMER_TBPRD; //600;          // Set timer period 801 TBCLKs
   EPwm2Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0
   EPwm2Regs.TBCTR = 0x0000;                      // Clear counter
   EPwm2Regs.TBCTL.bit.PRDLD = 0;
     // Set Compare values
   EPwm2Regs.CMPA.half.CMPA = EPWM2_MIN_CMPA;//324;//;     // Set compare A value
   EPwm2Regs.CMPB = EPWM2_MIN_CMPB;//276;//;               // Set Compare B value
     // Setup counter mode
   EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
   EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading
   EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;       // Clock ratio to SYSCLKOUT
   EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;//0x0-1分频,TBCLK = SYSCLKOUT / (HSPCLKDIV × CLKDIV)

   // Setup shadowing
   EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
   EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
   EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;  // Load on Zero
   EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;  

   // Action Qualifier SubModule Registers
   EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//AQ_CLEAR;
   EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;//AQ_SET;
   EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;
   EPwm2Regs.AQCTLB.bit.CBD = AQ_SET;

 // Interrupt where we will change the Compare Values
 EPwm2Regs.ETSEL.bit.INTSEL = ET_CTRD_CMPA;//ET_CTR_ZERO;    // Select INT on Zero event
 EPwm2Regs.ETSEL.bit.INTEN = 1;    // Enable INT
 EPwm2Regs.ETPS.bit.INTPRD = ET_3RD;   // Generate INT on 3rd event  

   EALLOW; 
//===========================================================================
// TZA events can force EPWMxA
// TZB events can force EPWMxB

 EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_LO; // EPWM1A will go low  //故障产生时的保护
 EPwm2Regs.TZCTL.bit.TZB = TZ_FORCE_LO; // EPWM1B will go low 
 EPwm2Regs.TZFRC.bit.OST = 1;   // Turn off the PWM

 EDIS;

}

//开通PWM代码

EALLOW;EPwm2Regs.TZCLR.bit.OST = 1;EDIS;

//关断PWM

EALLOW; 
       EPwm2Regs.TZFRC.bit.OST = 1; 
       EDIS;

1.求解是不是那个地方配置有问题?

2.TBCTR = 0,写时基寄存器,TBCTR 寄存器什么时候有效,它又没有映像寄存器?

 

mangui zhang:

你再找找    应该有一个初始强制高或低的寄存器位

这个可以解决你的这种随机问题

我的程序是1s开通PWM,1s关断PWM,开通时PWM出现首个周期不确定(有点像随机情况),如下图:

//初始化PWM

void InitEPwm2()
{
   // Setup TBCLK
   EPwm2Regs.TBPRD =EPWM2_TIMER_TBPRD; //600;          // Set timer period 801 TBCLKs
   EPwm2Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0
   EPwm2Regs.TBCTR = 0x0000;                      // Clear counter
   EPwm2Regs.TBCTL.bit.PRDLD = 0;
     // Set Compare values
   EPwm2Regs.CMPA.half.CMPA = EPWM2_MIN_CMPA;//324;//;     // Set compare A value
   EPwm2Regs.CMPB = EPWM2_MIN_CMPB;//276;//;               // Set Compare B value
     // Setup counter mode
   EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
   EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading
   EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;       // Clock ratio to SYSCLKOUT
   EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;//0x0-1分频,TBCLK = SYSCLKOUT / (HSPCLKDIV × CLKDIV)

   // Setup shadowing
   EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
   EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
   EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;  // Load on Zero
   EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;  

   // Action Qualifier SubModule Registers
   EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//AQ_CLEAR;
   EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;//AQ_SET;
   EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;
   EPwm2Regs.AQCTLB.bit.CBD = AQ_SET;

 // Interrupt where we will change the Compare Values
 EPwm2Regs.ETSEL.bit.INTSEL = ET_CTRD_CMPA;//ET_CTR_ZERO;    // Select INT on Zero event
 EPwm2Regs.ETSEL.bit.INTEN = 1;    // Enable INT
 EPwm2Regs.ETPS.bit.INTPRD = ET_3RD;   // Generate INT on 3rd event  

   EALLOW; 
//===========================================================================
// TZA events can force EPWMxA
// TZB events can force EPWMxB

 EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_LO; // EPWM1A will go low  //故障产生时的保护
 EPwm2Regs.TZCTL.bit.TZB = TZ_FORCE_LO; // EPWM1B will go low 
 EPwm2Regs.TZFRC.bit.OST = 1;   // Turn off the PWM

 EDIS;

}

//开通PWM代码

EALLOW;EPwm2Regs.TZCLR.bit.OST = 1;EDIS;

//关断PWM

EALLOW; 
       EPwm2Regs.TZFRC.bit.OST = 1; 
       EDIS;

1.求解是不是那个地方配置有问题?

2.TBCTR = 0,写时基寄存器,TBCTR 寄存器什么时候有效,它又没有映像寄存器?

 

user1333144:

找到原因解决了吗?感觉是和OST的时间点有关系

赞(0)
未经允许不得转载:TI中文支持网 » 关于开通PWM首个周期波形不确定问题
分享到: 更多 (0)