MSP430ADC10解讀_第1頁
MSP430ADC10解讀_第2頁
MSP430ADC10解讀_第3頁
MSP430ADC10解讀_第4頁
MSP430ADC10解讀_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、MSP43C單片機(jī)擁有內(nèi)置的 ADC功能,在一些高級單片機(jī)系列上是ADC12,在低級單片機(jī)系列上是 ADC10 ,兩者的主要區(qū)別是分辨率的不同,我們的G2553內(nèi)置的就是 ADC10 ,所以Cloud就在這里和大家一起學(xué)習(xí)ADC10。一、ADC10 特性我們先來了解一下這個 ADC10的特性,官方給出的:高達(dá)200ksps的轉(zhuǎn)換速率;固定的10位轉(zhuǎn)換;具有采樣保持功能,并可選采樣周期;可以通過軟件代碼或 TimerA初始化轉(zhuǎn)換;可選的片內(nèi)(1.5V或2.5V)或片外參考電壓;支持8個外部輸入通道;內(nèi)部輸入通道支持溫度檢測,VCC和外部參考(+、一);可選的轉(zhuǎn)換時鐘源;單通道單次/多次、序列通道

2、單次/多次,共4種轉(zhuǎn)換模式; ADC內(nèi)核和參考電壓都可單獨關(guān)閉;具有一個支持自動存儲轉(zhuǎn)換結(jié)果的數(shù)據(jù)轉(zhuǎn)換控制器(DTC );二、ADC10 結(jié)構(gòu)OK我們來引入 ADC10的內(nèi)部結(jié)構(gòu)圖來初步認(rèn)識這個ADC10的內(nèi)部結(jié)構(gòu)。為了方便大家學(xué)習(xí),Cloud將各部分用不同顏色區(qū)分開:VeRERREFBURST/I REFOUTVb SREF1VRERINCHxAuto _B0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111AVCCVREFVeREF-CONSEQxASSREF2 B-10 JINCHx=0BhV

3、R-S/HConvertSample and HoldSAMPCONADC10SRAVCCI00/ADC10ON10-bit SARADCADC10DIVXTTTDivider /1 . /8 ADC10CLKISSHSample TimerSHI0/4/8/16/641BUSYADCIOSHTx MSCADC10DFData Transfer |ControllerI門I|ADC 10SAADC10MEM1、ADC10內(nèi)核-SAR和采樣保持電路:首先我們看到中間兩塊橙色的區(qū)域,右邊五邊形的是一個“10-bit SAR ”,翻譯過來就是一個10位精度的逐次逼近比較型的 ADC內(nèi)核,也就是說,我

4、們的 ADC轉(zhuǎn)換就是在這里 完成的。那么它的信號來源是哪里呢?就是左邊橙色矩形區(qū)域的“Sample and Hold ”即采樣保持電路,它將外部或者內(nèi)部的模擬信號進(jìn)行保持以實現(xiàn)ADC轉(zhuǎn)換過程中的信號穩(wěn)定。2、ADC10信號通道和轉(zhuǎn)換模式:我們的采樣保持電路可以將左邊選擇器(紅色梯形區(qū)域)內(nèi)的信號進(jìn)行保持。 由于我們的SAR只有一個,要對里里外外這么多信號都進(jìn)行AD轉(zhuǎn)換就必須按順序來,一個一個選擇性地輸入,這個選擇器就是用來選擇要輸入的外部或者內(nèi)部模擬信號。上面綠色矩形框控制著選擇器選擇哪個信號以及是否自動按序列選擇。3、ADC10時鐘和采樣觸發(fā)源:ADC10模塊像TimerA模塊一樣也需要有時

5、鐘信號支持,有了時鐘,SAR這個逐次逼近比較內(nèi)核才能夠運行(因為它是逐次的嘛),形象地說時鐘就是SAR的動力。我們看到藍(lán)色區(qū)域,這里可以選擇 ACLK、MCLK和SMCLK,另外還有一個 ADC10OSC,這個時鐘 是ADC10模塊自帶的,頻率在 5MHz左右。和TimerA 一樣,這些時鐘也可以通過分頻器 進(jìn)行分頻。SAR的動力有了,那么怎么樣才能夠開啟這個SAR運動起來呢?這就是采樣觸發(fā)電路??袋S色區(qū)域,采樣信號可以由ADC10SC位或TimerA的三個比較匹配器輸出端來觸發(fā)。而且通過ISSH我們可以設(shè)置是上邊沿觸發(fā)還是下邊沿觸發(fā)。采樣觸發(fā)信號發(fā)出一次,ADC10就會立即從通道選擇器中選擇

6、要采樣的信號經(jīng)過采樣保持電路進(jìn)入到SAR中進(jìn)行AD轉(zhuǎn)換。4、ADC10參考源:AD轉(zhuǎn)換,其本質(zhì)就是對外部信號進(jìn)行量化(就是在幅度上對信號進(jìn)行編碼),既然是 量化,那么肯定要有參考的標(biāo)準(zhǔn),這個標(biāo)準(zhǔn)由誰定?對了,就是由ADC10模塊的參考源電路決定的。我們看 SAR這個五邊形的橙色框,上面有“ VR- ”和“ VR+ ”兩個輸入端,這 兩個輸入端就是 SAR的參考源。其中,負(fù)端可以由SREF2來決定由AVSS (可認(rèn)為GND)或者VREF-/VeREF-來輸入得到。而正端可以由 SREFO、SREF1來決定由內(nèi)部或者外部參考 電平輸入得到。內(nèi)部支持 1.5V或者2.5V,外部由外部引腳輸入得到。A

