pwm做DAC.docx

上传人:小飞机 文档编号:3164825 上传时间:2023-03-11 格式:DOCX 页数:8 大小:41.06KB
返回 下载 相关 举报
pwm做DAC.docx_第1页
第1页 / 共8页
pwm做DAC.docx_第2页
第2页 / 共8页
pwm做DAC.docx_第3页
第3页 / 共8页
pwm做DAC.docx_第4页
第4页 / 共8页
pwm做DAC.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《pwm做DAC.docx》由会员分享,可在线阅读,更多相关《pwm做DAC.docx(8页珍藏版)》请在三一办公上搜索。

1、pwm做DAC基于MSP430 Timer_B的D/A转换 解放军理工大学通信工程学院赵陆文屈德新 摘要:本文分析了利用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

2、to realize D/A when the MSP430 Timer_B is working in 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 conversion 1.简介 1.1 MS

3、P430单片机介绍 虽然目前在国内市场上应用较多的单片机仍然是8位单片机,但是由美国德州仪器公司推出的16位单片机MSP430具有处理能力强、运行速度快、低功耗、指令简单等优点。并采用了JTAG技术、FLASH在线编程技术、BOOTSTRAP等诸多先进技术,因此具有很高的性价比,在欧洲市场已得到了非常广泛的应用。虽然MSP430进入国内市场的时间不是很长,但是因其具有以上所述的卓越品质,一进入国内市场就被众多电子工程师所青睐。其中MSP430F449具有7个工作模式可选8、10、12、16的16位计数器。用其比较模式产生的PWM可以实现D/A转换。 1.2 PWM D/A简介 很多嵌入式的微控

4、制器应用都需要产生模拟信号。这种情况下往往是采用集成的或者是分立的数模转换器DAC来实现。但是采用脉宽调制PWM信号来实现D/A转换也是一种常用的方法。可以用PWM信号产生所需的直流或交流信号。这篇文章以MSP430F449的Timer_B输出的PWM为例来产生一个200Hz的正弦波和一个0.5VCC的直流电平。实际上类似的方法可以用于Timer_A以及MSP430其它型号的单片机。 2. 用PWM实现DAC的原理 2.1 基本原理 PWM信号是一种具有固定周期不定占空比的数字信号,如图1所示。如果PWM信号的占空比随时间变化,那么通过滤波之后的输出信号将是幅度变化的模拟信号。因此通过控制PW

5、M信号的占空比,就可以产生不同的模拟信号。在MSP430F449中就是采用CCR0来控制周期T,而用与定时器对应的CCRx寄存器来控制可变占空比,进而实现D/A转换。 2.2 分辨率 基于Timer_B PWM的DAC分辨率就等于计数器的长度,通常是CCR0寄存器的值。PWM DAC的最低有效位是一个计数值,分辨率是总的计数值。 Rcounts = Lcounts 其中Rcounts是以计数值为单位的分辨率,Lcounts是计数器的总计数值。例如对8-bit DAC,图1 PWM信号示意图 计数器的长度为8 bits,或者256个计数值。那么分辨率也就是8 bits,或者256。 更一般的情况

6、下,基于PWM定时器和滤波器的PWM DAC的分辨率等于产生模拟信号的PWM信号的分辨率。PWM信号的分辨率决定于计数器的长度和PWM计数器能够实现的最小占空比。用数学表达式如下: Rcounts = ,其中 = Lcounts,C是最小占空比。 比特分辨率用下式计算: 如果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配置为16-bit、

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

