MSP430ADDA轉(zhuǎn)換器的應(yīng)用教學(xué)資料_第1頁
MSP430ADDA轉(zhuǎn)換器的應(yīng)用教學(xué)資料_第2頁
MSP430ADDA轉(zhuǎn)換器的應(yīng)用教學(xué)資料_第3頁
MSP430ADDA轉(zhuǎn)換器的應(yīng)用教學(xué)資料_第4頁
MSP430ADDA轉(zhuǎn)換器的應(yīng)用教學(xué)資料_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第6章 a/d、d/a轉(zhuǎn)換器的應(yīng)用6.1 a/d、d/a轉(zhuǎn)換器的工作原理6.1.1 d/a轉(zhuǎn)換器的工作原理d/a轉(zhuǎn)換器(digital to analog converter)是一種能把數(shù)字量轉(zhuǎn)換成模擬量的電子器件;a/d轉(zhuǎn)換器(analog to digital converter)則相反,它能把模擬量轉(zhuǎn)換成相應(yīng)的數(shù)字量。在微機(jī)控制系統(tǒng)中,經(jīng)常要用到a/d和d/a轉(zhuǎn)換器。d/a轉(zhuǎn)換器從工作原理分為t型電阻網(wǎng)絡(luò)、倒t型電阻網(wǎng)絡(luò)、權(quán)電阻網(wǎng)絡(luò)幾種形式。倒t型電阻網(wǎng)絡(luò)的工作原理如圖6.1所示。圖6.1 倒t型電阻網(wǎng)絡(luò)型d/a轉(zhuǎn)換器輸出電壓 的大小與數(shù)字量具有對應(yīng)的關(guān)系。 d/a轉(zhuǎn)換器的主要性能指標(biāo):

2、1) 分辨率是指輸入數(shù)字量的最低有效位(lsb)發(fā)生變化時(shí),所對應(yīng)的輸出模擬量(電壓或電流)的變化量。它反映了輸出模擬量的最小變化值。分辨率與輸入數(shù)字量的位數(shù)有確定的關(guān)系,可以表示成fs/2n。fs表示滿量程輸入值,n為二進(jìn)制位數(shù)。對于5v的滿量程,采用位的dac時(shí),分辨率為5v/25619.5mv;當(dāng)采用12位的dac時(shí),分辨率則為5v/40961.22mv。顯然,位數(shù)越多分辨率就越高。2) 線性度(也稱非線性誤差)是實(shí)際轉(zhuǎn)換特性曲線與理想直線特性之間的最大偏差。常以相對于滿量程的百分?jǐn)?shù)表示。如是指實(shí)際輸出值與理論值之差在滿刻度的以內(nèi)。3)絕對精度(簡稱精度)是指在整個(gè)刻度范圍內(nèi),任一輸入數(shù)

3、碼所對應(yīng)的模擬量實(shí)際輸出值與理論值之間的最大誤差。絕對精度是由dac的增益誤差(當(dāng)輸入數(shù)碼為全1時(shí),實(shí)際輸出值與理想輸出值之差)、零點(diǎn)誤差(數(shù)碼輸入為全時(shí),dac的非零輸出值)、非線性誤差和噪聲等引起的。絕對精度(即最大誤差)應(yīng)小于1個(gè)lsb。4)建立時(shí)間是指輸入的數(shù)字量發(fā)生滿刻度變化時(shí),輸出模擬信號達(dá)到滿刻度值的1/2lsb所需的時(shí)間。是描述d/a轉(zhuǎn)換速率的一個(gè)動態(tài)指標(biāo)。電流輸出型dac的建立時(shí)間短。電壓輸出型dac的建立時(shí)間主要決定于運(yùn)算放大器的響應(yīng)時(shí)間。根據(jù)建立時(shí)間的長短,可以將dac分成高速(1s)、中速(1001s)、低速(100s)幾檔。應(yīng)當(dāng)注意,精度和分辨率具有一定的聯(lián)系,但概念

4、不同。dac的位數(shù)多時(shí),分辨率會提高,對應(yīng)于影響精度的量化誤差會減小。但其它誤差(如溫度漂移、線性不良等)的影響仍會使dac的精度變差。6.1.2 典型的d/a轉(zhuǎn)換器dac0832 dac0832芯片由8位輸入寄存器、8位dac寄存器、8位d/a轉(zhuǎn)換及控制電路三部分組成,如圖6-2所示。 dac0832芯片具備雙緩沖、單緩沖和直通三種輸入方式,以便適應(yīng)于各種需要,如要求多路d/a異步輸入、同步轉(zhuǎn)換等。d/a轉(zhuǎn)換結(jié)果采用電流形式輸出,若需要相應(yīng)的模擬電壓信號,可通過一個(gè)高輸入阻抗的線性運(yùn)算放大器實(shí)現(xiàn)。運(yùn)放的反饋電阻可通過rfb端引用片內(nèi)固有電阻,也可外接。dac0832屬于倒t 型電阻網(wǎng)絡(luò)型d/

