< All Topics
Print

【感測】供電電壓 | dual2s-mini | MPY-LLM

簡介:

dual2s-mini開發板具有內建供電電壓偵測電路,GPIO腳位為36。


準備:

材料與工具

本文範例使用【DUAL22-2s開發板】為示範。

GPIO與電路

dual2s-mini開發板內建供電電壓感測電路接於【G36】腳位。此接腳採用分壓電路輸入,如圖所示。


韌體範例

基本偵測架構(需要調整)

from machine import ADC, Pin
import time

# 初始化ADC物件,將G36設為輸入腳位
adc = ADC(Pin(36))
adc.atten(ADC.ATTN_11DB)  # 設定電壓範圍為 0V 到 3.6V

while True:
    # 讀取ADC值並將其轉換為電壓
    raw_value = adc.read()
    voltage = raw_value / 4095 * 3.6  # 4095是12位ADC的最大值,3.6是電壓範圍

    # 將電壓值輸出到串列埠
    print("Voltage: {:.2f} V".format(voltage))

    # 每3秒檢測一次
    time.sleep(3)

分壓電阻考量

ESP32電壓感測腳位G36,分壓電阻:偵測電壓端阻值為100K、接地端阻值為33K。提供MPY範例程式:每3秒偵測一次,並將電壓值輸出於串列埠上。

由於電壓感測引腳的最大輸入電壓為3.3V,透過使用100K和33K的分壓電阻,可以偵測較高的電壓(約13.6V的範圍),以下程式碼已考慮了此分壓比(100K / (100K + 33K) ≈ 0.25)。

from machine import ADC, Pin
import time

# 初始化G36為ADC引腳
adc = ADC(Pin(36))
adc.width(ADC.WIDTH_12BIT)  # 設定解析度為12位元 (範圍 0-4095)
adc.atten(ADC.ATTN_11DB)    # 設定輸入範圍為 0 - 3.6V

# 分壓比常數計算 (100K / (100K + 33K))
DIVIDER_RATIO = (100 + 33) / 33

while True:
    # 讀取ADC值
    adc_value = adc.read()
    # 計算實際電壓值
    voltage = (adc_value / 4095) * 3.3 * DIVIDER_RATIO
    # 輸出電壓到串列埠
    print("Voltage: {:.2f} V".format(voltage))
    # 每3秒偵測一次
    time.sleep(3)

執行續導入

from machine import ADC, Pin
import time
import _thread

# 初始化G36為ADC引腳
adc = ADC(Pin(36))
adc.width(ADC.WIDTH_12BIT)  # 設定解析度為12位元 (範圍 0-4095)
adc.atten(ADC.ATTN_11DB)    # 設定輸入範圍為 0 - 3.6V

# 分壓比常數計算 (100K / (100K + 33K))
DIVIDER_RATIO = (100 + 33) / 33

# 電壓偵測函式
def voltage_monitor():
    while True:
        # 讀取ADC值
        adc_value = adc.read()
        # 計算實際電壓值
        voltage = (adc_value / 4095) * 3.3 * DIVIDER_RATIO
        # 輸出電壓到串列埠
        print("Voltage: {:.2f} V".format(voltage))
        # 每3秒偵測一次
        time.sleep(3)

# 啟動電壓偵測執行緒
_thread.start_new_thread(voltage_monitor, ())

# 這裡可以繼續控制其他元件,不會被電壓偵測影響
while True:
    # 假設其他控制程式放在這裡
    # 比如控制馬達、LED等其他任務
    print("Running other tasks...")
    time.sleep(1)
Table of Contents