SDLu的MSP430入门学习笔记(8)定时器TimerA(3)比较输.doc

SDLu的MSP430入门学习笔记(8)定时器TimerA(3)比较输.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
S.D.Lu的MSP430入门学习笔记(8): 定时器TimerA(3)比较输出PWM 本篇笔记介绍如何使用TimerA的比较模式输出PWM信号。 PWM信号有两个参数,周期T和脉宽D。为了实现PWM的控制,我们将通过TACCR0控制周期,通过TACCR1控制脉宽。输出选择模式7(或模式6)。在本例中,输出模式6和输出模式7只是第一个周期输出可能不同,从第二个周期开始输出是一样的。 CCR1单元的输出引脚是P1.2。如下图,请参考MSP430G2x52、G2x12系列数据手册。 将P1.2的功能按下图配置,请参考MSP430G2x52、G2x12系列数据手册。 程序如下: 程序运行结果是P1.2口输出占空比为20%的PWM信号。在本例中,TIME用于控制PWM周期,DUTY指的是占空比,取值范围0~100。 需要特别注意的是,在14行中用到了乘法和除法运算,如果不注意,乘法非常容易产生溢出。本例中将TIME定义为(1000ul),其中1000是TIME的数值,ul为后缀,它表示1000是一个unsigned long类型的数据,这是IAR编译环境定义的。 将TIME定义为unsigned long类型之后,14行右边的乘法运算结果将保存为32位长度,这样就避免了溢出。 如果将TIME定义改为#define TIME (1000),则当TIME * DUTY的值大于0xFFFF时,就会出现溢出,无法得到我们预想的结果。 本例中,9~17行的代码被执行一次之后,CPU就进入LPM0模式,不再执行任何语句。PWM信号不是由CPU控制IO口产生的,而是由ACLK驱动TimerA产生的。 从图12-12可以看出,模式1、4、5不能用于输出PWM信号,模式2-模式6、模式3-模式7是两对反相的输出模式。 输出模式2,3,6,和7对于输出单元0无效,因为在这些模式下,EQUx=EQU0。因此,CCR0单元需要以控制IO的方式才能输出PWM信号。 另外,也可以通过TimerA的溢出中断控制PWM频率。该方法下同时输出2路PWM信号的程序如下: 程序运行结果是,在P1.2输出30%占空比的PWM信号,在P1.4输出70%占空比的PWM信号。该例中,2路PWM信号的频率相同,占空比分别通过TACCR1和TACCR2控制。 因为本例中PWM的频率由TimerA的溢出率控制,CCR1和CCR2的赋值是溢出值0xFFFF减去(TIME * DUTY / 100),所以输出选择模式3,它是模式7的反相。 IO端口的配置参考数据手册中的相关内容。 作者:S.D.Lu 深圳 2014-4-9

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档