5、a轉(zhuǎn)換器,內(nèi)部無運(yùn)算放大器。dac0832的主要技術(shù)指標(biāo):1)分辨率8位2)電流建立時(shí)間1s3)只需在滿量程下調(diào)整其線性度4)可單緩沖、雙緩沖或直接數(shù)字輸入;5)低功耗20mw6)單一電源+5 +15v圖6.2 dac0832內(nèi)部結(jié)構(gòu)di0di7:數(shù)據(jù)輸入線,tll電平。ile:數(shù)據(jù)鎖存允許控制信號輸入線,高電平有效。cs:片選信號輸入線,低電平有效。wr1:為輸入寄存器的寫選通信號,低電平有效。xfer:數(shù)據(jù)傳送控制信號輸入線,低電平有效。wr2:為dac寄存器寫選通輸入線,低電平有效。iout1:電流輸出線。當(dāng)輸入全為1時(shí)iout1最大。iout2: 電流輸出線。其值與iout1之和為一常

6、數(shù)。rfb:反饋信號輸入線,芯片內(nèi)部有反饋電阻.vcc:電源輸入線 (+5v+15v)vref:基準(zhǔn)電壓輸入線 (-10v+10v)agnd:模擬地,摸擬信號和基準(zhǔn)電源的參考地.dgnd:數(shù)字地,兩種地線在基準(zhǔn)電源處共地比較好.6.1.3 a/d轉(zhuǎn)換器的工作原理a/d轉(zhuǎn)換器的按工作原理分為積分型、逐次逼近型、并行比較型/串并行型、-調(diào)制型等。積分型ad工作原理是將輸入電壓轉(zhuǎn)換成時(shí)間(脈沖寬度信號)或頻率(脈沖頻率),然后由定時(shí)器/計(jì)數(shù)器獲得數(shù)字值。其優(yōu)點(diǎn)是用簡單電路就能獲得高分辨率,但缺點(diǎn)是由于轉(zhuǎn)換精度依賴于積分時(shí)間,因此轉(zhuǎn)換速率極低。初期的單片ad轉(zhuǎn)換器大多采用積分型,現(xiàn)在逐次比較型已逐步成

7、為主流。下面重點(diǎn)講述逐次逼近式a/d轉(zhuǎn)換器的工作原理。逐次逼近式a/d轉(zhuǎn)換器是一種采用對分搜索原理來實(shí)現(xiàn)a/d轉(zhuǎn)換的方法,邏輯框圖如圖6-3所示。圖6.3 逐次逼近式a/d轉(zhuǎn)換器邏輯框圖逐次逼近轉(zhuǎn)換過程和用天平稱重物非常相似。天平稱重物過程是,從最重的砝碼開始試放,與被稱物體進(jìn)行比較,若物體重于砝碼,則該砝碼保留,否則移去。再加上第二個(gè)次重砝碼,由物體的重量是否大于砝碼的重量決定第二個(gè)砝碼是留下還是移去。照此一直加到最小一個(gè)砝碼為止。將所有留下的砝碼重量相加,就得此物體的重量。仿照這一思路,逐次比較型a/d轉(zhuǎn)換器,就是將輸入模擬信號與不同的參考電壓作多次比較,使轉(zhuǎn)換所得的數(shù)字量在數(shù)值上逐次逼近

8、輸入模擬量對應(yīng)值。圖6.3 逐次逼近式a/d轉(zhuǎn)換器工作原理:啟動信號start發(fā)出后,在第一個(gè)時(shí)鐘脈沖作用下,控制邏輯使n位寄存器的最高位置1,其他位置0,其值送入d/a轉(zhuǎn)換器。輸入電壓首先與d/a轉(zhuǎn)換器輸出電壓(vref/2)相比較,如vinvref/2,比較器輸出為1,若vin vref/2,則為0。比較結(jié)果存于數(shù)據(jù)寄存器的dn-1位。然后在第二個(gè)脈沖作用下,n位寄存器的次高位置1,其他低位置0。如最高位已存1,則此時(shí) vn=(3/4)vref。于是vin再與(3/4)vref相比較,如vin(3/4)vref,則次高位dn-2存1,否則dn-2=0;。以此類推,逐次比較得到輸出數(shù)字量。a

9、/d轉(zhuǎn)換器的主要技術(shù)指標(biāo)1)adc的分辨率是指使輸出數(shù)字量變化一個(gè)相鄰數(shù)碼所需輸入模擬電壓的變化量。常用二進(jìn)制的位數(shù)表示。例如12位adc的分辨率就是12位,或者說分辨率為滿刻度fs的1/212。一個(gè)5v滿刻度的12位adc能分辨輸入電壓變化最小值是5v1/212 =1.22mv。2)偏移誤差是指輸入信號為零時(shí),輸出信號不為零的值,所以有時(shí)又稱為零值誤差。假定adc沒有非線性誤差,則其轉(zhuǎn)換特性曲線各階梯中點(diǎn)的連線必定是直線,這條直線與橫軸相交點(diǎn)所對應(yīng)的輸入電壓值就是偏移誤差。3)滿刻度誤差又稱為增益誤差。adc的滿刻度誤差是指滿刻度輸出數(shù)碼所對應(yīng)的實(shí)際輸入電壓與理想輸入電壓之差。4)線性度有時(shí)

