版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1/105
第9章數模轉換器與模數轉換器本章學習目標了解數模轉換器的工作原理及性能指標掌握模數轉換器的應用了解數模轉換器的工作原理及性能指標掌握數模轉換器的應用2/105隨著數字電子技術及計算機技術的廣泛普及與應用,數字信號的傳輸與處理日趨普遍。自然形態(tài)下的物理量多以模擬量的形式存在的,如溫度、濕度、壓力、流量、速度等,實際生產、生活和科學實驗中還會遇到化學量、生物量(包括醫(yī)學)等。從信號工程的角度來看,要進行信號的計算機處理,上述所有的物理量、化學量和生物量等都需要使用相應的傳感器,將其轉換成電信號(稱之為模擬量)將模擬量轉換為計算機能夠識別處理的數字量,而后再進行信號的傳輸、處理、存儲、顯示和控制。3/105同樣,計算機控制外部設備時,如電動調節(jié)閥、調速系統(tǒng)等,需要將計算機輸出的數字信號變換成外設能夠接受的模擬信號。將模擬量轉換成數字量的器件稱為模數轉換器(AnalogtoDigitalConverter,ADC),也稱為A/D轉換器或者ADC器件;將數字量轉換成模擬量的器件稱為數模轉換器(DigitaltoAnalogConverter,DAC),也稱為D/A轉換器。4/105以單片機為核心,具有模擬量輸入和輸出的應用系統(tǒng)結構如圖所示。圖9-1具有模擬量輸入輸出的單片機系統(tǒng)5/105傳感器和變送器的區(qū)別檢測儀表在模擬電子技術條件下,一般是包括傳感器、檢測點取樣設備及放大器(進行抗干擾處理及信號傳輸),當然還有電源及現場顯示部分(可選擇)。傳感器是一種把非電量轉變成電信號的器件。電信號一般分為連續(xù)量、離散量兩種,實際上還可分成模擬量、開關量、脈沖量等。6/105模擬信號一般采用4-20mADC的標準信號傳輸。數字化過程中,常常把傳感器和微處理器及通信網絡接口封裝在一個器件(稱為檢測儀表)中,完成信息獲取、處理、傳輸、存貯等功能。在自動化儀表中經常把檢測儀表稱為變送器,如溫度變送器、壓力變送器等。7/105本章內容安排本章首先介紹模數轉換器的工作原理及性能指標;然后介紹模數轉換器ADS7852與單片機的接口方法及編程應用,介紹STC15F2K60S2單片機片內集成模數轉換模塊的使用;最后介紹數模轉換器TLV5616與單片機的接口方法及編程應用。8/105§9.1模數轉換器的工作原理及性能指標一、模數轉換器的工作原理根據轉換的工作原理不同,模數轉換器可以分為計數-比較式、逐次逼近式和雙斜率積分式。計數-比較式模數轉換器結構簡單,價格便宜,轉換速度慢,較少采用。下面主要介紹逐次逼近式和雙斜率積分式模數轉換器的工作原理。9/1051、逐次逼近式模數轉換器的工作原理逐次逼近式模數轉換器電路框圖如圖所示。圖9-2逐次逼近式模數轉換器的工作原理10/105逐次逼近式模數轉換器主要由逐次逼近寄存器SAR、數字/電壓轉換器、比較器、時序及控制邏輯等部分組成。11/105工作過程當模數轉換器收到“轉換命令”并清除SAR寄存器后,控制電路先設定SAR中的最高位為“1”,其余位為“0”,此預測數據被送至D/A轉換器,轉換成電壓Vc。然后將Vc與輸入模擬電壓Vx在高增益的比較器中進行比較,比較器的的輸出為邏輯0或邏輯1。如果Vx≥Vc,說明此位置“1”是對的,應予保留;如果Vx<Vc,說明此位置“1”不合適,應予清除。按該方法繼續(xù)對次高位進行轉換、比較和判斷,決定次高位應取“1”還是取“0”。重復上述過程,直至確定SAR最低位為止。該過程完成后,狀態(tài)線改變狀態(tài),表示已完成一次完整的轉換,SAR中的內容就是與輸入的模擬電壓對應的二進制數字代碼。12/1052、雙積分式模數轉換器的工作原理雙積分式模數轉換器轉換方法的抗干擾能力比逐次逼近式模數轉換器強。該方法的基礎是測量兩個時間:一個是模擬輸入電壓向電容充電的固定時間另一個是在已知參考電壓下放電所需的時間模擬輸入電壓與參考電壓的比值就等于上述兩個時間值之比。13/105雙積分模數轉換器的組成框圖如圖所示。圖9-3雙積分式模數轉換器的組成框圖14/105雙積分式模數轉換器優(yōu)點具有精度高、抗干擾能力強的特點,在實際工程中得到了使用。由于逐次逼近式模數轉換技術能很好的兼顧速度和精度,故在16位以下的模數轉換器中得到了廣泛應用。15/105二、模數轉換器的性能指標A/D轉換器是實現單片機數據采集的常用外圍器件。A/D轉換器的品種繁多,性能各異,在設計數據采集系統(tǒng)時,首先碰到的問題就是如何選擇合適的A/D轉換器以滿足系統(tǒng)設計的要求。選擇A/D轉換器需要綜合考慮多項因素,如系統(tǒng)技術指標、成本、功耗、安裝等。16/1051、分辨率分辨率是A/D轉換器能夠分辨最小信號的能力,表示數字量變化一個相鄰數碼所需輸入模擬電壓的變化量。分辨率越高,轉換時對輸入模擬信號變化的反應就越靈敏。17/105例如,8位A/D轉換器能夠分辨出滿刻度的1/256,若滿刻度輸入電壓為5V,則該8位A/D轉換器能夠分辨出輸入電壓變化的最小值為19.5mV。分辨率常用A/D轉換器輸出的二進制位數表示。常見的A/D轉換器有8位、10位、12位、14位和16位等。18/105一般把8位以下的ADC器件歸為低分辨率ADC器件;9~12位的ADC器件稱為中分辨率ADC器件;13位以上的ADC器件稱為高分辨率ADC器件。如何選擇
10位以下的ADC器件誤差較大,11位以上對減小誤差并無太大貢獻,但對ADC器件的要求卻提得過高。因此,取10位或11位是合適的。由于模擬信號先經過測量裝置,再經A/D轉換器轉換后才進行處理,因此,總的誤差是由測量誤差和量化誤差共同構成的。19/105A/D轉換器的精度應與測量裝置的精度相匹配。一方面要求量化誤差在總誤差中所占的比重要小,使它不顯著地擴大測量誤差;另一方面必須根據目前測量裝置的精度水平,對A/D轉換器的位數提出恰當的要求。20/1052、通道有的單芯片內部含有多個ADC模塊,可同時實現多路信號的轉換;常見的多路ADC器件只有一個公共的ADC模塊,由一個多路轉換開關實現分時轉換。3、基準電壓基準電壓有內、外基準和單、雙基準之分。21/1054、轉換速率轉換時間:A/D轉換器從啟動轉換到轉換結束,輸出穩(wěn)定的數字量,需要的一定的轉換時間。轉換速率:轉換時間的倒數就是每秒鐘能完成的轉換次數。A/D轉換器的型號不同,轉換時間不同。逐次逼近式單片A/D轉換器轉換時間的典型值為1.0~200μs。22/105應根據輸入信號的最高頻率來確定ADC轉換速度,保證轉換器的轉換速率要高于系統(tǒng)要求的采樣頻率。確定A/D轉換器的轉換速率時,應考慮系統(tǒng)的采樣速率。例如,如果用轉換時間為100μs的A/D轉換器,則其轉換速率為10KHz。根據采樣定理和實際需要,一個周期的波形需采10個樣點,那么這樣的A/D轉換器最高也只有處理頻率為1KHz的模擬信號。對一般的單片機而言,在如此高的采樣頻率下,要在采樣時間內完成A/D轉換以外的工作,如讀取數據、再啟動、保存數據、循環(huán)計數等已經比較困難了。23/1055、采樣/保持器采樣/保持也稱為跟蹤/保持(Track/Hold縮寫T/H)。原則上采集直流和變化非常緩慢的模擬信號時可不用采樣保持器。對于其他模擬信號一般都要加采樣保持器。如果信號頻率不高,A/D轉換器的轉換時間短,即使用高速A/D轉換器時,也可不用采樣/保持器。24/1056、量程量程即所能轉換的電壓范圍,如2.5V、5V和10V。7、滿刻度誤差滿度輸出時對應的輸入信號與理想輸入信號值之差稱為滿刻度誤差。8、線性度實際轉換器的轉移函數與理想直線的最大偏移稱為線性度。25/1059、數字接口方式根據轉換的數據輸出接口方式,A/D轉換器可以分為并行接口和串行接口兩種方式。并行方式一般在轉換后可直接接收,但芯片的引腳比較多;串行方式所用芯片引腳少,封裝小,但需要軟件處理才能得到所需要的數據。在單片機I/O引腳不多的情況下,使用串行器件可以節(jié)省I/O資源。但是并行器件具有明顯的轉換速度優(yōu)勢。在轉換速度要求較高的情況下應選用并行器件。26/10510、模擬信號類型通常ADC器件的模擬輸入信號都是電壓信號。同時根據信號是否過零,還分成單極性(Unipolar)信號和雙極性(Bipolar)信號。11、電源電壓電源電壓有單電源,雙電源和不同電壓范圍之分,早期的ADC器件要有+15V/-15V,如果選用單+5V電源的芯片則可以使用單片機系統(tǒng)電源。27/10512、功耗一般CMOS工藝的芯片功耗較低,對于電池供電的手持系統(tǒng)對功耗要求比較高的場合一定要注意功耗指標。13、封裝常見的封裝有雙列直插封裝(DualIn-linePackage,DIP)和表貼型(SurfaceMountDevices,SMD)封裝。28/105§9.2模數轉換器的應用
本節(jié)首先分別介紹德州儀器公司生產的A/D轉換器ADS7852的應用方法,然后介紹STC15F2K60S2單片機片內集成的ADC模塊的使用。29/105一、12位并行A/D轉換器ADS7852及其應用1、ADS7852簡介ADS7852是德州儀器公司(TexasInstruments,TI)生產的一款高速逐次逼近式A/D轉換器。30/105具有以下主要特點:帶有采樣保持器具有8路模擬量輸入、并行12位輸出內部帶有2.5V的參考電壓源,輸入的采樣電壓可以從0V到2倍的參考電壓值500kHz的采樣頻率,轉換時間最大只需1.75μs單極性5V工作電壓低功耗:13mW封裝形式為TQFP工作溫度為-40℃到+80℃31/105ADS7852的引腳圖如圖所示。圖9-4ADS7852的引腳圖32/105各引腳的功能介紹如下:AIN0~AIN7:8路模擬量輸入引腳。DB0~DB11:12位數字量輸出,其中DB0為最低位,DB11為最高位。A0~A2:8路模擬輸入的地址選擇。Vss:電源電壓,正常接+5V。VREF:外接參考電壓。若不用外接參考電壓,可在此引腳和電源地之間接2.2μF和0.1μF去耦電容各一個。AGND和DGND:分別為模擬地和數字地。CLK:外部時鐘輸入(200KHz~8MHz),時鐘的選擇取決于采樣速度fCLK=16*fSAMPLE。33/105
:忙指示輸出,低電平有效。轉換期間保持低電平,轉換結束后變?yōu)楦唠娖?。:片選信號,輸入,低電平有效。/CS和/WR變低時,開始一次新的轉換。:讀信號,輸入,低電平有效。/RD和/CS一起有效時用來讀取轉換后的數據。也用來設置使芯片工作于省電模式。:寫信號,輸入,低電平有效。/WR與/CS同時有效時開始一次新的轉換,也用來選擇模擬量輸入通道。34/1052、ADS7852的內部結構ADS7852的內部結構如圖所示。圖9-5ADS7852的內部結構圖35/105ADS7852是逐次逼近型A/D轉換器一個8通道模擬開關通信雙向存取控制器(CDAC)比較器(Comparator)逐次比較邏輯寄存器(SAR)內部基準電壓源參考電壓緩沖器輸出鎖存和三態(tài)驅動器等。轉換結果通過三態(tài)并行數據總線輸出。36/105工作過程首先置低引腳,然后通過設置A2、A1和A0的值來選擇輸入通道(000~111分別對應0~7通道),置低/WR引腳開始啟動A/D轉換。在A/D轉換期間,/BUSY引腳輸出低電平并保持到轉換結束。轉換完成后,/BUSY引腳輸出變?yōu)楦唠娖?,在DB11~DB0上輸出12位有效數據,等待處理器讀取,一次轉換完成。/BUSY引腳的上升沿可以鎖存12位轉換數據。需要注意的是,在A/D轉換之后,當/RD和/CS變?yōu)楦唠娖綍r,A1和A0腳應保持低電平,否則ADS7852將進入掉電模式。37/1053、通道選擇ADS7852有8路輸入,通過設置A0、A1、A2來選擇哪一路輸入,具體的選擇控制字如表所示。A2A1A0通道號000通道0001通道1010通道2011通道3100通道4101通道5110通道6111通道7表9-1ADS7852的通道選擇控制字38/1054、ADS78752的接口應用【例9-1】ADS78752與STC12C5A60S2單片機的接口電路如圖所示。圖9-6ADS78752的接口連接39/105硬件電路說明由于ADS7852是12位輸出,而STC12C5A60S2單片機的數據線只有8位,所以使用STC12C5A60S2的P0口與ADS7852的低8位數據(DB0~DB7)相連。ADS7852的高4位(DB8~DB11)通過鎖存器74LS573與STC12C5A60S2的Pl口低4位(P1.0~P1.3)相連。40/105當A/D轉換結束STC12C5A60S2讀取轉換結果時,數據的低8位(DB0~DB7)被直接讀入STC12C5A60S2內部,而在/RD信號的上升沿,數據的高4位(DB8~DB11)被74HC573鎖存在STC12C5A60S2的Pl口低4位(P1.0~P1.3),等待被讀取。STC15F2K60S2單片機的時鐘輸出CLKOUT0作為ADS7852的時鐘,頻率設置為250KHz。41/105ADS7852的/BUSY信號與STC15F2K60S2的P3.2連接。在A/D轉換結束后,通知STC15F2K60S2及時讀取數據。在電路設計中,一般在Vss和地之間接一個0.1uF的瓷片電容和10uF的鉭電容,起濾波和解耦的作用。42/105示例程序代碼如下:#include"stc15.h"http://包含STC15F2K60S2單片機寄存器定義文件//P2.7為片選信號;P3.5/T0CLK0為提供AD轉換時鐘sbitbusy=P3^2;//P3.2為AD轉換狀態(tài)檢測位sbitA0=P1^5;//P1.5,P1.6,P1.7為通道選擇位sbitA1=P1^6;sbitA2=P1^7; voidmain(void){intADdata; charhighdata,lowdata; charxdata*ADS7852;ADS7852=0x7fff; //AD7852的地址
TMOD=0x02; //T0工作在方式2,8位自動重裝
TH0=254; //12/12/2/2=0.25MHZ INT_CLKO=INT_CLKO|0x1; //T0輸出時鐘
TR0=1; //啟動T0 A0=0;A1=0;A2=0; //選擇通道0 *ADS7852=0x00; //寫操作,開始AD轉換43/105while(1) {if(busy==1) //判斷是否轉換完畢
{ lowdata=*ADS7852; ADdata=P1; ADdata=(ADdata<<8)+lowdata; //數據處理*ADS7852=0x00; //開始下一次AD轉換
} }}44/105二、STC15F2K60S2集成的A/D模塊的結構及其使用STC15F2K60S2單片機集成有8路10位高速電壓輸入型模數轉換器(ADC),速度可達到300KHz(30萬次/秒),可做溫度檢測、壓力檢測、電池電壓檢測、按鍵掃描、頻譜檢測等。45/1051、模數轉換器的結構及相關寄存器STC15F2K60S2單片機片內集成8通道10位模數轉換器(ADC)。ADC輸入通道與P1口復用,上電復位后P1口為弱上拉型I/O口,用戶可以通過軟件設置將8路中的任何一路設置為ADC功能,不作為ADC使用的口可繼續(xù)作為I/O口使用。46/105(1)模數轉換器的結構STC15F2K60S2單片機ADC的結構如圖所示。圖9-7STC15F2K60S2單片機ADC結構圖
47/105STC15F2K60S2的ADC組成多路選擇開關比較器逐次比較寄存器10位DAC轉換結果寄存器(ADC_RES和ADC_RESL)ADC控制寄存器ADC_CONTR48/105STC15F2K60S2的ADC轉換原理STC15F2K60S2的ADC是逐次比較型模數轉換器。逐次比較型ADC由一個比較器和D/A轉換器構成,通過逐次比較邏輯,從最高位(MSB)開始,順序地對每一輸入電壓與內置D/A轉換器輸出進行比較,經多次比較,使轉換所得的數字量逐次逼近輸入模擬量對應值。49/105(2)參考電壓源STC15F2K60S2單片機ADC模塊的參考電壓源是輸入工作電壓Vcc,一般不用外接參考電壓源。如果Vcc不穩(wěn)定(例如電池供電的系統(tǒng)中,電池電壓常常在5.3V-4.2V之間漂移),則可以在8路A/D轉換的一個通道外接一個穩(wěn)定的參考電壓源,計算出此時的工作電壓Vcc,再計算出其他幾路A/D轉換通道的電壓。50/105(3)與ADC有關的特殊功能寄存器1)P1口模擬功能控制寄存器P1ASFP1ASF(地址為9DH,復位值為00H)各位的定義如下:位號D7D6D5D4D3D2D1D0位名稱P17ASFP16ASFP15ASFP14ASFP13ASFP12ASFP11ASFP10ASF51/105如果要使用相應口的模擬功能,需將P1ASF特殊功能寄存器中的相應位置為1。如,若要使用P1.6的模擬量功能,則需要將P16ASF設置為1。注意,P1ASF寄存器不能位尋址,可以使用匯編語言指令ORLP1ASF,#40H,也可以使用C語言語句P1ASF|=0x40;位號D7D6D5D4D3D2D1D0位名稱P17ASFP16ASFP15ASFP14ASFP13ASFP12ASFP11ASFP10ASF52/1052)ADC控制寄存器ADC_CONTRADC_CONTR(地址為BCH,復位值為00H)各位的定義如下:位號D7D6D5D4D3D2D1D0位名稱ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS0①ADC_POWER:ADC電源控制位。0:關閉ADC電源。1:打開ADC電源。53/105說明建議進入空閑模式前,將ADC電源關閉,即ADC_POWER=0。啟動A/D轉換前一定要確認ADC電源已打開,A/D轉換結束后關閉ADC電源可降低功耗,也可不關閉。初次打開內部ADC轉換模擬電源,需適當延時,等內部模擬電源穩(wěn)定后,再啟動A/D轉換。建議啟動A/D轉換后,在A/D轉換結束之前,不改變任何I/O口的狀態(tài),有利于提高A/D轉換的精度。54/105②SPEED1、SPEED0:ADC轉換速度控制位。SPEED1SPEED0A/D轉換所需時間1190個時鐘周期轉換一次,CPU工作頻率21MHz時,A/D轉換速度約300KHz,9位精度10180個時鐘周期轉換一次,可達到10位精度01360個時鐘周期轉換一次,可達到10位精度00540個時鐘周期轉換一次,可達到10位精度位號D7D6D5D4D3D2D1D0位名稱ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS0表9-2ADC轉換速度控制55/105STC15F2K60S2單片機A/D轉換模塊的時鐘外部晶體時鐘或內部R/C振蕩器所產生的系統(tǒng)時鐘,不使用時鐘分頻寄存器CLK_DIV對系統(tǒng)時鐘分頻后所產生的供給CPU工作所使用的時鐘。優(yōu)點:不僅可以讓ADC用較高的頻率工作,提高A/D的轉換速度;而且可以讓CPU用較低的頻率工作,降低系統(tǒng)的功耗。56/105需要注意設置ADC_CONTR控制寄存器的語句執(zhí)行后,要經過4個CPU時鐘的延時,其值才能夠保證被設置進ADC_CONTR控制寄存器。典型代碼如下:
MOVADC_CONTR,#DATANOPNOPNOPNOPMOVA,ADC_CONTR
;經過4個時鐘延時,才能正確讀到ADC_CONTR控制寄存器的值57/105③ADC_FLAG:A/D轉換結束標志位。
A/D轉換完成后,ADC_FLAG=1,要由軟件清零。不管A/D轉換完成后由該位申請產生中斷,還是由軟件查詢該標志位判斷A/D轉換是否結束,當A/D轉換完成后,ADC_FLAG=1,一定要軟件清0。位號D7D6D5D4D3D2D1D0位名稱ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS058/105⑤CHS2、CHS1、CHS0:模擬輸入通道選擇,如表所示。用MOV語句對ADC_CONTR寄存器進行賦值。位號D7D6D5D4D3D2D1D0位名稱ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS0CHS2CHS1CHS0模擬輸入通道選擇000選擇P1.0作為A/D輸入來用001選擇P1.1作為A/D輸入來用010選擇P1.2作為A/D輸入來用011選擇P1.3作為A/D輸入來用100選擇P1.4作為A/D輸入來用101選擇P1.5作為A/D輸入來用110選擇P1.6作為A/D輸入來用111選擇P1.7作為A/D輸入來用表9-3模擬輸入通道選擇59/1053)A/D轉換結果存儲格式控制及A/D轉換結果寄存器ADC_RES、ADC_RESL特殊功能寄存器ADC_RES(地址為BDH,復位值為00H)和ADC_RESL(地址為BEH,復位值為00H)用于保存A/D轉換結果。特殊功能寄存器CLK_DIV中的ADRJ位用于設置A/D轉換結果的存儲格式。ADRJ=0時,ADC_RES[7:0]存放高8位ADC結果,ADC_RESL[1:0]存放低2位ADC結果;ADRJ=1時,ADC_RES[1:0]存放高2位ADC結果,ADC_RESL[7:0]存放低8位ADC結果。60/105如果STC15F2K60S2單片機的10位A/D轉換結果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中,模/數轉換結果計算公式如下:取10位結果(ADC_RES[7:0],ADC_RESL[1:0])=1024×Vin/Vcc取8位結果
ADC_RES[7:0]=256×Vin/Vcc
Vin為模擬輸入通道輸入電壓,Vcc為單片機實際工作電壓,用單片機工作電壓作為模擬參考電壓。61/1054)與A/D轉換中斷有關的寄存器中斷允許控制寄存器IE中的EADC位(D5位)用于開放ADC中斷EA位(D7位)用于開放CPU中斷中斷優(yōu)先級寄存器IP中的PADC位(D5位)用于設置A/D中斷的優(yōu)先級在中斷服務程序中,要使用軟件將A/D中斷標志位ADC_FLAG(也是A/D轉換結束標志位)清0。62/1052、STC15F2K60S2單片機ADC模塊的使用編程要點打開ADC電源,第一次使用時要打開內部模擬電源(設置ADC_CONTR)。適當延時,等內部模擬電源穩(wěn)定。一般延時1ms以內即可。設置P1口中的相應口線作為A/D轉換通道(設置P1ASF寄存器)。63/105選擇ADC通道(設置ADC_CONTR中的CHS2~CHS0)。根據需要設置轉換結果存儲格式(設置AUXR1中的ADRJ位)。查詢A/D轉換結束標志ADC_FLAG,判斷A/D轉換是否完成,若完成,則讀出結果(結果保存在ADC_RES和ADC_RESL寄存器中),并進行數據處理。64/105讀取轉換結果注意:如果是多通道模擬量進行轉換,則更換A/D轉換通道后要適當延時,使輸入電壓穩(wěn)定,延時量取20μs~200μs即可,與輸入電壓源的內阻有關。如果輸入電壓信號源的內阻在10K以下,可不加延時。如果是單通道模擬量轉換,則不需要更換A/D轉換通道,也就不需要加延時。65/105若采用中斷方式,還需進行中斷設置(EADC置1,EA置1)。在中斷服務程序中讀取ADC轉換結果,并將ADC中斷請求標志ADC_FLAG清零。66/105【例9-2】編程實現利用STC12C5A60S2單片機ADC通道2采集外部模擬電壓信號,8位精度,采用查詢方式循環(huán)進行轉換,并將轉換結果保存于30H單元中。假設時鐘頻率為18.432MHz。解:取8位精度時,若ADRJ-0,則可直接使用轉換結果寄存器ADC_RES的值。由于復位后,ADRJ=0,因此,按照ADC的編程要點進行初始化后,直接判斷ADC_FLAG標志是否為1,若為1,則讀出ADC_RES寄存器的值,并存入30H即可;若為0,則繼續(xù)等待。67/105匯編語言程序代碼如下:$INCLUDE(STC15.INC);包含STC15F2K60S2單片機寄存器定義文件ADC_DATEQU30H;A/D轉換結果
ORG0000HLJMPMAINORG0050HMAIN:MOVSP,#70H;設置堆棧
ORLADC_CONTR,#80H;開A/D轉換電源
MOVA,#20HLCALLDELAY;開電源后加適當延時,1ms以內即可
MOV P1ASF,#04H ;設置P1.2的模擬量功能
MOVADC_CONTR,#11100010B;選擇P1.2作為A/D轉換通道
MOVA,#05HLCALLDELAY;如果切換A/D轉換通道,則需要加延時68/105WAIT_AD:ORLADC_CONTR,#00001000B;啟動A/D轉換
MOVA,#00010000B;判斷A/D轉換是否完成
ANLA,ADC_CONTRJZWAIT_AD;A/D轉換尚未完成,繼續(xù)等待
ANLADC_CONTR,#11100111B;將ADC_FLAG清零
MOVA,ADC_RES;讀取A/D轉換結果
MOVADC_DAT,A;保存A/D轉換結果
LJMPWAIT_AD;等待下一次轉換完成69/105DELAY:;延時子程序
PUSH02;將寄存器組0的R2入棧
PUSH03;將寄存器組0的R3入棧
PUSH04;將寄存器組0的R4入棧
MOVR4,ADELAY_LOOP0:MOVR3,#200;2個時鐘周期Delay_LOOP1:MOVR2,#249;2個時鐘周期DELAY_LOOP:DJNZR2,DELAY_LOOP;4個時鐘周期
DJNZR3,DELAY_LOOP1;4個時鐘周期
DJNZR4,DELAY_LOOP0;4個時鐘周期
POP04POP03POP02RETEND70/105C語言程序代碼如下:#include“stc12.h”//包含STC12C5A60S2單片機寄存器定義文件unsignedchardataadc_dat_at_0x30;//A/D轉換結果變量voidmain(void){unsignedlongi;unsignedcharstatus;ADC_CONTR|=0x80;//開A/D轉換電源
for(i=0;i<10000;i++);//適當延時
P1ASF=0x04;//選擇P1.2作為A/D轉換通道
ADC_CONTR=0xE2;for(i=0;i<10000;i++);//適當延時
while(1)//循環(huán)進行A/D轉換
{ADC_CONTR|=0x08;//重新啟動A/D轉換
status=0;while(status==0)//等待A/D轉換結束
{status=ADC_CONTR&0x10;}ADC_CONTR&=0xE7;//將ADC_FLAG清零
adc_dat=ADC_RES;//保存A/D轉換結果
}}71/105【例9-3】編程實現利用STC12C5A60S2單片機ADC通道2采集外部模擬電壓信號,10位精度,采用中斷方式進行轉換,并將轉換結果保存于30H和31H單元中。假設時鐘頻率為18.432MHz。解:ADRJ=0時,ADC結果的高8位在ADC_RES中,低2位在ADC_RESL的低2位。因此,可以在中斷服務程序中讀出ADC_RESL寄存器的值,屏蔽高6位后存入30H單元,讀出ADC_RES寄存器的值,存入31H單元。72/105匯編語言程序代碼如下:$INCLUDE(STC15.INC);包含STC15F2K60S2單片機寄存器定義文件
ADC_HIEQU31H;A/D轉換結果高2位
ADC_LOWEQU30H;A/D轉換結果低8位
ORG0000HLJMPMAINORG 002BHLJMPADC_ISR;ADC中斷服務程序入口
ORG0050HMAIN:MOVSP,#70H;設置堆棧
ORLADC_CONTR,#80H;開A/D轉換電源
MOVA,#20HLCALLDELAY;開電源后要加適當延時,1ms以內即可
MOV P1ASF,#04H ;設置P1.2的模擬量功能
MOVADC_CONTR,#11100010B;選擇P1.2作為A/D轉換通道
MOVA,#05HLCALLDELAY;如果切換A/D轉換通道,則需要加延時
ORL AUXR1,#04H ;設置ADC轉換結果存儲格式(ADRJ=1)
ORLADC_CONTR,#00001000B;啟動A/D轉換
SETBEADC;EADC=1,開放ADC的中斷控制位
SETBEA;開放CPU總中斷
SJMP$;循環(huán)等待中斷73/105ADC_ISR:;ADC中斷服務程序入口
ANLADC_CONTR,#11100111B;將ADC_FLAG清0MOVA,ADC_RES;讀取A/D轉換結果高2位
ANLA,#03H;屏蔽高6位
MOVADC_HI,A;保存A/D轉換結果高2位
MOVA,ADC_RESL;讀取A/D轉換結果低8位
MOVADC_LOW,A;保存A/D轉換結果低8位
ORLADC_CONTR,#00001000B;重新啟動A/D轉換RETI74/105DELAY:;延時子程序
PUSH02;將寄存器組0的R2入棧
PUSH03;將寄存器組0的R3入棧
PUSH04;將寄存器組0的R4入棧
MOVR4,ADELAY_LOOP0:MOVR3,#200;2個時鐘周期Delay_LOOP1:MOVR2,#249;2個時鐘周期DELAY_LOOP:DJNZR2,DELAY_LOOP;4個時鐘周期
DJNZR3,DELAY_LOOP1;4個時鐘周期
DJNZR4,DELAY_LOOP0;4個時鐘周期
POP04POP03POP02RETEND75/105C語言程序代碼如下:#include“stc15.h”//包含STC15F2K60S2單片機寄存器定義文件unsignedchardataadc_hi_at_0x31;//A/D轉換結果變量高2位unsignedchardataadc_low_at_0x30;//A/D轉換結果變量低8位voidmain(void){unsignedlongi;ADC_CONTR|=0x80;//開A/D轉換電源
for(i=0;i<10000;i++);//適當延時
P1ASF=0x04;//選擇P1.2作為A/D轉換通道
ADC_CONTR=0xE2;for(i=0;i<10000;i++);//適當延時
AUXR1|=0x04; //ADRJ=1ADC_CONTR|=0x08;//啟動A/D轉換
EADC=1;//EADC=1,開放ADC的中斷控制位
EA=1;//開放CPU總中斷
while(1);//循環(huán)等待ADC中斷}76/105voidADC_ISR(void)interrupt5//ADC中斷函數{ADC_CONTR&=0xE7;//將ADC_FLAG清0adc_hi=ADC_RES&0x03;//保存A/D轉換結果高2位
adc_low=ADC_RESL;//保存A/D轉換結果低8位
ADC_CONTR|=0x08;//重新啟動A/D轉換}77/105§9.3數模轉換器的應用單片機處理后的數字信號要轉換成模擬信號才能控制相關對象。實現數字量轉換成模擬量的器件稱為數模轉換器(DAC),簡稱為D/A轉換器。本節(jié)主要介紹D/A轉換的原理及性能指標、數模轉換器TLV5616與單片機的接口及編程方法。78/105一、模數轉換器的工作原理及性能指標1、數模轉換器的分類根據解碼網絡結構的不同,D/A轉換器可以分為T型、倒T型、權電阻和權電流等類型。根據模擬電子開關的種類不同,D/A轉換器可以分為CMOS型和雙極型。雙極型又分為電流開關型和ECL電流開關型。79/105D/A轉換器選擇在速度要求不高的情況下,可選用CMOS開關型D/A轉換器;如對轉換速度要求較高,則應選用雙極型電流開關D/A轉換器或轉換速度更高的ECL電流開關型D/A轉換器。80/1052、D/A轉換器的工作原理根據分類不同,D/A轉換器的工作原理也不盡相同。下面只介紹權電阻型數模轉換器的工作原理,其余類型數模轉換器的工作原理請讀者自行查閱資料學習。權電阻型數/模轉換:就是將某一數字量的二進制代碼各位按它的“權”的數值轉換成相應的電流,然后再把代表各位數值的電流加起來。81/105一個8位的權電阻D/A轉換器的原理框圖如圖所示。圖9-8權電阻型D/A轉換器82/105工作原理線性電阻網絡,可以應用疊加原理分析網絡的輸出電壓先逐個求出每個開關單獨接通標準電壓,而其余開關均接地時網絡的輸出電壓分量,然后將所有接標準電壓開關的輸出分量相加,就可以得到總的輸出電壓。83/105Di=0時,Si接地。Di=1時,Si接VB(i=0,1,…,7)權電阻D/A轉換器的簡化電路如圖所示。圖9-9權電阻D/A轉換器簡化電路84/105圖中
V0=a7?VB,V1=a6?VB,V2=a5?VB,V3=a4?VB,V4=a3?VB,V5=a2?VB,V6=a1?VB,V7=a0?VB,a0,a1,…,a7=0或1。圖9-9權電阻D/A轉換器簡化電路85/105當R=2Rf時,代入上式得:由此得到:86/1053、D/A轉換器的性能指標(1)分辨率分辨率是D/A轉換器對輸入量變化敏感程度的描述,與輸入數字量的位數有關。(2)穩(wěn)定時間指D/A轉換器中代碼有滿度值的變化時,其輸出達到穩(wěn)定(一般穩(wěn)定到與±1/2最低位值相當的模擬量范圍內)所需的時間。一般為幾十毫秒到幾微秒。87/105(3)輸出電平不同型號的D/A轉換器的輸出電平相差較大,一般為5~10V,也有一些高壓輸出型的為24~30V。還有一些電流輸出型,低的為20mA,高的可達3A。(4)轉換精度轉換精度是轉換后所得的實際值對于理想值的接近程度。(5)輸入編碼如二進制、BCD碼、雙極性時的符號-數值碼、補碼、偏移二進制碼等。必要時可在D/A轉換前用計算機進行代碼轉換。88/105二、12位D/A轉換器TLV5616及其接口技術1、TLV5616簡介TLV5616是一個帶有靈活的4線串行接口的12位電壓輸出數/模轉換器(DAC)。4線串行接口可以與SPI、QSPI和Microwire串行口接口。TLV5616可以用一個包括4個控制位和12個數據位的16位串行字符串來編程TLV5616采用CMOS工藝,設計成2.7V至5.5V單電源工作。89/105器件用8引腳封裝,工業(yè)級芯片的工作溫度范圍從-40℃至85℃。輸出電壓(由外部基準決定滿度電壓)由下式給出:其中REF是基準電壓,而CODE是數字輸入值,范圍從0x000至0xFFF。上電復位將內部鎖存為一個規(guī)定的初始狀態(tài)(所有各位為零)。90/105各引腳功能介紹如下:DIN:串行數字數據輸入SCLK:串行數字時鐘輸入:芯片選擇,低有效FS:幀同步,數字輸入,用于4線串行接口。圖9-10TLV5616引腳圖91/105AGND:模擬地REFIN:基準模擬電壓輸入OUT:DAC模擬電壓輸出VDD:正電源圖9-10TLV5616引腳圖92/1052、內部結構TLV5616的內部結構如圖所示。圖9-11TLV5616的內部結構93/105TLV5616是一個基于一個電阻串結構的12位、單電源DAC。一個并行接口速度和掉電控制邏輯一個基準輸入緩沖器電阻串一個軌到軌(rail-to-rail)輸出緩沖器94/1053、數據傳輸時序圖TLC5616的數據傳輸時序圖如圖所示。圖9-12TLC5616的數據傳輸時序圖95/105數據傳輸過程首先器件必須使能CS。然后在FS的下降沿啟動數據的移位,在SCLK的下降沿一位接一位地傳入內部寄存器。在16位已傳送后或者當FS升高時,移位寄存器中的內容被移到DAC鎖存器,它將輸出電壓更新為新的電平。96/105TLV5616的串行接口可以用于兩種基本的方式:4線(帶片選)3線(不帶片選)4、數據格式TLV5616的16位數據字包括兩部分:控制位
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 在線產品目錄推廣合同(2篇)
- 地鐵工程監(jiān)理合同(2篇)
- 油氣管道非開挖鋪設合同
- 拆除工程維修合同
- 智能化安防系統(tǒng)施工合同
- 鞋業(yè)項目部設計師聘用合同
- 建筑智能化簡易施工合同
- 超市改造合同
- 礦產資源項目主管勞動合同
- 唐山市茶樓租賃合同
- 中國大數據產業(yè)發(fā)展指數報告(2024版)
- 2024-2025學年重慶市北碚區(qū)三上數學期末監(jiān)測試題含解析
- 大宗貿易居間協議2024年
- DL∕T 5499-2015 換流站二次系統(tǒng)設計技術規(guī)程
- 2024年安徽省高考政治試卷(真題+答案)
- 中外合作辦學規(guī)劃方案
- 增強現實技術在藝術教育中的應用
- 教師法及與教師有關的法律法規(guī)培訓
- 降溫池施工方案
- 混凝土預制塊護坡施工方案
- 2024年決戰(zhàn)行測5000題言語理解與表達一套
評論
0/150
提交評論