【F28335】ePWM模块的简单介绍
一、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模块构成与简要工作原理
每个ePWM模块包含7个子模块:
①时间基准子模块TB(Time-Base)
TB模块的主要作用是定时,配置不同的计数模式与周期寄存器的值,确定产生的PWM波的周期。
TB模块的主要寄存器有:周期寄存器TBPRD、相位寄存器TBPHS、计数器TBCTR、状态寄存器TBSTS和控制寄存器TBCLT。
②计数比较子模块CC(Counter-Compare)
CC模块主要由两个比较寄存器CMPA/CMPB和比较逻辑单元组成。当TB模块的计数器计数到与比较寄存器CMPA/CMPB相等时,动作限定子模块AQ就会动作,产生电平变化,即可以在我们需要的时刻对电平进行置高或者置低,主要用于设定不同的占空比。
CC模块的主要寄存器有:比较寄存器CMPA/CMPB、控制寄存器CMPCTL。
③动作限定子模块AQ(Action-Qualifier)
AQ模块的功能是响应匹配事件改变引脚电平,在接收TB模块和CC模块的匹配事件后(匹配事件:TB模块周期匹配、TB下溢匹配、CC模块加减匹配),可以设置产生四种不同的动作:置位、清除、翻转和无动作。
AQ模块的主要寄存器有:动作限定寄存器AQCTLA、软件强制动作限定控制寄存器AQCSFRC、软件强制连续动作限定控制寄存器AQCSFRC。
④死区控制子模块DB(Dead-Band Generator)
在电力电子应用中,由于开关器件结电容等存在,开关之间存在过度过程,为了避免发生直通等故障,需要对PWM波加入死区。采用CC模块和AQ模块也可以设置死区,但比较麻烦,因此DB模块可以更加直接简单的设置死区。PWM的上升沿和下降沿延时可以通过寄存器DBRED(上升沿延时)和DBFED(下降沿延时)设置决定。
DB模块主要寄存器:数据寄存器DBRED/DSFED、控制寄存器DBCTL。
⑤PWM斩波子模块PC(PWM-Chopper)
PC模块允许高频载波信号调制由动作限定器和DB模块生成的PWM波,主要用于脉冲变压器栅极驱动器控制的功率开关元件系统中。PC模块只有一个寄存器:PCCTL。
⑥错误控制子模块TZ(Trip-Zone)
在PWM控制中,可能会发生一些故障,ePWM模块可以通知配置响应来自GPIO的故障信号(TZ1~TZ6),改变输出状态,实现保护的功能。一般来说,故障发生时,可以配置EPWM输出为强制高电平、强制低电平、高阻态或无动作。
TZ模块的主要寄存器:选择寄存器TZSEL、控制寄存器TZCTL、中断使能寄存器TZEINT、中断标志寄存器TZFLG、中断标志清除寄存器TZCLR和中断强制寄存器TZFRC。
⑦事件触发子模块ET(Event-Trigger)
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 60void 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; // ePWM1SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1; // ePWM1SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWMEDIS;EPwm1Regs.TBCTL.bit.CLKDIV = TBCLK_DIV;EPwm1Regs.TBCTL.bit.HSPCLKDIV = TBHSPCLK_DIV; // ePWM Clock = 150 MHzEPwm1Regs.TBPRD = Period_Value;EPwm1Regs.CMPA.half.CMPA = Period_Value/2; // Set 50% fixed duty for EPWM1AEPwm1Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zeroEPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Asymmetrical modeEPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Master moduleEPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // Sync down-stream moduleEPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=ZeroEPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=ZeroEPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // set actions for EPWM1AEPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;EPwm1Regs.DBCTL.bit.IN_MODE = DB_DISABLE;EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementaryEPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band moduleEPwm1Regs.DBFED = FED_Value; // FED = 50 TBCLKs initiallyEPwm1Regs.DBRED = RED_Value; // RED = 70 TBCLKs initially//**************ePWM2 config ***************//EPwm2Regs.TBCTL.bit.CLKDIV = TBCLK_DIV;EPwm2Regs.TBCTL.bit.HSPCLKDIV = TBHSPCLK_DIV; // ePWM Clock = 150 MHzEPwm2Regs.TBPRD = Period_Value;EPwm2Regs.CMPA.half.CMPA = Period_Value/2; // Set 50% fixed duty for EPWM1AEPwm2Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zeroEPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Asymmetrical modeEPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Master moduleEPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // Sync down-stream moduleEPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=ZeroEPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=ZeroEPwm2Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // set actions for EPWM1AEPwm2Regs.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 complementaryEPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band moduleEPwm2Regs.DBFED = FED_Value; // FED = 50 TBCLKs initiallyEPwm2Regs.DBRED = RED_Value; // RED = 70 TBCLKs initially}
参考书籍:《TMS320F28335原理及其在电气工程中的应用》——巫付专
【F28335】ePWM模块的简单介绍相关推荐
- python中pickle模块的用法_Python中json模块和pickle模块的简单介绍(附示例)
本篇文章给大家带来的内容是关于Python中json模块和pickle模块的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Python中的json模块和pickl ...
- python shelve模块_Python中shelve模块的简单介绍(附示例)
本篇文章给大家带来的内容是关于Python中shelve模块的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. shelve:对象持久化的保存的模块,将对象保存到文件 ...
- F28335 ePWM模块简介——TMS320F28335学习笔记(四)
1 PWM控制基本原理 我们目前很多电力应用都是采用的正弦交流电,下面我们就来看一下如何用一系列脉冲来代替一个正弦半波.把正弦半波分成N等份,就可以把正弦半波看成是由N个彼此相连的脉冲序列所组成的波形 ...
- Linux 核心模块,LINUX核心及核心模块的简单介绍
在整个开机的过程中,能否成功驱动主机的硬件,是核心(kernel)的工作. 核心一般都是压缩文件,在使用之前,要将解压,才能加载到主存储器中. 随着硬件种类增加,目前核心都具有可读取模块化驱动程序的功 ...
- python 数据库模块_MySQl 数据库 之 python模块 pymysql 简单介绍
一. 下载: 终端输入指令: pip3 install pymysql 如果失败就检查 pip 指令的环境变量是否配置; 若不会,则自行百度; 等待下载完成后, 在终端直接进入 python 环境, ...
- python 各个模块的简单介绍 转载
转自 https://www.jianshu.com/p/f8c43e25c02e
- 从0开始学爬虫7之BeautifulSoup模块的简单介绍
参考文档: https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ # 安装 beautifulsoup4 (pytools) D:\pyt ...
- TMS320x2833x的ePWM模块简要介绍
TMS320x2833x的ePWM模块简要介绍 导读 一点看法 ePWM模块的简要介绍 时基子模块 比较子模块 动作限定子模块 死区子模块 PWM斩波子模块 错误联防子模块 事件触发模块 参考文献 导 ...
- formidable处理提交的表单或文件的简单介绍
一般来说,客户端向服务端提交数据有GET和POST这两种方式,在之前的文章node.js当中的http模块与url模块的简单介绍当中我们可以知道通过req.url与url模块的配合处理可以快速得到客户 ...
最新文章
- 压缩与反压缩之 COMPRESS 与 EXPAND
- Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(三)答案查询
- Spring–添加AOP支持
- java work stealing_Java线程池之WorkStealingPool,任务窃取算法
- 完数[HDU1406]
- Anaconda换源及常用命令
- vscode解决方案 关闭源代码管理
- js基础(2)~元素增删,属性,节点,定时器,date,事件,模块
- deeplearning.36车辆识别YOLO算法实践
- iserdese2接口详解_-02-Xilinx的SerDes接口介绍【Xilinx-LVDS读写功能实现】
- 《CSS揭秘》实用技巧总结
- 微信分享朋友圈链接怎么显示图片-企业微信二维码转成名片
- 临门一脚 | 技术水平一般的程序员如何准备面试
- 三分钟搭建开源的工单系统ferry
- matlab 微分符号,Matlab 符号微积分
- Dart笔记(10):Runes
- vue中 向一个数组中的每一个对象里添加一个属性
- 关于在POI以SAX方式解析,会导出拼音(音标)的问题解决
- iPhone/IOS使用Fiddler抓包配置
- 马云励志演讲:要相信80后、90后创业