7、DC10同時支持將內(nèi)部參考電平輸出到外部,而且為了保持其低功耗的優(yōu)勢,還可以由REFBURST來降低平均電流。當(dāng)輸入信號等于或小于 VR-時,AD結(jié)果輸出為0 ;當(dāng)輸入信號等于或大于 VR+時,AD 結(jié)果為0X03FF( 1023);輸入信號在 VR-和VR+之間,AD結(jié)果為以下公式:NADC = 1023 X(Vin - VR- )-(VR+ VR-)5、ADC轉(zhuǎn)換值和DTC電路:我們已經(jīng)從輸入、時鐘、觸發(fā)、參考四個部分了解了ADC10的轉(zhuǎn)換電路,那么我們轉(zhuǎn)換得到的值要如何輸出呢?這里我們沿著SAR下面空心粗箭頭看到一個棕紅色框“ADC10MEM ”,這個寄存器就是用來存放得到的 AD值的。

8、我們只要讀取 ADC10MEM 的值就可以得到 AD值了。為了實現(xiàn)低功耗設(shè)計, MSP430支持DTC功能,就是數(shù)據(jù)傳輸 控制功能,它可以支持將 ADC10MEM中的數(shù)據(jù)自動存放至 RAM、Flash或者其他外設(shè)中而 不用CPU干預(yù)。6、溫度傳感器:MSP43C內(nèi)置了一個溫度傳感器 (淺藍(lán)色方框),可以通過設(shè)置輸入通道為 OxOA來選擇 輸入溫度模擬量。這樣的設(shè)計讓我們不用外部溫度芯片就可以實現(xiàn)簡單的溫度檢測,其AD值和溫度的關(guān)系式為(A10就是溫度傳感器通道的 AD值):VTemp = 0.00355 X TEMMP c + 0.986(單位:V)從而推導(dǎo)得到:攝氏度:oC = (A10/1

9、024)*1500mV)-986mV)*1/3.55mV = A10*423/1024 - 278華氏度:oF = (A10/1024)*1500mV)-923mV)*1/1.97mV = A10*761/1024 - 468三、ADC10相關(guān)寄存器首先讓我們看一下有哪些寄存器和ADC10相關(guān)的: 1.ADC10AE : ADC10輸入使能寄存器 2.ADC10CTL0 : ADC10 控制寄存器 0 3.ADC10CTL1 : ADC10 控制寄存器 1 4.ADC10MEM : ADC10 存儲器 5.ADC10DTC0 : ADC10數(shù)據(jù)傳輸控制寄存器 0 6.ADC10DTC1 : A

10、DC10數(shù)據(jù)傳輸控制寄存器 1 7.ADC10SA : ADC10數(shù)據(jù)傳輸控制啟動地址寄存器下面讓我們詳細(xì)學(xué)習(xí)每個寄存器:1、ADC10AE : ADC10輸入使能寄存器ADC10AE ADC10輸入使能寄存器76543210ADC10AE7ADC10AE6ADC10AE5ADC10AE4ADC10AE3ADC10AE2ADC10AE1ADC10AE0-70-ADC10AEx : ADC10模擬輸入控制使能位,用來控制外部模擬輸入是否使能0:禁止1:使能2、ADC10CTL0 : ADC10 控制寄存器 0ADC10CTL0ADC10控制寄存器015141312111098SREFxADC10

11、SHTxADC10SRREFOUTREFBURST76543210MSCREF2_5VREFONADC10ONADC10IEADC10IFGENCADC10SC-1513-SREF :參考電平選擇,詳細(xì)見下表SREFVR+VR-二進(jìn)制十進(jìn)制0000VCCVSS0011VREF+VSS0102VeREF+VSS0113VeREF+VSS1004VCCVREF-/VeREF-1015VREF+VREF-/VeREF-1106VeREF+VREF-/VeREF-1117VeREF+VREF-/VeREF- 1211-ADC10SHT : ADC10 采樣保持時間00: 4 x ADCIOCLKs01

12、: 8 x ADCIOCLKs10: 16 x ADCIOCLKs11: 64 x ADCIOCLKs 10-ADC10SR : ADC10采樣速率,該位用于選擇最大采樣速率下的參考電平緩沖驅(qū)動 能力。ADC10SR置1可以減少參考電平緩沖器的電流消耗0:參考電平緩沖器支持最大速率到200ksps1:參考電平緩沖器支持最大速率到50ksps 9-REF0UT :參考電平輸出允許位,用來控制是否輸出參考電平0:參考輸出關(guān)閉1 :參考輸出打開 8-REFBURST :參考電壓輸出控制位( REFOUT=1時有效)0:參考電壓持續(xù)對外輸出1:只有在采樣轉(zhuǎn)換期間參考電壓持續(xù)對外輸出 7-MSC :多次

13、采樣/轉(zhuǎn)換控制位(只在序列或多次轉(zhuǎn)換模式下有效)0:每次采樣與轉(zhuǎn)換時,由 SHI的上升沿觸發(fā)1:由SHI的第一個上升沿觸發(fā)采樣定時器,后面的采樣與轉(zhuǎn)換由前一次轉(zhuǎn)換完成 后立即執(zhí)行。 6-REF2_5V :參考電壓發(fā)生器的電壓值選擇位( REFON=1時有效)0: 1.5V1 : 2.5V 5-REFON :參考電壓發(fā)生器控制位,控制是否打開內(nèi)部參考電壓0:關(guān)閉內(nèi)部參考電壓發(fā)生器1:打開內(nèi)部參考電壓發(fā)生器 4-ADC10ON : ADC10控制位,控制是否使用 ADC10模塊0:關(guān)閉ADC10模塊1:打開 ADC10模塊 3-ADC10IE : ADC10中斷允許控制位,控制是否允許 ADC10

