ADC(模数转换)
在 ESP32 芯片上,ADC 功能可用的引脚为 32-39(ADC 通道 1)以及 0、2、4、12-15 和 25-27(ADC 通道 2)。
在 ESP32S3 芯片上,ADC 功能可用于引脚 1-10(ADC 通道 1)以及引脚 11-14 和 17-20(ADC 块 2)。
ADC 通道 2 也会被 WiFi 使用,因此当 WiFi 处于活动状态时,尝试从通道 2 引脚读取模拟值将会引发异常。
MicroPython 应用示例:
1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4 5import os, sys, io 6import M5 7from M5 import * 8from hardware import * 9 10 11title0 = None 12label0 = None 13adc6 = None 14 15 16def setup(): 17 global title0, label0, adc6 18 19 M5.begin() 20 Widgets.fillScreen(0x222222) 21 title0 = Widgets.Title("CoreS3 ADC Example", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18) 22 label0 = Widgets.Label( 23 "Read GPIO6 ADC Value:", 4, 108, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18 24 ) 25 26 adc6 = ADC(Pin(6), atten=ADC.ATTN_11DB) 27 28 29def loop(): 30 global title0, label0, adc6 31 M5.update() 32 label0.setText(str((str("ADC Value:") + str((adc6.read()))))) 33 34 35if __name__ == "__main__": 36 try: 37 setup() 38 while True: 39 loop() 40 except (Exception, KeyboardInterrupt) as e: 41 try: 42 from utility import print_error_msg 43 44 print_error_msg(e) 45 except ImportError: 46 print("please update to latest firmware")
UiFlow2 应用示例:
class ADC
- class ADC(pin, *, atten)
返回指定引脚的 ADC 对象。ESP32 不支持 ADC 采样的不同定时,因此不支持
sample_ns关键字参数。要读取高于参考电压的电压,请使用
atten关键字参数对输入进行衰减。有效值(以及近似的线性测量范围)如下:ADC.ATTN_0DB:无衰减(100 mV - 950 mV)。ADC.ATTN_2_5DB:2.5 dB 衰减(100 mV - 1250 mV)。ADC.ATTN_6DB:6 dB 衰减(150 mV - 1750 mV)ADC.ATTN_11DB:11 dB 衰减(150 mV - 2450 mV)
UIFLOW2:

警告
请注意,输入引脚的绝对最大额定电压为 3.6V。接近该边界有损坏 IC 的风险!
Methods
- ADC.read()
该方法返回原始 ADC 值,其范围根据该块的分辨率而定,例如 12 位分辨率为 0-4095。
UIFLOW2:

- ADC.read_u16()
执行一次模拟读取,并返回范围为 0-65535 的整数。返回值表示 ADC 采集的原始读数,并经过缩放处理,使最小值为 0,最大值为 65535。
UIFLOW2:

- ADC.read_uv()
该方法利用 ADC 的已知特性以及每个封装在制造时设置的 eFuse 值,返回经校准的输入电压(衰减前),单位为微伏。返回值只有毫伏分辨率(即始终为 1000 微伏的整数倍)。
校准仅在 ADC 的线性范围内有效。特别是,将输入端接地时,读数将会是高于 0 微伏的值。然而,在线性范围内,相较于使用 read_u16() 并用常量对结果进行缩放,将获得更准确且更一致的结果。
UIFLOW2:

- ADC.atten(atten)
等同于
ADC.init(atten=atten)。UIFLOW2:

- ADC.width(bits)
等同于
ADC.block().init(bits=bits)。为兼容性考虑,
ADC对象还提供与所支持的 ADC 分辨率相匹配的常量:ADC.WIDTH_9BIT= 9ADC.WIDTH_10BIT= 10ADC.WIDTH_11BIT= 11ADC.WIDTH_12BIT= 12
UIFLOW2:

