这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【EVAL-ADXL354CZ-ND】ESP32使用ADC功能读取三轴数据

共1条 1/1 1 跳转至页

【EVAL-ADXL354CZ-ND】ESP32使用ADC功能读取三轴数据

菜鸟
2026-10-20 16:33:38     打赏
一:ESP32S3的ADC知识

ESP32-S3 集成了两个 12 位 SAR ADC,每个ADC有10个通道,共支持 20 个模拟通道输入,可测量最多来自 20 个管脚的模拟信号以及内部电压等内部信号。其中,为了实现更低功耗,ESP32-S3 的 ULP 协处理器也可以在睡眠方式下测量电压,此时,可通过设置阈值或其他触发方式唤醒 CPU。

  ADC可以转换的电压范围由VREF决定,对于ESP32-S3通常是0到3.3V,但需要注意的是,ESP32具体的最大额定输入电压可能略有不同,检查相应数据手册的具体信息非常重要,通常会建议使用衰减器(Attenuation)功能或者额外的硬件如电压分压器来保证输入电压在规定范围内。

  ESP32-S3内部还带了一个温度传感器,用于生成一个随温度变化的电压。内部 ADC 将传感器电压转化为一个数字量,温度传感器的测量范围为–20 °C 到 110 °C。温度传感器适用于监测芯片内部温度的变化,该温度值会随着微控制器时钟频率或 IO 负载的变化而变化。一般来讲,芯片内部温度会高于外部温度。

二:ADC的基本参数

ADC 的基本参数通常包括以下几个:

通道和引脚: 不是所有的GPIO都可以用于ADC读取,需要查看ESP32S3的引脚图来确定哪些引脚支持ADC功能。

分辨率:指 ADC 的数字输出位数,也称为量化位数。例如,12 位 ADC 具有 4096 个离散的数字输出。

采样速率:指 ADC 可以进行采样的最大速率。对于 ESP32-S3,最大采样速率为 2.5 MS/s。

输入范围:指 ADC 可以测量输入信号的电压范围。对于 ESP32-S3,输入范围为 0-3.3V。

噪声:指 ADC 在采集时分辨率的误差和干扰的影响。噪声越小,ADC 测量结果越精准。

稳定性:指 ADC 输出的稳定性。稳定性好的 ADC 输出变化小,测量结果更加准确。

三:软件代码:

// ESP32-S3 直接读取 ADXL354CZ 三轴模拟输出

// 传感器连接的 ADC 引脚
#define PIN_X  4   // GPIO1 (ADC1_CH3)
#define PIN_Y  5   // GPIO2 (ADC1_CH4)
#define PIN_Z  6   // GPIO3 (ADC1_CH5)

// ADXL354CZ 灵敏度 (根据 RANGE 跳线设置选择)
// ±2g 量程: 400 mV/g (典型值)
// ±8g 量程: 100 mV/g (典型值)
#define SENSITIVITY_MV_PER_G  400.0

// ESP32-S3 ADC 参考电压 (典型值 1100 mV)
#define VREF_MV  1100.0

void setup() {
  Serial.begin(115200);
  while (!Serial) delay(10);

  // 设置 ADC 分辨率 (ESP32-S3 默认 13 位,可设为 12 位以兼容常见习惯)
  analogReadResolution(12);

  // 设置衰减,使输入范围覆盖 0~2500mV 左右
  // ADC_ATTEN_DB_11 对应约 0~2500mV (取决于芯片)
  analogSetAttenuation(ADC_ATTENDB_MAX);

  Serial.println("ESP32-S3 ADC 读取 ADXL354CZ 开始...");
  Serial.println("Sensitivity: " + String(SENSITIVITY_MV_PER_G) + " mV/g");
}

void loop() {
  // 读取原始 ADC 值 (0~4095,12位分辨率下)
  int rawX = analogRead(PIN_X);
  int rawY = analogRead(PIN_Y);
  int rawZ = analogRead(PIN_Z);

  // 使用 analogReadMilliVolts 直接获取校准后的电压值 (单位 mV)
  float mvX = analogReadMilliVolts(PIN_X);
  float mvY = analogReadMilliVolts(PIN_Y);
  float mvZ = analogReadMilliVolts(PIN_Z);

  // 转换为加速度 (g)
  float gX = mvX / SENSITIVITY_MV_PER_G;
  float gY = mvY / SENSITIVITY_MV_PER_G;
  float gZ = mvZ / SENSITIVITY_MV_PER_G;

  // 串口输出
  Serial.print("Raw: ");
  Serial.print(rawX); Serial.print(", ");
  Serial.print(rawY); Serial.print(", ");
  Serial.print(rawZ);
  Serial.print("  |  mV: ");
  Serial.print(mvX, 1); Serial.print(", ");
  Serial.print(mvY, 1); Serial.print(", ");
  Serial.print(mvZ, 1);
  Serial.print("  |  g: ");
  Serial.print(gX, 4); Serial.print(", ");
  Serial.print(gY, 4); Serial.print(", ");
  Serial.print(gZ, 4);
  Serial.println();

  delay(1000);
}
四:实物验证:





关键词: ADXL354CZ     读取三轴数据    

共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]