色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32入門篇—ADC教程

冬至子 ? 來源:Tech云 ? 作者:Tech云 ? 2023-07-07 17:12 ? 次閱讀

1、 main.c 簡單清楚地一個(gè)例程,一個(gè)簡單的ADC例程,調(diào)用了A0引腳測(cè)量電壓值。

圖片

2、 ADC初始化 ,PTA0

M_ADC_Init(ADC1, ADC_CH0_Pin, ADC_ExternalTrigConv_None, 1, Rank_1);

圖片

3、 ADC初始化-- - ADC_CH0_Pin選擇

圖片

4、 ADC初始化---ADC_ExternalTrigConv_None的****選擇

使用軟件觸發(fā),一般不需要更改這個(gè)配置。

圖片

圖片

5、ADC初始化--- 1選擇通道數(shù):

圖片

**6、**ADC初始化--- Rank_1 采樣順序:

圖片

7、 ADC采樣 : M_ADCx_GetValue(ADC_TypeDef* ADCx);

圖片

8、 ADC采樣再解釋

圖片

掌握了ADC的功能框圖,就可以對(duì)ADC有一個(gè)整體的把握,在編程的時(shí)候可以做到了然如胸,不會(huì)一知半解。框圖講解采用從左到右的方式,跟ADC采集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),傳輸數(shù)據(jù)的方向大概一致。

(1). ①電壓輸入范圍

ADC輸入范圍為:VREF- ≤ VIN ≤ V REF+ 。由V REF- 、VREF+ 、VDDA 、V SSA 、這四個(gè)外部引腳決定。

我們?cè)谠O(shè)計(jì)原理圖的時(shí)候一般把VSSA和V REF- 接地,把V REF+ 和VDDA 接3V3,得到ADC的輸入電壓范圍為:0~3.3V。

如果我們想讓輸入的電壓范圍變寬,去到可以測(cè)試負(fù)電壓或者更高的正電壓,我們可以在外部加一個(gè)電壓調(diào)理電路,把需要轉(zhuǎn)換的電壓抬升或者降壓到0~3.3V,這樣ADC就可以測(cè)量了。

(2). ②輸入通道

我們確定好ADC輸入電壓之后,那么電壓怎么輸入到ADC?這里我們引入通道的概念,STM32的ADC多達(dá)19個(gè)通道,其中外部的16個(gè)通道就是框圖中的ADCx_IN0、ADCx_IN1...ADCx_IN5。這16個(gè)通道對(duì)應(yīng)著不同的IO口,具體是哪一個(gè)IO口可以從手冊(cè)查詢到。其中ADC1/2/3還有內(nèi)部通道: ADC1的通道ADC1_IN16連接到內(nèi)部的VSS,通道ADC1_IN17連接到了內(nèi)部參考電壓VREFINT 連接,通道ADC1_IN18連接到了芯片內(nèi)部的溫度傳感器或者備用電源V BAT 。ADC2和ADC3的通道16、17、18全部連接到了內(nèi)部的VSS。

圖片

圖 02 STM32F429IGT6 ADC 通道

外部的16個(gè)通道在轉(zhuǎn)換的時(shí)候又分為規(guī)則通道和注入通道,其中規(guī)則通道最多有16路,注入通道最多有4路。那這兩個(gè)通道有什么區(qū)別?在什么時(shí)候使用?

規(guī)則通道

規(guī)則通道:顧名思意,規(guī)則通道就是很規(guī)矩的意思,我們平時(shí)一般使用的就是這個(gè)通道,或者應(yīng)該說我們用到的都是這個(gè)通道,沒有什么特別要注意的可講。

注入通道

注入,可以理解為插入,插隊(duì)的意思,是一種不安分的通道。它是一種在規(guī)則通道轉(zhuǎn)換的時(shí)候強(qiáng)行插入要轉(zhuǎn)換的一種。如果在規(guī)則通道轉(zhuǎn)換過程中,有注入通道插隊(duì),那么就要先轉(zhuǎn)換完注入通道,等注入通道轉(zhuǎn)換完成后,再回到規(guī)則通道的轉(zhuǎn)換流程。這點(diǎn)跟中斷程序很像,都是不安分的主。所以,注入通道只有在規(guī)則通道存在時(shí)才會(huì)出現(xiàn)。

(3). ③轉(zhuǎn)換順序
規(guī)則序列