10、又稱為非線性度,它是指轉(zhuǎn)換器實(shí)際的轉(zhuǎn)換特性與理想直線的最大偏差。5)絕對精度是指在一個(gè)轉(zhuǎn)換器中,任何數(shù)碼所對應(yīng)的實(shí)際模擬量輸入與理論模擬輸入之差的最大值,稱為絕對精度。對于adc而言,可以在每一個(gè)階梯的水平中點(diǎn)進(jìn)行測量,它包括了所有的誤差。6) adc的轉(zhuǎn)換速率是能夠重復(fù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換的速度,即每秒轉(zhuǎn)換的次數(shù)。而完成一次a/d轉(zhuǎn)換所需的時(shí)間(包括穩(wěn)定時(shí)間),則是轉(zhuǎn)換速率的倒數(shù)。實(shí)例6-1 d/a轉(zhuǎn)換器應(yīng)用一:鋸齒波、三角波和方波發(fā)生器 任務(wù)要求:以msp430f249為控制核心,dac0832為數(shù)模轉(zhuǎn)換器,設(shè)計(jì)一個(gè)簡易波形發(fā)生器,分別產(chǎn)生鋸齒波、三角波和方波,周期均為100ms,產(chǎn)生的波形如圖6

11、.4所示。圖6.4 鋸齒波、三角波和方波示意圖1)硬件電路設(shè)計(jì)數(shù)模轉(zhuǎn)換器采用通用的8位d/a轉(zhuǎn)換芯片dac0832,dac0832接成直通方式工作,工作和參考電源均為+5v。反相放大電路采用通用運(yùn)放ua741,工作電源為15v,反饋電阻直接采用dac0832的內(nèi)部電阻。msp430f249單片機(jī)的p4口作為數(shù)據(jù)輸出口,d/a轉(zhuǎn)換結(jié)果由仿真軟件的虛擬示波器進(jìn)行觀察。系統(tǒng)硬件電路如圖6.5所示。圖6.5 簡易波形發(fā)生器硬件電路2)程序設(shè)計(jì)為了精確控制輸出波形的周期,單片機(jī)cpu時(shí)鐘采用xt2外接8mhz晶振。設(shè)置msp430f249單片機(jī)的p4口為輸出,p4口輸出的數(shù)據(jù)由小到大,例如從0到0xff

12、就能產(chǎn)生鋸齒波。要求產(chǎn)生的鋸齒波周期為100ms,因此,單片機(jī)輸出的每個(gè)數(shù)據(jù)保持時(shí)間為100000/256=390.625us;p4口輸出的數(shù)據(jù)由小到大,再由大到小,例如從0加一變化到0xff,再從0xff減一變化到0就能產(chǎn)生三角波,單片機(jī)輸出的每個(gè)數(shù)據(jù)保持時(shí)間為鋸齒波的一半,即195us;方波高電平-1v,低電平-5v,對應(yīng)的p4口數(shù)據(jù)分別51和255,方波高電平和低電平時(shí)間各為50ms。#include msp430f249.h#define cpu_f (double)8000000)/系統(tǒng)時(shí)鐘為8mhz#define delay_us(x) _delay_cycles(long)(cp

13、u_f*(double)x/1000000.0)#define delay_ms(x) _delay_cycles(long)(cpu_f*(double)x/1000.0)void sawtooth(void) char i; p4out=i+; /i的值從0到255,不斷循環(huán) delay_us(390); /微秒的延時(shí) void triangular(void) char i; for(i=0;i0;i-) p4out=i; /i的值從0到255 delay_us(195); /微秒的延時(shí) void square(void) p4out=51; delay_ms(50); /毫秒的延時(shí) p

14、4out=255; delay_ms(50); /毫秒的延時(shí) void main( void ) unsigned int i; wdtctl = wdtpw + wdthold;/關(guān)看門狗 bcsctl1 &= xt2off; /使 tx2 有效,tx2 上電時(shí)默認(rèn)為關(guān)閉的. do ifg1 &= ofifg; /清振蕩器失效標(biāo)志 for(i= 0xff; i0; i-);/延時(shí),待穩(wěn)定. while (ifg1 & ofifg)!=0); /若振蕩器失效標(biāo)志有效 bcsctl2 |= selm1; /使 mclk = xt2 p4dir=0xff; while(1) sawtooth();

15、/鋸齒波 /triangular();/三角波 /square();/方波 在 iar 軟件430的編譯器里面我們可以利用它內(nèi)部的延時(shí)子程序來實(shí)現(xiàn)我們想要的高精度軟件延時(shí),方法如下:將以下代碼復(fù)制到你的*.c源文件中。#define cpu_f (double)8000000)#define delay_us(x) _delay_cycles(long)(cpu_f*(double)x/1000000.0)#define delay_ms(x) _delay_cycles(long)(cpu_f*(double)x/1000.0) 在 #define cpu_f (double)8000000