14、中斷0:中斷禁止 1:中斷允許 2-ADC10IFG : ADC10中斷標(biāo)志位,如果 ADC10MEM 已經(jīng)裝滿轉(zhuǎn)換結(jié)果,該位置1當(dāng)中斷申請唄接受后,它自動復(fù)位,可以由軟件復(fù)位。在使用DTC時,當(dāng)完成一個數(shù)據(jù)塊的傳遞時,該位置 10:無中斷產(chǎn)生1:有中斷產(chǎn)生 1-ENC : ADC10轉(zhuǎn)換使能位,用來控制是否進(jìn)行轉(zhuǎn)換0: ADC10 禁止1 : ADC10 使能 0-ADC10SC :軟件可控的采樣/轉(zhuǎn)換控制位。ADC10SC和ENC必須用一條指令同時 置1。ADC10SC位可自動復(fù)位0:無采樣/轉(zhuǎn)換開始1 :開始采樣/轉(zhuǎn)換3、ADC10CTL1 : ADC10 控制寄存器 1ADC10CTL

15、1ADC10控 制寄存器 115141312111098INCHxSHSxADC10DFISSH76543210ADC10DIVxADC10SSELxCONSEQxADC10BUSY 1512-INCH :輸入通道選擇,用來選擇進(jìn)行單次轉(zhuǎn)換的通道或序列轉(zhuǎn)換的最高通道,詳細(xì)見下面的表格INCH通道INCH通道二進(jìn)制十進(jìn)制二進(jìn)制十進(jìn)制00000A010008VeREF+00011A110019VREF-/VeREF-00102A2101010溫度傳感器00113A3101111(VCC-VSS ) /201004A4110012(VCC-VSS ) /201015A5110113(VCC-VSS

16、) /201106A6111014(VCC-VSS ) /201117A7111115(VCC-VSS ) /2 1110-SHS :采樣/保持輸入信號源選擇位00: ADC10SC 位01: TimerA.OUTI10: TimerA.OUTO11: TimerA.OUT2 9-ADC10DF : ADC10數(shù)據(jù)格式選擇位0:二進(jìn)制格式(右對齊)1 :二的補碼格式(左對齊) 8-ISSH :采樣/保持輸入信號反向控制位0:采樣輸入信號不反向1 :采樣輸入信號反向 75-ADC10DIV : ADC10時鐘分頻選擇位,分頻系數(shù) =ADC10DIV+1 43-ADC10SSEL : ADC10

17、時鐘源選擇位00: ADC10OSC 01 : ACLK 10 : MCLK 11 : SMCLK 21-CONSEQ :轉(zhuǎn)換模式選擇位00:單通道單次轉(zhuǎn)換01:序列通道單次轉(zhuǎn)換10:單通道多次轉(zhuǎn)換11:序列通道多次轉(zhuǎn)換 0-ADC10BUSY : ADC10忙標(biāo)志位,該位指示采樣或轉(zhuǎn)換正在進(jìn)行0:表明沒有正在進(jìn)行的轉(zhuǎn)換1:表明一個序列,采樣或者轉(zhuǎn)換正在進(jìn)行4、ADC10MEM : ADC10轉(zhuǎn)換結(jié)果寄存器這是一個用來存放 AD轉(zhuǎn)換結(jié)果的16位的寄存器,它有兩種存放方式(還記得前面ADC10DF這個東東么?),分別是:當(dāng)ADC10DF=0時,ADC10MEM 為右對齊,存放結(jié)構(gòu)如下:ADC10

18、MEM1514131211109876543210000000轉(zhuǎn)換結(jié)果當(dāng)ADC10DF=1時,ADC10MEM 為左對齊,存放結(jié)構(gòu)如下:ADC10MEM1514131211109876543210轉(zhuǎn)換結(jié)果0000005、ADC10DTC0 : ADC10數(shù)據(jù)傳遞控制寄存器 0ADC10DTC0ADC10數(shù)據(jù)傳遞控制寄存器 076543210保留一一未使用ADC10TBADC10CTADC10B1ADC10FETCH-3-ADC10TB : ADC10 一塊或兩塊數(shù)據(jù)模式選擇0: 塊數(shù)據(jù)傳遞模式1 :兩塊數(shù)據(jù)傳遞模式 2-ADC10CT : ADC10連續(xù)傳遞模式選擇位0:在一塊或兩塊傳遞模式下

19、,一塊或兩塊都傳遞后,數(shù)據(jù)傳遞結(jié)束1:繼續(xù)數(shù)據(jù)傳遞,只有在ADC10CT清0或由數(shù)據(jù)寫入到 ADC10SA時,DTC停止 1-ADC10B1 : ADC10轉(zhuǎn)存塊滿標(biāo)志。該位表明兩塊數(shù)據(jù)模式下數(shù)據(jù)塊是否已經(jīng)裝入 轉(zhuǎn)換結(jié)果。ADC10B1只有當(dāng)ADC10IFG位在DTC工作期間第一次被設(shè)置后才有效(ADCTB=1 時有效) 0-ADC10FETCH :該位通常處于復(fù)位(ADC10FETCH=0 )狀態(tài)6、ADC10DTC1 : ADC10數(shù)據(jù)傳遞控制寄存器 1ADC10DTC1ADC10數(shù)據(jù)傳遞控制寄存器 176543210DTC Transfers-70-DTC Transfers :這些位定