規(guī)則序列寄存器有3個(gè),分別為SQR3、SQR2、SQR1。SQR3控制著規(guī)則序列中的第一個(gè)到第六個(gè)轉(zhuǎn)換,對(duì)應(yīng)的位為:SQ1[4:0]~SQ6[4:0],第一次轉(zhuǎn)換的是位4:0 SQ1[4:0],如果通道16想第一次轉(zhuǎn)換,那么在SQ1[4:0]寫16即可。SQR2控制著規(guī)則序列中的第7到第12個(gè)轉(zhuǎn)換,對(duì)應(yīng)的位為:SQ7[4:0]~SQ12[4:0],如果通道1想第8個(gè)轉(zhuǎn)換,則SQ8[4:0]寫1即可。SQR1控制著規(guī)則序列中的第13到第16個(gè)轉(zhuǎn)換,對(duì)應(yīng)位為:SQ13[4:0]~SQ16[4:0],如果通道6想第10個(gè)轉(zhuǎn)換,則SQ10[4:0]寫6即可。具體使用多少個(gè)通道,由SQR1的位L[3:0]決定,最多16個(gè)通道。

圖片

圖 03 規(guī)則序列寄存器

注入序列

注入序列寄存器JSQR只有一個(gè),最多支持4個(gè)通道,具體多少個(gè)由JSQR的JL[2:0]決定。如果JL的值小于4的話,則JSQR跟SQR決定轉(zhuǎn)換順序的設(shè)置不一樣,第一次轉(zhuǎn)換的不是JSQR1[4:0],而是JCQRx[4:0] ,x = (4-JL),跟SQR剛好相反。如果JL=00(1個(gè)轉(zhuǎn)換),那么轉(zhuǎn)換的順序是從JSQR4[4:0]開始,而不是從JSQR1[4:0]開始,這個(gè)要注意,編程的時(shí)候不要搞錯(cuò)。當(dāng)JL等于4時(shí),跟SQR一樣。

圖片

圖 04 注入序列寄存器

(4). ④觸發(fā)源

通道選好了,轉(zhuǎn)換的順序也設(shè)置好了,那接下來就該開始轉(zhuǎn)換了。ADC轉(zhuǎn)換可以由ADC控制寄存器2: ADC_CR2的ADON這個(gè)位來控制,寫1的時(shí)候開始轉(zhuǎn)換,寫0的時(shí)候停止轉(zhuǎn)換,這個(gè)是最簡單也是最好理解的開啟ADC轉(zhuǎn)換的控制方式,理解起來沒啥技術(shù)含量。

除了這種庶民式的控制方法,ADC還支持外部事件觸發(fā)轉(zhuǎn)換,這個(gè)觸發(fā)包括內(nèi)部定時(shí)器觸發(fā)和外部IO觸發(fā)。觸發(fā)源有很多,具體選擇哪一種觸發(fā)源,由ADC控制寄存器2:ADC_CR2的EXTSEL[2:0]和JEXTSEL[2:0]位來控制。EXTSEL[2:0]用于選擇規(guī)則通道的觸發(fā)源,JEXTSEL[2:0]用于選擇注入通道的觸發(fā)源。選定好觸發(fā)源之后,觸發(fā)源是否要激活,則由ADC控制寄存器2:ADC_CR2的EXTTRIG和JEXTTRIG這兩位來激活。

如果使能了外部觸發(fā)事件,我們還可以通過設(shè)置ADC控制寄存器2:ADC_CR2的EXTEN[1:0]和JEXTEN[1:0]來控制觸發(fā)極性,可以有4種狀態(tài),分別是:禁止觸發(fā)檢測(cè)、上升沿檢測(cè)、下降沿檢測(cè)以及上升沿和下降沿均檢測(cè)。

(5). ⑤轉(zhuǎn)換時(shí)間
ADC時(shí)鐘

ADC輸入時(shí)鐘ADC_CLK由PCLK2經(jīng)過分頻產(chǎn)生,最大值是36MHz,典型值為30MHz,分頻因子由ADC通用控制寄存器ADC_CCR的ADCPRE[1:0]設(shè)置,可設(shè)置的分頻系數(shù)有2、4、6和8,注意這里沒有1分頻。對(duì)于STM32F429IGT6我們一般設(shè)置PCLK2=HCLK/2=90MHz。所以程序一般使用4分頻或者6分頻。

采樣時(shí)間

ADC需要若干個(gè)ADC_CLK周期完成對(duì)輸入的電壓進(jìn)行采樣,采樣的周期數(shù)可通過ADC 采樣時(shí)間寄存器ADC_SMPR1和ADC_SMPR2中的SMP[2:0]位設(shè)置,ADC_SMPR2控制的是通道09,ADC_SMPR1控制的是通道1017。每個(gè)通道可以分別用不同的時(shí)間采樣。其中采樣周期最小是3個(gè),即如果我們要達(dá)到最快的采樣,那么應(yīng)該設(shè)置采樣周期為3個(gè)周期,這里說的周期就是1/ADC_CLK。

