MSP430定时器输出PWM方波
MSP430程序库之定时器TA的PWM输出
![MSP430程序库之定时器TA的PWM输出](https://img.taocdn.com/s3/m/1f5a8c5677232f60ddcca13f.png)
MSP430程序库之定时器TA的PWM输出定时器是单片机常用的其本设备,用来产生精确计时或是其他功能;msp430的定时器不仅可以完成精确定时,还能产生PWM波形输出,和捕获时刻值(上升沿或是下降沿到来的时候)。
这里完成一个比较通用的PWM波形产生程序。
1.硬件介绍:MSP430系列单片机的TimerA结构复杂,功能强大,适合应用于工业控制,如数字化电机控制,电表和手持式仪表的理想配置。
它给开发人员提供了较多灵活的选择余地。
当PWM 不需要修改占空比和时间时,TimerA 能自动输出PWM,而不需利用中断维持PWM输出。
MSP430F16x和MSP430F14x单片机内部均含有两个定时器,TA和TB;TA 有三个模块,CCR0-CCR2;TB含有CCR0-CCR67个模块;其中CCR0模块不能完整的输出PWM波形(只有三种输出模式可用);TA可以输出完整的2路PWM波形;TB可以输出6路完整的PWM波形。
定时器的PWM输出有有8种模式:输出模式0 输出模式:输出信号OUTx由每个捕获/比较模块的控制寄存器CCTLx中的OUTx位定义,并在写入该寄存器后立即更新。
最终位OUTx直通。
输出模式1 置位模式:输出信号在TAR等于CCRx时置位,并保持置位到定时器复位或选择另一种输出模式为止。
输出模式2 PWM翻转/复位模式:输出在TAR的值等于CCRx时翻转,当TAR 的值等于CCR0时复位。
输出模式3 PWM置位/复位模式:输出在TAR的值等于CCRx时置位,当TAR 的值等于CCR0时复位。
输出模式4 翻转模式:输出电平在TAR的值等于CCRx时翻转,输出周期是定时器周期的2倍。
输出模式5复位模式:输出在TAR的值等于CCRx时复位,并保持低电平直到选择另一种输出模式。
输出模式6PWM翻转/置位模式:输出电平在TAR的值等于CCRx时翻转,当TAR值等于CCR0时置位。
输出模式7PWM复位/置位模式:输出电平在TAR的值等于CCRx时复位,当TAR的值等于CCR0时置位。
标准实验二MSP430F5529_25Hz方波发生及测量实验
![标准实验二MSP430F5529_25Hz方波发生及测量实验](https://img.taocdn.com/s3/m/905ab906f242336c1eb95eed.png)
电子科技大学实验报告学生姓名:学号:指导教师:邮箱:一、实验室名称:MSP430单片机实验室二、实验项目名称:25Hz方波发生及峰值幅度测量三、实验原理:(1)通用功能I/O参见实验一中相关原理介绍。
(2)定时器(Timer)定时功能模块是MSP430应用系统中经常用到的重要部分,可用来实现定时控制、延迟、频率测量、脉宽测量和信号产生、信号检测等等。
一般来说,MSP430所需的定时信号可以用软件和硬件两种方法来获得。
MSP430系列有丰富定时器资源:看门狗定时器(WDT),定时器A(Timer_A),定时器B(Timer_B)和定时器D(Timer_D)等。
MSP430系列定时器部件功能,如表2-1所示:表2-1 MSP430中定时器的功能(a)看门狗定时器,主要作用在于当“程序跑飞”时,会产生溢出,从而产生系统复位,CPU需要重新运行用户程序,这样程序就可以又回到正常运行状态。
MSP430 看门狗模块具有以下特性:●8 种软件可选的定时时间●看门狗工作模式●定时器工作模式●带密码保护的WDT 控制寄存器●时钟源可选择●为降低功耗,可停止●时钟失效保护(b)定时器A由一个16位定时器和多路捕获/比较通道组成。
MSP430X5XX / 6XX系列单片机的Timer _A有以下特性:●带有4 种操作模式的异步16 位定时/计数器●输入时钟可以有多种选择,可以是慢时钟,快时钟以及外部时钟●可配置捕获/比较寄存器数多达7 个●可配置的PWM(脉宽调制)输出●异步输入和同步锁存。
不仅能捕获外部事件发生的时间还可锁定其发生时的高低电平●完善的中断服务功能。
快速响应Timer_A中断的中断向量寄存器●8种输出方式选择●可实现串行通讯Timer_A由以下4部分组成:定时计数器:16 位定时/计数寄存器——TAxR时钟源的选择和分频:定时器时钟TACLK 可以选择ACLK,SMCLK 或者来自外部的TAxCLK。
msp430的PWM输出是什么意思
![msp430的PWM输出是什么意思](https://img.taocdn.com/s3/m/df388ffa6294dd88d0d26bf9.png)
msp430的PWM输出是什么意思?
输出的是电平还是什么?能直接接到示波器上吗?是对一个信号的调制还是自己能产生出一个信号来?
提问者采纳
PWM就是高低电平不停的变化的信号,通过配置基础器输出,可以用
示波器看到。
关于PWM,我在其他问题中回答过,复制给你看看。
简单的说,比如你有5V电源,要控制一台灯的亮度,有一个传统办法,
就是串联一个可调电阻,改变电阻,灯的亮度就会改变。
还有一个办法,就是PWM调节。
不用串联电阻,而是串联一个开关。
假设在1秒内,有0.5秒的时间开关是打开的,0.5秒关闭,那么灯就
亮0.5秒,灭0.5秒。
这样持续下去,灯就会闪烁。
如果把频率调高一
点,比如是1毫秒,0.5毫秒开,0.5毫秒灭,那么灯的闪烁频率就很高。
我们知道,闪烁频率超过一定值,人眼就会感觉不到。
所以,这时你看
不到灯的闪烁,只看到灯的亮度只有原来的一半。
同理,如果1毫秒内,0.1毫秒开,0.9毫秒灭,那么,灯的亮度就只有
原来的10分之一。
这个还能用于电机速度控制,用于电源电压控制,等等,具体涉及的知
识比LED控制复杂一些,这里就不说了。
msp430TAx PWM输出详解
![msp430TAx PWM输出详解](https://img.taocdn.com/s3/m/f8fd4bd8b14e852458fb573e.png)
对于那么多的TAx输出口,那么多的模式,真是不知所措,那么今天让我们来详细的讨论一下msp430单片机TAx哪些管脚可以输出,以及其输出模式又是怎样的,又该怎样写程序.不着急一步一步来首先让我们来了解下关于输出模式:(1)模式0(电平输出):在输出模式0下,TAx管脚与普通的输出IO口一样,可以由软件操作OUT控制位来控制TAx管脚的高低电平。
(2)模式1与模式5(单脉冲输出):利用比较模块的模式1和模式5,可以替代单稳态电路,产生单脉冲波形。
在输出模式1下,当主计数器计至TACCRx值时,TAx管脚置1。
如果通过OUT控制位事先将TAx的输出设为低,经过TACCRx个周期后,TAx将自动变高。
这样做可以输出一个低电平脉冲。
通过改变TACCRx 的值,可以改变低电平脉冲的周期,且脉冲过程无需CPU的干预。
在输出模式5下,当主计数器计至TACCRx值时,TAx管脚置0.如果通过OUT 控制位事先将TAx输出设置为高,经过TACCRx个周期后,TAx将自动变低。
这样做可以输出一个高电平脉冲。
通过改变TACCRx的值可以改变该点评脉冲的周期,且脉冲过程无需CPU的干预。
(3)模式3和模式7(PWM输出):脉宽调制是最常用的功率调整手段之一。
所谓脉宽调制,顾名思义,是指在脉冲方波周期一定的情况之下,通过调整脉冲的宽度,改变负载通断时间的比例,以达到功率调节的目的。
PWM波形中,负载接通时间与一个周期总时间之比叫做占空比。
占空比越大,负载功率就越大。
如果PWM频率足够高以至于不足以表现表现出负载断续,从宏观上看,负载实际功率将是连续的。
在PWM调整负载功率的过程中,负载断开时晶体管无电流通过,不发热。
负载接通时晶体管饱和,虽然通过有较大电流,但压降很小,发热功率也很低。
所以使用PWM控制负载时,开关器件的总发热量很小。
相比于串联耗散式的调整方法,效率会高很多,适合大功率,高效率的负载调整应用。
但PWM的缺点是负载功率高频波动很大,不适合要求输出平稳无纹波要求的场合。
msp430利用定时器定时功能,实现P1.0方波输出。
![msp430利用定时器定时功能,实现P1.0方波输出。](https://img.taocdn.com/s3/m/ccafe9dcba0d4a7302763a6e.png)
//例程描述:利用定时器定时功能,实现P1.0方波输出。
#include <msp430x14x.h>{WDTCTL = WDTPW + WDTHOLD; //停止看门狗WDT,不使用内部看门狗定时器。
P1DIR |= 0x01; //设置P1.0口方向为输出。
CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1,CCR0捕获/比较功能中断为允许。
CCR0 = 50000; //捕获/比较控制寄存器CCR0初值为5000。
TACTL = TASSEL_2 + MC_2; //设置定时器A控制寄存器TACTL,使时钟源选择为SMCLK辅助时钟。
_BIS_SR(LPM0_bits + GIE); //进入低功耗模式LPM0和开中断}//定时器A 中断服务程序区#pragma vector=TIMERA0_VECTOR__interrupt void Timer_A (void){P1OUT ^= 0x01; //P1.0取反输出CCR0 += 50000; //重新载入CCR0捕获/比较数据寄存器数据}//例程描述:利用定时器定时功能,实现P1.0方波输出。
// 需要注意的是定时器中断程序,采用向量查询方式。
#include <msp430x14x.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗WDTP1DIR |= 0x01; // 设置P1.0口方向为输出。
TACTL = TASSEL_2 + MC_2 + TAIE; // 时钟源选择为SMCLK,选择计数模式,定时器中断开 _BIS_SR(LPM0_bits + GIE); //进入低功耗模式LPM0和开中断}// Timer_A3 中断向量(TAIV)处理#pragma vector=TIMERA1_VECTOR__interrupt void Timer_A(void){switch( TAIV ){case 2: break; //CCR1不使用case 4: break; //CCR2不使用case 10: P1OUT ^= 0x01; //溢出break;}}。
MSP430单片机应用之定时器、PWM
![MSP430单片机应用之定时器、PWM](https://img.taocdn.com/s3/m/dc21eacc910ef12d2af9e7d3.png)
{
...
&0x01)
{
P1OUT–0x01;//翻转状态
IFG&=0xfe;//清除中断标志位
}
}
}
(2)中断方式:WDTCTL与查询方式相同设置,另外需要置位中断允许位
(WDTIE,位于IE1.0)使得单片机能够响应这一中断。
#pragmavector=WDT_VECTOR
MSP430单片机应用之定时器、PWM
1。定时器使用查询和中断两种方式。大多数逻辑芯片输出0的能力大于
输出1的能力。
(1)查询方式:TMSEL决定看门狗的工作模式,置一,看门狗工作在定时
模式。SSEL选择看门狗定时器的时钟源。SSEL置一。IS0IS1决定了看门狗
定时器的输出频率。(注意:使用查询方式时候要清除中断标志)
注意:输出PWM的周期应远小于积分电路的积分常数。提高DA精度
CCR0不宜过小。
扩展阅读:MSP430单片机低功耗结构原理
__interruptvoidWDT_ISR()
{
P1OUT–0x01;
}
main()
{
...
while(True);
}
2.PWM(用定时器A实现)
(1)可用提高频率的方法来取得DA的效果,但是有些场合仍不能满足要
求,这要就需要一个积分电路来获得理想的DA效果
(2)对TA的设置:比较/捕获模块控制寄存器:捕获比较寄存器CCRx.
MSP430微控制器系列讲座十一利用PWM原理实现的DA转换
![MSP430微控制器系列讲座十一利用PWM原理实现的DA转换](https://img.taocdn.com/s3/m/c10703d789eb172ded63b73b.png)
例如:输出一个正弦波,采用32采样频率产生。正弦波的频
率为250Hz,所以每秒须采样250×32=8000次,而每次采样需
要256次计数,所以计数频率采用8000×256=2.048MHz。
斜波信号的产生是从最小占空比的PWM波经滤波后输
t
出,然后逐渐增大占空比,直到输出最大电平值后,又重新开始从
审
咪翻卟掣百T。午:期 万方数据
数器值达到各自CCRx值时,输出复位(低电平)信号,当计数值 达到CCR0时,输出置位(高电平)信号。当CCRx值变化时,则 经滤波后输出的信号将相应变化。系统的SMCLK时钟可作为 定时器TimeLB的计数时钟源。
所需MSP430微控制器其它资源包括:①32768Hz晶振; ②片上DCO工作晶振为2.048MHz;(⑨SMCLK和MCLK晶振 为2.048MHz。当然,系统应用的复杂程度改变时,所需要资源 也会不一样。
2.工作原理
斛M信号为频率固定、占空比变化的数字信号,基本波形
如图1所示。如果PWM信号的占空比随时间而改变,那么信号 经滤波后将输出幅度变化的模拟信号。因此通过改变PWM信 号的占空比,即可产生不同的模拟信号。PWM信号实现DA转 换(简称PWM DAC)的原理框图如图2所示。TI公司的一些语 言处理技术也通常采用PWM DAC方式实现。
最小占空比的PWM波输出。
唯
譬
其中,直流信号及PWM信号波形图如图5所示。直流电平
的产生比较简单,可通过PWM信号占空比设置,该电平值不会
37
发生变化,且直流电平值直接与PWM信号的占空比成比例。因
譬
盎
万方数据
第
期
剿
关闭WD,初始化I/o 口,设置系统时钟
msp430单片机实现PWM
![msp430单片机实现PWM](https://img.taocdn.com/s3/m/359dc053964bcf84b8d57b1e.png)
msp430单片机实现PWMPWM信号是一种具有固定周期(T)不定占空比(t)的数字信号,如下图所示。
如果PWM信号的占空比随时间变化,那么通过滤波之后的输出信号将是幅度变化的模拟信号。
因此通过控制PWM信号的占空比,就可以产生不同的模拟信号。
msp430单片机利用Timer_A或者Timer_B可以很好的实现产生任意PWM信号。
Timer_A定时器的计数器工作在增计数方式,输出采用模式7(复位/置位模式),则可以利用CCR0控制PWM波形的周期,用某个寄存器CCRx控制占空比。
原理图如下:(注:这幅图片为网上下载,他用的是Timer_B定时器,故输出TBx)摘录下面一段:www1.ti/customer/article/article12161.asp将Timer_B配置为16-bit、up模式。
在这种模式下计数器计数至CCR0,然后复位从0开始重新计数。
给CCR0赋值255也就意味着计数器的长度为8bits。
CCR1和TB1用于产生正弦波,CCR2和TB2用于产生直流电平。
输出模式都选为模式7,即PWM复位/置位模式。
如图2所示,在这种模式下,复位后每一个定时器的输出都为高电平,直到计数器达到各自的CCRx值时变为低电平,当计数器达到CCR0时再置位。
也就是说CCRx的值决定了各自正脉冲的宽带。
若CCRx的值是变化的,就可以产生可变宽度的脉冲,下文中的正弦波就是用这种办法产生的;若不变则产生的是固定宽度的脉冲,下文中的直流电平就是这样产生的。
最后SMCLK用作Timer_B的时钟源。
系统采用32768Hz的钟表晶振,通过采用内部硬件锁频环FLL(frequency-locked-loop),。
基于MSP430单片机的直流电机PWM调速系统的研究
![基于MSP430单片机的直流电机PWM调速系统的研究](https://img.taocdn.com/s3/m/f1a07af5f61fb7360b4c6562.png)
文章编号:167121742(2003)022*******基于MSP430单片机的直流电机PW M 调速系统的研究王鹏飞1, 王保强2(1.西南交通大学,四川成都610031;2.成都信息工程学院,四川成都610041)摘要:阐述了MSP430指令集和编译软件的特点,介绍一种基于MSP430单片机实现的直流电机的调速系统。
该系统采用MSP430的T imer A 模式,产生PW M 输出以生成控制信号,能够理想的实现直流电机的PW M 控制,并给出部分软硬件设计。
关 键 词:脉宽调制;MSP430;直流电机中图分类号:TP368.1 文献标识码:A1 引言 直流电机由于具有速度控制容易,启、制动性能良好,且在宽范围内平滑调速等特点而在冶金、机械制造、轻工等工业部门中得到广泛应用。
直流电动机转速的控制方法可分为两类,即励磁控制法与电枢电压控制法。
励磁控制法控制磁通,其控制功率虽然小,但低速时受到磁饱和的限制,高速时受到换向火花和换向器结构强度的限制;而且由于励磁线圈电感较大,动态响应较差。
所以常用的控制方法是改变电枢端电压调速的电枢电压控制法。
调节电阻R 即可改变端电压,达到调速目的。
但这种传统的调压调速方法效率低。
随着电力电子技术的进步,发展了许多新的电枢电压控制方法,其中PW M (脉宽调制)是常用的一种调速方法。
其基本原理是用改变电机电枢(定子)电压的接通和断开的时间比(占空比)来控制马达的速度,在脉宽调速系统中,当电机通电时,其速度增加;电机断电时,其速度减低。
只要按照—定的规律改变通、断电的时间,即可使电机的速度达到并保持一稳定值。
最近几年来,随着微电子技术和计算机技术的发展及单片机的广泛应用,使调速装置向集成化、小型化和智能化方向发展。
在单片机控制的脉宽调速系统中,占空比D 的产生可以由定时器或延时软件来产生。
MSP430单片机的定时器可以产生PW M 方波输出,将它用于直流电机的脉宽调速系统是个很好的方案。
MSP430G2553_PWM
![MSP430G2553_PWM](https://img.taocdn.com/s3/m/d6b068f1700abb68a982fbc5.png)
/************************************************************** 名称:PWM输出* 硬件描述:MSP430G2553 P1.2 P1.6 P2.1 P2.2 P2.4 P2.5* 功能:初始化定时器,输出PWM波* 入口参数:周期Cyc,占空比Occupancy* 出口参数:无* 时间:2014年7月27日* 作者:Jelly-Li* 说明:* Timer_A0_1_init(int Cyc,int Occupancy); P1.2 P1.6* Timer_A1_1_init(int Cyc,int Occupancy); P2.1 P2.2* Timer_A1_2_init(int Cyc,int Occupancy); P2.4 P2.5* 注意:* 使用的那几个IO口* 输出几个信号* 范例:* Timer_A0_1_init(500,100); 20% P1.2 P1.6* Timer_A1_1_init(300,150); 50% P2.1 P2.2* Timer_A1_2_init(8000,200); 2.5% P2.4 P2.5*************************************************************/#include <msp430g2553.h>/************************************************************** 名称:void Timer_A0_1_init(int Cyc,int Occupancy) TA0.1输出PWM* 硬件描述:MSP430G2553 P1.2 P1.6* 功能:输出PWM* 入口参数:周期Cyc,占空比Occupancy* 出口参数:无* 时间:2014年7月27日* 作者:Jelly-Li* 说明:* Timer_A0_1_init(int Cyc,int Occupancy); P1.2 P1.6* 使用P1.2口和P1.6口输出,可以同时也可以只输出一个* 注意:* 要输出几个信号,修改程序* 范例:* Timer_A0_1_init(500,100); 20% P1.2 P1.6*************************************************************/void Timer_A0_1_init(int Cyc,int Occupancy) //TA0.1输出PWM{P1SEL |= BIT2 + BIT6; //P1.2 和P1.6同时输出一样的PWM,可以只用其中一个输出P1DIR |= BIT2 + BIT6;CCR0 = Cyc; //设置周期(频率)CCR1 = Occupancy; //占空比CCR1/CCR0CCTL1 = OUTMOD_7; //输出模式为复位/置位TACTL |= TASSEL_1 + MC_1; //选择时钟,增计数}/************************************************************** 名称:void Timer_A1_1_init(int Cyc,int Occupancy) //TA1.1输出PWM* 硬件描述:MSP430G2553 P2.1 P2.2* 功能:* 入口参数:Cyc* 出口参数:Occupancy* 时间:2014年7月27日* 作者:Jelly-Li* 说明:* Timer_A1_1_init(int Cyc,int Occupancy); P2.1 P2.2* P2.1 P2.2输出TA1.1 OUT1 可以输出两个或任意一个* 注意:* 要输出几个信号,修改程序* 范例:* Timer_A1_1_init(300,150); 50% P2.1 P2.2*************************************************************/void Timer_A1_1_init(int Cyc,int Occupancy) //TA1.1输出PWM{P2SEL |= BIT1 + BIT2; //P2.1 和P2.2同时输出一样的PWMP2DIR |= BIT1 + BIT2;TA1CCR0 = Cyc; //时钟频率TA1CCR1 = Occupancy; //占空比CCR1/CCR0,注意CCR1要写成TA1CCR1 TA1.1由P2.1 P2.2输出TA1CCTL1 = OUTMOD_7; //输出模式为复位/置位,注意CCTL1要写为TA1CCTL1TA1CTL |= TASSEL_1 + MC_1; //时钟,增计数}/************************************************************** 名称:void Timer_A1_2_init(int Cyc,int Occupancy)* 硬件描述:MSP430G2553 P2.4 P2.5* 功能:* 入口参数:Cyc* 出口参数:Occupancy* 时间:2014年7月27日* 作者:Jelly-Li* 说明:* Timer_A1_2_init(int Cyc,int Occupancy); P2.4 P2.5* P2.4 P2.5输出TA1.2 OUT2 可以任意输出一个或者两个,但必须是这两个端口* 注意:* 要输出几个信号,修改程序* 范例:* Timer_A1_2_init(8000,200); 2.5% P2.4 P2.5*************************************************************/void Timer_A1_2_init(int Cyc,int Occupancy) //TA1.2输出PWM{//端口初始化P2SEL |= BIT4 + BIT5; //P2.4 和P2.5同时输出一样的PWMP2DIR |= BIT4 + BIT5;//TA1CCR0 = Cyc; //设置周期,当T1.1不用时,要设置,当T1.1使用时不设置,与T1.1周期一致TA1CCR2 = Occupancy; //占空比CCR2/CCR0,注意CCR2要写成TA1CCR2 TA1.2由P2.4 P2.5输出TA1CCTL2 = OUTMOD_7; //输出模式为复位/置位,注意CCTL2要写为TA1CCTL2//TA1CTL |= TASSEL_1 + MC_1; //时钟,增计数当T1.1不用时,要设置,当T1.1使用时不设置,与T1.1周期一致}。
电机PWM调速原理演示程序
![电机PWM调速原理演示程序](https://img.taocdn.com/s3/m/264a7bea9b89680203d825e5.png)
写CCR1寄存器即可随时改变占空比,从而改变电机功率。这种控
制方法功率损失很小(控制元件导通/截至都不耗电),效率高。
(C)西安电子科技大学 测控技术与仪器教研中心 编写:谢楷 2008/01/31
P1DIR |= BIT2; // P1.2 output
P1SEL |= BIT2; // P1.2 TA1 otions
TACTL = TASSEL_1 + MC_1; // ACLK, up mode
*/
//
//
// MSP430FE425
// -----------------
// | XIN|-
// | | 32kHz
// | XOUT|-
// | |
// | P1.2/TA1|----->三极管驱动--->小马达
// | (CCR1) | _ _ _ _
// | | _| |__| |__| |__| |_
{
CCR1++; //占空比不断提高
if(CCR1>=500) SpeedMode=1; //到达100%后转为减速模式
}
if(SpeedMode==1) //减速模式下
{
CCR1--; //占空比不断降低
// | | 40%~100% PWM
//
#include <MSP430X42X.h>
void Sys_Init()
{
WDTCTL=WDTPW+WDTHOLD; //停止看门狗
FLL_CTL0|=XCAP18PF; //配置晶振负载电容
SDLu的MSP430入门学习笔记定时器TimerA比较输出PWM
![SDLu的MSP430入门学习笔记定时器TimerA比较输出PWM](https://img.taocdn.com/s3/m/0b98bb54f121dd36a22d82ad.png)
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信号。
MSP430单片机定时器实验报告
![MSP430单片机定时器实验报告](https://img.taocdn.com/s3/m/26b3a71dcc7931b765ce15d3.png)
实验四定时器实验实验目的:MPS430F5529片内集成的定时器A的使用,学习计数器的补捕获比较模块的使用。
实验内容:定时器采用辅助时钟ACLK作为计数脉冲,fACLK=32768Hz,实现以下功能:1.定时器TA0延时1s,点亮或熄灭LED6,即灯亮1s灭1s,如此循环,采用中断服务程序实现。
2.定时器TA0延时1s,点亮或熄灭LED4,采用捕获比较器CCR0的比较模式,设定输出方式,输出方波,不用中断服务程序3.采用捕获比较器CCR1的比较模式LED5,设定输出方式,输出PWM波形,使LED 亮2s,灭1s。
4.用定时器实现30s倒计时,在液晶模块上显示,每过一秒显示数字变化一次。
5.使用TA1的捕获比较器CCR0捕获按键的间隔时间,在液晶模块上显示。
程序代码:程序1:#include <msp430f5529.h>void main(){WDTCTL = WDTPW + WDTHOLD; //关看门狗P1DIR |= BIT3; //设置P1.0口方向为输出。
TA0CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1,//CCR0捕获/比较功能中断为允许。
TA0CCR0 = 32767; //捕获/比较控制寄存器CCR0初值为32767TA0CTL = TASSEL_1 + MC_1+TACLR; //设置定时器A控制寄存器TACTL,//使时钟源选择为SMCLK辅助时钟。
//进入低功耗模式LPM0和开总中断_BIS_SR(LPM0_bits +GIE);}//定时器A 中断服务程序区#pragma vector=TIMER0_A0_VECTOR__interrupt void Timer_A (void){P1OUT ^= BIT3; //P1.0取反输出}实验现象:实验开始后,实验板上LED6亮灭闪烁,间隔为1s。
程序2:#include <msp430f5529.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // 关狗P1DIR |= BIT1; // P1.1 设置为输出P1SEL |= BIT1; // P1.1 输出使能TA0CCR0 = 60000; // PWM PeriodTA0CCTL0 = OUTMOD_4; // CCR1 模式4TA0CCR1 = 30000; // CCR1 PWM duty cycleTA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, up mode, clear TAR__bis_SR_register(LPM3_bits); // Enter LPM3__no_operation(); // For debugger}实验现象:实验开始后,实验板上LED4亮灭闪烁,间隔为1s。
利用MSP430F41单片机定时器实现信号采样和PWM控制
![利用MSP430F41单片机定时器实现信号采样和PWM控制](https://img.taocdn.com/s3/m/de7a786410661ed9ad51f3a2.png)
利用MSP430F41单片机定时器实现信号采样和PWM
控制
PWM 控制方式广泛应用于各种控制系统中,但对脉冲宽度的调节一
般采用硬件来实现。
如使用PWM 控制器或在系统中增加PWM 电路[1]等,则成本高、响应速度慢,而且PWM 控制器与系统之间存在兼容问题。
另外,控制系统中的信号采样通常是由A/D 转换器来完成,因此检测精度要求较高时,调理电路复杂,而且因A/D 的位数高,从而使设计的系统成本居高不下。
本文以应用于温度控制系统为例,介绍利用Motorola 公司生产的新型单片机MSP430F413 内的定时器Time_A 设计可以用时间量进行温度采样以及实现PWM 调节的方法。
为了可在使用少量外围电路的情况下实现控制系统的高精
度测量和控制,一方面用时间量采样,在省去1 片A/D 的情况下得到12 位的高精度;另一方面在定时中断内完全用软件实现PWM 调节,以易于进行数据的通信和显示。
该系统在中断内可以解决波形产生的实时在线计算和计算精度问题,可精确、实时地计算设定频率下的脉冲宽度。
1 单片机MSP430F413 及定时器
MSP430 系列的单片机F413 在超低功耗和功能集成上都有一定的特色,可大大减小外围电路的复杂性,它的实时处理能力及各种外围模块使其可应用在多个低功耗领域[2]。
MSP430F413 中通用16 位定时器Timer_A 有如下主要功能模块。
(1)一个可连续递增计数至预定值并返回0 的计数器。
(2)软件可选择时钟源。
(3)5 个捕获/比较寄存器,每个有独立的捕获事件。
(4)5 个输出模块,支持脉宽调制的需要。
利用MSP430的 定时器A(Timer_A)的比较捕获模式产生方波和PWM波
![利用MSP430的 定时器A(Timer_A)的比较捕获模式产生方波和PWM波](https://img.taocdn.com/s3/m/ca459a8782d049649b6648d7c1c708a1284a0a07.png)
微机原理实验实验五定时器A(Timer_A)的比较/捕获模式一、实验目的1. 掌握 MSP430 系列片内集成定时器的比较/捕获模块的工作原理和应用方法;2. 掌握 MSP430 系列片内集成定时器的比较模式的原理和应用;3. 掌握利用定时器的比较模式产生方波的方法;4. 掌握利用定时器比较模式输出 PWM 波形的方法;5. 掌握定时器的捕获模式的原理和应用;6. 掌握利用定时器捕获模式测量方波信号频率的方法二、实验内容1.※●编程实现:采用定时器TA0控制LED1指示灯亮灭,中间间隔1s。
(1)源程序#include<msp430.h>void main(){WDTCTL=WDTPW+WDTHOLD; //关闭看门狗P1DIR |= BIT2;P1SEL |= BIT2; //P1.2定时器输出TA0CCR0=50000; //PWM周期定义TA0CCTL1=OUTMOD_3; //CCR1比较输出模式3TA0CCR1=32768; //CCR1 PWM占空比定义TA0CTL = TASSEL_1+MC_1+TACLR; //ACLK,增计数,清除TAR计数器__bis_SR_register(LPM3_bits); //进入LPM3}(2)运行结果上电后LED1闪烁,中间间隔1s. (以下为录制的运行视频截图)(3)输出信号波形图1s(4)对比分析采用定时器的比较模式和中断功能实现输出方波的各自优势是什么?采用中断功能产生方波是定时器计数到某个值使产生中断,利用此中断来翻转输出口的状态,从而产生方波,它的方波不是直接产生的,因此它有更强的可操作性。
比较模式是计数时与某两个值比较,然后置位复位或者反转输出口,这是直接产生方波,它容易控制方波的占空比。
2.※●编程实现:采用定时器TA0捕获/比较器CCR1的比较模式,设定输出方式,输出PWM波形,使LED1指示灯亮2s,灭1s,并绘制PWM波的波形和频率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定时器A输出方波
1、定时器的PWM输出8种模式
输出模式0输出模式:输出信号OUTx由每个捕获/比较模块的控制寄存器CCTLx中的OUTx位定义,并在写入该寄存器后立即更新。
最终位OUTx直通。
输出模式1置位模式:输出信号在TAR等于CCRx时置位,并保持置位到定时器复位或选择另一种输出模式为止。
输出模式2 PWM翻转/复位模式:输出在TAR的值等于CCRx时翻转,当TAR的值等于CCR0时复位。
输出模式3 PWM置位/复位模式:输出在TAR的值等于CCRx时置位,当TAR的值等于CCR0时复位。
输出模式4翻转模式:输出电平在TAR的值等于CCRx时翻转,输出周期是定时器周期的2倍。
输出模式5复位模式:输出在TAR的值等于CCRx时复位,并保持低电平直到选择另一种输出模式。
输出模式6 PWM翻转/置位模式:输出电平在TAR的值等于CCRx时翻转,当TAR值等于CCR0时置位。
输出模式7 PWM复位/置位模式:输出电平在TAR的值等于CCRx时复位,当TAR的值等于CCR0时置位。
下图是增计数模式下的输出波形:
2、程序:(TA定时器输出1K的方波)
void TAPWM(void)
{
//引脚设置(暂时使用P1.2输出一路PWM)
P1SEL |= BIT2; //TA1从P1.2输出
P1DIR |= BIT2; //TA1从P1.2输出
//P2SEL |= BIT0; //TA2从P1.2输出
//P2DIR |= BIT0; //TA2从P1.2输出
TACTL |= MC_1 +TASSEL_1; //时钟源选择ACLK,增计数模式TA设置
TACCTL1 = OUTMOD_7; //模式7 高电平PWM输出PWM设置
//TACCTL2 = OUTMOD_7; //模式7 高电平PWM输出
TACCR0 = 33-1; //PWM总周期=32个ACLK周期约等于1000Hz 设置PWM的周期
TACCR1 = 16; //TA1 占空比= 16/32=50% 设置占空比
//TACCR2 = 16; //TA2 占空比= 16/32=50%
}
软件改变TACCR0即可改变PWM的周期,改变TACCR1或者TACCR2即可改变占空比。