MSP430定时器输出PWM方波
MSP430程序库之定时器TA的PWM输出

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方波发生及测量实验

电子科技大学实验报告学生姓名:学号:指导教师:邮箱:一、实验室名称: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。
msp430TAx PWM输出详解

对于那么多的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方波输出。

//例程描述:利用定时器定时功能,实现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

{
...
&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转换

例如:输出一个正弦波,采用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单片机实现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调速系统的研究
文章编号: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
/************************************************************** 名称: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调速原理演示程序
写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; //配置晶振负载电容
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定时器A输出方波
1、定时器的PWM输出8种模式
输出模式0输出模式:输出信号OUTx由每个捕获/比较模块的控制寄存器CCTLx中的OUTx位定义,并在写入该寄存器后立即更新。
最终位OUTx直通。
输出模式1置位模式:输出信号在TAR等于CCRx时置位,并保持置位到定时器复位或选择另一种输出模式为止。
输出模式2PWM翻转/复位模式:输出在TAR的值等于CCRx时翻转,当TAR的值等于CCR0时复位。
输出模式3PWM置位/复位模式:输出在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即可改变占空比。