class ADCAll -- 访问所有 ADC 通道

ADCAll 通过单个对象暴露 MCU 上的每个 ADC 通道——既包括外部模拟输入引脚,也包括用于芯片温度、1.21 V 参考电压和 VBAT 的内部通道。它适用于在不为每个引脚实例化 ADC 的情况下监测 MCU 的供电轨和片上传感器。

示例:

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。只要遵循适当的 MCU 时钟、闪存访问速度和编程模式设置,MCU 在供电电压低至约 2 V 时仍可继续工作——且 ADC 转换仍然有意义。