ADC 模拟采样
这一章让 ESP32 学会读“程度”:不是只有开和关,还能知道旋钮转到多少、光线强不强、电池大概还有多少电。
ADC 用来把电压转换成数字。它读到的不是“温度”或“光照”,而是一个与输入电压相关的原始值;传感器模块会先把物理变化转换成电压。
直觉
数字输入只能判断高低,ADC 则能观察连续变化。电位器是最适合入门的 ADC 外设:旋钮转动时,中间端电压变化,串口里的原始值也跟着变化。
准备工作
准备一个电位器。两端接 3.3 V 和 GND,中间滑动端接 ADC 引脚。不要把高于 3.3 V 的电压直接接入 GPIO。
最小例程
对应工程:examples/adc_oneshot。
c
adc_oneshot_unit_init_cfg_t init_config = {
.unit_id = ADC_UNIT_1,
};
adc_oneshot_new_unit(&init_config, &adc_handle);运行后转动旋钮,串口里的原始值应随之变化。初学阶段先观察原始值,再学习校准、电压换算、衰减和平均滤波。
速率与边界
ADC 适合采样缓慢变化的模拟量,例如旋钮、电池电压、光敏电阻或简单传感器输出。采样速率越高,对噪声、输入阻抗、滤波和任务调度越敏感。
课堂实验可以每 100 到 500 ms 打印一次读数,因为人手旋钮变化很慢。真正要做音频或高速波形采集时,不能只靠最简单的 oneshot 读数,还要考虑连续采样、DMA、模拟前端和抗混叠滤波。
应用场景
ADC 常用于电池电压检测、旋钮输入、模拟传感器、电位器阈值和简单电源监测。它不适合直接测高电压,也不适合在没有分压、保护和滤波的情况下接入复杂模拟信号。
常见错误
读数一直不变时,检查所选 GPIO 是否支持 ADC。读数抖动不一定是代码错,模拟采样本来就会受噪声、接线长度、电源和输入阻抗影响。
官方资料
本章提示词
请帮我写一个 ESP32 ADC 电位器采样 demo。要求说明接线、电压安全、ADC 通道选择、衰减、原始值抖动、平均滤波和串口验证方法。