This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F2808 PWM丢失脉冲



PWM1作为基准模块输出、PWM2作为移相输出。移相相位由小到大变化没问题,有大变小时,每次在一特定的时刻PWM2丢失一组脉冲。具体图形如下。

紫色与绿色波形。紫色、绿色波形有一个区间各自维持了1.5倍周期的高电平和低电平。

初始化代码与TI官方手册基本相同。

参数说明:

角度X范围0-180°

周期值PRD;2500-5000(频率10K-20K)

占空比CMP = PRD >> 1;

相位PHS = X * PRD / 180;


PWM1A:最上面一对“蓝色”

PWM1B:最上面一对“黄色”

PWM2A:最下面一对“紫色”(缺一个脉冲)

PWM2B:最上面一对“绿色”(缺一个脉冲)

移相相位PHS 由小到大变化没问题,有大变小时,每次在一特定的时刻

标记的图形:如下

PWM初始化代码:PWM1、PWM2周期与占空比相同、相位不同

EPwm1Regs.TBPRD = PRD; // Period = 1201 TBCLK counts
EPwm1Regs.CMPA = CMP ; // Set 50% fixed duty for EPWM1A

EPwm1Regs.CMPB.half.CMPB = CMP ; // Set 50% fixed duty EPWM1B
EPwm1Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Asymmetrical mode
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Master module
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // Sync down-stream module
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // set actions for EPWM1A
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary
EPwm1Regs.DBFED = 50; // FED = 50 TBCLKs initially
EPwm1Regs.DBRED = 70; // RED = 70 TBCLKs initially
// EPWM Module 2 config
EPwm2Regs.TBPRD = PRD; // Period = TBCLK counts
EPwm2Regs.CMPA.half.CMPA = CMP ; // Set 50% fixed duty EPWM2A

EPwm2Regs.CMPB.half.CMPB = CMP ; // Set 50% fixed duty EPWM2B

EPwm2Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero initially
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Asymmetrical mode
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Slave module
EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // sync flow-through
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; // set actions for EPWM2A
EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary
EPwm2Regs.DBFED = 30; // FED = 30 TBCLKs initially
EPwm2Regs.DBRED = 40; // RED = 40 TBCLKs initially
// Run Time (Note: Example execution of one run-time instant)

PWM周期、相位变化代码:

角度X范围0-180°

周期值PRD;2500-5000(频率10K-20K)

占空比CMP = PRD >> 1;

相位PHS = X * PRD / 180;


//============================================================

EPwm1Regs.TBPRD = PRD; // PRD变化
EPwm1Regs.CMPA = CMP ; // CMP = PRD >> 1;

EPwm1Regs.CMPB = CMP ; // CMP = PRD >> 1;

EPwm2Regs.TBPRD = PRD; // PRD变化
EPwm2Regs.CMPA = CMP ; // CMP = PRD >> 1;

EPwm2Regs.CMPB = CMP ; // CMP = PRD >> 1;
EPwm2Regs.TBPHS = PHS ; // 相位根据PHS = X * PRD / 180;变化