16、) 語句里 8000000 修改成你當(dāng)前msp430 cpu的主頻頻率,即cpu的mclk。單位為hz。本例中的8000000為mclk=8mhz 的意思。_delay_cycles()是編譯系統(tǒng)函數(shù)。3)仿真結(jié)果與分析通過子程序調(diào)用,分別仿真運(yùn)行后得到仿真結(jié)果如圖6.6至圖6.8所示,三種波形的幅值、周期均滿足課題要求。圖6.6 周期100ms的鋸齒波圖6.7 周期100ms的三角波圖6.8 周期100ms的方波思考:1.本電路運(yùn)放需要15v電源,請問能采用單電源運(yùn)放完成本課題任務(wù)嗎?2.本電路輸出電壓為負(fù),要得到正電壓輸出怎么實(shí)現(xiàn)?實(shí)例6.2 d/a轉(zhuǎn)換器應(yīng)用二:正弦波發(fā)生器 任務(wù)要求:在

17、實(shí)例6-1的簡易波形發(fā)生器基礎(chǔ)上實(shí)現(xiàn)正弦波信號輸出,最大值5v,頻率為50hz。1)硬件電路設(shè)計(jì)圖6.5簡易波形發(fā)生器硬件電路只能輸出0-5v電壓,本課題要求輸出最大值5v正弦信號,運(yùn)放電路采用兩級設(shè)計(jì),第二級為加法電路,可以實(shí)現(xiàn)雙極性輸出。正弦波發(fā)生器如圖6.9所示,當(dāng)v1out=0時(shí),v2out=+5v;當(dāng)v1out=-2.5v時(shí),v2out=0;當(dāng)v1out=-5v時(shí),v2out=-5v。因此,圖6.9雙極性電路就能實(shí)現(xiàn)輸出5v電壓信號。圖6.9 正弦波發(fā)生器電路2)程序設(shè)計(jì)由單片機(jī)產(chǎn)生正弦波信號一般方法是事先建立一張正弦波數(shù)據(jù)表,單片機(jī)按查表方式經(jīng)d/a輸出得到正弦波信號。我們采用的d

18、a轉(zhuǎn)換器是8位的,因此正弦波數(shù)據(jù)表最多256個(gè)值。一般單片機(jī)輸出64點(diǎn)或128點(diǎn),經(jīng)da電路后得到的正弦波波形就比較完美了,下面我們以128點(diǎn)輸出為例完成本課題任務(wù)。要求正弦波頻率為50hz,那么周期就是20ms,20000/128=156.25us,即單片機(jī)輸出的每個(gè)數(shù)據(jù)保持156us。為了得到128點(diǎn)的正弦波數(shù)據(jù)表,我們在matlab環(huán)境中新建如下的m文件。x=0:1:127; %取128點(diǎn)y=round(127*sin(2*pi*x/128)+128; %得到正弦波數(shù)據(jù)fid=fopen (d:sin256.txt,w); %新建并打開d:sin256.txt文件,寫允許fprintf

19、(fid,%d,y); %將數(shù)據(jù)寫入d:sin256.txt文件fclose (fid ); %關(guān)閉d:sin256.txt文件plot (x,y) %畫圖查看正弦曲線matlab語句說明:round()為取整數(shù)函數(shù),四舍五入,da轉(zhuǎn)換值只能是正數(shù);fopen()和fclose()分別為文件打開和關(guān)閉函數(shù)。以上程序運(yùn)行后,可以到d盤根目錄中找到sin256.txt文件,得到正弦波數(shù)據(jù)。#include msp430f249.h#define cpu_f (double)8000000)/系統(tǒng)時(shí)鐘為8mhz#define delay_us(x) _delay_cycles(long)(cpu_f

20、*(double)x/1000000.0)#define delay_ms(x) _delay_cycles(long)(cpu_f*(double)x/1000.0)char data_sin128 = 128,134,140,147,153,159,165,171,177,182,188,193,199,204,209,213, 218,222,226,230,234,237,240,243,245,248,250,251,253,254,254,255, 255,255,254,254,253,251,250,248,245,243,240,237,234,230,226,222, 21

21、8,213,209,204,199,193,188,182,177,171,165,159,153,147,140,134, 128,122,116,109,103,97,91,85,79,74,68,63,57,52,47,43,38,34,30,26, 22,19,16,13,11,8,6,5,3,2,2,1,1,1,2,2,3,5,6,8,11,13,16,19,22,26,30, 34,38,43,47,52,57,63,68,74,79,85,91,97,103,109,116,122;/ 128點(diǎn)正弦波樣本值int main( void ) char i; wdtctl = wdt

22、pw + wdthold; p4dir=0xff; / p4口輸出 while(1) for(i=0;i128;i+) p4out=data_sini; delay_us(156); /微秒的延時(shí) 3)仿真結(jié)果與分析圖6.10 d/a輸出的正弦波信號a通道是最大值范圍5v,頻率50hz的正弦波信號; b通道是最大值范圍0-5v,頻率50hz的正弦波信號;a通道和b通道輸出信號相位相差180度。6.2 msp430f249的a/d轉(zhuǎn)換器msp430f249單片機(jī)內(nèi)置了adc12 模塊, adc12是一個(gè)12位精度的a/d轉(zhuǎn)換模塊。從圖6.11 adc12 結(jié)構(gòu)圖中可以看出,adc12 模塊中是由

