日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]1. ADC簡(jiǎn)介stm32f103最少有2個(gè)AD模數(shù)轉(zhuǎn)換器,每個(gè)ADC都有18個(gè)通道,可以測(cè)量16個(gè)外部和2個(gè)內(nèi)部模擬量。最大轉(zhuǎn)換頻率為1Mhz,也就是轉(zhuǎn)換時(shí)間為1us(在 ADCCLK = 14Mhz,采樣周期為1.5個(gè)時(shí)鐘周期時(shí))。最大時(shí)鐘超過14Mh

1. ADC簡(jiǎn)介

stm32f103最少有2個(gè)AD模數(shù)轉(zhuǎn)換器,每個(gè)ADC都有18個(gè)通道,可以測(cè)量16個(gè)外部和2個(gè)內(nèi)部模擬量。最大轉(zhuǎn)換頻率為1Mhz,也就是轉(zhuǎn)換時(shí)間為1us(在 ADCCLK = 14Mhz,采樣周期為1.5個(gè)時(shí)鐘周期時(shí))。最大時(shí)鐘超過14Mhz,將導(dǎo)致ADC轉(zhuǎn)換準(zhǔn)確度降低。stm32的ADC是12位精度的。

stm32的ADC轉(zhuǎn)換有兩種通道,規(guī)則通道和注入通道,注入通道可以搶占式地打斷規(guī)則通道的采樣,執(zhí)行注入通道采樣后,再執(zhí)行之前的規(guī)則通道采樣,和中斷類似。本例只使用規(guī)則通道實(shí)現(xiàn)獨(dú)立模式的中斷采樣,這里不再贅述兩種通道區(qū)別。

stm32的ADC可以由外部事件觸發(fā)(例如定時(shí)器捕獲,EXTI線)和軟件觸發(fā)(即在配置相關(guān)寄存器時(shí),直接開啟采樣)。

STM32的ADC在單次轉(zhuǎn)換模式下,只執(zhí)行一次轉(zhuǎn)換,該模式可以通過ADC_CR2 寄存器的ADON 位(只適用于規(guī)則通道)啟動(dòng),也可以通過外部觸發(fā)啟動(dòng)(適用于規(guī)則通道和注入通道),這是CONT 位為0 。 以規(guī)則通道為例,一旦所選擇的通道轉(zhuǎn)換完成,轉(zhuǎn)換結(jié)果將被存在ADC_DR 寄存器,EOC (轉(zhuǎn)換結(jié)束)標(biāo)志將被置位,如果設(shè)置了EOCIE ,則會(huì)產(chǎn)生中斷。然后ADC將停止,直到下次啟動(dòng)。

2. 寄存器簡(jiǎn)介2.1. ADC控制寄存器(ADC_CR1和ADC_CR2)

ADC_CR1的SCAN 位,該位用于設(shè)置掃描模式,由軟件設(shè)置和清除,如果設(shè)置為1 ,則使用掃描模式,如果為 0,則關(guān)閉掃描模式。在掃描模式下,由 ADC_SQRx或ADC_JSQRx寄存器選中的通道被轉(zhuǎn)換。如果設(shè)置了 EOCIE 或JEOCIE,只在最后一個(gè)通道轉(zhuǎn)換完畢后才會(huì)產(chǎn)生EOC 或JEOC 中斷。

ADC_CR1[19:16]用于設(shè)置 ADC的操作模式

ADC_CR2

ADCON位用于開關(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)換的外部事件,詳細(xì)的設(shè)置關(guān)系如下:

這里使用的是軟件觸發(fā)(SWSTART ),所以設(shè)置這3 個(gè)位為111 。ADC_CR2 的SWSTART 位用于開始規(guī)則通道的轉(zhuǎn)換,我們每次轉(zhuǎn)換(單次轉(zhuǎn)換模式下)都需要向該位寫 1 。AWDEN 為用于使能溫度傳感器和Vrefint 。

2.2. ADC采樣事件寄存器(ADC_SMPR1 和ADC_SMPR2 )

這兩個(gè)寄存器用于設(shè)置通道0~17的采樣時(shí)間,每個(gè)通道占用 3 個(gè)位。

ADC_SMPR2 的各位描述如下

對(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è)周期

其中:Tcovn 為總轉(zhuǎn)換時(shí)間,采樣時(shí)間是根據(jù)每個(gè)通道的SMP位的設(shè)置來決定的。例如,當(dāng)ADCCLK=14Mhz 的時(shí)候,并設(shè)置 1.5個(gè)周期的采樣時(shí)間,則得到:Tcovn=1.5+12.5=14 個(gè)周期=1us 。


2.3. ADC規(guī)則序列寄存器(ADC_SQR1~3)