20、義了每個數(shù)據(jù)塊中傳遞的數(shù)量0: DTC禁止0x000xFF :每個數(shù)據(jù)塊中傳遞的數(shù)量7、ADC10SA : ADC10數(shù)據(jù)傳遞起始地址寄存器ADC10SAADC10數(shù)據(jù)傳遞起始地址寄存器15141312111098ADC10SAx76543210ADC10SAx0-151-ADC10SA :該寄存器的內(nèi)容為 DTC的起始地址,需要先對 ADC10SA寫入來初始化DTC傳遞。第0位未使用,只讀,讀結(jié)果為0四、ADC10的采樣和轉(zhuǎn)換過程 我們要學(xué)習(xí)ADC10,就必須要了解它是如何對一個模擬信號進(jìn)行采樣和轉(zhuǎn)換的。 我們結(jié)合下面這個采樣/轉(zhuǎn)換的時序圖來詳細(xì)介紹這個過程:StartStop StartC

21、onversioiSamplingSampling Con versionComplete首先是我們的四個采樣觸發(fā)源(ADC10SC和3個TimerA OUT )產(chǎn)生了觸發(fā)信號,也就是SHI信號產(chǎn)生了一個脈沖,此時采樣開始,SAMPCON信號也同時置高。然后采樣時鐘進(jìn)行一段時間的計數(shù),在計數(shù)時,SAMPCON保持高電平不變,在 tsync+t sample時間后,采樣完成,此時停止采樣并進(jìn)入到轉(zhuǎn)換階段。經(jīng)過13個ADC10CLK時鐘后,轉(zhuǎn)換階段也完成了。我們再回過頭來看看 SAMPCON信號在高電平狀態(tài)下到底保持了多少時間,又是誰控 制的呢?前面我們知道 SHT可以選擇采樣周期,這個采樣周期就

22、是tsample,它可以是4、&16或64個ADC10CLK個周期。選擇的采樣周期和 ADC10CLK需要同步,這段時間就是上 面的tsync,這段時間具體多少不用關(guān)心。為了采樣的有效,我們在對模擬信號進(jìn)行采樣時,必須保證一定的采樣時間也就是tsample。所以我們得學(xué)習(xí)一下最小采樣時間的計算。前面我們還講了ADC10SR可以控制采樣速率,這里我們就要用到它: ADC10SR=0時,此時為高速采樣,最小采樣時間為:tsample(Rs+R)xln(2048) xCi+800ns ADC10SR=0時,此時為低速采樣,可以減小電流滿足低功耗需求,最小采樣時間為:tsample(Rs+R)xln(

23、2048) xCi+2500ns上面的式子多了很多 R、C啥的,對了,這個最小采樣時間是和我們的采樣電路是有關(guān)系的。在SAMPCON=0時,所有的Ax輸入為高阻態(tài)。當(dāng)SAMPCON=1時,在采樣時間tsample 期間,別選擇的 Ax輸入相當(dāng)于一個 RC低通濾波器如下圖:MSP430前面已經(jīng)說過,ADC10有四種模式,是由CONSEQ來控制的Vi = Input voltage at pin AxVg = External source voltageRs = External source resista neeR| = Internal MUX-on input resistance C|

24、 = Input capacitanceV = Capacitance-charging voltageVI=Ax引腳輸入電壓VS=外部驅(qū)動源電壓RS=外部源內(nèi)阻RI=內(nèi)部多路選擇導(dǎo)通輸入電阻CI=輸入電容VC=電容充電電壓由于內(nèi)部電路決定 RI最大為2K Q , CI最大是20pF,所以上面的式子就可以簡化為:tsample(RS+2K)X7.625 x20pF + 800ns(ADC10SR = 0)tsample(RS+2K)x7.625 x20pF + 2500ns(ADC10SR = 1)四、ADC10的四種轉(zhuǎn)換模式1、單通道單次模式該模式對由INCH選擇的單通道進(jìn)行一次采樣和轉(zhuǎn)換。

25、ADC結(jié)果寫入到ADC10MEM 。當(dāng)ADC10SC觸發(fā)一次轉(zhuǎn)換時,連續(xù)的轉(zhuǎn)換也可以通過將ADC10SC置位來觸發(fā)。當(dāng)使用其他任何觸發(fā)源來啟動轉(zhuǎn)換時,ENC必須在每次轉(zhuǎn)換間隔離,在ENC復(fù)位并再次置位前的采樣信號將被忽略。轉(zhuǎn)換流程見下圖:Wait for TriggerConvertSample. Input ChannelConvefionCompleted, Result to ADC10MEM. ADC10IFG is Setx = INCHxWait for EnableSHS = O andENC = 1 or# andADC1OSC= JSAMPCON = _f/ (4/0716/

26、64) xADCIOCLKADC10 )Off JCONSEQx = 00ADC10ON = 1ENC-OtENC = M12xADC10CLK1 k ADC10CLK我們可以看到,CONSEQx=00表示當(dāng)前模式為單通道單次模式, 在ADC10ON置位后, ADC10開啟并進(jìn)入到等待狀態(tài)。 當(dāng)ENC產(chǎn)生上升沿時 ADC10等待觸發(fā)并在 SAMPCON產(chǎn) 生上升沿后進(jìn)入到采樣環(huán)節(jié)。采樣經(jīng)過4、8、16或64個ADC10CLK周期后進(jìn)入到轉(zhuǎn)換環(huán)節(jié),同樣經(jīng)過12個ADC10CLK周期后完成轉(zhuǎn)換。經(jīng)過 1個ADC10CLK周期,AD結(jié)果存 入ADC10MEM 并且ADC10IFG中斷標(biāo)志位置位, 然

