ESP32-S3 DevKit 模拟量采集调试报告

ESP32-S3 DevKit 模拟量采集调试报告

1. 调试目的

使用 ESP32-S3 DevKit 和 Arduino

框架,对外部传感器输出的模拟电压进行采样。程序通过 ADC

读取模拟量,连续采样 1024 次后计算平均值,并通过串口输出 ADC

平均值和电压估算值。

2. 硬件连接


信号 连接位置 说明


模拟信号输出 ESP32-S3 DevKit 的 1 将待测模拟量接入 A0

号引脚(A0)

GND ESP32-S3 DevKit GND 传感器与开发板必须共地

传感器供电 按传感器规格连接 3.3 V 供电电压不等于模拟输出电压,需分别确认

或 5 V

重要电气注意事项

  • 传感器可以使用 3.3 V 或 5 V 供电,前提是传感器本身支持对应供电电压。
  • ESP32-S3 的 ADC 输入不能因为传感器使用 5 V 供电,就直接接入 5 V
    模拟输出。
    ESP32-S3 GPIO 通常不具备 5 V 容忍能力。ADC
    输入电压必须限制在芯片允许范围内;为安全起见,未经确认不要超过 3.3
    V。
  • 如果传感器模拟输出可能达到 5
    V,应使用合适的电阻分压或缓冲/调理电路,将电压降低到 ADC
    可接受范围,并确认分压后的最大电压仍留有余量。
  • 传感器地与 ESP32-S3 GND
    应连接在一起,除非系统使用了专门的隔离测量方案。

3. 串口配置

  • 串口:Arduino Serial
  • 波特率:9600 bit/s
  • 串口监视器波特率必须设置为 9600
  • 输出内容:1024 次 ADC 采样的平均原始值,以及
    analogReadMilliVolts() 读取的电压估算值

4. 采样逻辑

程序每轮执行以下步骤:

  1. 连续读取 A0 共 1024 次。
  2. 每次采样间隔 2 ms,因此仅采样等待就约为 2048 ms,实际时间还包括 ADC
    读取和循环开销。
  3. 将 1024 次 ADC 原始读数累加并求平均值。
  4. 调用 analogReadMilliVolts(A0) 取得一次额外的电压估算值。
  5. 通过 9600 波特率串口输出结果。
  6. 延时 500 ms 后进入下一轮。

因此,程序不是快速单次读取,而是每轮花费约 2

秒以上进行长时间采样,以降低随机波动对平均读数的影响。

测量一致性说明: 当前示例中的 ADC 平均值来自 1024

次采样,而电压值来自随后的一次独立读取。若需要让两项结果严格对应同一批样本,应改为累加这

1024 次样本对应的校准电压,或根据实测标定关系将平均 ADC 值换算为电压。

5. Arduino 示例程序

cpp 复制代码
/*
 * ESP32-S3 DevKit ADC 调试程序
 *
 * 输入:A0(开发板 1 号引脚,按本项目连接说明)
 * 串口:9600 baud
 * 采样:每轮 1024 次,每次间隔 2 ms
 */

#define ADC_PIN A0
#define ADC_SAMPLES 1024

void setup()
{
    Serial.begin(9600);
    delay(500);

    analogReadResolution(12);  // ESP32-S3 ADC 原始读数为 0~4095
    analogSetPinAttenuation(ADC_PIN, ADC_11db);

    Serial.println("ESP32-S3 DevKit ADC Test Started");
    Serial.println("Pin: A0 / board pin 1 as wired");
    Serial.println("Baud rate: 9600");
}

void loop()
{
    uint32_t sum = 0;

    for (int i = 0; i < ADC_SAMPLES; i++)
    {
        sum += analogRead(ADC_PIN);
        delay(2);
    }

    uint32_t average = sum / ADC_SAMPLES;

    // 这是额外的一次电压读取,不是上述 1024 个样本的平均电压
    uint32_t voltage_mV = analogReadMilliVolts(ADC_PIN);

    Serial.print("ADC average: ");
    Serial.println(average);

    Serial.print("The voltage value: ");
    Serial.print(voltage_mV);
    Serial.println(" mV");

    Serial.println();

    delay(500);
}

6. 调试步骤

  1. 确认开发板上标注为 A0 的引脚确实映射到当前 Arduino 板卡定义中的
    A0,并按项目约定连接到开发板 1 号引脚。不同 ESP32-S3 DevKit
    版本的丝印与 GPIO 映射可能不同,不能只凭"1 号引脚"推断 GPIO 编号。
  2. 确认传感器供电电压符合其规格。
  3. 将传感器模拟输出接到 A0,并连接共地。
  4. 若输出可能高于 3.3 V,先增加分压或电压调理电路,不能直接接入。
  5. 在 Arduino IDE 中选择正确的 ESP32-S3
    开发板和串口端口,编译并烧录程序。
  6. 打开串口监视器,波特率选择 9600。
  7. 观察 ADC average 与 The voltage value 是否随输入电压变化。
  8. 可使用已知且安全的输入电压进行对比;若需要准确测量,应使用万用表测量
    A0 实际输入电压,并据此校准。

7. 结果记录表

测试项 记录


开发板 ESP32-S3 DevKit

模拟输入 A0(项目连接位置:开发板 1 号引脚)

串口波特率 9600

ADC 分辨率 12 bit

每轮采样次数 1024

采样间隔 2 ms

采样等待时间 约 2.048 s,另加读取及循环开销

供电 根据传感器规格使用 3.3 V 或 5 V

模拟输出电压安全要求 ESP32-S3 ADC 引脚不得直接输入 5 V

实测 ADC 平均值 待填写

实测电压(程序输出) 待填写

万用表实测 A0 电压 待填写

8. 当前结论与后续事项

当前程序采用 1024

次采样求均值,适合观察缓慢变化的模拟信号。单轮采样耗时约 2

秒以上,因此输出更新速度较慢,这是程序有意采用长时间采样的结果。

后续若用于正式传感器测量,建议: - 明确 A0 对应的实际 GPIO 编号; -

确认传感器模拟输出范围; - 对比万用表读数并进行必要的电压标定; - 如需让

ADC 均值和电压输出严格对应同一批样本,修改为对同一批采样进行校准与平均。

相关推荐
新晨单片机设计1 小时前
S028A-基于STM32单片机智能电表【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·智能电表
POMAGTOR1 小时前
【磁吸式数据线接口方案:结构特点与工程选型要点】
网络·嵌入式硬件
霖霖7141 小时前
【ESP32笔记】SDIO读写TF卡
笔记·单片机·嵌入式硬件·mcu·物联网
幼儿园蛋小黄1 小时前
嵌入式学习总结:从 I2C 中断驱动到 DHT11 温湿度采集实战
单片机·嵌入式硬件·学习
万物智能信息科技1 小时前
气体传感器MQ-2芯片驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·嵌入式硬件·华为·开源·harmonyos
fly_sunnn2 小时前
STM32-TIM输入捕获
stm32·单片机·嵌入式硬件
创界工坊工作室2 小时前
25-基于单片机的智能水产养殖控制系统设计
stm32·单片机·嵌入式硬件·proteus
安生生申2 小时前
ESP32-CAM视觉语音AI助手(千问平台):摄像头、INMP441、MAX98357与单片机数据接入
人工智能·单片机·嵌入式硬件
碧海银沙音频科技研究院2 小时前
基于炬芯ATS3089X的ST LIS2DW12 三轴 MEMS 加速度传感器(G-Sensor)敲击按键功能实现
人工智能·嵌入式硬件