23、以下部分組成:輸入的 16 路模擬開關(guān),adc內(nèi)部電壓參考源,adc12 內(nèi)核,adc 時(shí)鐘源部分,采集與保持/觸發(fā)源部分,adc 數(shù)據(jù)輸出部分,adc 控制寄存器等組成。圖6.11 adc12結(jié)構(gòu)圖1)輸入的16 路模擬開關(guān)16路模擬開關(guān)選擇外部的8路模擬信號輸入和內(nèi)部4路參考電源輸入。外部8路從a0a7 輸入,主要是外部測量時(shí)的模擬變量信號。內(nèi)部4路分別是:1路 veref+,外部參考電源的正端;1路vref-/veref- ,內(nèi)部/外部參考電源負(fù)端;1 路 (avcc-avss)/2 電壓源;1路內(nèi)部溫度傳感器源。片內(nèi)溫度傳感器可以用于測量芯片上的溫度,而其他電源參考源輸入可以用作 ad

24、c12 的校驗(yàn)之用,在設(shè)計(jì)時(shí)可作自身校準(zhǔn)。 2)adc 內(nèi)部電壓參考源adc 電壓參考源是用于給 adc12 內(nèi)核作為一個(gè)基準(zhǔn)信號之用的,這是 adc 必不可少的一部分。在adc12 模塊中基準(zhǔn)電壓源可以通過軟件來設(shè)置 6 種不同的組合。vr+(有3種)avcc,vref+, veref+;vr- (有2種)avss, vref-/veref-。 3)adc12 內(nèi)核adc12 的模塊內(nèi)核是共用的,通過前端的模擬開關(guān)分別完成采集輸入。adc12 是一個(gè)精度為12 位的 adc 內(nèi)核。內(nèi)核在轉(zhuǎn)換時(shí)會用到兩個(gè)參考基準(zhǔn)電壓,一個(gè)是最大值,當(dāng)模擬開關(guān)輸出的模擬變量大于或等于最大值時(shí) adc內(nèi)核的輸出數(shù)

25、字量為滿量程,也就是 0xfff;另一個(gè)則是最小值,當(dāng)模擬開關(guān)輸出的模擬變量小于或等于最小值時(shí) adc 內(nèi)核的輸出數(shù)字量為最低量程,也就是 0x00。而這兩個(gè)參考電壓是可以通過軟件來編程設(shè)置的。4)adc 時(shí)鐘源部分adc12 的時(shí)鐘源分別有 adc12osc,aclk,mclk,smclk。通過編程可以選擇其中之一的時(shí)鐘源,同時(shí)還可以適當(dāng)?shù)姆诸l。5)采集與保持,觸發(fā)源部分adc12 模塊中有著較好的采集與保持電路,采用不同的設(shè)置有著靈活的應(yīng)用。6)adc 數(shù)據(jù)輸出部分adc 內(nèi)核在每次完成轉(zhuǎn)換時(shí)都會將相應(yīng)通道上的輸出結(jié)果存貯到相應(yīng)通道緩沖區(qū)單元中,共有 16個(gè)通道緩沖單元。同時(shí) 16 個(gè)通道

26、的緩沖單元有著相對應(yīng)的控制寄存器,以實(shí)現(xiàn)更靈活的控制。adc12模塊采樣與轉(zhuǎn)換所需的時(shí)序控制:adc12clk轉(zhuǎn)換時(shí)鐘,sampcon采樣及轉(zhuǎn)換信號,sht控制的采樣周期,shs控制的采樣觸發(fā)源,adc12ssel選擇的內(nèi)核時(shí)鐘源,adc12div選擇的分頻系數(shù)。具體如何設(shè)置,見寄存器說明部分。adc12模塊有4種轉(zhuǎn)換模式:單通道單次轉(zhuǎn)換、序列通道單次轉(zhuǎn)換、單通道多次轉(zhuǎn)換和序列通道多次轉(zhuǎn)換,它們由寄存器adc12ctl1中的conseqx位進(jìn)行選擇。(1)單通道單次轉(zhuǎn)換模式(2)序列通道單次轉(zhuǎn)換模式(3)單通道多次轉(zhuǎn)換模式(4)序列通道多次轉(zhuǎn)換模式adc12 模塊的所有寄存器:序號地址寄存器符

27、號寄存器名稱101a0hadc12ctl0轉(zhuǎn)換控制寄存器 0201a2hadc12ctl1轉(zhuǎn)換控制寄存器 1301a4hadc12ifg中斷標(biāo)志寄存器401a6hadc12ie中斷使能寄存器501a8hadc12iv中斷向量寄存器6210140h015ehadc12mctl0adc12mctl15存儲控制寄存器 0存儲控制寄存器152237080h08fhadc12mem0adc12 mem 15存儲寄存器 0存儲寄存器 15adc12控制寄存器0,adc12ctl015141312111098sht1xsht0x76543210mscref2.5vrefonadc12onadc12oviea