27、后ADC10等待下一次的轉(zhuǎn)換使能。 如 果SHS=0也就是說觸發(fā)源是 ADC10SC,那么當(dāng)ENC信號和ADC10SC信號都為高電平時 同樣進(jìn)入到采樣環(huán)節(jié)。另外,在AD轉(zhuǎn)換的任意階段,只要 ENC清0,則立即回到等待狀態(tài)。2、序列通道單次轉(zhuǎn)換模式:該模式對一個序列的通道進(jìn)行一次采樣和轉(zhuǎn)換。序列通道將自動選擇INCHx到A0作為當(dāng)前通道。每個 ADC結(jié)果都存放到 ADC10MEM。最后一個通道也就是 A0轉(zhuǎn)換完畢后 序列轉(zhuǎn)換就結(jié)束。當(dāng) ADC10SC啟動一次,連續(xù)的轉(zhuǎn)換也可通過設(shè)置ADC10SC位來啟動。當(dāng)任何其他觸發(fā)源用來啟動轉(zhuǎn)換時,ENC必需在每次序列轉(zhuǎn)換間隔離,在ENC復(fù)位并再次置位前的采

28、樣信號將被忽略。轉(zhuǎn)換流程見下圖:CONSEQx = 01ADC10ON = 1Wail for TriggerSAMPCON0ConvertXADC10CLKSample, Input Channel Axx = INCHx War! for EnableIf x 0 th&nx =7&/16/64)xADC10CLK12 xADCIOCLKConversionCompleted, Result toADClOMEM ADC10IFG is SetNC =t_x 0 then x =SHS = 0 andENC = 1 or andADC10SC :大家可以看到,CONSEQ=01表示為序列通

29、道單次轉(zhuǎn)換模式。這個流程圖和第一張差別不大,我們結(jié)合第一張流程圖的講解來解釋這個流程圖。首先我們看到中間主干的流程通路和第一張是一樣的, 這里就不再贅述了。 我們看到左邊和右邊分別多了一條返回線。左邊那條是從轉(zhuǎn)換完成直接返回到采樣輸入通道的,右邊那條是從轉(zhuǎn)換完成返回到觸發(fā)等待狀態(tài) 的,他們的區(qū)別是左邊 MSC=1也就是自動連續(xù)觸發(fā),右邊 MSC=0不自動連續(xù)觸發(fā)所以每 次需要等待SAMPCON信號為高才觸發(fā)下一次采樣。然后x也就是當(dāng)前要轉(zhuǎn)換的通道自減1, 直到x=0時轉(zhuǎn)換完A0這個最后通道然后等待 ADC10的使能。3、單通道多次轉(zhuǎn)換模式:該模式對由INCHx選定的通道進(jìn)行連續(xù)采樣和轉(zhuǎn)換。每次

30、ADC轉(zhuǎn)換結(jié)果都存放到ADC10MEM 中。轉(zhuǎn)換流程見下圖:C0NSEQ=1表示為單通道多次轉(zhuǎn)換模式。中間部分還是一樣的,只是兩邊的返回線現(xiàn)在 和MSC有關(guān)。左邊這條線 MSC=1那么就會在上一次轉(zhuǎn)換完成后自動進(jìn)入下一次的采樣環(huán) 節(jié)。右邊這條線MSC=0那么當(dāng)上一次轉(zhuǎn)換完成后會自動進(jìn)入觸發(fā)等待狀態(tài),只有SAMPCON信號變高才進(jìn)行下一次的采樣。最右邊的一條線說明如果 ENC清0,那么ADC10將重新等待使能。4、序列通道多次轉(zhuǎn)換模式:該模式對序列通道進(jìn)行重復(fù)采樣和轉(zhuǎn)換。序列通道為從INCHx選擇的通道到A0。每次ADC結(jié)果都存放到ADC10MEM。通道A0轉(zhuǎn)換完成后序列轉(zhuǎn)換結(jié)束,下一個啟動信號

31、重新啟動序列轉(zhuǎn)換。轉(zhuǎn)換流程見下圖:C0NSEQ=1表示序列通道多次轉(zhuǎn)換模式。這個流程圖顯然是“單通道多次”和“序列通 道單次”的結(jié)合體,所以就不再贅述,相信大家肯定可以自行理解這個轉(zhuǎn)換過程。如果理解不了,那么說明前面三個轉(zhuǎn)換模式?jīng)]有深入理解,大家可以回過頭復(fù)習(xí)一下前面的三個轉(zhuǎn)換模式。五、ADC10的數(shù)據(jù)傳遞控制器一一DTC前面概述的時候就講到 MSP430的ADC10包含一個數(shù)據(jù)傳遞控制器(DTC),它可以 自動地將轉(zhuǎn)換結(jié)果從 ADC10MEM 傳遞到其他片內(nèi)存儲單元。設(shè)置 ADC10DTC1寄存器為 一個非0值就可以使能 DTC。另外,MSP430x20x2系列芯片中是沒有 DTC的。當(dāng)DT

