TMS28027输出PWM波例程解析
PWM波模块由Time-Base(时基)、Counter-Compare(计数器比较)、Action-Qualifier(波形发生器)、Dead-Band(死区设置)、Trip-Zone(错误处理)、Event-Trigger(事件触发)、PWM-Chopper(PWM斩波器)、HRPWM(高分辨率脉宽调制器)、Digital Compare Event(数字比较事件)这些子模块组成
例程中输出一个PWM波只需要用到TB(Time-Base)、CC(Counter-Compare)、AQ(Action-Qualifier)、ET(Event-Trigger)模块
首先看TB模块包含的寄存器
TBPRD 决定时基计数器的周期(设置 PWM 频率)。
TBPHS 设置所选 ePWM 相对于提供同步输入信号的时基的时基计数器相位。
TBCTR 读取当前时基计数器值
TBCTL 控制时基行为
TBSTS
TBPRDHR(1)
TBPHSHR(1)
TBPRDHRM(1)
TBPRDM(1)
(1)该寄存器仅在包含高分辨率扩展 (HRPWM) 的 ePWM 实例上可用。 在不包含 HRPWM 的 ePWM 模块上,此位置是保留的。
CC包含的寄存器
CMPCTL 控制计数器比较寄存器的工作模式、状态标志等
CMPA CMPA 寄存器中的值不断与时基计数器 (TBCTR) 进行比较。 当值相等时,计 数器比较模块生成“时基计数器等于计数器比较 A”事件。 此事件被发送到动作限定符, 在那里它被限定并将其转换为一个或多个动作。 这些操作可应用于 EPWMxA 或 EPWMxB 输出,具体取决于 AQCTLA 和 AQCTLB 寄存器的配置。
CMPB同理
AQ包含的寄存器
ET包含的寄存器
PWM模块各寄存器更详细的介绍我整理在了pdf里https://download.csdn.net/download/asbcddasds/20430625
例程中用PWM3模块,对应的引脚为gpio4、5。
初始化程序
GPIO的初始化以及PWM模块的设定
void InitEPwm3Gpio(void)
{EALLOW;GpioCtrlRegs.GPAPUD.bit.GPIO4 = 1; // Disable pull-up on GPIO4 (EPWM3A)GpioCtrlRegs.GPAPUD.bit.GPIO5 = 1; // Disable pull-up on GPIO5 (EPWM3B)GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1; // Configure GPIO4 as EPWM3AGpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1; // Configure GPIO5 as EPWM3BEDIS;
}
void InitEPwm3Example(void)
{EALLOW;EPwm3Regs.TBPRD = 2000; // Set timer period计数为2001(设置频率)// Setup TBEPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // 模式选择Count upEPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位加载EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUTEPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1; //分频设置EPwm3Regs.TBPHS.half.TBPHS = 0x0000; // 相位设置为0EPwm3Regs.TBCTR = 0x0000; //清除时基计数器// Setup shadow register load on ZEROEPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; //计数器计较A寄存器工作在影子模式EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; //计数器计较B寄存器工作在影子模式EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//计数器比较A从影子模式加载,时基计数器初始置零EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// Set Compare values确定占空比EPwm3Regs.CMPA.half.CMPA = 50; // 设定比较值A为50EPwm3Regs.CMPB = 1950; // 设定比较值B为1950// Set ActionsEPwm3Regs.AQCTLA.bit.CAU = AQ_SET; // 当计数器等于CMPA寄存器且计数器为递增时,强制epwm3a输出高电平 EPwm3Regs.AQCTLA.bit.CBU = AQ_SET; EPwm3Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // 当计数器为0时切换epwm3A的输出EPwm3Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // Interrupt where we will change the Compare ValuesEPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //使能事件计数器为零EPwm3Regs.ETSEL.bit.INTEN = 1; //启用 ePWM 中断 (EPWMx_INT) 生成EPwm3Regs.ETPS.bit.INTPRD = ET_3RD; //在 ETPS[INTCNT] = 1,1(第三个事件)上产生中断
EDIS;// Start by increasing the compare A and decreasing compare B}
PWM周期计算=(TBPRD+1)xTBCLK————TBCLK=SYSCLKOUT / (HSPCLKDIV × CLKDIV)
对于TMS28027来说SYSCLKOUT=60MHZ
例程中,HSPCLKDIV和CLKDIV都等于1,则TBCLK=60MHZ/1=16.67ns
周期为2001*16.67ns=33.4ms
占空比计算:
PWM3A通道占空比为(2000-50)/2000=97.5%
PWM3B同理
最后将函数导入主函数即可
TMS28027输出PWM波例程解析相关推荐
- STM32F103 PA8不能输出PWM波问题
在调试STM32F103单片机输出PWM波时,单独测试PA8和PA11输出PWM波(也就是TIM1_CH1和TIM1_CH4),输出PWM波正常.然后用串口1输出数据时,发现一个问题,串口输出正常,但 ...
- STM32单片机:定时器TIM输出PWM波
学习32单片机过程中使用的工具:MDK Keil5 + 正点原子精英版(STM32F103ZET6)+ STM32CubeMX + HAL开发 一.PWM的产生原理 关于PWM的产生原理网上有很多教程 ...
- 树莓派输出pwm波c语言,02树莓派4B—C语言编程——PWM
01树莓派直接输出PWM波 -- 硬件PWM程序 (推荐使用) #include #include #include //必不可少 int main( void) { int pwm_gpio5 = ...
- STM32CubeMX——LED定时闪烁和输出PWM波
简介 通过学习STM32CubeMX软件,掌握配置各个部件的基本方法:了解外部中断,定时器中断,PWM波产生等功能的原理,编写程序代码,实现相应的功能. 程序预期结果: LED初始设置间隔2秒闪烁一次 ...
- STM32f103C8定时器输出PWM波信号
利用stm32高级定时器输出PWM,模拟呼吸灯的效果带刹车功能.由于没有示波器查看输出的pwm波形图,所以本次实验使用普通直流电机模拟的. 本文章为学习笔记,其中有些地方解释的不是那么的好,即本笔记可 ...
- stm32f4 输出pwm波_stm32的pwm输出代码及注释
stm32是非常常用的单片机.脉冲宽度调制(PWM),是英文"Pulse WidthModulation"的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非 ...
- STM32H743+CubeMX-低功耗定时器LPTIM输出PWM波
文章目录 一.前言 二.CubeMX 2.1.Clock Configuration 2.2.LPTIM2 Mode and Configuration 2.3.Parameter Settings ...
- 使用STM8S003定时器的PWM功能输出PWM波
一.使用定时器TIM2的CH1.CH2.CH3通道PWM输出 1. 在使用stm8s系列的单片机的时候,使用的头文件大部分都是通用的stm8s.,第一步修改头文件: /* Uncomment the ...
- msp430g2553输出PWM波
用msp430g2553的定时器timerA就可以实现PWM波,内容不难!设置下时钟源,定时器配置一下就可以了 仿真: 代码: TA1CTL:选时钟源,计数模式增 TA1CCR0(定时器寄存器)与频率 ...
最新文章
- JavaScript的编码规范
- ETL工具Kettle使用
- 读《三体Ⅱ · 黑暗森林》| 人能相互理解的前提是力量对等
- Python:eval的妙用和滥用
- 台积电:高雄地震对生产影响比预期略高
- 大数据学习笔记33:解决CentOS7上MySQL启动失败问题
- 2017.7.17数据类型
- 中国自主可免费使用的一站式 IoT 集成开发环境 RT-Thread Studio 发布!
- U 盘安装 CentOS的方法
- 学习笔记10--自动驾驶汽车软件架构
- 移动硬盘根目录里的msdia80.dll文件
- 不存在R上的连续函数f,它在无理数集R\Q上是一一映射,而在有理数集Q上不是一一映 射。
- 古墓丽影10linux,《古墓丽影:崛起》推出Linux系统版:Ubuntu 17.10可玩
- SveletJs学习——运动动画
- HTML5 drag和drop的亲手实践
- 满满的干货!传统备份vs CDP vs CDM
- latex画三线表模板
- 分享使用全自动引流脚本之前须知的五大要点
- 什么是“SCSI”硬盘
- 转载 揭穿号称内存占用极低的软件的诡计