L[3:0] 用于存儲(chǔ)規(guī)則序列的長(zhǎng)度,我們這里只用了 1 個(gè),所以設(shè)置這幾個(gè)位的值為 0 。其他的SQ13~16 則存儲(chǔ)了規(guī)則序列中第13~16 個(gè)通道的編號(hào)(0~17)。另外兩個(gè)規(guī)則序列寄存器同ADC_SQR1大同小異,我們這里就不再介紹了,要說明一點(diǎn)的是:我們選擇的是單次轉(zhuǎn)換,所以只有一個(gè)通道在規(guī)則序列里面,這個(gè)序列就是SQ0 ,通過ADC_SQR3的最低5 位設(shè)置。

2.4. ADC規(guī)則數(shù)據(jù)寄存器(ADC_DR)

這里要提醒一點(diǎn)的是,該寄存器的數(shù)據(jù)可以通過ADC_CR2 的ALIGN位設(shè)置左對(duì)齊還是右對(duì)齊。在讀取數(shù)據(jù)的時(shí)候要注意。

2.5. ADC狀態(tài)寄存器(ADC_SR )

這里我們要用到的是EOC 位,我們通過判斷該位來決定是否此次規(guī)則通道的AD轉(zhuǎn)換已經(jīng)完成,如果完成我們就從ADC_DR 中讀取轉(zhuǎn)換結(jié)果,否則等待轉(zhuǎn)換完成。

3. 寄存器操作步驟

1 、開啟PA口時(shí)鐘,設(shè)置PA0 為模擬輸入。

STM32F103RBT6的ADC通道0 在PA 0 上,所以,我們先要使能 PORTA的時(shí)鐘,然后設(shè)置PA 0 為模擬輸入。

2 、使能ADC1 時(shí)鐘,并設(shè)置分頻因子。

要使用ADC1,第一步就是要使能 ADC1 的時(shí)鐘,在使能完時(shí)鐘之后,進(jìn)行一次 ADC1 的復(fù)位。接著我們就可以通過RCC_CFGR設(shè)置ADC1 的分頻因子。分頻因子要確保 ADC1 的時(shí)鐘(ADCCLK)不要超過14Mhz 。

3 、設(shè)置ADC1 的工作模式。

在設(shè)置完分頻因子之后,我們就可以開始 ADC1 的模式配置了,設(shè)置單次轉(zhuǎn)換模式、觸發(fā)方式選擇、數(shù)據(jù)對(duì)齊方式等都在這一步實(shí)現(xiàn)。

4 、設(shè)置ADC1 規(guī)則序列的相關(guān)信息。

接下來我們要設(shè)置規(guī)則序列的相關(guān)信息,我們這里只有一個(gè)通道,并且是單次轉(zhuǎn)換的,所以設(shè)置規(guī)則序列中通道數(shù)為1 ,然后設(shè)置通道 0 的采樣周期。

5 、開啟AD轉(zhuǎn)換器,并校準(zhǔn)。

在設(shè)置完了以上信息后,我們就開啟AD轉(zhuǎn)換器,執(zhí)行復(fù)位校準(zhǔn)和AD校準(zhǔn),注意這兩步是必須的!不校準(zhǔn)將導(dǎo)致結(jié)果很不準(zhǔn)確。

6 )讀取ADC值。

在上面的校準(zhǔn)完成之后,ADC就算準(zhǔn)備好了。接下來我們要做的就是設(shè)置規(guī)則序列 0 里面的通道,然后啟動(dòng)ADC轉(zhuǎn)換。在轉(zhuǎn)換結(jié)束后,讀取ADC1_DR 里面的值就是了。

硬件設(shè)置:我們通過ADC1 的通道0 (PA 0 )來讀取外部電壓值。

注意:這里不能接到板上5V電源上去測(cè)試,這可能會(huì)燒壞 ADC!

ADC.C


#include

#include"adc.h"

//ADC驅(qū)動(dòng)代碼

//初始化ADC

//這里我們僅以規(guī)則通道為例

