STM32 ADC基本原理及寄存器介紹的詳細介紹

ADC簡介

Analog-to-Digital Converter的縮寫。指模/數轉換器或者模擬/數字轉換器。是指將連續變量的模擬信號轉換爲離散的數字信號的器件。
典型的模擬數字轉換器將模擬信號轉換爲表示一定比例電壓的數字信號。

STM32F10X ADC的特點

 12位逐次逼近型的模擬數字轉換器。
 最多帶3個ADC控制器
 最多支持18個通道,可最多測量16個外部和2個內部信號源。
 支持單次和連續轉換模式
 轉換結束,注入轉換結束,和發生模擬看門狗事件時產生中斷。
 通道0到通道n的自動掃描模式
 自動校準
 採樣間隔可以按通道編程
 規則通道和注入通道均有外部觸發選項
 轉換結果支持左對齊或右對齊方式存儲在16位數據寄存器
 ADC轉換時間:最大轉換速率 1us。(最大轉換速度爲1MHz,在ADCCLK=14M,採樣週期爲1.5個ADC時鐘下得到。)
 ADC供電要求:2.4V-3.6V
 ADC輸入範圍:VREF- ≤ VIN ≤ VREF+

通道與引腳對應關係

Alt
注意:對於少於144引腳的芯片只有16個外部中斷,只能研究16個不同的引腳

ADC的基本原理

ADC的框圖

Alt
框圖看起來比較複雜,下面來詳細講解一下。

ADC引腳

Alt
一般情況下VREF-連接VSSA,VREF+連接VDDA
注意:VDDA的輸入範圍是:0~3.3V

ADC開關控制

通過設置ADC_CR2寄存器的ADON位可給ADC上電。當第一次設置ADON位時,它將ADC從斷電狀態下喚醒
ADC上電延遲一段時間後(tSTAB),再次設置ADON位時開始進行轉換
通過清除ADON位可以停止轉換,並將ADC置於斷電模式。在這個模式中, ADC幾乎不耗電(僅幾個μA)
Alt
Alt

ADC時鐘配置

框圖中標註的來自ADC預分頻器的ADCCLK是ADC模塊的時鐘來源。通常,由時鐘控制器提供的ADCCLK時鐘和PCLK2(APB2時鐘)同步。RCC控制器爲ADC時鐘提供一個專用的可編程預分頻器
Alt
一般情況下:不要讓ADC時鐘超過14MHz,否則可能不準。也就是說,如果按照默認設置PCLK2爲72MHz,此時應爲6分頻或者8分頻。

ADC中斷

在框圖中的最頂部,顯示ADC的各種中斷。很顯然可以看出:規則和注入組轉換結束時能產生中斷,當模擬看門狗狀態位被設置時也能產生中斷。它們都有獨立的中斷使能位。
注: ADC1和ADC2的中斷映射在同一個中斷向量上,而ADC3的中斷有自己的中斷向量。
ADC_ SR寄存器中有2個其他標誌,但是它們沒有相關聯的中斷:
Alt
Alt

ADC通道選擇

STM32有16個多路通道。可以把轉換組織成兩組:規則組和注入組。在任意多個通道上以任意順序進行的一系列轉換構成成組轉換。例如,可以如下順序完成轉換:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。
① 規則通道組:相當正常運行的程序。最多16個通道。 規則通道和它的轉換順序在ADC_SQRx寄存器中選擇,規則組轉換的總數應寫入ADC_SQR1寄存器的L[3:0]中(注入通道寄存器)
② 注入通道組:相當於中斷。最多4個通道。注入組和它的轉換順序在ADC_JSQR寄存器中選擇。注入組裏轉化的總數應寫入ADC_JSQR寄存器的L[1:0]中(規則通道寄存器)
因爲規則通道相當於程序正常運行,而注入通道相當於中斷。也就是說注入通道的轉換可以打斷規則通道的轉換,當注入通道執行完以後繼續執行規則通道
但從字面可能不太容易理解,那麼我們就來藉助圖來理解一下。
Alt
當只有規則通道時順序執行(自行設置順序),當加入注入通道以後就相當於觸發中斷,執行完注入通道以後再執行規則通道。一個和形象的比喻就是我正在吃飯(規則通道),突然接到了快遞員的電話(觸發中斷)說快遞到了,讓我去取快遞,然後我下樓去取快遞(注入通道)。當我收到快遞迴到家以後繼續吃飯(規則通道)。