32、C使能時,每次 ADC10完成轉(zhuǎn)換和將轉(zhuǎn)換結(jié)果裝載到ADC10MEM后,數(shù)據(jù)傳遞啟動。無需軟件干預(yù)來慣例 ADC10,直到預(yù)先定義的轉(zhuǎn)換數(shù)據(jù)量被傳遞。每次DTC傳遞需要一個MCLK周期。為了避免 DTC傳遞過程中和其他總線競爭(競爭是數(shù)電用語), CPU暫停。如果CPU活動,需要一個 MCLK周期時間來傳遞。當(dāng)ADC10忙的時候,DTC不能啟動。也就是說當(dāng)設(shè)置DTC時,程序必須保證當(dāng)前沒有正在進(jìn)行的轉(zhuǎn)換或序列轉(zhuǎn)換。1、一塊數(shù)據(jù)傳遞模式:ADC1OTB=0寸選擇一塊數(shù)據(jù)傳遞模式。ADC10DTC1寄存器中的n值定義了一個數(shù)據(jù)塊傳遞的總長度。可以利用ADC10SA寄存器在MSP430任何地址范圍內(nèi)

33、定義數(shù)據(jù)塊的起始地 址。數(shù)據(jù)塊結(jié)束地址為 ADC10SA+2n-2。其存儲結(jié)構(gòu)式見下圖:TB=O內(nèi)部地址指針最初為 ADC10SA,內(nèi)部傳遞計數(shù)器=n。內(nèi)部指針和計數(shù)器在程序中是已 知的。DTC傳遞ADC10MEM中的數(shù)據(jù)到由 ADC10SA這個指針?biāo)傅淖值刂分校ㄗ⒁馐?字地址,2個字節(jié))。每次傳遞后,內(nèi)部地址指針自增2,內(nèi)部傳遞計數(shù)器自減 1。隨著ADC10MEM 的每次裝載,數(shù)據(jù)繼續(xù)傳遞,知道內(nèi)部傳遞計數(shù)器 =0。其他的DTC 數(shù)據(jù)傳遞不再繼續(xù)進(jìn)行,直到對 ADC10SA再寫。在一塊數(shù)據(jù)傳遞模式下使用 DTC時,一 個完整的數(shù)據(jù)塊傳遞完成后, ADC10IFG標(biāo)志自動置1。下圖描述了這個

34、過程:n=0 ADC10DTC1)OTC KileWnte toADCtDSAWtrte toADClflSA1 x MCLK cycleAD 二 AD + 2ADC1FG=1n is latched in courlef XTransfer data co Address ADWait untilADCIOLfEM is writtenInitialize Start Address nADClOSAWait tar write to 曲DC 10SAWntelo ADC1DSAOTC resetWrite 1OADC10MEM completedADC10TB = 0 and ADC10C

35、T= 1Whto toADCIOSAorn - 0ADC10TB = 0 andADCIDCTOVValt 、亠t Synchronize “I MCLKCPU ready / Prepare I DTCDTC operation2、兩塊數(shù)據(jù)傳遞模式:ADC10TB=1選擇兩塊數(shù)據(jù)傳遞模式。ADC10DTC1中的n值定義了一個數(shù)據(jù)塊傳遞的長度。此時,ADC10SA在MSP430任何地址范圍內(nèi)定義的是第一個數(shù)據(jù)塊的地址,第一個數(shù)據(jù)塊的結(jié)束地址為 ADC10SA+2n-2。另外還有第二個數(shù)據(jù)塊的地址范圍為ADC10SA+2n到ADC10SA+4n-2。其存儲結(jié)構(gòu)式見下圖:T6-1內(nèi)部地址指針初始=

36、ADC10SA,內(nèi)部傳遞計數(shù)器=n。內(nèi)部指針和計數(shù)器在程序中是已知 的。DTC傳遞ADC10MEM 中的數(shù)據(jù)到由 ADC10SA地址指針?biāo)傅淖值刂分?。每次傳遞 后,內(nèi)部地址指針自增 2,內(nèi)部傳遞計數(shù)器自減 1。隨著ADC10MEM的每次裝載,數(shù)據(jù)繼續(xù)傳遞,知道內(nèi)部傳遞計數(shù)器=0。此時數(shù)據(jù)塊1已經(jīng)裝滿,ADC10IFG和ADC10B1位都將置1。我們也可以通過讀取 ADC10B1來判斷數(shù) 據(jù)塊1是否已經(jīng)裝滿。DTC繼續(xù)傳遞數(shù)據(jù)塊2。內(nèi)部傳遞計數(shù)器自動重新裝載 n。在下次裝載 ADC10MEM 時,DTC開始傳遞轉(zhuǎn)換結(jié)果到數(shù)據(jù)塊 2中。當(dāng)完成n次傳遞后,數(shù)據(jù)塊2也裝滿了。ADC10IFG 標(biāo)志又

