打印

TI DSP 280xx ePWM 模块实现0%~100%占空比控制

[复制链接]
4699|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GG_GG|  楼主 | 2012-8-1 12:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在某些应用中让占空比控制达到满量程0%~100%是非常重要的。TMS320x280x系列处理器使用灵活、配置丰富,是在整个范围内实现满量程占空比控制的最佳选择。
增强型脉宽调制(ePWM)模块在保证系统开销最小的前提下可提供0%~100%占空比。这些模块有三种工作模式:加法计数模式、可逆计数模式和减法计数模式,本文重点讨论前两种工作模式。这里对TMS320x280xx/28xxx ePWM的基本使用不做详细介绍,并假设用户已熟悉TMS320x280xx/28xxx ePWM(SPRU791)的使用。


PWM模块配置

ePWM模块包括以下几个子模块:时基(TB)子模块、计数器-比较器(CC)子模块、动作限定(AQ)子模块、?死区(DB)发生器子模块、PWM斩波器(PC)子模块、故障断路器(Trip Zone)子模块、事件触发器(ET)子模块。

相关帖子

沙发
GG_GG|  楼主 | 2012-8-1 12:54 | 只看该作者
图1为PWM模块结构框图。
图1:PWM模块结构框图。


配置ePWM模块时需要对上述子模块中的寄存器进行初始化。必须正确配置控制寄存器,以便ePWM模块能工作在上述三种模式的任意一种模式中。

在无需0%或100%的占空比的情况下,配置和使用ePWM模块比较简单,按照TMS320x280xx/28xxx ePWM参考指南给出的程序就可实现ePWM模块的配置。但0%和/或100%占空比的应用则属于特殊情况,需要按照附加的程序配置ePWM模块。附加程序在本文的网络版本中给出。

使用特权

评论回复
板凳
GG_GG|  楼主 | 2012-8-1 12:54 | 只看该作者
占空比的满量程调节

通过执行附加的软件实现满量程的占空比调节,该软件可以跟踪当前占空比值和下一个占空比值,并充分利用动作限定子模块所具有的灵活的配置性能。该附加程序代码位于PWM中断服务例程(ISR)中,如果要改变下一个周期寄存器的数值,可以在当前ISR中进行设置。下文描述了在可逆计数模式及加法计数模式下,该软件的执行过程。

1. 可逆计数模式

当工作在可逆计数模式(PWM波形对称)时,若加法计数达到的值与CMPA值相匹配,置位ePWMxA输出;若减法计数达到的值与CMPA值相匹配,ePWMxA输出复位;如果CMPA值与计数器的值不匹配,则调用ISR并加载阴影寄存器。

在这种情况下,向CMPA寄存器加载0实现100%的ePWMxA占空比,向CMPA寄存器加载大于或等于周期的数值实现0%的ePWMxA占空比。代码的执行过程如下:

在当前周期的ISR中,计算下一个PWM周期的比较寄存器的值,这样通过当前ISR就可得知当前和下一个周期的占空比。获知下一个周期的占空比能更好的了解当前周期,详细描述如下:

a. 当CMPA值由非零变为零时:

(1) 改变动作确认控制寄存器的值,AQCTLA.bit.ZRO=AQ_SET。在下一个周期中立即使PWM引脚置位。

(2) 在下一个周期(实际上是第一个100%占空比)的ISR中,将动作确认寄存器的值变为初始值。

b. 当CMPA值由零变为非零时:

(1) 改变动作确认控制寄存器的值,AQCTLA.bit.ZRO=AQ_CLEAR,AQCTLA.bit.CAD=AQ_NO_ACTION。

(2) 改变LOADAMODE位的值,加载零或周期值。

使用特权

评论回复
地板
GG_GG|  楼主 | 2012-8-1 12:54 | 只看该作者
需要注意的是,AQCTLA.bit.CAU=AQ_SET未发生变化,因此,对于最后一个'CMPA=0'周期之后的下一个周期,即使CMPA值等于1,当CMPA值与计数器值一致时,ePWM引脚也应置为高电平。