ADC的總轉(zhuǎn)換時(shí)間跟ADC的輸入時(shí)鐘和采樣時(shí)間有關(guān),公式為:

Tconv = 采樣時(shí)間 + 12個(gè)周期

當(dāng)ADCCLK = 30MHz,即PCLK2為60MHz,ADC時(shí)鐘為2分頻,采樣時(shí)間設(shè)置為3個(gè)周期,那么總的轉(zhuǎn)換時(shí)為:Tconv = 3 + 12 = 15個(gè)周期 =0.5us。

一般我們?cè)O(shè)置PCLK2=90MHz,經(jīng)過ADC預(yù)分頻器能分頻到最大的時(shí)鐘只能是22.5M,采樣周期設(shè)置為3個(gè)周期,算出最短的轉(zhuǎn)換時(shí)間為0.6667us,這個(gè)才是最常用的。

(6). ⑥數(shù)據(jù)寄存器

一切準(zhǔn)備就緒后,ADC轉(zhuǎn)換后的數(shù)據(jù)根據(jù)轉(zhuǎn)換組的不同,規(guī)則組的數(shù)據(jù)放在ADC_DR寄存器,注入組的數(shù)據(jù)放在JDRx。如果是使用雙重或者三重模式那規(guī)矩組的數(shù)據(jù)是存放在通用規(guī)矩寄存器ADC_CDR內(nèi)的。

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

ADC規(guī)則組數(shù)據(jù)寄存器ADC_DR只有一個(gè),是一個(gè)32位的寄存器,只有低16位有效并且只是用于獨(dú)立模式存放轉(zhuǎn)換完成數(shù)據(jù)。因?yàn)锳DC的最大精度是12位,ADC_DR是16位有效,這樣允許ADC存放數(shù)據(jù)時(shí)候選擇左對(duì)齊或者右對(duì)齊,具體是以哪一種方式存放,由ADC_CR2的11位ALIGN設(shè)置。假如設(shè)置ADC精度為12位,如果設(shè)置數(shù)據(jù)為左對(duì)齊,那AD轉(zhuǎn)換完成數(shù)據(jù)存放在ADC_DR寄存器的[4:15]位內(nèi);如果為右對(duì)齊,則存放在ADC_DR寄存器的[0:11]位內(nèi)。

規(guī)則通道可以有16個(gè)這么多,可規(guī)則數(shù)據(jù)寄存器只有一個(gè),如果使用多通道轉(zhuǎn)換,那轉(zhuǎn)換的數(shù)據(jù)就全部都擠在了DR里面,前一個(gè)時(shí)間點(diǎn)轉(zhuǎn)換的通道數(shù)據(jù),就會(huì)被下一個(gè)時(shí)間點(diǎn)的另外一個(gè)通道轉(zhuǎn)換的數(shù)據(jù)覆蓋掉,所以當(dāng)通道轉(zhuǎn)換完成后就應(yīng)該把數(shù)據(jù)取走,或者開啟DMA模式,把數(shù)據(jù)傳輸?shù)絻?nèi)存里面,不然就會(huì)造成數(shù)據(jù)的覆蓋。最常用的做法就是開啟DMA傳輸。

如果沒有使用DMA傳輸,我們一般都需要使用ADC狀態(tài)寄存器ADC_SR獲取當(dāng)前ADC轉(zhuǎn)換的進(jìn)度狀態(tài),進(jìn)而進(jìn)行程序控制。

注入數(shù)據(jù)寄存器ADC_JDRx

ADC注入組最多有4個(gè)通道,剛好注入數(shù)據(jù)寄存器也有4個(gè),每個(gè)通道對(duì)應(yīng)著自己的寄存器,不會(huì)跟規(guī)則寄存器那樣產(chǎn)生數(shù)據(jù)覆蓋的問題。ADC_JDRx是32位的,低16位有效,高16位保留,數(shù)據(jù)同樣分為左對(duì)齊和右對(duì)齊,具體是以哪一種方式存放,由ADC_CR2的11位ALIGN設(shè)置。

通用規(guī)則數(shù)據(jù)寄存器ADC_CDR

規(guī)則數(shù)據(jù)寄存器ADC_DR是僅適用于獨(dú)立模式的,而通用規(guī)則數(shù)據(jù)寄存器ADC_CDR是適用于雙重和三重模式的。獨(dú)立模式就是僅僅適用三個(gè)ADC的其中一個(gè),雙重模式就是同時(shí)使用ADC1和ADC2,而三重模式就是三個(gè)ADC同時(shí)使用。在雙重或者三重模式下一般需要配合DMA數(shù)據(jù)傳輸使用。

