版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章模/數(shù)轉(zhuǎn)換器(ADC)本章講述了模/數(shù)(A/D)轉(zhuǎn)換器,包括模擬量輸入通道、模擬量輸入信號(hào)類型與量程自動(dòng)轉(zhuǎn)換、STM32F103VET6集成的ADC模塊、ADC庫(kù)函數(shù)、ADC使用流程和模/數(shù)(A/D)轉(zhuǎn)換器應(yīng)用實(shí)例。7.1模擬量輸入通道當(dāng)計(jì)算機(jī)用作測(cè)控系統(tǒng)時(shí),系統(tǒng)總要有被測(cè)量信號(hào)的輸入通道,由計(jì)算機(jī)拾取必要的輸入信息,對(duì)于測(cè)量系統(tǒng)而言,如何準(zhǔn)確獲取被測(cè)信號(hào)是其核心任務(wù);而對(duì)測(cè)控系統(tǒng)來(lái)講,對(duì)被控對(duì)象狀態(tài)的測(cè)試和對(duì)控制條件的監(jiān)察也是不可缺少的環(huán)節(jié)。系統(tǒng)需要的被測(cè)信號(hào),一般可分為開(kāi)關(guān)量和模擬量二種。所謂開(kāi)關(guān)量輸入,是指輸入信號(hào)為狀態(tài)信號(hào),其信號(hào)電平只有二種,即高電平或低電平。對(duì)于這類信號(hào),只需經(jīng)放大、整形和電平轉(zhuǎn)換等處理后,即可直接送入計(jì)算機(jī)系統(tǒng)。對(duì)于模擬量輸入,由于模擬信號(hào)的電壓或電流是連續(xù)變化信號(hào),其信號(hào)幅度在任何時(shí)刻都有定義,因此對(duì)其進(jìn)行處理就較為復(fù)雜,在進(jìn)行小信號(hào)放大、濾波量化等處理過(guò)程中需考慮干擾信號(hào)的抑制、轉(zhuǎn)換精度及線性等諸多因素;而這種信號(hào)又是測(cè)控系統(tǒng)中最普通、最常碰到的輸入信號(hào),如對(duì)溫度、濕度、壓力、流量、液位、氣體成份等信號(hào)的處理等。圖7-1模擬量輸入通道的組成模擬量輸入通道根據(jù)應(yīng)用要求的不同,可以有不同的結(jié)構(gòu)形式。圖7-1是多路模擬量輸入通道的組成框圖。從圖7-1可看出,模擬量輸入通道一般由信號(hào)處理、模擬開(kāi)關(guān)、放大器、采樣—保持器和A/D轉(zhuǎn)換器組成。根據(jù)需要,信號(hào)處理可選擇的內(nèi)容包括小信號(hào)放大、信號(hào)濾波、信號(hào)衰減、阻抗匹配、電平變換、非線性補(bǔ)償、電流/電壓轉(zhuǎn)換等。7.2模擬量輸入信號(hào)類型與量程自動(dòng)轉(zhuǎn)換在接到一個(gè)具體的測(cè)控任務(wù)后,需根據(jù)被測(cè)控對(duì)象選擇合適的傳感器,從而完成非電物理量到電量的轉(zhuǎn)換,經(jīng)傳感器轉(zhuǎn)換后的量,如電流、電壓等,往往信號(hào)幅度很小,很難直接進(jìn)行模數(shù)轉(zhuǎn)換,因此,需對(duì)這些模擬電信號(hào)進(jìn)行幅度處理和完成阻抗匹配、波形變換、噪聲的抑制等要求,而這些工作需要放大器完成。模擬量輸入信號(hào)主要有以下兩類:
7.2.1模擬量輸入信號(hào)類型第一類為傳感器輸出的信號(hào),如:⑴電壓信號(hào):一般為mV信號(hào),如熱電偶(TC)的輸出或電橋輸出。⑵電阻信號(hào):?jiǎn)挝粸棣?,如熱電阻(RTD)信號(hào),通過(guò)電橋轉(zhuǎn)換成mV信號(hào)。⑶電流信號(hào):一般為μA信號(hào),如電流型集成溫度傳感器AD590的輸出信號(hào),通過(guò)取樣電阻轉(zhuǎn)換成mV信號(hào)。對(duì)于以上這些信號(hào)往往不能直接送A-D轉(zhuǎn)換,因?yàn)樾盘?hào)的幅值太小,需經(jīng)運(yùn)算放大器放大后,變換成標(biāo)準(zhǔn)電壓信號(hào),如0~5V,1~5V,0~10V,-5V~+5V等,送往A-D轉(zhuǎn)換器進(jìn)行采樣。有些雙積分A-D轉(zhuǎn)換器的輸入為-200mV~+200mV或-2V~+2V,有些A-D轉(zhuǎn)換器內(nèi)部帶有程控增益放大器(PGA),可直接接受mV信號(hào)。第二類為變送器輸出的信號(hào),如:⑴電流信號(hào):0~10mA(0~1.5kΩ負(fù)載)或4~20mA(0~500Ω負(fù)載)。⑵電壓信號(hào):0~5V或1~5V等。電流信號(hào)可以遠(yuǎn)傳,通過(guò)一個(gè)標(biāo)準(zhǔn)精密取樣電阻就可以變成標(biāo)準(zhǔn)電壓信號(hào),送往A-D轉(zhuǎn)換器進(jìn)行采樣,這類信號(hào)一般不需要放大處理。
由于傳感器所提供的信號(hào)變化范圍很寬(從微伏到伏),特別是在多回路檢測(cè)系統(tǒng)中,當(dāng)各回路的參數(shù)信號(hào)不一樣時(shí),必須提供各種量程的放大器,才能保證送到計(jì)算機(jī)的信號(hào)一致(如0~5V)。在模擬系統(tǒng)中,為了放大不同的信號(hào),需要使用不同倍數(shù)的放大器。而在電動(dòng)單位組合儀表中,常常使用各種類型的變送器,如溫度變送器、差壓變送器、位移變送器等。但是,這種變送器造價(jià)比較貴,系統(tǒng)也比較復(fù)雜。隨著計(jì)算機(jī)的應(yīng)用,為了減少硬件設(shè)備,已經(jīng)研制出可編程增益放大器(ProgrammableGainAmplifier),簡(jiǎn)稱PGA。它是一種通用性很強(qiáng)的放大器,其放大倍數(shù)可根據(jù)需要用程序進(jìn)行控制。采用這種放大器,可通過(guò)程序調(diào)節(jié)放大倍數(shù),使A/D轉(zhuǎn)換器滿量程信號(hào)達(dá)到均一化,因而大大提高測(cè)量精度。這就是量程自動(dòng)轉(zhuǎn)換。7.2.2量程自動(dòng)轉(zhuǎn)換7.3STM32F103VET6集成的ADC模塊STM32F103VET6微控制器集成有18路12位高速逐次逼近型模數(shù)轉(zhuǎn)換器(ADC),可測(cè)量16個(gè)外部和2個(gè)內(nèi)部信號(hào)源。各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對(duì)齊或右對(duì)齊方式存儲(chǔ)在16位數(shù)據(jù)寄存器中。模擬看門(mén)狗特性允許應(yīng)用程序檢測(cè)輸入電壓是否超出用戶定義的高/低閾值。ADC的輸入時(shí)鐘不得超過(guò)14MHz,由PCLK2經(jīng)分頻產(chǎn)生。1)12位分辨率。2)轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門(mén)狗事件時(shí)產(chǎn)生中斷。3)單次和連續(xù)轉(zhuǎn)換模式。4)從通道0到通道n的自動(dòng)掃描模式。5)自校準(zhǔn)功能。6)帶內(nèi)嵌數(shù)據(jù)一致性的數(shù)據(jù)對(duì)齊。7)采樣間隔可以按通道分別編程。8)規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項(xiàng)。9)間斷模式。10)雙重模式(帶2個(gè)或以上ADC的器件)。7.3.1STM32的ADC概述11)ADC轉(zhuǎn)換時(shí)間:時(shí)鐘為56MHz時(shí)為1μs(時(shí)鐘為72MHz為1.17μs)。12)ADC供電要求:2.4~3.6V。13)ADC輸入范圍:VREF-≤VIN≤VREF+。14)規(guī)則通道轉(zhuǎn)換期間有DMA請(qǐng)求產(chǎn)生。STM32的ADC模塊結(jié)構(gòu)如圖7-2所示。ADC3只存在于大容量產(chǎn)品中。ADC相關(guān)引腳有:1)模擬電源VDDA:等效于VDD的模擬電源且2.4V≤VDDA≤VDD(3.6V)。2)模擬電源地VSSA:等效于Vss的模擬電源地。3)模擬參考正極VREF+:ADC使用的高端/正極參考電壓,2.4V≤VREF+≤VDDA。4)模擬參考負(fù)極VREF-:ADC使用的低端/負(fù)極參考電壓,VREF-=VSSA。5)模擬信號(hào)輸入端ADCx_IN[15:0]:16個(gè)模擬輸入通道。7.3.2STM32的ADC模塊結(jié)構(gòu)圖7-2ADC模塊結(jié)構(gòu)1.ADC開(kāi)關(guān)控制ADC_CR2寄存器的ADON位可給ADC上電。當(dāng)?shù)谝淮卧O(shè)置ADON位時(shí),它將ADC從斷電狀態(tài)下喚醒。ADC上電延遲一段時(shí)間后(tSTAB),再次設(shè)置ADON位時(shí)開(kāi)始進(jìn)行轉(zhuǎn)換。通過(guò)清除ADON位可以停止轉(zhuǎn)換,并將ADC置于斷電模式。在這個(gè)模式中,ADC耗電僅幾μA。2.ADC時(shí)鐘由時(shí)鐘控制器提供的ADCCLK時(shí)鐘和PCLK2(APB2時(shí)鐘)同步。RCC控制器為ADC時(shí)鐘提供一個(gè)專用的可編程預(yù)分頻器。7.3.3STM32的ADC配置3.通道選擇有16個(gè)多路通道??梢园艳D(zhuǎn)換組織成兩組:規(guī)則組和注入組。規(guī)則組:由多達(dá)16個(gè)轉(zhuǎn)換通道組成。對(duì)一組指定的通道,按照指定的順序,逐個(gè)轉(zhuǎn)換這組通道,轉(zhuǎn)換結(jié)束后,再?gòu)念^循環(huán);這些指定的通道組就稱為規(guī)則組。例如,可以如下順序完成轉(zhuǎn)換:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。規(guī)則通道和它們的轉(zhuǎn)換順序在ADC_SQRx寄存器中選擇。規(guī)則組中轉(zhuǎn)換的總數(shù)應(yīng)寫(xiě)入ADC_SQRI寄存器的L[3:0]位中。注入組:由多達(dá)4個(gè)轉(zhuǎn)換通道組成。在實(shí)際應(yīng)用中,有可能需要臨時(shí)中斷規(guī)則組的轉(zhuǎn)換,對(duì)某些通道進(jìn)行轉(zhuǎn)換,這些需要中斷規(guī)則組而進(jìn)行轉(zhuǎn)換的通道組,就稱為注入通道組,簡(jiǎn)稱注入組。注入通道和它們的轉(zhuǎn)換順序在ADC_JSQR寄存器中選擇。注入組里的轉(zhuǎn)換總數(shù)目應(yīng)寫(xiě)入ADC_JSQR寄存器的L[1:0]位中。4.單次轉(zhuǎn)換模式在單次轉(zhuǎn)換模式下,ADC只執(zhí)行一次轉(zhuǎn)換。該模式既可通過(guò)設(shè)置ADC_CR2寄存器的ADON位(只適用于規(guī)則通道)啟動(dòng),也可通過(guò)外部觸發(fā)啟動(dòng)(適用于規(guī)則通道或注入通道),這時(shí)CONT位為0。一旦選擇通道的轉(zhuǎn)換完成:1)如果一個(gè)規(guī)則通道轉(zhuǎn)換完成,則轉(zhuǎn)換數(shù)據(jù)儲(chǔ)存在16位ADC_DR寄存器中;EOC(轉(zhuǎn)換結(jié)束)標(biāo)志置位;如果設(shè)置了EOCIE,則產(chǎn)生中斷。2)如果一個(gè)注入通道轉(zhuǎn)換完成,則轉(zhuǎn)換數(shù)據(jù)儲(chǔ)存在16位的ADC_DRJ1寄存器中;JEOC(注入轉(zhuǎn)換結(jié)束)標(biāo)志置位;如果設(shè)置了JEOCIE位,則產(chǎn)生中斷。然后ADC停止。5.連續(xù)轉(zhuǎn)換模式在連續(xù)轉(zhuǎn)換模式中,當(dāng)前面ADC轉(zhuǎn)換一結(jié)束馬上就啟動(dòng)另一次轉(zhuǎn)換。此模式可通過(guò)外部觸發(fā)啟動(dòng)或通過(guò)設(shè)置ADC_CR2寄存器上的ADON位啟動(dòng),此時(shí)CONT位是1。每次轉(zhuǎn)換后:1)如果一個(gè)規(guī)則通道轉(zhuǎn)換完成,則轉(zhuǎn)換數(shù)據(jù)存儲(chǔ)在16位的ADC_DR寄存器中;EOC(轉(zhuǎn)換結(jié)束)標(biāo)志置位;如果設(shè)置了EOCIE,則產(chǎn)生中斷。2)如果一個(gè)注入通道轉(zhuǎn)換完成,則轉(zhuǎn)換數(shù)據(jù)儲(chǔ)存在16位的ADC_DRJ1寄存器中;JEOC(注入轉(zhuǎn)換結(jié)束)標(biāo)志置位;如果設(shè)置了JEOCIE位,則產(chǎn)生中斷。6.時(shí)序圖ADC轉(zhuǎn)換時(shí)序圖如圖7-3所示,ADC在開(kāi)始精確轉(zhuǎn)換前需要一個(gè)穩(wěn)定時(shí)間tSTAB,在開(kāi)始ADC轉(zhuǎn)換14個(gè)時(shí)鐘周期后,EOC標(biāo)志被設(shè)置,16位ADC數(shù)據(jù)寄存器包含轉(zhuǎn)換后結(jié)果。圖7-3ADC轉(zhuǎn)換時(shí)序圖7.模擬看門(mén)狗如果被ADC轉(zhuǎn)換的模擬電壓低于低閾值或高于高閾值,模擬看門(mén)狗AWD的狀態(tài)位將被置位,如圖7-4所示。圖7-4模擬看門(mén)狗警戒區(qū)閾值位于ADC_HTR和ADC_LTR寄存器的最低12個(gè)有效位中。通過(guò)設(shè)置ADC_CR1寄存器的AWDIE位以允許產(chǎn)生相應(yīng)中斷。閾值的數(shù)據(jù)對(duì)齊模式與ADC_CR2寄存器中的ALIGN位選擇無(wú)關(guān)。比較是在對(duì)齊之前完成的。通過(guò)配置ADC_CR1寄存器,模擬看門(mén)狗可以作用于一個(gè)或多個(gè)通道。8.掃描模式此模式用來(lái)掃描一組模擬通道。掃描模式可通過(guò)設(shè)置ADC_CR1寄存器的SCAN位來(lái)選擇。一旦這個(gè)位被設(shè)置,ADC就掃描所有被ADC_SQRX寄存器(對(duì)規(guī)則通道)或ADC_JSQR(對(duì)注入通道)選中的所有通道。在每個(gè)組的每個(gè)通道上執(zhí)行單次轉(zhuǎn)換。在每個(gè)轉(zhuǎn)換結(jié)束時(shí),同一組的下一個(gè)通道被自動(dòng)轉(zhuǎn)換。如果設(shè)置了CONT位,轉(zhuǎn)換不組的最一個(gè)通道停止,而是再次從選擇組的第一個(gè)通道繼續(xù)轉(zhuǎn)換。如果設(shè)置了DMA位,在每次EOC后,DMA控制器把規(guī)則組通道的轉(zhuǎn)換數(shù)據(jù)傳輸?shù)絊RAM中。而注入通道轉(zhuǎn)換的數(shù)據(jù)總是存儲(chǔ)在ADC_JDRx寄存器中。9.注入通道管理1)觸發(fā)注入清除ADC_CR1寄存器的JAUTO位,并設(shè)置SCAN位,即可使用觸發(fā)注入功能。過(guò)程如下:(1)利用外部觸發(fā)或通過(guò)設(shè)置ADC_CR2寄存器的ADON位,啟動(dòng)一組規(guī)則通道的轉(zhuǎn)換。(2)如果在規(guī)則通道轉(zhuǎn)換期間產(chǎn)生一外部注入觸發(fā),當(dāng)前轉(zhuǎn)換被復(fù)位,注入通道序列被以單次掃描方式進(jìn)行轉(zhuǎn)換。(3)然后,恢復(fù)上次被中斷的規(guī)則組通道轉(zhuǎn)換。如果在注入轉(zhuǎn)換期間產(chǎn)生一個(gè)規(guī)則事件,則注入轉(zhuǎn)換不會(huì)被中斷,但是規(guī)則序列將在注入序列結(jié)束后被執(zhí)行。觸發(fā)注入轉(zhuǎn)換時(shí)序圖如圖7-5所示。圖7-5觸發(fā)注入轉(zhuǎn)換時(shí)序圖注(1):最大延遲數(shù)值請(qǐng)參考數(shù)據(jù)手冊(cè)中有關(guān)電氣特性部分。當(dāng)使用觸發(fā)注入轉(zhuǎn)換時(shí),必須保證觸發(fā)事件的間隔長(zhǎng)于注入序列。例如,序列長(zhǎng)度為28個(gè)ADC時(shí)鐘周期(即2個(gè)具有1.5個(gè)時(shí)鐘間隔采樣時(shí)間的轉(zhuǎn)換),觸發(fā)之間最小的間隔必須是29個(gè)ADC時(shí)鐘周期。2)自動(dòng)注入如果設(shè)置了JAUTO位,在規(guī)則組通道之后,注入組通道被自動(dòng)轉(zhuǎn)換。這種方式可以用來(lái)轉(zhuǎn)換在ADC_SQRx和ADC_JSQR寄存器中設(shè)置的多至20個(gè)轉(zhuǎn)換序列。在該模式中,必須禁止注入通道的外部觸發(fā)。如果除JAUTO位外還設(shè)置了CONT位,規(guī)則通道至注入通道的轉(zhuǎn)換序列被連續(xù)執(zhí)行。對(duì)于ADC時(shí)鐘預(yù)分頻系數(shù)為4~8時(shí),當(dāng)從規(guī)則轉(zhuǎn)換切換到注入序列或從注入轉(zhuǎn)換切換到規(guī)則序列時(shí),會(huì)自動(dòng)插入1個(gè)ADC時(shí)鐘間隔;當(dāng)ADC時(shí)鐘預(yù)分頻系數(shù)為2時(shí),則有2個(gè)ADC時(shí)鐘間隔的延遲。不可能同時(shí)使用自動(dòng)注入和間斷模式。10.間斷模式1)規(guī)則組此模式通過(guò)設(shè)置ADC_CR1寄存器上的DISCEN位激活,可以用來(lái)執(zhí)行一個(gè)短序列的n次轉(zhuǎn)換(n≤8),此轉(zhuǎn)換是ADC_SQRx寄存器所選擇的轉(zhuǎn)換序列的一部分。數(shù)值,由ADC_CR1寄存器的DISCNUM[2:0]位給出。一個(gè)外部觸發(fā)信號(hào)可以啟動(dòng)ADC_SQRx寄存器中描述的下一輪n次轉(zhuǎn)換,直到此序列所有的轉(zhuǎn)換完成為止。總的序列長(zhǎng)度由ADC_SQR1寄存器的L[3:0]定義。例如:若n=3,被轉(zhuǎn)換的通道=0、1、2、3、6、7、9、10,則:第1次觸發(fā):轉(zhuǎn)換的序列為0、1、2。第2次觸發(fā):轉(zhuǎn)換的序列為3、6、7。第3次觸發(fā):轉(zhuǎn)換的序列為9、10,并產(chǎn)生EOC事件。第4次觸發(fā):轉(zhuǎn)換的序列0、1、2。當(dāng)以間斷模式轉(zhuǎn)換一個(gè)規(guī)則組時(shí),轉(zhuǎn)換序列結(jié)束后并不自動(dòng)從頭開(kāi)始。當(dāng)所有子組被轉(zhuǎn)換完成,下一次觸發(fā)啟動(dòng)第一個(gè)子組的轉(zhuǎn)換。例如,在上面的例子中,第四次觸發(fā)重新轉(zhuǎn)換第一子組的通道0、1和2。2)注入組此模式通過(guò)設(shè)置ADC_CR1寄存器的JDISCEN位激活。在一個(gè)外部觸發(fā)事件后,該模式按通道順序逐個(gè)轉(zhuǎn)換ADC_JSQR寄存器中選擇的序列。一個(gè)外部觸發(fā)信號(hào)可以啟動(dòng)ADC_JSQR寄存器選擇的下一個(gè)通道序列的轉(zhuǎn)換,直到序列中所有的轉(zhuǎn)換完成為止。總的序列長(zhǎng)度由ADC_JSQR寄存器的JL[1:0]位定義。例如:若n=1,被轉(zhuǎn)換的通道=1、2、3,則第1次觸發(fā):通道1被轉(zhuǎn)換。第2次觸發(fā):通道2被轉(zhuǎn)換。第3次觸發(fā):通道3被轉(zhuǎn)換,并且產(chǎn)生EOC和JEOC事件。第4次觸發(fā):通道1被轉(zhuǎn)換。注意:①當(dāng)完成所有注入通道轉(zhuǎn)換,下個(gè)觸發(fā)啟動(dòng)第一個(gè)注入通道的轉(zhuǎn)換。在上述例子中,第四次觸發(fā)重新轉(zhuǎn)換第一個(gè)注入通道1。②不能同時(shí)使用自動(dòng)注入和間斷模式。③必須避免同時(shí)為規(guī)則和注入組設(shè)置間斷模式。間斷模式只能作用于一組轉(zhuǎn)換。1.校準(zhǔn)ADC有一個(gè)內(nèi)置自校準(zhǔn)模式。校準(zhǔn)可大幅度減小因內(nèi)部電容器組的變化而造成的精度誤差。在校準(zhǔn)期間,在每個(gè)電容器上都會(huì)計(jì)算出一個(gè)誤差修正碼(數(shù)字值),這個(gè)碼用于消除在隨后的轉(zhuǎn)換中每個(gè)電容器上產(chǎn)生的誤差。通過(guò)設(shè)置ADC_CR2寄存器的CAL位啟動(dòng)校準(zhǔn)。一旦校準(zhǔn)結(jié)束,CAL位被硬件復(fù)位,可以開(kāi)始正常轉(zhuǎn)換。建議在每次上電后執(zhí)行一次ADC校準(zhǔn)。啟動(dòng)校準(zhǔn)前,ADC必須處于關(guān)電狀態(tài)(ADON=0)至少兩個(gè)ADC時(shí)鐘周期。校準(zhǔn)階段結(jié)束后,校準(zhǔn)碼儲(chǔ)存在ADC_DR中。ADC校準(zhǔn)時(shí)序圖如圖7-6所示。7.3.4STM32的ADC應(yīng)用特征圖7-6ADC校準(zhǔn)時(shí)序圖2.?dāng)?shù)據(jù)對(duì)齊ADC_CR2寄存器中的ALIGN位選擇轉(zhuǎn)換后數(shù)據(jù)儲(chǔ)存的對(duì)齊方式。數(shù)據(jù)可以左對(duì)齊或右對(duì)齊,如圖7-7和圖7-8所示。圖7-7數(shù)據(jù)右對(duì)齊圖7-8數(shù)據(jù)左對(duì)齊注入組通道轉(zhuǎn)換的數(shù)據(jù)值已經(jīng)減去了ADC_JOFRx寄存器中定義的偏移量,因此結(jié)果可以是一個(gè)負(fù)值。SEXT位是擴(kuò)展的符號(hào)值。對(duì)于規(guī)則組通道,不需要減去偏移值,因此只有12個(gè)位有效。3.可編程的通道采樣時(shí)間ADC使用若干個(gè)ADC_CLK周期對(duì)輸入電壓采樣,采樣周期數(shù)目可以通過(guò)ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位更改。每個(gè)通道可以分別用不同的時(shí)間采樣??傓D(zhuǎn)換時(shí)間按式(7-1)計(jì)算:TCONV=采樣時(shí)間+12.5個(gè)周期(7-1)例如,當(dāng)ADCCLK=14MHz,采樣時(shí)間為1.5周期時(shí),TCONV=1.5+12.5=14個(gè)周期=lus。4.外部觸發(fā)轉(zhuǎn)換可以由外部事件觸發(fā)(例如定時(shí)器捕獲、EXTI線)。如果設(shè)置了EXTTRIG控制位,則外部事件就能夠觸發(fā)轉(zhuǎn)換,EXTSEL[2:0]和JEXTSEL[2:0]控制位允許應(yīng)用程序8個(gè)可能事件中的一個(gè),可以觸發(fā)規(guī)則組和注入組的采樣。5.DMA請(qǐng)求因?yàn)橐?guī)則通道轉(zhuǎn)換的值存儲(chǔ)在一個(gè)相同的數(shù)據(jù)寄存器ADC_DR中,所以當(dāng)轉(zhuǎn)換多個(gè)規(guī)則通道時(shí)需要使用DMA,這可以避免丟失已經(jīng)存儲(chǔ)在ADC_DR寄存器中的數(shù)據(jù)。只有在規(guī)則通道的轉(zhuǎn)換結(jié)束時(shí)才產(chǎn)生DMA請(qǐng)求,并將轉(zhuǎn)換的數(shù)據(jù)從ADC_DR寄存器傳輸?shù)接脩糁付ǖ哪康牡刂贰Wⅲ褐挥蠥DC1和ADC3擁有DMA功能。由ADC2轉(zhuǎn)換的數(shù)據(jù)可以通過(guò)雙ADC模式,利用ADC1的DMA功能傳輸。6.雙ADC模式在有2個(gè)或以上ADC模塊的產(chǎn)品中,可以使用雙ADC模式,雙ADC框圖如圖10-11所示。在雙ADC模式下,根據(jù)ADC1_CR1寄存器中DUALMOD[2:0]位所選的模式,轉(zhuǎn)換的啟動(dòng)可以是ADC1主和ADC2從的交替觸發(fā)或同步觸發(fā)。在雙ADC模式下,當(dāng)轉(zhuǎn)換配置成由外部事件觸發(fā)時(shí),用戶必須將其設(shè)置成僅觸發(fā)主ADC,從ADC設(shè)置成軟件觸發(fā),這樣可以防止意外觸發(fā)從轉(zhuǎn)換。但是,主和從ADC的外部觸發(fā)必須同時(shí)被激活。共有6種可能的模式:同步注入模式、同步規(guī)則模式、快速交叉模式、慢速交叉模式、交替觸發(fā)模式和獨(dú)立模式。還有可以用下列方式組合使用上面的模式:(1)同步注入模式+同步規(guī)則模式;(2)同步規(guī)則模式+交替觸發(fā)模式;(3)同步注入模式+交叉模式。在雙ADC模式下,為了在主數(shù)據(jù)寄存器上讀取從轉(zhuǎn)換數(shù)據(jù),必須使能DMA位,即使不使用DMA傳輸規(guī)則通道數(shù)據(jù)。7.4ADC庫(kù)函數(shù)STM32標(biāo)準(zhǔn)庫(kù)中提供了幾乎覆蓋所有ADC操作的函數(shù),如表7-5所示,所有ADC相關(guān)函數(shù)均在stm32f10x_adc.c和stm32f10x_adc.h中進(jìn)行定義和聲明。為了理解這些函數(shù)的具體使用方法,本節(jié)對(duì)標(biāo)準(zhǔn)庫(kù)中部分函數(shù)做詳細(xì)介紹。表7-5ADC庫(kù)函數(shù)函數(shù)名稱功能ADC_DeInit將外設(shè)ADCx的全部寄存器重設(shè)為缺省值A(chǔ)DC_Init根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器ADC_StructInit把ADC_InitStruct中的每一個(gè)參數(shù)按缺省值填入ADC_Cmd使能或者失能指定的ADCADC_DMACmd使能或者失能指定的ADC的DMA請(qǐng)求ADC_ITConfig使能或者失能指定的ADC的中斷ADC_ResetCalibration重置指定的ADC的校準(zhǔn)寄存器ADC_GetResetCalibrationStatus獲取ADC重置校準(zhǔn)寄存器的狀態(tài)ADC_StartCalibration開(kāi)始指定ADC的校準(zhǔn)程序ADC_GetCalibrationStatus獲取指定ADC的校準(zhǔn)狀態(tài)ADC_SoftwareStartConvCmd使能或者失能指定的ADC的軟件轉(zhuǎn)換啟動(dòng)功能ADC_GetSoftwareStartConvStatus獲取ADC軟件轉(zhuǎn)換啟動(dòng)狀態(tài)ADC_DiscModeChannelCountConfig對(duì)ADC規(guī)則組通道配置間斷模式ADC_DiscModeCmd使能或者失能指定的ADC規(guī)則組通道的間斷模式ADC_RegularChannelConfig設(shè)置指定ADC的規(guī)則組通道,設(shè)置它們的轉(zhuǎn)化順序和采樣時(shí)間ADC_ExternalTrigConvConfig使能或者失能ADCx的經(jīng)外部觸發(fā)啟動(dòng)轉(zhuǎn)換功能ADC_GetConversionValue得到最近一次ADCx規(guī)則組的轉(zhuǎn)換結(jié)果ADC_GetDuelModeConversionValue得到最近一次雙ADC模式下的轉(zhuǎn)換結(jié)果ADC_AutoInjectedConvCmd使能或者失能指定ADC在規(guī)則組轉(zhuǎn)化后自動(dòng)開(kāi)始注入組轉(zhuǎn)換表7-5ADC庫(kù)函數(shù)(續(xù)表)函數(shù)名稱功能ADC_InjectedDiscModeCmd使能或者失能指定ADC的注入組間斷模式ADC_ExternalTrigInjectedConvConfig配置ADCx的外部觸發(fā)啟動(dòng)注入組轉(zhuǎn)換功能ADC_ExternalTrigInjectedConvCmd使能或者失能ADCx的經(jīng)外部觸發(fā)啟動(dòng)注入組轉(zhuǎn)換功能ADC_SoftwareStartinjectedConvCmd使能或者失能ADCx軟件啟動(dòng)注入組轉(zhuǎn)換功能ADC_GetsoftwareStartinjectedConvStatus獲取指定ADC的軟件啟動(dòng)注入組轉(zhuǎn)換狀態(tài)ADC_InjectedChannelConfig設(shè)置指定ADC的注入組通道,設(shè)置它們的轉(zhuǎn)化順序和采樣時(shí)間ADC_InjectedSequencerLengthConfig設(shè)置注入組通道的轉(zhuǎn)換序列長(zhǎng)度ADC_SetinjectedOffset設(shè)置注入組通道的轉(zhuǎn)換偏移值A(chǔ)DC_GetInjectedConversionValue返回ADC指定注入通道的轉(zhuǎn)換結(jié)果ADC_AnalogWatchdogCmd使能或者失能指定單個(gè)/全體,規(guī)則/注入組通道上的模擬看門(mén)狗ADC_AnalogWatchdogThresholdsConfig設(shè)置模擬看門(mén)狗的高/低閾值A(chǔ)DC_AnalogWatchdogSingleChannelConfig對(duì)單個(gè)ADC通道設(shè)置模擬看門(mén)狗ADC_TampSensorVrefintCmd使能或者失能溫度傳感器和內(nèi)部參考電壓通道ADC_GetFlagStatus檢查制定ADC標(biāo)志位置1與否ADC_ClearFlag清除ADCx的待處理標(biāo)志位ADC_GetITStatus檢查指定的ADC中斷是否發(fā)生ADC_ClearITPendingBit清除ADCx的中斷待處理位1.函數(shù)ADC_DeInit函數(shù)名:ADC_DeInit。函數(shù)原型:voidADC_DeInit(ADC_TypeDef*ADCx)。功能描述:將外設(shè)ADCx的全部寄存器重設(shè)為缺省值。輸入?yún)?shù):ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸出參數(shù):無(wú)。返回值:無(wú)。例如:/*ResetsADC2*/ADC_DeInit(ADC2);2.函數(shù)ADC_Init函數(shù)名:ADC_Init。函數(shù)原型:voidADC_Init(ADC_TypeDef*ADCx,ADC_InitTypeDef*ADC_InitStruct)。功能描述:根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器。輸入?yún)?shù)1:ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸入?yún)?shù)2:ADC_InitStruct,指向結(jié)構(gòu)ADC_InitTypeDef的指針,包含了指定外設(shè)ADC的配置信息。輸出參數(shù):無(wú)。返回值:無(wú)。例如:/*InitializetheADC1accordingtotheADC_InitStructuremembers*/ADC_InitTypeDefADC_InitStructure;ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode=ENABLE;ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_Ext_IT11;ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel=16;ADC_Init(ADC1,&ADC_InitStructure);為了能夠正確地配置每一個(gè)ADC通道,用戶在調(diào)用ADC_Init()之后,必須調(diào)用ADC_ChannelConfig()配置每個(gè)所使用通道的轉(zhuǎn)換次序和采樣時(shí)間。3.函數(shù)ADC_RegularChannelConfig函數(shù)名:ADC_RegularChannelConfig。函數(shù)原型:voidADC_RegularChannelConfig(ADC_TypeDef*ADCx,u8ADC_Channel,u8Rank,u8ADC_SampleTime)。功能描述:設(shè)置指定ADC的規(guī)則組通道,設(shè)置它們的轉(zhuǎn)化順序和采樣時(shí)間。輸入?yún)?shù)1:ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸入?yún)?shù)2:ADC_Channel,被設(shè)置的ADC通道。輸入?yún)?shù)3:Rank,規(guī)則組采樣順序。取值范圍1~16。輸入?yún)?shù)4:ADC_SampleTime,指定ADC通道的采樣時(shí)間值,參閱章節(jié)ADC_SampleTime,查閱更多該參數(shù)允許取值范圍。輸出參數(shù):無(wú)。返回值:無(wú)。例如:/*ConfiguresADC1Channel2as:firstconvertedchannelwithan7.5cyclessampletime*/ADC_RegularChanne1Config(ADC1,ADC_Channel_2,1,ADC_SampleTime_7Cycles5);/*ConfiguresADC1Channe18as:secondconvertedchannelwithan1.5cyclessampletime*/ADC_RegularChannelConfig(ADC1,ADC_Channel_B,2,ADC_SampleTime_1Cycles5);4.函數(shù)ADC_RegularChannelConfig函數(shù)名:ADC_InjectedChannelConfig。函數(shù)原型:voidADC_InjectedChannelConfig(ADC_TypeDef*ADCx,u8ADC_Channel,u8Rank,u8ADC_SampleTime)。功能描述:設(shè)置指定ADC的注入通道,設(shè)置它們的轉(zhuǎn)化順序和采樣時(shí)間。輸入?yún)?shù)1:ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸入?yún)?shù)2:ADC_Channel,被設(shè)置的ADC通道。輸入?yún)?shù)3:Rank,規(guī)則組采樣順序,取值范圍1~4。輸入?yún)?shù)4:ADC_SampleTime,指定ADC通道的采樣時(shí)間值,參閱章節(jié)ADC_SampleTime,查閱更多該參數(shù)允許取值范圍。輸出參數(shù):無(wú)。返回值:無(wú)。1)ADC_Channel參數(shù)ADC_Channel指定了需設(shè)置的ADC通道。2)ADC_SampleTimeADC_SampleTime設(shè)定了選中通道的ADC采樣時(shí)間。例如:/*ConfiguresADC1Channel12as:secondconvertedchannelwithan28.5cyclessampletime*/ADC_InjectedChannelConfig(ADC1,ADC_Channel_12,2,ADC_SampleTime_28Cycles5);5.函數(shù)ADC_Cmd函數(shù)名:ADC_Cmd。函數(shù)原型:ADC_Cmd(ADC_TypeDef*ADCx,F(xiàn)unctionalStateNewState)。功能描述:使能或者失能指定的ADC。輸入?yún)?shù)1:ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸入?yún)?shù)2:NewState,外設(shè)ADCx的新?tīng)顟B(tài),這個(gè)參數(shù)可以取ENABLE或者DISABLE。輸出參數(shù):無(wú)。返回值:無(wú)。例如:/*EnableADC1*/ADC_Cmd(ADC1,ENABLE);注意:函數(shù)ADC_Cmd只能在其他ADC設(shè)置函數(shù)之后被調(diào)用6.函數(shù)ADC_ResetCalibration函數(shù)名:ADC_ResetCalibration。函數(shù)原型:voidADC_ResetCalibration(ADC_TypeDef*ADCx)。功能描述:重置指定的ADC的校準(zhǔn)寄存器。輸入?yún)?shù):ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸出參數(shù):無(wú)。返回值:無(wú)。例如:/*ResettheADC1Calibrationregisters*/ADC_ResetCalibration(ADC1);7.函數(shù)AD_GetResetCalibrationStatus函數(shù)名:ADC_GetResetCalibrationStatus。函數(shù)原型:FlagStatusADC_GetResetCalibrationStatus(ADC_TypeDef*ADCx)。功能描述:獲取ADC重置校準(zhǔn)寄存器的狀態(tài)。輸入?yún)?shù):ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸出參數(shù):無(wú)。返回值:ADC重置校準(zhǔn)寄存器的新?tīng)顟B(tài)(SET或者RESET)。例如:/*GettheADC2resetcalibrationregistersstatus*/FlagStatusStatus;Status=ADC_GetResetCalibrationStatus(ADC2);8.函數(shù)ADC_StartCalibration函數(shù)名:ADC_StartCalibration。函數(shù)原型:voidADC_StartCalibration(ADC_TypeDef*ADCx)。功能描述:開(kāi)始指定ADC的校準(zhǔn)狀態(tài)。輸入?yún)?shù):ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸出參數(shù):無(wú)。返回值:無(wú)。例如:/*StarttheADC2Calibration*/ADC_StartCalibration(ADC2);9.函數(shù)ADC_GetCalibrationStatus函數(shù)名:ADC_GetCalibrationStatus。函數(shù)原型:FlagStatusADC_GetCalibrationStatus(ADC_TypeDef*ADCx)。功能描述:獲取指定ADC的校準(zhǔn)程序。輸入?yún)?shù):ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸出參數(shù):無(wú)。返回值:ADC校準(zhǔn)的新?tīng)顟B(tài)(SET或者RESET)。例如:/*GettheADC2calibrationstatus*/FlagStatusStatus;Status=ADC_GetCalibrationStatus(ADC2);26210.函數(shù)ADC_SoftwareStartConvCmd函數(shù)名:ADC_SoftwareStartConvCmd。函數(shù)原型:voidADC_SoftwareStartConvCmd(ADC_TypeDef*ADCx,F(xiàn)unctionalStateNewState)。功能描述:使能或者失能指定的ADC的軟件轉(zhuǎn)換啟動(dòng)功能。輸入?yún)?shù)1:ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸入?yún)?shù)2:NewState,指定ADC的軟件轉(zhuǎn)換啟動(dòng)新?tīng)顟B(tài),這個(gè)參數(shù)可以取ENABLE或者DISABLE。輸出參數(shù):無(wú)。返回值:無(wú)。例如:/*StartbysoftwaretheADC1Conversion*/ADC_SoftwareStartConvCmd(ADC1,ENABLE);11.函數(shù)ADC_GetConversionValue函數(shù)名:ADC_GetConversionValue。函數(shù)原型:u16ADC_GetConversionValue(ADC_TypeDef*ADCx)。功能描述:返回最近一次ADCx規(guī)則組的轉(zhuǎn)換結(jié)果。輸入?yún)?shù):ADCx,x可以是1、2或3,用來(lái)選擇ADC外設(shè)。輸出參數(shù):無(wú)。返回值:轉(zhuǎn)換結(jié)果。例
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度個(gè)人房產(chǎn)買(mǎi)賣綠色環(huán)保裝修合同3篇
- 遠(yuǎn)足活動(dòng)課程設(shè)計(jì)
- 安全用電運(yùn)行管理制度模版(2篇)
- 2025年影劇院消防安全管理制度(2篇)
- 2024年青島版六三制新必修5語(yǔ)文下冊(cè)階段測(cè)試試卷
- 二零二五年度承包土地種植與農(nóng)業(yè)電商平臺(tái)合作協(xié)議2篇
- 2025年投資公司年度工作計(jì)劃范文(2篇)
- 二零二五年度交通基礎(chǔ)設(shè)施PPP項(xiàng)目合同2篇
- 2025年外研版三年級(jí)起點(diǎn)九年級(jí)化學(xué)下冊(cè)階段測(cè)試試卷
- 二零二五年度國(guó)際貿(mào)易財(cái)務(wù)擔(dān)保合同示范(國(guó)際貿(mào)易保障)
- 供應(yīng)鏈案例亞馬遜歐洲公司分銷戰(zhàn)略課件
- 石化行業(yè)八大高風(fēng)險(xiǎn)作業(yè)安全規(guī)范培訓(xùn)課件
- 村老支書(shū)追悼詞
- DB3302T 1131-2022企業(yè)法律顧問(wèn)服務(wù)基本規(guī)范
- 2022年自愿性認(rèn)證活動(dòng)獲證組織現(xiàn)場(chǎng)監(jiān)督檢查表、確認(rèn)書(shū)
- 中南大學(xué)年《高等數(shù)學(xué)上》期末考試試題及答案
- 付款通知確認(rèn)單
- 小龍蝦高密度養(yǎng)殖試驗(yàn)基地建設(shè)項(xiàng)目可行性研究報(bào)告
- 《橋梁工程計(jì)算書(shū)》word版
- 中考《紅星照耀中國(guó)》各篇章練習(xí)題及答案(1-12)
- 舒爾特方格55格200張?zhí)岣邔W⒘4紙直接打印版
評(píng)論
0/150
提交評(píng)論