STM32-ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告_第1頁(yè)
STM32-ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告_第2頁(yè)
STM32-ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告_第3頁(yè)
STM32-ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

STM32ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告一、實(shí)驗(yàn)?zāi)康?.了解STM32的根本工作原理2.通過(guò)實(shí)踐來(lái)加深對(duì)ARM芯片級(jí)程序開(kāi)發(fā)的理解3.利用STM32的ADC1通道0來(lái)采樣外部電壓值值,并在TFTLCD模塊上顯示出來(lái)二、實(shí)驗(yàn)原理STM32擁有1~3個(gè)ADC,這些ADC可以獨(dú)立使用,也可以使用雙重模式〔提高采樣率〕。STM32的ADC是12位逐次逼近型的模擬數(shù)字轉(zhuǎn)換器。它有18個(gè)通道,可測(cè)量16個(gè)外部和2個(gè)內(nèi)部信號(hào)源。各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對(duì)齊或右對(duì)齊方式存儲(chǔ)在16位數(shù)據(jù)存放器中接下來(lái),我們介紹一下執(zhí)行規(guī)那么通道的單次轉(zhuǎn)換,需要用到的ADC存放器。第一個(gè)要介紹的是ADC控制存放器〔ADC_CR1和ADC_CR2〕。ADC_CR1的各位描述如下:ADC_CR1的SCAN位,該位用于設(shè)置掃描模式,由軟件設(shè)置和去除,如果設(shè)置為1,那么使用掃描模式,如果為0,那么關(guān)閉掃描模式,ADC_CR1[19:16]用于設(shè)置ADC的操作模式我們要使用的是獨(dú)立模式,所以設(shè)置這幾位為0就可以了。第二個(gè)存放器ADC_CR2,該存放器的各位描述如下:ADCON位用于開(kāi)關(guān)AD轉(zhuǎn)換器。而CONT位用于設(shè)置是否進(jìn)行連續(xù)轉(zhuǎn)換,我們使用單次轉(zhuǎn)換,所以CONT位必須為0。CAL和RSTCAL用于AD校準(zhǔn)。ALIGN用于設(shè)置數(shù)據(jù)對(duì)齊,我們使用右對(duì)齊,該位設(shè)置為0。EXTSEL[2:0]用于選擇啟動(dòng)規(guī)那么轉(zhuǎn)換組轉(zhuǎn)換的外部事件,我們這里使用的是軟件觸發(fā)〔SWSTART〕,所以設(shè)置這3個(gè)位為111。第三個(gè)要介紹的是ADC采樣事件存放器〔ADC_SMPR1和ADC_SMPR2〕,這兩個(gè)存放器用于設(shè)置通道0~17的采樣時(shí)間,每個(gè)通道占用3個(gè)位對(duì)于每個(gè)要轉(zhuǎn)換的通道,采樣時(shí)間建議盡量長(zhǎng)一點(diǎn),以獲得較高的準(zhǔn)確度,但是這樣會(huì)降低ADC的轉(zhuǎn)換速率。ADC的轉(zhuǎn)換時(shí)間可以由下式計(jì)算:Tcovn=采樣時(shí)間+12.5個(gè)周期第四個(gè)要介紹的是ADC規(guī)那么序列存放器〔ADC_SQR1~3〕,第五個(gè)要介紹的是ADC規(guī)那么數(shù)據(jù)存放器(ADC_DR)。最后一個(gè)要介紹的ADC存放器為ADC狀態(tài)存放器〔ADC_SR〕,該存放器保存了ADC轉(zhuǎn)換時(shí)的各種狀態(tài)。三.實(shí)驗(yàn)內(nèi)容一.實(shí)驗(yàn)步驟1〕開(kāi)啟PA口時(shí)鐘,設(shè)置PA0為模擬輸入。STM32F103RBT6的ADC通道0在PA0上,所以,我們先要使能PORTA的時(shí)鐘,然后設(shè)置PA0為模擬輸入。2〕使能ADC1時(shí)鐘,并設(shè)置分頻因子。要使用ADC1,第一步就是要使能ADC1的時(shí)鐘,在使能完時(shí)鐘之后,進(jìn)行一次ADC1的復(fù)位。接著我們就可以通過(guò)RCC_CFGR設(shè)置ADC1的分頻因子。分頻因子要確保ADC1的時(shí)鐘〔ADCCLK〕不要超過(guò)14Mhz。3〕設(shè)置ADC1的工作模式。在設(shè)置完分頻因子之后,我們就可以開(kāi)始ADC1的模式配置了,設(shè)置單次轉(zhuǎn)換模式、觸發(fā)方式選擇、數(shù)據(jù)對(duì)齊方式等都在這一步實(shí)現(xiàn)。4〕設(shè)置ADC1規(guī)那么序列的相關(guān)信息。接下來(lái)我們要設(shè)置規(guī)那么序列的相關(guān)信息,我們這里只有一個(gè)通道,并且是單次轉(zhuǎn)換的,所以設(shè)置規(guī)那么序列中通道數(shù)為1,然后設(shè)置通道0的采樣周期。5〕開(kāi)啟AD轉(zhuǎn)換器,并校準(zhǔn)。在設(shè)置完了以上信息后,我們就開(kāi)啟AD轉(zhuǎn)換器,執(zhí)行復(fù)位校準(zhǔn)和AD校準(zhǔn),注意這兩步是必須的!不校準(zhǔn)將導(dǎo)致結(jié)果很不準(zhǔn)確。6〕讀取ADC值。在上面的校準(zhǔn)完成之后,ADC就算準(zhǔn)備好了。接下來(lái)我們要做的就是設(shè)置規(guī)那么序列0里面的通道,然后啟動(dòng)ADC轉(zhuǎn)換。在轉(zhuǎn)換結(jié)束后,讀取ADC1_DR里面的值就是了。通過(guò)以上幾個(gè)步驟的設(shè)置,我們就可以正常的使用STM32的ADC1來(lái)執(zhí)行AD轉(zhuǎn)換操作了。二,程序代碼voidAdc_Init(void){//先初始化IO口RCC->APB2ENR|=1<<2;//使能PORTA口時(shí)鐘GPIOA->CRL&=0XFFFF0000;//PA0123anolog輸入//通道10/11設(shè)置RCC->APB2ENR|=1<<9;//ADC1時(shí)鐘使能RCC->APB2RSTR|=1<<9;//ADC1復(fù)位RCC->APB2RSTR&=~(1<<9);//復(fù)位結(jié)束RCC->CFGR&=~(3<<14);//分頻因子清零//SYSCLK/DIV2=12MADC時(shí)鐘設(shè)置為12M,ADC最大時(shí)鐘不能超過(guò)14M!//否那么將導(dǎo)致ADC準(zhǔn)確度下降!RCC->CFGR|=2<<14;ADC1->CR1&=0XF0FFFF;//工作模式清零ADC1->CR1|=0<<16;//獨(dú)立工作模式ADC1->CR1&=~(1<<8);//非掃描模式ADC1->CR2&=~(1<<1);//單次轉(zhuǎn)換模式ADC1->CR2&=~(7<<17);ADC1->CR2|=7<<17;//軟件控制轉(zhuǎn)換ADC1->CR2|=1<<20;//使用用外部觸發(fā)(SWSTART)!!!必須使用一個(gè)事件來(lái)觸發(fā)ADC1->CR2&=~(1<<11);//右對(duì)齊ADC1->SQR1&=~(0XF<<20);ADC1->SQR1&=0<<20;//1個(gè)轉(zhuǎn)換在規(guī)那么序列中也就是只轉(zhuǎn)換規(guī)那么序列1//設(shè)置通道0~3的采樣時(shí)間ADC1->SMPR2&=0XFFFFF000;//通道0,1,2,3采樣時(shí)間清空ADC1->SMPR2|=7<<9;//通道3239.5周期,提高采樣時(shí)間可以提高精確度ADC1->SMPR2|=7<<6;//通道2239.5周期,提高采樣時(shí)間可以提高精確度ADC1->SMPR2|=7<<3;//通道1239.5周期,提高采樣時(shí)間可以提高精確度ADC1->SMPR2|=7<<0;//通道0239.5周期,提高采樣時(shí)間可以提高精確度ADC1->CR2|=1<<0;//開(kāi)啟AD轉(zhuǎn)換器ADC1->CR2|=1<<3;//使能復(fù)位校準(zhǔn)while(ADC1->CR2&1<<3);//等待校準(zhǔn)結(jié)束//該位由軟件設(shè)置并由硬件去除。在校準(zhǔn)存放器被初始化后該位將被去除。ADC1->CR2|=1<<2;//開(kāi)啟AD校準(zhǔn)while(ADC1->CR2&1<<2);//等待校準(zhǔn)結(jié)束//該位由軟件設(shè)置以開(kāi)始校準(zhǔn),并在校準(zhǔn)結(jié)束時(shí)由硬件去除}//獲得ADC值//ch:通道值0~3u16Get_Adc(u8ch){//設(shè)置轉(zhuǎn)換序列ADC1->SQR3&=0XFFFFFADC1->CR2|=1<<22;//啟動(dòng)規(guī)那么轉(zhuǎn)換通道while(!(ADC1->SR&1<<1));//等待轉(zhuǎn)換結(jié)束returnADC1->DR;//返回adc值}。接下來(lái)在adc.h文件里面輸入如下代碼:#ifndef__ADC_H#define__ADC_H//MiniSTM32開(kāi)發(fā)板//ADC驅(qū)動(dòng)代碼//正點(diǎn)原子@ALIENTEK#defineADC_CH00//通道0#defineADC_CH11//通道1#defineADC_CH22//通道2#defineADC_CH33//通道3voidAdc_Init(void);u16Get_Adc(u8ch);#endif該局部代碼很簡(jiǎn)單,這里我們就不多說(shuō)了,這里定義的4個(gè)通道的宏定義,我們?cè)趍ain函數(shù)將會(huì)用到ADC_CH0。接下來(lái)我們?cè)趖est.c里面,修改main函數(shù)如下:intmain(void){u16adcx;floattemp;Stm32_Clock_Init(9);//系統(tǒng)時(shí)鐘設(shè)置delay_init(72);//延時(shí)初始化uart_init(72,9600);//串口1初始化LED_Init();LCD_Init();Adc_Init();POINT_COLOR=RED;//設(shè)置字體為紅色POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色LCD_Sho

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論