37、將置1,而ADC10B1位將清0。我們也可以通過讀取 ADC10B1是否清0來判斷數(shù) 據(jù)塊2是否裝滿。下圖描述了這個過程:n=0 (ADC10CTC1JDTC resetDTC JnrtDTC idkWrile toADClOSAWrite to ADC 10SAMCLK cycleADC1OIFG=1ADC1OB1 ADC1OTBTransfer data to Addwss ADWile to ADC10SAToggleADC10B1Propare DTCInrtializeStart AAdrm inADCIOSAOTC operabonWntB IOADC10MEW countedWa

38、rt untilADClQMEM i& wnttonWait tor wfrlti toADC10SAWttetoADCiOSAor3、連續(xù)傳遞ADC10B1 h or ADC10CT1ACX:1OCT= 0 andADClOei =02 (兩塊數(shù)據(jù)傳遞模式)完成傳遞后,DTC并不停止。內(nèi)部地址指針和數(shù)據(jù)傳遞計數(shù)器將會重新裝載ADC10SA和n的值。如果ADC10CT被清0,則在數(shù)據(jù)塊1 (一塊數(shù)據(jù)傳遞模式)Wait V for S/nchrorize CPU ready/ with MCLK當(dāng)ADC10CT=1時,DTC將支持連續(xù)傳遞。當(dāng)數(shù)據(jù)塊1 (一塊數(shù)據(jù)傳遞模式)或數(shù)據(jù)塊If ADC10

39、61 = 0 一IthenAD * SA/ nZichsd / in counlfif)或數(shù)據(jù)塊2 (兩塊數(shù)據(jù)傳遞模式)完成傳遞后(換句話說就是此次傳遞任務(wù)結(jié)束后),DTC傳遞停止。七、ADC10中斷和定時器一樣,ADC10也有中斷請求的能力。如果不使用DTC(ADC10DTC1=0),當(dāng)轉(zhuǎn)換結(jié)果裝載到 ADC10MEM 時,ADC10中斷標(biāo)志位即 ADC10IFG置1。如果使用 DTC(ADC10DTC0 ),那么當(dāng)一個數(shù)據(jù)塊傳遞完成和內(nèi)部傳遞計數(shù)器n =0時,ADC10IFG置1。如果ADC10IE和GIE都為1,那么一旦 ADC10IFG置1,ADC10就會產(chǎn)生一個中斷 申請。當(dāng)中斷申請

40、被響應(yīng)后,ADC10IFG標(biāo)志自動復(fù)位。當(dāng)然 ADC10IFG也可由軟件復(fù)位。大家可以結(jié)合下面的邏輯結(jié)構(gòu)來學(xué)習(xí)這一過程:上圖和前面很多中斷觸發(fā)電路一樣,中間是一個D型觸發(fā)器,這個 D型觸發(fā)器在ADC10CLK時鐘為高電平狀態(tài)時將 D端信號傳遞到 Q端,在ADC10CLK時鐘信號為低電 平狀態(tài)時保持 Q端電平狀態(tài)不變,Reset復(fù)位端一旦置高就會將 Q端清0。八、ADC10編程實例終于到了實例環(huán)節(jié)了,由于我們要獲取模擬信號的AD值來看看AD轉(zhuǎn)換到底對不對所以必須要知道得到的 AD值。一種辦法是利用IAR或者其他調(diào)試軟件進(jìn)行調(diào)試,查看內(nèi)部 ADC10MEM的值,還有一種辦法是利用硬件顯示出AD數(shù)據(jù)

41、,比如液晶、數(shù)碼管等等。這里我們將對這兩種方法分別作介紹,鍛煉大家硬件調(diào)試的能力。1、采樣溫度 AD值并用IAR調(diào)試查看:我們要對溫度進(jìn)行采樣,所以我們的通道參數(shù)INCH要設(shè)置為10。ADC10時鐘源我們就選默認(rèn)的ADC10OSC好了,不分頻。觸發(fā)源我們選擇ADC10SC信號,保持16個ADC10CLK周期。然后我們使用單通道多次的連續(xù)轉(zhuǎn)換模式即CONSEQ=2且MSC=1。參考源我們設(shè)置為內(nèi)部 2.5V的參考電平,沒有其他用途我們就不設(shè)置內(nèi)部參考電平輸出了。 同時我們還開啟一下 ADC10的中斷允許。我們這里不需要DTC就不對DTC進(jìn)行設(shè)置了。好的,經(jīng)過上面的分析,我們可以得到以下代碼:#i

42、 nclude io430.hun sig ned short tadc=0;void mai n( void )WDTCTL = WDTPW+ WDTHOLD;BCSCTL1 = CALBC1_16MHZ;DCOCTL = CALDCO_16MHZ;ADC10CTL0 = SREF_1 + ADC10SHT_2 + REF2_5V + MSC + REFON + ADC10ON + ADC10IE + ENC + ADC10SC;ADC10CTL1 = INCH_10 + SHS_0 + ADC10SSEL_0 + CONSEQ_2;en ablenterrupt();/開啟總中斷然后我們將

43、tadc或ADC10ME添加到監(jiān)視器中,我們看到Watch1中的內(nèi)容:while(1)/ADC10中斷服務(wù)函數(shù)#pragma vector=ADC10_VECTOR_interruptvoid ADC10_ISR (void)tadc = ADC10MEM;OK我們現(xiàn)在開始調(diào)試這段代碼。我們在ADC10中斷服務(wù)函數(shù)中按F9下一個斷點:+ ADC10空皀匚匸匚二=二二_匚.遇二fur_2J?trrupt: void ADC1D_ISR (void) r_tadc = ADC10MEM;然后我們按Ctrl+D進(jìn)入調(diào)試:void main void ?E / Stop iratczidoffto p

44、revent time out reset寺 WDTCTL = WLTPW + ffDTHOLD;BCSCTL1 - CALBCL_16MHZ;XOCTL = CALICO leMHZ;ADClOtLO = 5REF_1 + ADCL0SHI_2 + REF2_5V + MSC + REFON + ADCIOOH +ADC10CTL1 = INCH 10 + SHS 0 + ADC1055EL 0 + CONSEQ2;然后我們按F5全速執(zhí)行,此時程序運行到斷點處自動停下:#praqnna vecEcr=AXlC_VECTCR inizeri-jpt void(void)1 S Io卯業(yè)=ADC

45、IQEEM;L ):Firmware version 30394216):Interface dll version 2.49.1 :Device : MSP430G2xx3瓢_ilh.sX jn. I-Watch 1ExpressionV&lueLocationType695Mem口:ry : 0x20 0unsigned short Iclick to_interrupt void ACIOLb_ , 1 tadc = AnClQMEM;|電illWatch 1ExpressionValueLocationTypetadcQMemory:0x200nrsljnprl click to .然

