945191812基于MSP430 TimerB的DA转换_第1页
945191812基于MSP430 TimerB的DA转换_第2页
945191812基于MSP430 TimerB的DA转换_第3页
945191812基于MSP430 TimerB的DA转换_第4页
945191812基于MSP430 TimerB的DA转换_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘 要:本文分析了利用msp430的timer_b在比较模式下输出的脉宽调制(pwm)波,来实现d/a转换的工作原理。介绍了利用msp430f449的timer_b的pwm输出产生正弦波和直流电平的方法,并给出了对应的硬件电路和c语言源程序。关键词:msp430f449;脉宽调制;d/a转换d/a conversion based on msp430 timer_b abstract:this paper analyses the principle of utilizing the pwm to realize d/a when the msp430 timer_b is working i

2、n compare mode. it describes the method of using the pwm of msp449f449s timer_b to create a sine wave and a dc level. at last, it gives the corresponding hardware circuit and c language program.key words: msp430f449; pwm; d/a conversion1.简介1.1 msp430单片机介绍 虽然目前在国内市场上应用较多的单片机仍然是8位单片机,但是由美国德州仪器(ti)公司推出

3、的16位单片机msp430具有处理能力强、运行速度快、低功耗、指令简单等优点。并采用了jtag技术、flash在线编程技术、bootstrap等诸多先进技术,因此具有很高的性价比,在欧洲市场已得到了非常广泛的应用。虽然msp430进入国内市场的时间不是很长,但是因其具有以上所述的卓越品质,一进入国内市场就被众多电子工程师所青睐。其中msp430f449具有7个工作模式可选8、10、12、16的16位计数器。用其比较模式产生的pwm可以实现d/a转换(d/a conversion)。1.2 pwm d/a简介 很多嵌入式的微控制器(microcontroller)应用都需要产生模拟信号。这种情况

4、下往往是采用集成的或者是分立的数模转换器dac(digital-to-analog converter)来实现。但是采用脉宽调制pwm(pulse-width modulated)信号来实现d/a转换(简写为pwm d/a)也是一种常用的方法。可以用pwm信号产生所需的直流或交流信号。这篇文章以msp430f449的timer_b输出的pwm为例来产生一个200hz的正弦波和一个0.5vcc的直流电平。实际上类似的方法可以用于timer_a以及msp430其它型号的单片机。2. 用pwm实现dac的原理2.1 基本原理 pwm信号是一种具有固定周期(t)不定占空比( )的数字信号,如图1所示。

5、如果pwm信号的占空比随时间变化,那么通过滤波之后的输出信号将是幅度变化的模拟信号。因此通过控制pwm信号的占空比,就可以产生不同的模拟信号。在msp430f449中就是采用ccr0来控制周期t,而用与定时器对应的ccrx寄存器来控制可变占空比,进而实现d/a转换。2.2 分辨率 图1 pwm信号示意图基于timer_b pwm的dac分辨率就等于计数器的长度,通常是ccr0寄存器的值。pwm dac的最低有效位是一个计数值,分辨率是总的计数值。rcounts = lcounts其中rcounts是以计数值为单位的分辨率,lcounts是计数器的总计数值。例如对8-bit dac,计数器的长度

6、为8 bits,或者256个计数值。那么分辨率也就是8 bits,或者256。更一般的情况下,基于pwm定时器和滤波器的pwm dac的分辨率等于产生模拟信号的pwm信号的分辨率。pwm信号的分辨率决定于计数器的长度和pwm计数器能够实现的最小占空比。用数学表达式如下:比特分辨率用下式计算:如果pwm计数器的长度为512个计数值,最小的占空比为2个计数值,那么pwm dac的分辨率就为:,或者以比特表示:。2.3 系统频率 pwm 信号需要的输出频率等于dac的更新频率,因为pwm信号占空比的每一次变化等效于一次dac抽样。pwm 定时器所需的频率取决于pwm信号频率和所需的分辨率。如下所示:

7、在这儿,是所需的pwm定时器频率,是pwm信号的频率,也就是dac的更新频率,n 是所需的比特分辨率。下文即将描述怎样采用8-bit pwm dac来同步产生一个200hz的正弦波。由抽样定理可得,最低的抽样频率应该为400hz。但是通常情况下,pwm信号的频率要远高于nyquist抽样速率。这是因为pwm信号的频率越高,对滤波器的阶数就要求越低,合适的滤波器越容易实现。通常抽样速率取nyquist速率的16或者32倍。2.4 所需的msp430资源 文中的例子是用msp430f449的timer_b再加外部滤波器来产生一个200hz的正弦波和一个0.5vcc的直流电平的。将timer_b配置

8、为16-bit、up模式。在这种模式下计数器计数至ccr0,然后复位从0开始重新计数。给ccr0赋值255也就意味着计数器的长度为8bits。ccr1和tb1用于产生正弦波,ccr2和tb2用于产生直流电平。输出模式都选为模式7,即pwm复位/置位模式。如图2所示,在这种模式下,复位后每一个定时器的输出都为高电平,直到计数器达到各自的ccrx值时变为低电平,当计数器达到ccr0时再置位。也就是说ccrx的值决定了各自正脉冲的宽带。若ccrx的值是变化的,就可以产生可变宽度的脉冲,下文中的正弦波就是用这种办法产生的;若不变则产生的是固定宽度的脉冲,下文中的直流电平就是这样产生的。最后smclk用

