class ADCAll -- 存取所有 ADC 通道

ADCAll 透過單一物件公開 MCU 上的每一個 ADC 通道,包括外部類比輸入接腳以及晶片溫度、1.21 V 參考電壓與 VBAT 的內部通道。它適用於監控 MCU 的供電軌與晶片上感測器,而無需為每支接腳各自建立一個 ADC

範例::

import pyb

# 12-bit resolution, internal channels only (temp + VBAT + VREF).
adcall = pyb.ADCAll(12, 0x70000)
temp = adcall.read_core_temp()
vbat = adcall.read_core_vbat()
vref = adcall.read_core_vref()
vdda = adcall.read_vref()

建構函式

class pyb.ADCAll(resolution: int, mask: int = 0xffffffff)

提供對 MCU 上每一個 ADC 通道的同步存取,包括晶片溫度、內部 1.21 V 參考電壓與 VBAT 的內部通道。建構此物件會將所有遮罩選取的外部 ADC 接腳切換為類比輸入模式。

  • resolution 為以位元為單位的 ADC 轉換解析度(通常為 81012)。

  • mask 是一個 32 位元的位元遮罩,用以選取要啟用哪些通道;位元 N 會啟用通道 N。預設為 0xffffffff(所有通道)。內部通道位於位元 16(溫度)、17(VBAT)與 18(VREF),因此若只要啟用內部通道,請傳入 0x70000

晶片上的溫度感測器經過原廠校準,準確度約為 ±1 °C,但它量測的是晶片溫度——當 MCU 運作時,此溫度通常會比環境溫度高出數十度。讀數只有在剛喚醒的開發板上,作為環境溫度的近似值時才有意義。

警告

類比輸入電壓絕對不可超過實際的供電電壓。

方法

read_channel(channel: int) int

讀取指定的 ADC 通道。外部通道(0 -- 15)會以設定的解析度回傳未經換算的原始值;內部通道(16--18)同樣回傳原始值,但下方的專用輔助函式可將它們換算為電壓。

read_core_temp() float

回傳以攝氏度數表示的晶片溫度,由內部溫度通道以及儲存在 MCU 中的原廠校準值計算而得。

read_core_vbat() float

回傳以伏特為單位的備援電池電壓。此讀數是透過晶片上的分壓器取得(因此餘裕不會限制 ADC 的輸入範圍),並換算回實際的電池電壓。分壓器只在 ADC 轉換期間啟用,因此對備援電池的待機耗電可忽略不計。

read_core_vref() float

回傳以伏特為單位的內部 1.21 V(標稱)參考電壓,以 MCU 供電作為 ADC 參考進行量測。這是原始的轉換結果。

read_vref() float

回傳以伏特為單位的 MCU 供電電壓。透過量測內部電壓參考,並使用其原廠校準值反向換算而得。在健康的 3.3 V 供電軌下,讀數會接近 3.3。在供電低至約 2 V 的情況下,只要遵守適當的 MCU 時脈、快閃記憶體存取速度與程式設計模式設定,MCU 仍可繼續運作,且 ADC 轉換仍具有意義。