(7). ⑦中斷
轉(zhuǎn)換結(jié)束中斷

數(shù)據(jù)轉(zhuǎn)換結(jié)束后,可以產(chǎn)生中斷,中斷分為四種:規(guī)則通道轉(zhuǎn)換結(jié)束中斷,注入轉(zhuǎn)換通道轉(zhuǎn)換結(jié)束中斷,模擬看門狗中斷和溢出中斷。其中轉(zhuǎn)換結(jié)束中斷很好理解,跟我們平時(shí)接觸的中斷一樣,有相應(yīng)的中斷標(biāo)志位和中斷使能位,我們還可以根據(jù)中斷類型寫相應(yīng)配套的中斷服務(wù)程序。

模擬看門狗中斷

當(dāng)被ADC轉(zhuǎn)換的模擬電壓低于低閾值或者高于高閾值時(shí),就會(huì)產(chǎn)生中斷,前提是我們開啟了模擬看門狗中斷,其中低閾值和高閾值由ADC_LTR和ADC_HTR設(shè)置。例如我們?cè)O(shè)置高閾值是2.5V,那么模擬電壓超過2.5V的時(shí)候,就會(huì)產(chǎn)生模擬看門狗中斷,反之低閾值也一樣。

溢出中斷

如果發(fā)生DMA傳輸數(shù)據(jù)丟失,會(huì)置位ADC狀態(tài)寄存器ADC_SR的OVR位,如果同時(shí)使能了溢出中斷,那在轉(zhuǎn)換結(jié)束后會(huì)產(chǎn)生一個(gè)溢出中斷。

DMA請(qǐng)求

規(guī)則和注入通道轉(zhuǎn)換結(jié)束后,除了產(chǎn)生中斷外,還可以產(chǎn)生DMA請(qǐng)求,把轉(zhuǎn)換好的數(shù)據(jù)直接存儲(chǔ)在內(nèi)存里面。對(duì)于獨(dú)立模式的多通道AD轉(zhuǎn)換使用DMA傳輸非常有必須要,程序編程簡化了很多。對(duì)于雙重或三重模式使用DMA傳輸幾乎可以說是必要的。有關(guān)DMA請(qǐng)求需要配合《STM32F4xx中文參考手冊(cè)》DMA控制器這一章節(jié)來學(xué)習(xí)。一般我們?cè)谑褂肁DC的時(shí)候都會(huì)開啟DMA傳輸。

(8). ⑧電壓轉(zhuǎn)換

模擬電壓經(jīng)過ADC轉(zhuǎn)換后,是一個(gè)相對(duì)精度的數(shù)字值,如果通過串口以16進(jìn)制打印出來的話,可讀性比較差,那么有時(shí)候我們就需要把數(shù)字電壓轉(zhuǎn)換成模擬電壓,也可以跟實(shí)際的模擬電壓(用萬用表測(cè))對(duì)比,看看轉(zhuǎn)換是否準(zhǔn)確。