9、作timer_b的时钟源。系统采用32768hz的钟表晶振,通过采用内部硬件锁频环fll(frequency-locked-loop),来校准dco(digital control oscillator)频率为系统提供mclk/smclk时钟。图2 输出模式7:pwm复位/置位示意图 3. 实现电路 用timer_b pwm实现dac外围电路比较简单,如图3所示。实际上外围电路就是晶振电路和rc低通滤波器。图3 msp430f449实现d/a电路图 3.1 正弦信号的产生 在这个例子中,一个正弦波用32个抽样值生成。正弦波的频率为200hz,所以每秒要抽样20032=6400次,也就是说=6.

10、4khz。每完成一次抽样要计数28,所以所需的时钟频率为。抽样值包含在程序开始的一个正弦表中,通过调用中断函数,在每个pwm周期结束时,将新的正弦波抽样值载入捕获/比较寄存器ccr1中。因此产生的pwm信号的脉冲宽度就决定了正弦波在每一个时刻的抽样值,将这个pwm信号经过低通滤波,即得所需的正弦波。3.2 直流电平的产生 直流电平产生比较简单,因为它对应的pwm占空比是一定的。直流电平直接正比于pwm信号的占空比。要产生0.5vcc的直流电平,pwm的占空比显然是50%(考虑到损耗,实际应大一些)。只需要简单地将ccr2的值设置为128,并且无须变化就可以得到50%占空比的pwm信号。将得到的

11、pwm信号通过rc网络进行低通滤波,即可得到0.5vcc的直流电平。3.3 滤波器设计 图4 软件流程对两路输出都采用了结构简单的rc滤波器,如图3所示。之所以采用这种结构,一是因为rc滤波器结构简单,二是为了实现低功耗,尽量避免采用有源器件。用于交流信号的滤波器是一个双极点级联rc滤波器。如果滤波器阶数过高,可以采用提高的抽样频率的办法来降低滤波器阶数。滤波器的截至频率fc由下式来计算: 当r2 ? r1时滤波器的响应较好。但是如果截至频率很接近信号带宽边沿,将会导致相当大的衰减。因此为了减小滤波器的衰减,截至频率应该大于信号带宽边沿,但是要远小于pwm信号的频率。用于产生直流电平的滤波器仅

12、仅是用来储存电荷的,而不像交流信号滤波器那样用来滤波。因此采用了一个简单的单极rc滤波器。4.程序流程 用msp430f449的timer_b的pwm来产生正弦波和直流电平的程序比较简单,流程如图4所示。msp430f449自身有fll,可用它来实现dco的频率校准。但是dco的频率只能锁定在aclk的整数倍上,所以对于没有fll的器件,或者所需频率不是aclk整数倍的情况下,要用timer_a或者其它的定时器进行dco频率校准,这也就是所谓的软锁频。事实上实际的d/a转换常常是一些随时间变化的非周期信号。它们对时钟的精度要求不是很高,因此大多数情况下硬件fll是可以胜任的。5. 程序清单 m

13、sp430的另外一个特点是用c语言编写程序简单,而且效率较高。本例就采用c语言编写了程序。清单如下: #include #include int sampletimes=0; /*定义正弦表,并用32个抽样值初始化正弦表,不要用0抽样*/ int sintable=255,254,246,234,219,199,177,153,128,103,79,57,37,22,10,2, 1,2,10,22,37,57,79,103,128,153,177,199,219,234,246,255; void main(void) int i; wdtctl = wdtpw +wdthold;/ 禁止看门

14、狗定时器/*初始化端口*/ p2dir |= 0x0c;/ p2.2和p2.3为输出 p2sel |= 0x0c;/ p2.2和p2.3分别为tb1和tb2/*设置系统时钟*/ fll_ctl0 = xcap18pf;/ 设置xtal1的负载电容 scfqctl = 50-1;/ 1.6384mhz/32768hz = 50,fdco=mclk=1.6384mhz for (i = 50000; i; i-);/ 晶振初始化延时/*设置timer_b*/ tbctl = tbssel1 + tbclr;/ 选择smclk为时钟,定时器清除 tbctl|=mc_1+cntl_0+tbclgrp_

15、0;/选择up,16位模式 tbcctl0=ccie;/将ccr0设为比较模式,中断允许 tbccr0=256-1;/pwm的周期为256,也就是dac为8bit tbcctl1=outmod_7+clld_1;/将ccrx设为比较模式,中断禁止 tbcctl2=outmod_7+clld_1;/选择输出模式7,当tbr计数到0时ccrx数据加载到tbctlx tbccr1=sintablesampletimes;/将正弦表加载到ccr1 tbccr2=128;/pwm的占空比为50%,产生0.5vcc的直流电平 _eint();/中断允许 for (;) _bis_sr(lpm0_bits);/cup进入低功耗模式 _nop(); /调用中断函数 interrupt timerb0_vector void t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论