28、dc12tvieencadc12scsht1x(x=03) 定義adc12mem8 adc12mem15的采樣保持時(shí)間sht0x(x=03) 定義adc12mem0 adc12mem7的采樣保持時(shí)間sht00sht03adc12clk的周期宏定義sht00sht03adc12clk的周期宏定義00004sht0_01000256sht0_800018sht0_11001384sht0_9001016sht0_21010512sht0_10001132sht0_31011768sht0_11010064sht0_411001024sht0_12010196sht0_511011024sht0_1

29、30110128sht0_611101024sht0_140111192sht0_711111024sht0_15注:sht10sht13的宏定義為sht1_0sht1_15,sht1定義的adc12clk的周期同上表。msc多次采樣轉(zhuǎn)換位,序列通道或單通道多次轉(zhuǎn)換模式有效。0 表示每次采樣轉(zhuǎn)換過程需要shi信號的上升沿來觸發(fā);1表示shi信號的第一個(gè)上升沿觸發(fā)采樣定時(shí)器,但隨后的采樣轉(zhuǎn)換在上次轉(zhuǎn)換完成后自動進(jìn)行。ref2.5v內(nèi)部參考電壓的電壓值選擇位:0選擇 1.5v 內(nèi)部參考電壓;1選擇 2.5v 內(nèi)部參考電壓。refon參考電壓控制: 0內(nèi)部參考電壓發(fā)生器關(guān)閉,1內(nèi)部參考電壓發(fā)生器打開

30、。adc12on adc12 內(nèi)核控制位:0關(guān)閉 adc12 內(nèi)核,1打開 adc12 內(nèi)核。adc12ovie 溢出中斷允許位:0溢出中斷允許,1溢出中斷禁止。當(dāng) adc12memx 中原有的數(shù)據(jù)還沒有被讀出,而現(xiàn)在又有新的轉(zhuǎn)換結(jié)果數(shù)據(jù)要寫入時(shí),則會發(fā)生溢出。如果相應(yīng)的中斷允許,則會發(fā)生中斷請求。adc12tvie 轉(zhuǎn)換時(shí)間溢出中斷允許位:0沒發(fā)生轉(zhuǎn)換時(shí)間溢出,1發(fā)生轉(zhuǎn)換時(shí)間溢出。當(dāng)前轉(zhuǎn)換還沒有完成時(shí),又發(fā)生一次采樣請求,則會發(fā)生轉(zhuǎn)換時(shí)間溢出。如果允許中斷,則會發(fā)生中斷請求。enc 轉(zhuǎn)換允許位:0 轉(zhuǎn)換禁止;1轉(zhuǎn)換允許。只有在該位為高電平時(shí),才能用軟件或外部信號啟動轉(zhuǎn)換。adc12sc 啟動

31、轉(zhuǎn)換控制位:0 不進(jìn)行采樣轉(zhuǎn)換;1啟動采樣轉(zhuǎn)換。adc12控制寄存器2,adc12ctl215141312111098cstartaddxshsxshpissh76543210adc12divxadc12sselxconseqadc12busycstartaddx(x=03) 指定轉(zhuǎn)換結(jié)果存放的存儲器起始地址:該4 位表示的二進(jìn)制數(shù) 0-15 分別對應(yīng)adc12mem0-15,該4 位定義了單次轉(zhuǎn)換地址或序列轉(zhuǎn)換的首地址。shsx(x=0、1)采樣保持的信號源選擇位。序號shs1、shs0信號源00adc12sc01timer_a.out110timer_b.out011timer_b.out

32、1shp采樣信號(sampcon)選擇控制位:0 sampcon信號來自采樣觸發(fā)輸入信號;1 sampcon信號來自采樣定時(shí)器。issh 采樣輸入信號方向控制位:0采樣輸入信號為同向輸入;1采樣輸入信號為反向輸入。adc12divx(x=02) adc12時(shí)鐘源分頻因子選擇位adc12div2adc12div0分頻宏定義0001adc12div_00012adc12div_10103adc12div_20114adc12div_31005adc12div_41016adc12div_51107adc12div_61118adc12div_7adc12sselx(x=0、1) adc12時(shí)鐘源選

33、擇。序號adc12ssel1adc12ssel0時(shí)鐘源宏定義00adc12osc adc12ssel_001aclkadc12ssel_110mclkadc12ssel_211smclkadc12ssel_3conseqx(x=0、1) 轉(zhuǎn)換模式選擇位。序號conseq1conseq0轉(zhuǎn)換模式選擇宏定義00單通道單次轉(zhuǎn)換模式conseq_001序列通道單次轉(zhuǎn)換模式conseq_110單通道多次轉(zhuǎn)換模式conseq_211序列通道多次轉(zhuǎn)換模式conseq_3adc12busy adc12忙標(biāo)志位:0表示沒有活動的操作;1表示 adc12 正處于采樣期間、轉(zhuǎn)換期間或序列轉(zhuǎn)換期間。轉(zhuǎn)換結(jié)果存儲器,a

