STM32F4xx系列提供的12位ADC是逐次逼近型模數(shù)轉(zhuǎn)換器。它具有多達 19 個復用通道,可測量來自 16 個外部源、兩個內(nèi)部源和 V BAT 通道的信號。這些通道的 A/D 轉(zhuǎn)換可在單次、連續(xù)、掃描或不連續(xù)采樣模式下進行。ADC 的結(jié)果存儲在一個左對齊或右對齊的 16 位數(shù)據(jù)寄存器中。
ADC 具有模擬看門狗特性,允許應用檢測輸入電壓是否超過了用戶自定義的閾值上限或下限。
單個ADC框圖
ADC 引腳
ADC開關控制
可通過將ADC_CR2寄存器中的 ADON 位置1來為 ADC 供電。首次將 ADON 位置1時,會將ADC從掉電模式中喚醒。
SWSTART 或 JSWSTART 位置 1 時,啟動 AD 轉(zhuǎn)換。
可通過將 ADON 位清零來停止轉(zhuǎn)換并使 ADC 進入掉電模式。在此模式式下,ADC 幾乎不耗電(只有幾 μA)。
ADC時鐘
ADC 具有兩個時鐘方案:
● 用于模擬電路的時鐘:ADCCLK,所有 ADC 共用
此時鐘來自于經(jīng)可編程預分頻器分頻的 APB2 時鐘,該預分頻器允許 ADC 在 f PCLK2 /2、/4、/6 或 /8 下工作。有關 ADCCLK 的最大值,請參見數(shù)據(jù)手冊。
● 用于數(shù)字接口的時鐘(用于寄存器讀/寫訪問)
此時鐘等效于 APB2 時鐘。可以通過 RCC APB2 外設時鐘使能寄存器 (RCC_APB2ENR)分別為每個 ADC 使能/禁止數(shù)字接口時鐘。
通道選擇
有 16 條復用通道。可以將轉(zhuǎn)換分為兩組:規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換。每個組包含一個轉(zhuǎn)換序列,該序列可按任意順序在任意通道上完成。例如,可按以下順序?qū)π蛄羞M行轉(zhuǎn)換:ADC_IN3、ADC_IN8、ADC_IN2、ADC_IN2、ADC_IN0、ADC_IN2、ADC_IN2、ADC_IN15。
● 一個規(guī)則轉(zhuǎn)換組最多由 16 個轉(zhuǎn)換構(gòu)成。必須在 ADC_SQRx 寄存器中選擇轉(zhuǎn)換序列的規(guī)則通道及其順序。規(guī)則轉(zhuǎn)換組中的轉(zhuǎn)換總數(shù)必須寫入 ADC_SQR1 寄存器中的 L[3:0] 位。
● 一個注入轉(zhuǎn)換組最多由 4 個轉(zhuǎn)換構(gòu)成。必須在 ADC_JSQR 寄存器中選擇轉(zhuǎn)換序列的注入通道及其順序。注入轉(zhuǎn)換組中的轉(zhuǎn)換總數(shù)必須寫入 ADC_JSQR 寄存器中的 L[1:0] 位。
如果在轉(zhuǎn)換期間修改 ADC_SQRx 或 ADC_JSQR 寄存器,將復位當前轉(zhuǎn)換并向 ADC 發(fā)送一個新的啟動脈沖,以轉(zhuǎn)換新選擇的組。
溫度傳感器、V REFINT 和 V BAT 內(nèi)部通道
● 對于 STM32F40x 和 STM32F41x 器件,溫度傳感器內(nèi)部連接到通道 ADC1_IN16。
內(nèi)部參考電壓 VREFINT 連接到 ADC1_IN17。
● 對于 STM23F42x 和 STM32F43x 器件,溫度傳感器內(nèi)部連接到與 VBAT 共用的通道
ADC1_IN18。一次只能選擇一個轉(zhuǎn)換(溫度傳感器或 VBAT)。同時設置了溫度傳感器和 VBAT 轉(zhuǎn)換時,將只進行 VBAT 轉(zhuǎn)換。
內(nèi)部參考電壓 VREFINT 連接到 ADC1_IN17。
VBAT通道連接到通道ADC1_IN18。該通道也可轉(zhuǎn)換為注入通道或規(guī)則通道。
單次轉(zhuǎn)換模式
在單次轉(zhuǎn)換模式下, ADC 執(zhí)行一次轉(zhuǎn)換 。CONT 位為 0 時,可通過以下方式啟動此模式:
● 將 ADC_CR2 寄存器中的 SWSTART 位置 1(僅適用于規(guī)則通道)
● 將 JSWSTART 位置 1(適用于注入通道)
● 外部觸發(fā)(適用于規(guī)則通道或注入通道)
完成所選通道的轉(zhuǎn)換之后:
● 如果轉(zhuǎn)換了規(guī)則通道:
— 轉(zhuǎn)換數(shù)據(jù)存儲在 16 位 ADC_DR 寄存器中
— EOC(轉(zhuǎn)換結(jié)束)標志置 1
— EOCIE 位置 1 時將產(chǎn)生中斷
● 如果轉(zhuǎn)換了注入通道:
— 轉(zhuǎn)換數(shù)據(jù)存儲在 16 位 ADC_JDR1 寄存器中
— JEOC(注入轉(zhuǎn)換結(jié)束)標志置 1
— JEOCIE 位置 1 時將產(chǎn)生中斷
然后,ADC 停止。
連續(xù)轉(zhuǎn)換模式
在連續(xù)轉(zhuǎn)換模式下, ADC 結(jié)束一個轉(zhuǎn)換后立即啟動一個新的轉(zhuǎn)換 。CONT 位為 1 時,可通過外部觸發(fā)或?qū)?ADC_CR2 寄存器中的 SWSTRT 位置 1 來啟動此模式(僅適用于規(guī)則通道)。
每次轉(zhuǎn)換之后:
● 如果轉(zhuǎn)換了規(guī)則通道組:
— 上次轉(zhuǎn)換的數(shù)據(jù)存儲在 16 位 ADC_DR 寄存器中
— EOC(轉(zhuǎn)換結(jié)束)標志置 1
— EOCIE 位置 1 時將產(chǎn)生中斷
時序圖
ADC 在開始精確轉(zhuǎn)換之前需要一段穩(wěn)定時間 t STAB 。ADC 開始轉(zhuǎn)換并經(jīng)過 15 個時鐘周期后,EOC 標志置 1,轉(zhuǎn)換結(jié)果存放在 16 位 ADC 數(shù)據(jù)寄存器中。
掃描模式
此模式用于掃描一組模擬通道。
通過將 ADC_CR1 寄存器中的 SCAN 位置 1 來選擇掃描模式。將此位置 1 后,ADC 會掃描在 ADC_SQRx 寄存器(對于規(guī)則通道)或 ADC_JSQR 寄存器(對于注入通道)中選擇的所有通道。為組中的每個通道都執(zhí)行一次轉(zhuǎn)換。每次轉(zhuǎn)換結(jié)束后,會自動轉(zhuǎn)換該組中的下一個通道。如果將 CONT 位置 1,規(guī)則通道轉(zhuǎn)換不會在組中最后一個所選通道處停止,而是再次從第一個所選通道繼續(xù)轉(zhuǎn)換。
如果將 DMA 位置 1,則在每次規(guī)則通道轉(zhuǎn)換之后,均使用直接存儲器訪問 (DMA) 控制器將轉(zhuǎn)換自規(guī)則通道組的數(shù)據(jù)(存儲在 ADC_DR 寄存器中)傳輸?shù)?SRAM。在以下情況下,ADC_SR 寄存器中的 EOC 位置 1:
● 如果 EOCS 位清零,在每個規(guī)則組序列轉(zhuǎn)換結(jié)束時
● 如果 EOCS 位置 1,在每個規(guī)則通道轉(zhuǎn)換結(jié)束時
從注入通道轉(zhuǎn)換的數(shù)據(jù)始終存儲在 ADC_JDRx 寄存器中。
數(shù)據(jù)對齊
由于STM32的ADC是12位的,結(jié)果存儲在16位的數(shù)據(jù)寄存器中,有4位用不到,所以ADC存在左對齊或右對齊的方式。為方便讀數(shù),一般都選擇右對齊。
可獨立設置各通道采樣時間
ADC 會在數(shù)個 ADCCLK 周期內(nèi)對輸入電壓進行采樣,可使用 ADC_SMPR1 和 ADC_SMPR2寄存器中的 SMP[2:0] 位修改周期數(shù)。每個通道均可以使用不同的采樣時間進行采樣。
總轉(zhuǎn)換時間的計算公式如下:
T conv = 采樣時間 + 12 個周期
快速轉(zhuǎn)換模式
可通過降低 ADC 分辨率來執(zhí)行快速轉(zhuǎn)換。RES 位用于選擇數(shù)據(jù)寄存器中可用的位數(shù)。每種分辨率的最小轉(zhuǎn)換時間如下:
● 12 位:3 + 12 = 15 ADCCLK 周期
● 10 位:3 + 10 = 13 ADCCLK 周期
● 8 位:3 + 8 = 11 ADCCLK 周期
● 6 位:3 + 6 = 9 ADCCLK 周期
評論
查看更多