我們一般在設(shè)計(jì)原理圖的時(shí)候會(huì)把ADC的輸入電壓范圍設(shè)定在:0~3.3v,如果設(shè)置ADC為12位的,那么12位滿量程對(duì)應(yīng)的就是3.3V,12位滿量程對(duì)應(yīng)的數(shù)字值是:2^12。數(shù)值0對(duì)應(yīng)的就是0V。如果轉(zhuǎn)換后的數(shù)值為 X ,X對(duì)應(yīng)的模擬電壓為Y,那么會(huì)有這么一個(gè)等式成立: 2^12 / 3.3 = X / Y,=> Y = (3.3 * X ) / 2^12。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 溫度傳感器
    +關(guān)注

    關(guān)注

    48

    文章

    2940

    瀏覽量

    156060
  • 轉(zhuǎn)換器
    +關(guān)注

    關(guān)注

    27

    文章

    8701

    瀏覽量

    147153
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5342

    瀏覽量

    120323
  • ADC采樣
    +關(guān)注

    關(guān)注

    0

    文章

    134

    瀏覽量

    12845
  • STM32芯片
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    4381
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    單片機(jī)學(xué)習(xí)(入門篇)pdf

    單片機(jī)學(xué)習(xí)(入門篇)
    發(fā)表于 10-10 10:26

    PCB設(shè)計(jì)技巧之入門篇

    PCB設(shè)計(jì)技巧之入門篇
    發(fā)表于 08-05 21:44

    單片機(jī) (入門篇

    單片機(jī) (入門篇
    發(fā)表于 08-20 16:42

    單片機(jī)(入門篇

    單片機(jī)(入門篇
    發(fā)表于 04-01 15:22

    電子工程師自學(xué)速成 入門篇

    `“電子工程師自學(xué)速成”叢書分為“入門篇”、“提高”和“設(shè)計(jì)”共 3 本。《電子工程師自學(xué)速成入門篇》為“入門篇”,主要介紹了電子技術(shù)
    發(fā)表于 11-09 12:50

    電子工程師自學(xué)速成入門篇 pdf 帶書簽!!

    電子工程師自學(xué)速成”叢書分為“入門篇”、“提高”和“設(shè)計(jì)”共 3 本。《電子工程師自學(xué)速成——入門篇》為“入門篇”,主要介紹了電子技術(shù)
    發(fā)表于 10-27 15:37

    【轉(zhuǎn)】STM32學(xué)習(xí)之路入門篇之指令集

    STM32學(xué)習(xí)之路入門篇之指令集
    發(fā)表于 12-26 22:45

    電子工程師自學(xué)速成 入門篇

    電子工程師自學(xué)速成 入門篇
    發(fā)表于 05-08 08:29

    單片機(jī)(入門篇

    單片機(jī)(入門篇
    發(fā)表于 03-21 20:51 ?330次下載

    MCD2快速入門篇

    詳細(xì)介紹了安裝過程及設(shè)置方法,MCD2入門篇學(xué)習(xí)非常適合初學(xué)者去學(xué)習(xí)
    發(fā)表于 06-01 17:43 ?0次下載
    MCD2快速<b class='flag-5'>入門篇</b>

    電子工程師自學(xué)速成 - 入門篇

    電子工程師自學(xué)速成 - 入門篇電子工程師自學(xué)速成 - 入門篇電子工程師自學(xué)速成 - 入門篇電子工程師自學(xué)速成 - 入門篇電子工程師自學(xué)速成 - 入門
    發(fā)表于 05-10 15:48 ?0次下載

    打開LabvIEW編程之門_LabVIEW入門篇

    打開LabvIEW編程之門_LabVIEW入門篇,學(xué)習(xí)LabVIEW必須的資料。
    發(fā)表于 08-23 17:28 ?0次下載

    攝像機(jī)基礎(chǔ)培訓(xùn)——入門篇

    攝像機(jī)基礎(chǔ)培訓(xùn)——入門篇
    發(fā)表于 01-04 22:03 ?0次下載

    新手單片機(jī)入門篇

    新手單片機(jī)入門篇
    發(fā)表于 10-13 09:23 ?13次下載
    新手單片機(jī)<b class='flag-5'>入門篇</b>

    KEIL-MDK和STM32的數(shù)據(jù)類型-之入門篇pdf資料下載

    數(shù)據(jù)類型-之入門篇
    發(fā)表于 04-14 10:50 ?7次下載
    KEIL-MDK和<b class='flag-5'>STM32</b>的數(shù)據(jù)類型-之<b class='flag-5'>入門篇</b>pdf資料下載
    主站蜘蛛池模板: 国产系列视频二区| 久久久精品久久| 野花香在线观看免费观看大全动漫 | 欧美乱妇15p图| 国产一区日韩二区欧美三区| 9位美女厕所撒尿11分| 爽娇妻快高h| 制服的微热| 久久午夜一区二区| 3D漫画H精品啪啪无码| 天堂tv免费tv在线tv香蕉| 一道本av免费不卡播放| 日本高清天码一区在线播放| 久久精品国产免费| 99久久国产综合精品| 日韩综合网| 国产精品久久久久久人妻精品流| 4hu四虎免费影院www| 亚洲精品无码不卡在线播HE| 日韩性xxx| 消息称老熟妇乱视频一区二区 | 欧美人禽Zozo动人物杂交| 久久99精品国产麻豆婷婷 | 亚洲 色 欧美 爱 视频 日韩 | a圾片目录大全| 坠落的丝袜美人妻| 一区二区中文字幕在线观看 | 日本精油按摩| 欧美日韩第一区| 免费A级毛片无码无遮挡| 久久久免费热线精品频| 火影忍者高清无码黄漫| 夜夜穞狠狠穞| 亚洲熟女丰满多毛XXXXX| 免费精品国偷自产在线| 出租屋交换人妻 全文| 亚洲国产成人在线视频| 偷拍 自怕 亚洲 在线| 受喷汁红肿抽搐磨NP双性| 色迷迷电影| 一级毛片免费下载|