34、dc12mem0adc12mem15151413121100000msblsb12位轉(zhuǎn)換結(jié)果只用低 12 位,高4位在讀出時(shí)為0。12位轉(zhuǎn)換結(jié)果是右對齊的。adc12轉(zhuǎn)換存儲器控制寄存器,adc12mctl0 adc12mctl1576543210eossrefxinchxeos 序列結(jié)束控制位:0序列沒有結(jié)束;1此序列中最后一次轉(zhuǎn)換srefx(x=02) 參考電壓源選擇位。sref2sref0vr+vr-宏定義000avccavsssref_0001aref+avsssref_1010aeref+avsssref_2011aeref+avsssref_3100avccvref-/veref-

35、sref_4101vref+vref-/ veref-sref_5110aeref+vref-/ veref-sref_6111aeref+vref-/ veref-sref_7inchx(x=03) 輸入通道選擇位。inch3inch0輸入通道宏定義inch3inch0輸入通道宏定義0000a0inch_00110a6inch_60001a1inch_10111a7inch_70010a2inch_21000veref+inch_80011a3inch_31001veref-/veref-inch_90100a4inch_41010片內(nèi)溫度傳感器inch_100101a5inch_51011

36、1111(avcc-avss) /2inch_11 inch_15中斷使能寄存器,adc12ie151413210adc12ie15adc12ie14adc12ie13 adc12ie2adc12ie1adc12ie0adc12ie0 adc12ie15為0時(shí),禁止相應(yīng)的中斷;為1時(shí),允許相應(yīng)的中斷。中斷標(biāo)志寄存器,adc12ifg151413210adc12ifg15adc12ifg14adc12ifg13 adc12ifg2adc12ifg1adc12ifg0當(dāng)ad轉(zhuǎn)換結(jié)束,相應(yīng)的寄存器有轉(zhuǎn)換結(jié)果時(shí),中斷標(biāo)志adc12ifg0adc12ifg15建立中斷向量寄存器,adc12iv15-65

37、-10全部為0adc12iv的值0adc12 是一個(gè)多源中斷:有 18 個(gè)中斷標(biāo)志(adc12ifg.0adc12ifg.15、adc12tov、adc12ov)但只有一個(gè)中斷向量。實(shí)例6.3 簡易數(shù)字電壓表 任務(wù)要求:設(shè)計(jì)一個(gè)簡單的數(shù)字電壓表,輸入電壓范圍02.5v,用4位數(shù)碼管顯示,3位小數(shù)。 1)硬件電路設(shè)計(jì)msp430f249單片機(jī)的內(nèi)部包含12位adc模塊。ad轉(zhuǎn)換參考電源采用內(nèi)部2.5v作為基準(zhǔn),avss接地, vref接10uf電容。外部被測電壓+2.5v經(jīng)電位器接入ad轉(zhuǎn)換器的a0通道。顯示電路采用4位數(shù)碼管模塊動態(tài)顯示,p4口為段碼,p5口低4位為位碼。此電路僅做功能仿真,實(shí)

38、際顯示電路需加適當(dāng)?shù)尿?qū)動電路。2)程序設(shè)計(jì)ad轉(zhuǎn)換采用單通道單次轉(zhuǎn)換模式,程序采用查詢方式讀取ad轉(zhuǎn)換值,然后進(jìn)行量程轉(zhuǎn)換和數(shù)碼管動態(tài)顯示。ad轉(zhuǎn)換基本設(shè)置為允許adc12內(nèi)核工作,時(shí)鐘源選用內(nèi)部adc12osc,使用內(nèi)部參考電壓2.5v,上限vr+=vref+,下限vr-=avss,選擇a0通道,使用采樣定時(shí)器,采樣保持時(shí)間為4個(gè)adc12clk周期。12位ad轉(zhuǎn)換值為04095,量程轉(zhuǎn)換公式為adc12mem0*2500/4096。顯示部分為4位共陽極數(shù)碼管電路,采用動態(tài)掃描方式,每位點(diǎn)亮2ms(仿真時(shí)根據(jù)顯示效果調(diào)整k值大?。?,不斷循環(huán)。ad采樣最快200ksps,一般采樣周期幾十到幾百

39、微秒,不影響數(shù)碼管動態(tài)顯示。#include unsigned char led = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80, 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;/共陽極數(shù)碼管段碼char position4=0x08,0x04,0x02,0x01; /數(shù)碼管位碼unsigned char led_buf = 0,0,0,0,0; /顯示緩沖區(qū)long data;void data_to_buf(void) / 值送顯示緩沖區(qū)函數(shù) char i; for (i=0;i4;i+) led_bufi = data

40、%10; data=data/10; void disp(void) / 掃描顯示函數(shù) char i; unsigned int k; for(i=0;i4;i+) p4out = ledled_bufi; p5out = positioni; if(i=3) p4out &=0x7f; /小數(shù)點(diǎn) for ( k=0; k600; k+) / 延時(shí) p5out = 0x00; /關(guān)顯示 void main(void) volatile unsigned int i; wdtctl = wdtpw+wdthold; / 停止看門狗 p4dir=0xff; /設(shè)置p4口為輸出 p5dir=0xff

41、; /設(shè)置p5口為輸出 p6sel |= 0x01; / io口設(shè)置為ad功能 adc12ctl0 = adc12on+refon+ref2_5v; / adc12工作,使用內(nèi)部參考電壓2.5v adc12ctl1 = shp; / 使用采樣定時(shí)器 adc12mctl0 = sref_1; / vr+=vref+,vr-=avss,選擇a0通道 for ( i=0; i0x3600; i+) / 延時(shí)等待參考電壓建立 adc12ctl0 |= enc; / 允許轉(zhuǎn)換 while (1) adc12ctl0 |= adc12sc; / 啟動轉(zhuǎn)換 while (adc12ifg & bit0)=0

42、); /查詢方式,等待轉(zhuǎn)換結(jié)束 /data=(long)adc12mem0*2500/4096; /仿真時(shí)有點(diǎn)問題,用以下語句代替 data=(long)adc12mem0*25; data=data*10; data=data*10; data=data/4096; data_to_buf(); /數(shù)據(jù)送顯示緩沖區(qū) disp(); / 顯示程序 3)仿真結(jié)果與分析圖6.12 簡單的數(shù)字電壓表外部輸入電壓經(jīng)電位器接入到a0采樣通道,ad轉(zhuǎn)換器的基準(zhǔn)為內(nèi)部2.5v。圖6.12中電壓表顯示0.36v,數(shù)碼管顯示0.357v,忽略誤差,兩者基本一致,我們認(rèn)為ad轉(zhuǎn)換結(jié)果正確。多次調(diào)整電位器,觀察數(shù)碼

