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;变化
