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 天前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件
庙堂龙吟奈我何1 天前
二进制和十六进制
stm32·单片机
国科安芯1 天前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
不昀1 天前
RMII切到10Mbps,50MHz参考时钟也要降到5MHz吗?
单片机·嵌入式硬件·硬件设计·以太网接口
路上有只喵1 天前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇6
单片机·嵌入式硬件
国科安芯1 天前
核电站蒸汽发生器传热管在役无损检测模拟前端的低噪声供电研究
嵌入式硬件·ldo·低压差线性稳压器·无损检测·核电站·蒸汽发生器·传热管
集芯微电科技有限公司1 天前
40V/24A高频率增强型GaN HEMT功率开关管/高频DC转换/电动工具/GaN充电器 方案首选
人工智能·科技·单片机·嵌入式硬件·深度学习·神经网络·生成对抗网络
十八岁牛爷爷1 天前
STM32H7 长时间运行后 HTTP 断连:从“串口还活着”到 TX 描述符错账
stm32·单片机·嵌入式硬件
Lxx_Zw1 天前
串口命令如何从字符串长成协议:帧头、长度、校验和与状态机
c语言·stm32·单片机·嵌入式硬件
凯基迪科技1 天前
瑞萨R5F100解密 R8C/RL78 MCU 固件读取与保护机制详解
服务器·网络·单片机