<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于MSP430 Timer_B的D/A轉(zhuǎn)換及C語(yǔ)言源程序

          基于MSP430 Timer_B的D/A轉(zhuǎn)換及C語(yǔ)言源程序

          作者: 時(shí)間:2016-11-17 來(lái)源:網(wǎng)絡(luò) 收藏

          本文分析了利用在比較模式下輸出的脈寬調(diào)制(PWM)波,來(lái)實(shí)現(xiàn)/轉(zhuǎn)換的工作原理。介紹了利用MSP430F449的的PWM輸出產(chǎn)生正弦波和直流電平的方法,并給出了對(duì)應(yīng)的硬件電路和。

          1.簡(jiǎn)介

          1.1 單片機(jī)介紹

          雖然目前在國(guó)內(nèi)市場(chǎng)上應(yīng)用較多的單片機(jī)仍然是8位單片機(jī),但是由美國(guó)德州儀器(TI)公司推出的16位單片機(jī)具有處理能力強(qiáng)、運(yùn)行速度快、低功耗、指令簡(jiǎn)單等優(yōu)點(diǎn)。并采用了JTG技術(shù)、FLSH在線編程技術(shù)、BOOTSTRAP等諸多先進(jìn)技術(shù),因此具有很高的性價(jià)比,在歐洲市場(chǎng)已得到了非常廣泛的應(yīng)用。雖然MSP430進(jìn)入國(guó)內(nèi)市場(chǎng)的時(shí)間不是很長(zhǎng),但是因其具有以上所述的卓越品質(zhì),一進(jìn)入國(guó)內(nèi)市場(chǎng)就被眾多電子工程師所青睞。其中MSP430F449具有7個(gè)工作模式可選8、10、12、16的16位計(jì)數(shù)器。用其比較模式產(chǎn)生的PWM可以實(shí)現(xiàn)/A轉(zhuǎn)換(/A conversion)。

          1.2 PWM D/A簡(jiǎn)介

          很多嵌入式微控制器(microcontroller)應(yīng)用都需要產(chǎn)生模擬信號(hào)。這種情況下往往是采用集成的或者是分立的數(shù)模轉(zhuǎn)換器DAC(digital-to-analog converter)來(lái)實(shí)現(xiàn)。但是采用脈寬調(diào)制PWM(pulse-width modulated)信號(hào)來(lái)實(shí)現(xiàn)D/A轉(zhuǎn)換(簡(jiǎn)寫(xiě)為PWM D/A)也是一種常用的方法??梢杂肞WM信號(hào)產(chǎn)生所需的直流或交流信號(hào)。這篇文章以MSP430F449的輸出的PWM為例來(lái)產(chǎn)生一個(gè)200Hz的正弦波和一個(gè)0.5VCC的直流電平。實(shí)際上類(lèi)似的方法可以用于Timer_A以及MSP430其它型號(hào)的單片機(jī)。

          2. 用PWM實(shí)現(xiàn)DAC的原理

          2.1 基本原理

          PWM信號(hào)是一種具有固定周期(T)不定占空比()的數(shù)字信號(hào),如圖1所示。如果PWM信號(hào)的占空比隨時(shí)間變化,那么通過(guò)濾波之后的輸出信號(hào)將是幅度變化的模擬信號(hào)。因此通過(guò)控制PWM信號(hào)的占空比,就可以產(chǎn)生不同的模擬信號(hào)。在MSP430F449中就是采用CCR0來(lái)控制周期T,而用與定時(shí)器對(duì)應(yīng)的CCRx寄存器來(lái)控制可變占空比,進(jìn)而實(shí)現(xiàn)D/A轉(zhuǎn)換。

          2.2 分辨率

          圖1 PWM信號(hào)示意圖

          基于Timer_B PWM的DAC分辨率就等于計(jì)數(shù)器的長(zhǎng)度,通常是CCR0寄存器的值。PWM DAC的最低有效位是一個(gè)計(jì)數(shù)值,分辨率是總的計(jì)數(shù)值。

          Rcounts = Lcounts

          其中Rcounts是以計(jì)數(shù)值為單位的分辨率,Lcounts是計(jì)數(shù)器的總計(jì)數(shù)值。例如對(duì)8-bit DAC,計(jì)數(shù)器的長(zhǎng)度為8 bits,或者256個(gè)計(jì)數(shù)值。那么分辨率也就是8 bits,或者256。

          更一般的情況下,基于PWM定時(shí)器和濾波器的PWM DAC的分辨率等于產(chǎn)生模擬信號(hào)的PWM信號(hào)的分辨率。PWM信號(hào)的分辨率決定于計(jì)數(shù)器的長(zhǎng)度和PWM計(jì)數(shù)器能夠?qū)崿F(xiàn)的最小占空比。用數(shù)學(xué)表達(dá)式如下:

          在這兒,是所需的PWM定時(shí)器頻率,是PWM信號(hào)的頻率,也就是DAC的更新頻率,n 是所需的比特分辨率。下文即將描述怎樣采用8-bit PWM DAC來(lái)同步產(chǎn)生一個(gè)200Hz的正弦波。由抽樣定理可得,最低的抽樣頻率應(yīng)該為400Hz。但是通常情況下,PWM信號(hào)的頻率要遠(yuǎn)高于Nyquist抽樣速率。這是因?yàn)镻WM信號(hào)的頻率越高,對(duì)濾波器的階數(shù)就要求越低,合適的濾波器越容易實(shí)現(xiàn)。通常抽樣速率取Nyquist速率的16或者32倍。

          2.4 所需的MSP430資源

          文中的例子是用MSP430F449的Timer_B再加外部濾波器來(lái)產(chǎn)生一個(gè)200Hz的正弦波和一個(gè)0.5VCC的直流電平的。將Timer_B配置為16-bit、up模式。在這種模式下計(jì)數(shù)器計(jì)數(shù)至CCR0,然后復(fù)位從0開(kāi)始重新計(jì)數(shù)。給CCR0賦值255也就意味著計(jì)數(shù)器的長(zhǎng)度為8bits。CCR1和TB1用于產(chǎn)生正弦波,CCR2和TB2用于產(chǎn)生直流電平。輸出模式都選為模式7,即PWM復(fù)位/置位模式。如圖2所示,在這種模式下,復(fù)位后每一個(gè)定時(shí)器的輸出都為高電平,直到計(jì)數(shù)器達(dá)到各自的CCRx值時(shí)變?yōu)榈碗娖?,?dāng)計(jì)數(shù)器達(dá)到CCR0時(shí)再置位。也就是說(shuō)CCRx的值決定了各自正脈沖的寬帶。若CCRx的值是變化的,就可以產(chǎn)生可變寬度的脈沖,下文中的正弦波就是用這種辦法產(chǎn)生的;若不變則產(chǎn)生的是固定寬度的脈沖,下文中的直流電平就是這樣產(chǎn)生的。最后SMCLK用作Timer_B的時(shí)鐘源。系統(tǒng)采用32768Hz的鐘表晶振,通過(guò)采用內(nèi)部硬件鎖頻環(huán)FLL(frequency-locked-loop),來(lái)校準(zhǔn)DCO(Digital Control Oscillator)頻率為系統(tǒng)提供MCLK/SMCLK時(shí)鐘。

          圖2 輸出模式7:PWM復(fù)位/置位示意圖

          3. 實(shí)現(xiàn)電路

          用Timer_B PWM實(shí)現(xiàn)DAC外圍電路比較簡(jiǎn)單,如圖3所示。實(shí)際上外圍電路就是晶振電路和RC低通濾波器。

          圖3 MSP430F449實(shí)現(xiàn)D/A電路圖

          3.1 正弦信號(hào)的產(chǎn)生

          在這個(gè)例子中,一個(gè)正弦波用32個(gè)抽樣值生成。正弦波的頻率為200Hz,所以每秒要抽樣200×32=6400次,也就是說(shuō)=6.4KHz。每完成一次抽樣要計(jì)數(shù)28,所以所需的時(shí)鐘頻率為。抽樣值包含在程序開(kāi)始的一個(gè)正弦表中,通過(guò)調(diào)用中斷函數(shù),在每個(gè)PWM周期結(jié)束時(shí),將新的正弦波抽樣值載入捕獲/比較寄存器CCR1中。因此產(chǎn)生的PWM信號(hào)的脈沖寬度就決定了正弦波在每一個(gè)時(shí)刻的抽樣值,將這個(gè)PWM信號(hào)經(jīng)過(guò)低通濾波,即得所需的正弦波。

          3.2 直流電平的產(chǎn)生

          直流電平產(chǎn)生比較簡(jiǎn)單,因?yàn)樗鼘?duì)應(yīng)的PWM占空比是一定的。直流電平直接正比于PWM信號(hào)的占空比。要產(chǎn)生0.5VCC的直流電平,PWM的占空比顯然是50%(考慮到損耗,實(shí)際應(yīng)大一些)。只需要簡(jiǎn)單地將CCR2的值設(shè)置為128,并且無(wú)須變化就可以得到50%占空比的PWM信號(hào)。將得到的PWM信號(hào)通過(guò)RC網(wǎng)絡(luò)進(jìn)行低通濾波,即可得到0.5VCC的直流電平。

          3.3 濾波器設(shè)計(jì)

          圖4 軟件流程

          對(duì)兩路輸出都采用了結(jié)構(gòu)簡(jiǎn)單的RC濾波器,如圖3所示。之所以采用這種結(jié)構(gòu),一是因?yàn)镽C濾波器結(jié)構(gòu)簡(jiǎn)單,二是為了實(shí)現(xiàn)低功耗,盡量避免采用有源器件。

          用于交流信號(hào)的濾波器是一個(gè)雙極點(diǎn)級(jí)聯(lián)RC濾波器。如果濾波器階數(shù)過(guò)高,可以采用提高的抽樣頻率的辦法來(lái)降低濾波器階數(shù)。濾波器的截至頻率fc由下式來(lái)計(jì)算:

          當(dāng)R2 ? R1時(shí)濾波器的響應(yīng)較好。但是如果截至頻率很接近信號(hào)帶寬邊沿,將會(huì)導(dǎo)致相當(dāng)大的衰減。因此為了減小濾波器的衰減,截至頻率應(yīng)該大于信號(hào)帶寬邊沿,但是要遠(yuǎn)小于PWM信號(hào)的頻率。

          用于產(chǎn)生直流電平的濾波器僅僅是用來(lái)儲(chǔ)存電荷的,而不像交流信號(hào)濾波器那樣用來(lái)濾波。因此采用了一個(gè)簡(jiǎn)單的單極RC濾波器。

          4.程序流程

          用MSP430F449的Timer_B的PWM來(lái)產(chǎn)生正弦波和直流電平的程序比較簡(jiǎn)單,流程如圖4所示。MSP430F449自身有FLL,可用它來(lái)實(shí)現(xiàn)DCO的頻率校準(zhǔn)。但是DCO的頻率只能鎖定在ACLK的整數(shù)倍上,所以對(duì)于沒(méi)有FLL的器件,或者所需頻率不是ACLK整數(shù)倍的情況下,要用Timer_A或者其它的定時(shí)器進(jìn)行DCO頻率校準(zhǔn),這也就是所謂的“軟鎖頻”。事實(shí)上實(shí)際的D/A轉(zhuǎn)換常常是一些隨時(shí)間變化的非周期信號(hào)。它們對(duì)時(shí)鐘的精度要求不是很高,因此大多數(shù)情況下硬件FLL是可以勝任的。

          5. 程序清單

          MSP430的另外一個(gè)特點(diǎn)是用編寫(xiě)程序簡(jiǎn)單,而且效率較高。本例就采用編寫(xiě)了程序。清單如下:

          #include 《msp430x44x.h》

          #include 《math.h》

          int SampleTimes=0;

          //***定義正弦表,并用32個(gè)抽樣值初始化正弦表,不要用“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; // 禁止看門(mén)狗定時(shí)器

          //***初始化端口***//

          P2DIR |= 0x0C; // P2.2和P2.3為輸出

          P2SEL |= 0x0C; // P2.2和P2.3分別為T(mén)B1和TB2

          //***設(shè)置系統(tǒng)時(shí)鐘***//

          FLL_CTL0 = XCAP18PF; // 設(shè)置XTAL1的負(fù)載電容

          SCFQCTL = 50-1; // 1.6384MHz/32768Hz = 50,fDCO=MCLK=1.6384MHz

          for (i = 50000; i; i--); // 晶振初始化延時(shí)

          //***設(shè)置Timer_B***//

          TBCTL = TBSSEL1 + TBCLR; // 選擇SMCLK為時(shí)鐘,定時(shí)器清除

          TBCTL|=MC_1+CNTL_0+TBCLGRP_0; //選擇up,16位模式

          TBCCTL0=CCIE; //將CCR0設(shè)為比較模式,中斷允許

          TBCCR0=256-1; //PWM的周期為256,也就是DAC為8bit

          TBCCTL1=OUTMOD_7+CLLD_1; //將CCRx設(shè)為比較模式,中斷禁止

          TBCCTL2=OUTMOD_7+CLLD_1; //選擇輸出模式7,當(dāng)TBR計(jì)數(shù)到0時(shí)CCRx數(shù)據(jù)加載到TBCTLx

          TBCCR1=SinTable[SampleTimes]; //將正弦表加載到CCR1

          TBCCR2=128; //PWM的占空比為50%,產(chǎn)生0.5VCC的直流電平

          _EINT(); //中斷允許

          for (;;)

          { _BIS_SR(LPM0_bits); //CUP進(jìn)入低功耗模式

          _NOP();

          }

          }

          //調(diào)用中斷函數(shù)

          interrupt [TIMERB0_VECTOR] void Timer_B(void)

          {

          SampleTimes=(SampleTimes+1)%32;

          TBCCR1=SinTable[SampleTimes]; //將新的抽樣值裝入CCR1



          關(guān)鍵詞: MSP430 Timer_B D A C語(yǔ)言 源程序

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();