//我們默認(rèn)將開啟通道0~3

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í)鐘不能超過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è)事件來觸發(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;//開啟AD轉(zhuǎn)換器

AD

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在嵌入式開發(fā)中,STM32的時(shí)鐘系統(tǒng)因其靈活性和復(fù)雜性成為開發(fā)者關(guān)注的焦點(diǎn)。然而,看似簡(jiǎn)單的時(shí)鐘配置背后,隱藏著諸多易被忽視的陷阱,輕則導(dǎo)致系統(tǒng)不穩(wěn)定,重則引發(fā)硬件損壞。本文從時(shí)鐘源選擇、PLL配置、總線時(shí)鐘分配等關(guān)鍵環(huán)...

關(guān)鍵字: STM32 時(shí)鐘系統(tǒng)

在嵌入式系統(tǒng)開發(fā)中,STM32系列微控制器的內(nèi)部溫度傳感器因其低成本、高集成度特性,廣泛應(yīng)用于設(shè)備自檢、環(huán)境監(jiān)測(cè)等場(chǎng)景。然而,受芯片工藝差異和電源噪聲影響,其原始數(shù)據(jù)存在±1.5℃的固有誤差。本文從硬件配置、校準(zhǔn)算法、軟...

關(guān)鍵字: STM32 溫度傳感器

在能源效率與智能化需求雙重驅(qū)動(dòng)下,AC-DC轉(zhuǎn)換器的數(shù)字控制技術(shù)正經(jīng)歷從傳統(tǒng)模擬方案向全數(shù)字架構(gòu)的深刻變革?;赟TM32微控制器的PFM(脈沖頻率調(diào)制)+PWM(脈沖寬度調(diào)制)混合調(diào)制策略,結(jié)合動(dòng)態(tài)電壓調(diào)整(Dynam...

關(guān)鍵字: AC-DC STM32

當(dāng)前智能家居產(chǎn)品需求不斷增長(zhǎng) ,在這一背景下 ,對(duì)現(xiàn)有澆花裝置缺陷進(jìn)行了改進(jìn) ,設(shè)計(jì)出基于STM32單片機(jī)的全 自動(dòng)家用澆花機(jī)器人。該設(shè)計(jì)主要由機(jī)械結(jié)構(gòu)和控制系統(tǒng)構(gòu)成 ,機(jī)械結(jié)構(gòu)通過麥克納姆輪底盤與噴灑裝置的結(jié)合實(shí)現(xiàn)機(jī)器...

關(guān)鍵字: STM32 麥克納姆輪 安全可靠 通過性強(qiáng)

用c++編程似乎是讓你的Arduino項(xiàng)目起步的障礙嗎?您想要一種更直觀的微控制器編程方式嗎?那你需要了解一下Visuino!這個(gè)圖形化編程平臺(tái)將復(fù)雜電子項(xiàng)目的創(chuàng)建變成了拖動(dòng)和連接塊的簡(jiǎn)單任務(wù)。在本文中,我們將帶您完成使...

關(guān)鍵字: Visuino Arduino ESP32 STM32

基于STM32與LoRa技術(shù)的無線傳感網(wǎng)絡(luò)憑借其低功耗、廣覆蓋、抗干擾等特性,成為環(huán)境監(jiān)測(cè)、工業(yè)自動(dòng)化等場(chǎng)景的核心解決方案。然而,如何在復(fù)雜電磁環(huán)境中實(shí)現(xiàn)高效休眠調(diào)度與動(dòng)態(tài)信道優(yōu)化,成為提升網(wǎng)絡(luò)能效與可靠性的關(guān)鍵挑戰(zhàn)。本...

關(guān)鍵字: STM32 LoRa

在實(shí)時(shí)控制系統(tǒng)、高速通信協(xié)議處理及高精度數(shù)據(jù)采集等對(duì)時(shí)間敏感的應(yīng)用場(chǎng)景中,中斷響應(yīng)延遲的優(yōu)化直接決定了系統(tǒng)的可靠性與性能上限。STM32系列微控制器憑借其靈活的嵌套向量中斷控制器(NVIC)、多通道直接內(nèi)存訪問(DMA)...

關(guān)鍵字: STM32 DMA

數(shù)字電源技術(shù)向高功率密度、高效率與高動(dòng)態(tài)響應(yīng)方向加速演進(jìn),STM32微控制器憑借其基于DSP庫(kù)的算法加速能力與對(duì)LLC諧振變換器的精準(zhǔn)控制架構(gòu),成為優(yōu)化電源動(dòng)態(tài)性能的核心平臺(tái)。相較于傳統(tǒng)模擬控制或通用型數(shù)字控制器,STM...

關(guān)鍵字: STM32 數(shù)字電源

STM32微控制器憑借其針對(duì)電機(jī)控制場(chǎng)景的深度優(yōu)化,成為高精度、高可靠性驅(qū)動(dòng)系統(tǒng)的核心選擇。相較于通用型MCU,STM32在電機(jī)控制領(lǐng)域的核心優(yōu)勢(shì)集中體現(xiàn)在FOC(磁場(chǎng)定向控制)算法的硬件加速引擎與PWM死區(qū)時(shí)間的動(dòng)態(tài)補(bǔ)...

關(guān)鍵字: STM32 電機(jī)控制

無線充電技術(shù)加速滲透消費(fèi)電子與汽車電子領(lǐng)域,基于Qi協(xié)議的無線充電發(fā)射端開發(fā)成為智能設(shè)備能量補(bǔ)給的核心課題。傳統(tǒng)模擬控制方案存在響應(yīng)滯后、參數(shù)調(diào)整困難等問題,而基于STM32的數(shù)字PID控制結(jié)合FOD(Foreign O...

關(guān)鍵字: STM32 無線充電
關(guān)閉