46、后我們再按F10單步運行一步,發(fā)現(xiàn)tadc內(nèi)容發(fā)生了變化:我們可以不斷地按 F5全速執(zhí)行,在斷點處單步執(zhí)行查看tadc更新的值。2、采樣溫度 AD值并用nokia5110液晶顯示上個例子我們直接使用IAR調(diào)試來查看我們的 AD值的,這個例子里我們使用nokia5110這個液晶模塊來顯示我們的AD值。由于要用到 nokia5110,這里Cloud使用了自己移植的庫函數(shù),有興趣的同學(xué)可以自己學(xué)習(xí)5110的相關(guān)知識并連接硬件。我們這個實例的重點并不在5110上,所以我們只要知道里面的兩條函數(shù)的含義就可以了:LCD5110nit(void);5110液晶初始化函數(shù),5110液晶上電后必須執(zhí)行初始化LC

47、D5110_write_english_string(x,y,str);5110 液晶字符串顯示函數(shù),可在給定起始坐標(biāo)上顯示英文或阿拉伯?dāng)?shù)字字符串OK我們同樣來分析一下程序的結(jié)構(gòu)。大致結(jié)構(gòu)和前面的例子是類似的,只不過我們現(xiàn)在將AD值變成了字符串而已,這個函數(shù)相信大家應(yīng)該都能獨立寫出,類似于這樣:un sig nedchar showstr5=0000;un sig nedshort tadc=0;showstr0=tadc%10000/1000+0:showstr1=tadc%1000/100+0:showstr2=tadc%100/10+0:showstr3=tadc%10+0:LCD511

48、0_write_e nglish_stri ng(0,0,showstr);很簡單吧。這里Cloud就不給出具體的工程代碼了,因為我們學(xué)習(xí)寫程序,主要學(xué)習(xí)的是一種編程的思想和解決問題的方法,讓大家通過上面的編程思路自行寫出可以使用的代碼才是培養(yǎng)編程能力的最好方式好吧,扯多了3、使用TimerA來觸發(fā)ADC10進(jìn)行轉(zhuǎn)換我們前面說過,ADC10轉(zhuǎn)換的采樣觸發(fā)源可以是 ADC10SCW號也可以是TimerA的某個 輸出口。這個例子中我們就用TimerA的CCR1的OUT端來觸發(fā)ADC1C進(jìn)行轉(zhuǎn)換。我們還是講解一下編程的重點, 首先我們要將 ADC10SSE設(shè)置為1來選擇TimerA.OUT1, 然后

49、我們還要對TimerA進(jìn)行設(shè)置,這里就要用到我們前面講得 TimerA的相關(guān)知識了,包括 時鐘源選擇、分頻系數(shù)、計數(shù)模式以及輸出模式4、 使用外部引腳輸入模擬信號進(jìn)行AD轉(zhuǎn)換MSP430勺ADC1啃定是支持外部輸入引腳的模擬信號輸入的,我們通過前面的學(xué)習(xí)可以知道當(dāng)INCH在0到7的范圍內(nèi)就選擇了 A0到A7這8個外部信號通道。那么這 8個引腳 到底在哪里呢?我們參看相關(guān)數(shù)據(jù)手冊發(fā)現(xiàn)這A0到A7分別對應(yīng)著IO 口 P1.0到P1.7。我們看看如何打開這些IO的AD通道功能。我們找來上次看過的引腳多功能定義表格來看看:引書林X控號徘P1EMR.KP1SELJCPI SELZjcADClOAE.xG

50、APD.yPLOTPtu (1/0II: 0 ; tt 10000TAOCLK/TAO.TACLK01000ACLK/H.ACLK11000UADXXX0CA中CAOXXXC1(y-o)引麻建胖電X0100以P1.0為例,找到“功能”下面有一個“A0,這個就是A0外部輸入通道。然后我們看到右邊P1DIR.0、P1SEL.0、P1SEL2.0都是X說明和這些位無關(guān),再看 ADC10AE.0寫著是 1,也就是說在 ADC10AE.0=1時,我們的 P1.0 口就是用作 ADC10的A0輸入口的。所以,我們要使用外部引腳輸入模擬信號就可以將ADC10AE寸應(yīng)的位置1來實現(xiàn),當(dāng)然別忘了選擇相對應(yīng)的IN

51、CH值。5、使用外部參考源MSP430的 ADC10內(nèi)置了 1.5V和2.5V兩個參考源,另外還可以用大約 3.5V的VC*為 參考源。但這些參考源都不是非常精確,如果要用到精度更高的參考源,那么可以考慮用外部參考源。同樣,我們通過查看數(shù)據(jù)手冊,發(fā)現(xiàn)P1.3有一個“ VREF-和“ VEREF”,說明P1.3可以作為外部參考電源的負(fù)端:引書募 (PIJP1EMR.&P1SELJCP1SEL2JADCIQAEkCAPD.yP1.3JP1.K (1/0II: 0 ; O: 10000ADGIQCLK/ADCKKLK110Q0CAOUT/CAOUT11100A3XXX03VREFXXX10VEftEF*XXX10CA申CASXXXQi (y = 3)引麻藩器電容XQ100我們發(fā)現(xiàn),這里類似的,也是讓ADC10AE.3置1啟動VREF功能的。然而 P1.3同樣也支持A3輸入通道,條件還是ADC10AE.3置 1。但是不同之處是 A3對應(yīng)的1后面多了

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論