9、的时钟源。系统采用32768Hz的钟表晶振,通过采用内部硬件锁频环FLL,来校准DCO频率为系统提供MCLK/SMCLK时钟。 图2 输出模式7:PWM复位/置位示意图 3. 实现电路 用Timer_B PWM实现DAC外围电路比较简单,如图3所示。实际上外围电路就是晶振电路和RC低通滤波器。 图3 MSP430F449实现D/A电路图 3.1 正弦信号的产生 在这个例子中,一个正弦波用32个抽样值生成。正弦波的频率为200Hz,所以每秒要抽样20032=6400次,也就是说率为=6.4KHz。每完成一次抽样要计数28,所以所需的时钟频。抽样值包含在程序开始的一个正弦表中,通过调用中断函数,在

10、每个PWM周期结束时,将新的正弦波抽样值载入捕获/比较寄存器CCR1中。因此产生的PWM信号的脉冲宽度就决定了正弦波在每一个时刻的抽样值,将这个PWM信号经过低通滤波,即得所需的正弦波。 3.2 直流电平的产生 直流电平产生比较简单,因为它对应的PWM占空比是一定的。直流电平直接正比于PWM信号的占空比。要产生0.5VCC的直流电平,PWM的占空比显然是50%。只需要简单地将CCR2的值设置为128,并且无须变化就可以得到50%占空比的PWM信号。将得到的PWM信号通过RC网络进行低通滤波,即可得到0.5VCC的直流电平。 3.3 滤波器设计 对两路输出都采用了结构简单的RC滤波器,如图3所示

11、。之所以采用这种结构,一是因为RC滤波器结构简单,二是为了实现低功耗,尽量避免采用有源器件。 用于交流信号的滤波器是一个双极点级联RC滤波器。如果滤波器阶数过高,可以采用提高的抽样频率的办法来降低滤波器阶数。滤波器的截至频率fc由下式来计算:当R2 ? R1时滤波器的响应较好。但是如果截至频率很接近信号带宽边沿,将会导致相当大的衰减。因此为了减小滤波器的衰减,截至图4 软件流程 频率应该大于信号带宽边沿,但是要远小于PWM信号的频率。 用于产生直流电平的滤波器仅仅是用来储存电荷的,而不像交流信号滤波器那样用来滤波。因此采用了一个简单的单极RC滤波器。 4.程序流程 用MSP430F449的Ti

12、mer_B的PWM来产生正弦波和直流电平的程序比较简单,流程如图4所示。MSP430F449自身有FLL,可用它来实现DCO的频率校准。但是DCO的频率只能锁定在ACLK的整数倍上,所以对于没有FLL的器件,或者所需频率不是ACLK整数倍的情况下,要用Timer_A或者其它的定时器进行DCO频率校准,这也就是所谓的软锁频。事实上实际的D/A转换常常是一些随时间变化的非周期信号。它们对时钟的精度要求不是很高,因此大多数情况下硬件FLL是可以胜任的。 5. 程序清单 MSP430的另外一个特点是用C语言编写程序简单,而且效率较高。本例就采用C语言编写了程序。清单如下: #include #incl

13、ude 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; / 禁止看门狗定时器 /*初始化端口*/ P2DIR |= 0x0C; / P2.2和P2.3为输出 P2SEL |= 0x0C; / P2

14、.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_0; /选择up,16位模式 TBCCTL0=CCIE; /将CCR0设为比较模式,中断允许 TBCCR0=2

15、56-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_VEC

16、TOR void Timer_B(void) SampleTimes=(SampleTimes+1)%32; TBCCR1=SinTableSampleTimes; /将新的抽样值装入CCR1 参考文献 1 MSP430x4xx Family Users Guide (SLAU056B). 2 Mike Mitchell, Using PWM Timer_B as a DAC(SLAA116). 3胡大可, MSP430系列FLASH型超低功耗16位单片机. 北京航空航天大学出版社, 2001. 作者简介: 赵陆文,男,解放军理工大学通信工程学院2000级硕士研究生,主要研究方向为微波通信; 通信地址: 南京通信工程学院研一队. 邮编: 210007 电话: 025-3384611-48804 电子邮件: zhaoluwen 屈德新男解放军理工大学通信工程学院微波教研室副教授。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号