资讯详情

【F28335】ePWM模块的简单介绍

PWM(Pulse Width Modulation)脉冲宽度调制方法广泛应用于电力电子控制场合,因此数字处理器一般都有PWM模块,便于PWM控制。F28335的ePWM模块是基于其原始模块的增强F2812的PWM模块中,PWM该模块由事件管理器控制eCAP和eQEP和F28335中每个ePWM模块都是独立的小模块,使用起来更方便,可以进行更复杂多变的控制算法。

F28335有6对ePWM每个模块分为模块ePWMxA和ePWMxB因此,共有12条路ePWM信号输出;还有6个APWM通过模块CAP模块扩展配置。加起来就是12路普通PWM输出和6路高精度PWM输出。

每个ePWM该模块包含7个子模块:

TB模块的主要功能是定时配置不同计数模式与周期寄存器的值,确定产生的PWM波的周期。

TB模块的主要寄存器有:周期寄存器TBPRD、相位寄存器TBPHS、计数器TBCTR、状态寄存器TBSTS并控制寄存器TBCLT。

CC主要有两个模块比较寄存器CMPA/CMPB由比较逻辑单元组成。TB与寄存器相比,模块的计数器计数CMPA/CMPB相等时,动作限定子模块AQ就会动作,产生电平变化,即可以在我们需要的时刻对电平进行置高或者置低,主要用于设置不同的占空比。

CC模块的主要寄存器有:比较寄存器CMPA/CMPB、控制寄存器CMPCTL。

AQ模块的功能是响应匹配事件改变引脚电平,在接收TB模块和CC模块的匹配事件后(匹配事件:TB模块周期匹配,TB下溢匹配、CC模块加减匹配)可以设置四种不同的动作:位置、清除、翻转和无动作。

AQ模块的主要寄存器有:动作限制寄存器AQCTLA、软件强制动作限定控制寄存器AQCSFRC、控制寄存器的软件强制连续动作AQCSFRC。

在电力电子应用中,由于开关器件结电容器的存在,开关之间存在过度过程。为了避免直接故障,有必要PWM波加入死区CC模块和AQ模块也可以设置死区,但是比较麻烦,所以DB模块可以更直接、更简单设置死区。PWM寄存器可以延迟上升和下降DBRED(上升沿延迟)和DBFED(沿延迟下降)设置决定。

DB模块主要寄存器:数据寄存器DBRED/DSFED、控制寄存器DBCTL。

PC模块允许高频载波信号调制由动作限定器和DB模块生成的PWM波,主要用于脉冲变压器栅极驱动器控制的功率开关元件系统。PC模块只有一个寄存器:PCCTL。

在PWM有些故障可能发生在控制中,ePWM模块可以通知配置响应GPIO的故障信号(TZ1~TZ6)改变输出状态,实现保护的功能。一般来说,当故障发生时,可以配置EPWM输出为强制高电平、强制低电平、高阻态或无动作。

TZ模块的主要寄存器:选择寄存器TZSEL、控制寄存器TZCTL、中断使能寄存器TZEINT、中断标志寄存器TZFLG、清除寄存器中断标志TZCLR强制寄存器中断TZFRC。

ET可以根据模块TB模块和CC模块生成的事件,中断和触发申请ADC采样与转换。

ET模块的主要寄存器:选择寄存器ETSEL、预订标准寄存器ETPS、标志寄存器ETFLG、清除寄存器ETCLR强制寄存器ETFRC。

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File  #if (CPU_FRQ_150MHZ)   #define CPU_CLK   150e6   #define TBCLK_DIV   0x0   #define TBHSPCLK_DIV   0x0 #endif #if (CPU_FRQ_100MHZ)   #define CPU_CLK   25e6   #define TBCLK_DIV   0x1   #define TBHSPCLK_DIV   0x1 #endif  #define PWM_CLK   85e3                // If diff freq. desired, change freq here. #define Period_Value   CPU_CLK/PWM_CLK #define RED_Value 60 #define FED_Value 60  void ePWM_Config(void); //Uint16 p; /*------------------------------- Main Function------------------------------------*/ void main(void) {  InitSysCtrl();   DINT;  InitPieCtrl();   IER = 0x0000;  IFR = 0x0000;  InitPieVectTable();   InitGpio();  InitEPwm1Gpio();  InitEPwm2Gpio();  ePWM_Config();  }  void ePWM_Config(void) {  //**************ePWM1 config ***************//  EALLOW;  SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;    // ePWM1     SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1;    // ePWM1  SysCtrRegs.PCLKCR0.bit.TBCLKSYNC = 1;       // Enable TBCLK within the ePWM
	EDIS;

	EPwm1Regs.TBCTL.bit.CLKDIV = TBCLK_DIV;
	EPwm1Regs.TBCTL.bit.HSPCLKDIV = TBHSPCLK_DIV;  // ePWM Clock = 150 MHz
    EPwm1Regs.TBPRD = Period_Value;
    EPwm1Regs.CMPA.half.CMPA = Period_Value/2;     // Set 50% fixed duty for EPWM1A
    EPwm1Regs.TBPHS.half.TBPHS = 0;                // Set Phase register to zero
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;     // 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.IN_MODE = DB_DISABLE;
    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;      // Active Hi complementary
    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
    EPwm1Regs.DBFED = FED_Value;                          // FED = 50 TBCLKs initially
    EPwm1Regs.DBRED = RED_Value;                          // RED = 70 TBCLKs initially


	//**************ePWM2 config ***************//
    EPwm2Regs.TBCTL.bit.CLKDIV = TBCLK_DIV;
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = TBHSPCLK_DIV;  // ePWM Clock = 150 MHz
    EPwm2Regs.TBPRD = Period_Value;
    EPwm2Regs.CMPA.half.CMPA = Period_Value/2;     // Set 50% fixed duty for EPWM1A
    EPwm2Regs.TBPHS.half.TBPHS = 0;                // Set Phase register to zero
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;     // Asymmetrical mode
    EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;        // Master module
    EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;    // Sync down-stream module
    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_CLEAR;             // set actions for EPWM1A
    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;
   // EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET;             // set actions for EPWM1A
    //EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm2Regs.DBCTL.bit.IN_MODE = DB_DISABLE;
    EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;      // Active Hi complementary
    EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
    EPwm2Regs.DBFED = FED_Value;                          // FED = 50 TBCLKs initially
    EPwm2Regs.DBRED = RED_Value;                          // RED = 70 TBCLKs initially

}

参考书籍:《TMS320F28335原理及其在电气工程中的应用》——巫付专

标签: et电子变压器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台