ADC轉換方式

STM32F1的ADC的各通道可以單次,連續,掃描或者間斷模式執行。

單次轉換模式

Alt

連續通道轉換

Alt

掃描模式

掃描模式可通過設置ADC_CR1寄存器的SCAN位來選擇。一旦這個位被設置, ADC掃描所有被ADC_SQRX寄存器(對規則通道)或ADC_JSQR(對注入通道)選中的所有通道。在每個組的每個通道上執行單次轉換。在每個轉換結束時,同一組的下一個通道被自動轉換。如果設置了CONT位,轉換不會在選擇組的最後一個通道上停止,而是再次從選擇組的第一個通道繼續轉換
Alt
注意:如果在使用掃描模式的情況下使用中斷,會在最後一個通道轉換完畢後纔會產生中斷。而連續轉換,是在每次轉換後,都會產生中斷。
如果設置了DMA位,在每次EOC後, DMA控制器把規則組通道的轉換數據傳輸到SRAM中。而注入通道轉換的數據總是存儲在ADC_JDRx寄存器中

ADC的自動校準

ADC有一個內置自校準模式。校準可大幅減小因內部電容器組的變化而造成的準精度誤差。在校準期間,在每個電容器上都會計算出一個誤差修正碼(數字值),這個碼用於消除在隨後的轉換中每個電容器上產生的誤差。
通過設置ADC_CR2寄存器的CAL位啓動校準。一旦校準結束, CAL位被硬件復位,可以開始正常轉換。建議在上電時執行一次ADC校準。校準階段結束後,校準碼儲存在ADC_DR中。
注意: 1 建議在每次上電後執行一次校準。
2 啓動校準前, ADC必須處於關電狀態(ADON=’0’)超過至少兩個ADC時鐘週期

Alt

數據對齊

在這裏插入圖片描述

通道採樣時間

ADC使用若干個ADC_ CLK週期對輸入電壓採樣,採樣週期數目可以通過ADC_ SMPR1和ADC_ SMPR2寄存器中的SMP[2:0]位更改。每個通道可以分別用不同的時間採樣。
總體轉換時間:
Alt
例如:
在這裏插入圖片描述
注意:Alt

ADC相關寄存器配置

ADC_CR1寄存器

Alt
在這裏插入圖片描述
作用:設置掃描模式、中斷允許(轉換結束、注入轉換結束、模擬看門狗)、雙模式選擇(一般選用獨立模式)等。

ADC_CR2寄存器

Alt
作用:設置數據對齊方式、連續轉換位、ADC啓動位、外部觸發轉換(一般選用軟件轉換SWSTART、JSWSTART)。

ADC_SMPR1寄存器與ADC_SMPR2寄存器

ADC_SMPR1寄存器:

在這裏插入圖片描述

ADC_SMPR2寄存器:

Alt
作用:這兩個寄存器非常重要(設置通道採樣時間),ADC_SMPR2寄存器設置通道0–通道9的採樣時間ADC_SMPR1寄存器設置通道10–通道17的採樣時間。

ADC_SQR1/SQR2/SQR3規則序列寄存器

Alt
作用:設置規則序列的長度,對應序列中各個轉換的通道編號(最多16個)

ADC_JSQR注入系列寄存器

Alt
作用:設置注入序列通道的長度及序列對應的各個編號(最多4個)

ADC_DR規則通道數據寄存器

Alt
作用:存放規則轉換的數據

ADC_JDR注入通道數據寄存器

Alt
作用:存放注入轉換的數據

ADC_SR狀態寄存器

Alt
作用:存放ADC的狀態位(比如:看門狗、EOC等)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章