43、管顯示的電壓值均符合實(shí)際所測電壓值,因此,完成了“簡單的數(shù)字電壓表”課題任務(wù)。思考:如果采用外部參考電壓,硬件電路和程序設(shè)計(jì)如何改動? 實(shí)例6-4 ad采樣,數(shù)字濾波算法任務(wù)要求:要求在實(shí)例6-3的基礎(chǔ)上,ad采樣轉(zhuǎn)換十次,數(shù)據(jù)取算術(shù)平均值再顯示,從而提高軟件抗干擾能力。分析說明:實(shí)例6-3中,ad采樣轉(zhuǎn)換一次,數(shù)據(jù)就輸出顯示,實(shí)際應(yīng)用時(shí)存在各種干擾因素,顯示的數(shù)據(jù)可能不穩(wěn)定,即輸入電壓不變,led顯示的數(shù)據(jù)不斷變化。除了采用必要的硬件抗干擾措施外,一般在程序中也要采取抗干擾措施。1) 硬件設(shè)計(jì)硬件電路參見圖6.13所示。2) 程序設(shè)計(jì)方法一:利用adc12模塊單通道多次轉(zhuǎn)換模式#includ

44、e #define num_of_results 10static unsigned int resultsnum_of_results; /轉(zhuǎn)換結(jié)果數(shù)組unsigned char led = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80, 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; /共陽極數(shù)碼管char position4=0x08,0x04,0x02,0x01;unsigned char led_buf = 0,0,0,0; /顯示緩沖區(qū)unsigned long data;void data_to_buf(void

45、) /值送顯示緩沖區(qū)函數(shù) char i; for (i=0;i4;i+) led_bufi = data%10; data=data/10; void disp(void) / 掃描顯示函數(shù) char i; unsigned int k; for(i=0;i4;i+) p4out = ledled_bufi; p5out = positioni; if(i=3) p4out &=0x7f; /小數(shù)點(diǎn) for ( k=0; k600; k+) / 延時(shí) p5out = 0x00; /關(guān)顯示 void main(void) char i; wdtctl = wdtpw+wdthold; /停止看門

46、狗 p4dir=0xff; /設(shè)置p4口為輸出 p5dir=0xff; /設(shè)置p5口為輸出 p6sel |= 0x01; /打開 a/d輸入通道 a0adc12ctl0 = adc12on+sht0_15+msc; /開 adc12 模塊,采集時(shí)間分頻系數(shù) n=1024,僅需shi信號首次觸發(fā) adc12ctl1 = shp+conseq_2+adc12div_7;/采樣信號來自采樣定時(shí)器,單通道多次轉(zhuǎn)換模式, adc12時(shí)鐘8分頻 adc12ie = 0x01; /允許a0中斷adc12ifg.0 adc12ctl0 |= enc; /允許轉(zhuǎn)換 adc12ctl0 |= adc12sc; /

47、開始轉(zhuǎn)換 _eint(); while (1) data=0; for(i=0;inum_of_results;i+) data=data+resultsi; data=data/num_of_results; /求平均值data=data*50; data=data*10; data=data*10; data=data/4096; data_to_buf(); /數(shù)據(jù)送顯示緩沖區(qū) disp(); / 顯示程序 #pragma vector=adc12_vector_interrupt void adc12_isr (void) static unsigned char index = 0; resultsindex = adc12mem0; /移動結(jié)果/index = (index+1)%num_o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論