将动作确认寄存器和控制寄存器的值变回到SIR初始时的值,为下一个周期做准备。(实际上第一个非0%周期或者第一个非零CMPA周期都跟有一个零CMPA周期。)当CMPA值进入周期寄存器和返回时无需上述操作。EPwm1Regs.ETPS.bit.INTPRD应初始化为ET_1ST,即每一事件都产生中断。

2. 加法计数方式

当采用加法计数模式工作时,若计数器的值与ZRO值匹配,置位ePWMxA输出,若计数器的值与CMPA值匹配,则ePWMxA输出复位。CMPA值与计数器的值不匹配时调用ISR,并加载阴影寄存器。

在这种情况下,向CMPA寄存器加载大于周期的一个值即可实现100%的ePWMxA占空比;向CMPA寄存器加载0实现0%的ePWMxA占空比。代码的执行过程如下:

采用加法计数模式工作时,在当前周期的ISR中,计算下一个PWM周期的比较寄存器的值。因此,通过当前ISR就可得知当前和下一个周期的占空比。获知下一个周期的占空比能更好的了解当前周期,详细描述如下:

a. 当CMPA的值由非零变为零时:

(1) 改变动作确认控制寄存器的值,AQCTLA.bit.ZRO=AQ_CLEAR。在下一个周期中立即清除PWM引脚的状态。

(2) 在下一个周期(实际上是第一个100%占空比)的ISR中,将动作确认寄存器的值变为初始值。
b. 当CMPA值由零变为非零时:

(1) 改变动作确认控制寄存器的值AQCTLA.bit.ZRO=AQ_SET。

(2) 改变LOADAMODE位的值,加载零或周期值。

使用特权

评论回复
5
GG_GG|  楼主 | 2012-8-1 12:54 | 只看该作者
需要注意的是:AQCTLA.bit.CAU=AQ_CLEAR未发生变化。因此,在最后一个CMPA=0周期后的下一个周期,即使该周期的CMPA值等于1,在CMPA匹配时也应清除ePWM引脚的状态。

(3) 将动作确认寄存器和控制寄存器的值变回到ISR初始值,为下一个周期工作做准备。(实际上第一个非0%周期或者第一个非零CMPA周期都跟有一个零CMPA周期)。

当CMPA值进入周期寄存器和返回时无需上述操作。

EPwm1Regs.ETPS.bit.INTPRD应初始化为ET_1ST,即每一事件都产生中断。也应按此方法配置PWM时基子模块,这样可确保在可逆计数模式下,可在半个PWM周期内即可执行完ISR代码;而在加法计数模式下,可在一个PWM周期内执行完ISR代码。

软件流程

代码执行的软件流程图如图2所示。

图2:代码执行的软件流程图。

使用特权

评论回复
6
GG_GG|  楼主 | 2012-8-1 12:55 | 只看该作者
程序代码示例

下列ISR程序代码可用于实现加法计数模式下ePWM模块的0%-100%占空比调节。这些代码为ePWM1A和ePWM1B提供独立控制,并使ePWM1B对ePWM1A起到补充作用。

图3:ISR程序代码。

使用特权

评论回复
7
GG_GG|  楼主 | 2012-8-1 12:55 | 只看该作者
参考文献


Texas Instruments ?TMS320x28xx, 28xxx增强型脉宽调制器(ePWM)参考指南(SPRU791)[DB/OL]. http://focus.ti.com/lit/ug/spru791c/spru791c.pdf,2007.

使用特权

评论回复
8
GG_GG|  楼主 | 2012-8-1 12:55 | 只看该作者
终于发完了!!!!Good luck

使用特权

评论回复
9
yjyjy123| | 2012-8-2 11:24 | 只看该作者
楼主辛苦了,谢谢!

使用特权

评论回复
10
humthinker| | 2016-4-19 10:28 | 只看该作者
你好,我 想用 DSP 开发板上的 按键来 调整 PWM占空比,求帮助。
目前 PWM波形已可以正常产生。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

893

帖子

7

粉丝