Skip to content

STM32 ADC 類比數位轉換器

發佈

前言

ADC(Analog to Digital Converter)顧名思義是將類比訊號轉換成數位訊號的元件,現今多數 MCU 都會內建 ADC,而這也是相當基本且常用的功能。

STM32 中的 ADC 功能相當多樣,也造成它的使用有一定程度的複雜度,搭配組合很多,因此本文會以 STM32F446RE 為主,簡單介紹各種基本的模式及設定。

基本介紹

STM32F446RE 擁有三個 12-bit 的 ADC,且擁有 19 個通道,其中包含 16 個來自外部、2 個來自內部,還有一個是 V_BAT 通道。ADC 的輸入電壓範圍為 V_REF- ~ V_REF+,也就是最大 0 ~ 3.6 V。

▲ ADC 容許電壓範圍。取自 DS106893 Rev10 P.139。
▲ ADC 容許電壓範圍。取自 DS106893 Rev10 P.139。
▲ 單一 ADC 的方塊圖。取自 RM0390 Rev6 P.356。
▲ 單一 ADC 的方塊圖。取自 RM0390 Rev6 P.356。

ADC 有兩個 Clock:

通道分組

在 STM32 中,ADC 通道可分為 Regular(常規)和 Injected(注入)兩組。組,或著說序列(Sequence)是由一到數個 ADC 通道以任一順序組成。

Regular 與 Injected 的主要差異除了上面列的外,還有就是 Injected 有著類似中斷(Interrupt)的功能。一般狀態下,使用者可以將平常要量測的類比訊號源設為「 Regular 常規組」,當特殊事件發生時,「Injected 注入組」可以中斷 Regular 的轉換,優先進行 A/D 轉換,完成後再回去進行 Regular 組的轉換。

Regular 比較常見翻譯成「規則」通道,但在此我認為翻成「常規」比較能夠區分其與 Injected 的功能差異。

內部通道

F446RE 中有 3 個內部通道:溫度感測器、內部參考電壓 V_REFINT 與電池 V_BAT

其中,溫度感測器與 V_BAT 共用 ADC1_IN18 通道。它們無法同時使用,若同時被啓用,那只有 V_BAT 的轉換會運作。而 V_REFINT 使用 ADC1_IN17 通道。

轉換模式

Single conversion mode 單次轉換模式

在此模式下,每次觸發 ADC 都只會進行一次轉換,轉換完成後就停止。

透過將 ADC_CR2 暫存器的 CONT 位元設為 0 以使用此模式。

觸發源可以是:

Continuous conversion mode 連續轉換模式

在此模式下,ADC 在完成一次轉換後會儘快開始另一次新的轉換。

透過將 ADC_CR2 暫存器的 CONT 位元設為 1 以使用此模式。

觸發源可以是:

Injected 通道無法使用連續轉換,除非設定 JAUTO 位元以啓用 Auto-injection,在此就不詳細說明。

其它模式

Scan mode 掃描模式

此模式用來以組為單位,為多個 ADC 通道進行轉換。Regular 和 Injected 通道都適用。

當其中一個通道轉換完成後,組(或序列 Sequence)中的下一個通道會自動開始進行轉換,若啓用了 Continuous conversion mode(CONT=1),當 Regular 組的最後一個通道轉換完後,會繼續從組中的第一個通道重新開始另一輪轉換,不會停止。

由於 Regular 組只有一個 16 位元的資料暫存器,所以通常會搭配 DMA 來存取轉換完成的資料,避免資料被下一個通道的資料覆蓋。而 Injected 組的 4 個通道都有自己獨立且專用的 16 位元資料暫存器,故其轉換完成的資料會儲存進各自的資料暫存器中,不必擔心資料會被其它通道所覆蓋。

此模式透過設定 ADC_CR1 中的 SCAN 位元來啓用。

Discontinuous mode 不連續模式

此模式的概念是可以將組(或序列 Sequence)再分成更短的小組,當觸發轉換時,會以小組為單位進行轉換,也就是可以不一次轉換組內的全部通道,而是分批掃描。

例如設定 Regular 組所包含的通道依序為「0,1,2,3,6,7,9,10」,並將小組的長度 n 設為 3:

此模式透過設定 ADC_CR1 的 DISCEN(對於 Regular)或 JDISCEN(對於 Injected)位元來啓用。Regular 和 Injected 不能同時啓用 Discontinuous mode。

Auto-injected 與 Discontinuous mode 無法同時使用。 Discontinuous mode 與 Continuous conversion mode 雖然名稱相近但其「連續」的意義不同。前者是可以將組再細分成小組,後者是在每次轉換完成後自動觸發下一次的轉換。

小結

ADC 的功能相當複雜與多元,以上也只是簡單介紹最基本的概念,還有很多進階的功能沒有提到,像是 ADC watchdog、Multi ADC 或電池監控等,這些進階的功能可以參考 RM0390(STM32F446RE)。

參考資料

本文同步發表於 iT 邦幫忙-2022 iThome 鐵人賽


STM32 LibOpenCM3:ADC 單通道 Regular
STM32 LibOpenCM3:WWDG 窗口看門狗計時器

留言可能不會立即顯示。若過了幾天仍未出現,請 Email 聯繫:)