SDLu的MSP430入门学习笔记定时器TimerA比较输出PWM

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产生的。
NORWAL
从图12-12可以看出,模式1、4、5不能用于输出PWM信号,模式2-模式6、模式3-模式7是两对反相的输出模式。
输出模式2,3,6,和7对于输出单元0无效,因为在这些模式下,EQUx=EQU0。因此,CCR0单元需要以控制IO的方式才能输出PWM信号。
另外,也可以通过TimerA的溢出中断控制PWM频率。该方法下同时输出2路PWM 信号的程序如下:
ebsco
程序运行结果是,在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

本文发布于:2024-09-22 21:25:01,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/256548.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:输出   模式   溢出   信号
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议