一、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模块的简单介绍相关推荐

  1. python中pickle模块的用法_Python中json模块和pickle模块的简单介绍(附示例)

    本篇文章给大家带来的内容是关于Python中json模块和pickle模块的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Python中的json模块和pickl ...

  2. python shelve模块_Python中shelve模块的简单介绍(附示例)

    本篇文章给大家带来的内容是关于Python中shelve模块的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. shelve:对象持久化的保存的模块,将对象保存到文件 ...

  3. F28335 ePWM模块简介——TMS320F28335学习笔记(四)

    1 PWM控制基本原理 我们目前很多电力应用都是采用的正弦交流电,下面我们就来看一下如何用一系列脉冲来代替一个正弦半波.把正弦半波分成N等份,就可以把正弦半波看成是由N个彼此相连的脉冲序列所组成的波形 ...

  4. Linux 核心模块,LINUX核心及核心模块的简单介绍

    在整个开机的过程中,能否成功驱动主机的硬件,是核心(kernel)的工作. 核心一般都是压缩文件,在使用之前,要将解压,才能加载到主存储器中. 随着硬件种类增加,目前核心都具有可读取模块化驱动程序的功 ...

  5. python 数据库模块_MySQl 数据库 之 python模块 pymysql 简单介绍

    一. 下载: 终端输入指令: pip3 install pymysql 如果失败就检查 pip 指令的环境变量是否配置; 若不会,则自行百度; 等待下载完成后, 在终端直接进入 python 环境, ...

  6. python 各个模块的简单介绍 转载

    转自 https://www.jianshu.com/p/f8c43e25c02e

  7. 从0开始学爬虫7之BeautifulSoup模块的简单介绍

    参考文档: https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ # 安装 beautifulsoup4 (pytools) D:\pyt ...

  8. TMS320x2833x的ePWM模块简要介绍

    TMS320x2833x的ePWM模块简要介绍 导读 一点看法 ePWM模块的简要介绍 时基子模块 比较子模块 动作限定子模块 死区子模块 PWM斩波子模块 错误联防子模块 事件触发模块 参考文献 导 ...

  9. formidable处理提交的表单或文件的简单介绍

    一般来说,客户端向服务端提交数据有GET和POST这两种方式,在之前的文章node.js当中的http模块与url模块的简单介绍当中我们可以知道通过req.url与url模块的配合处理可以快速得到客户 ...

最新文章

  1. 压缩与反压缩之 COMPRESS 与 EXPAND
  2. Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(三)答案查询
  3. Spring–添加AOP支持
  4. java work stealing_Java线程池之WorkStealingPool,任务窃取算法
  5. 完数[HDU1406]
  6. Anaconda换源及常用命令
  7. vscode解决方案 关闭源代码管理
  8. js基础(2)~元素增删,属性,节点,定时器,date,事件,模块
  9. deeplearning.36车辆识别YOLO算法实践
  10. iserdese2接口详解_-02-Xilinx的SerDes接口介绍【Xilinx-LVDS读写功能实现】
  11. 《CSS揭秘》实用技巧总结
  12. 微信分享朋友圈链接怎么显示图片-企业微信二维码转成名片
  13. 临门一脚 | 技术水平一般的程序员如何准备面试
  14. 三分钟搭建开源的工单系统ferry
  15. matlab 微分符号,Matlab 符号微积分
  16. Dart笔记(10):Runes
  17. vue中 向一个数组中的每一个对象里添加一个属性
  18. 关于在POI以SAX方式解析,会导出拼音(音标)的问题解决
  19. iPhone/IOS使用Fiddler抓包配置
  20. 马云励志演讲:要相信80后、90后创业

热门文章

  1. 当写烂代码的人离职之后....
  2. vbox虚拟机vdi文件用VMware打开
  3. 脚本与脚本语言简单介绍
  4. P7599 [APIO2021] 雨林跳跃
  5. 防火墙添加信任IP地址和程序
  6. 腾讯员工“跳槽”被索赔100万,大厂“竞业协议”有多坑?
  7. 客户端/服务端软件概述
  8. 电脑开机出现英文字母开不了机U盘重装系统教学
  9. XML文件的数据抽取
  10. 指令----win10/mac/linux常用快捷键(指令)整理