4. ADC读取电位器电压

任务目标

本案例使用 Arm Cortex-M55 内核开发板(以 Arduino Nano 33 BLE Sense 为例)的片上 ADC 外设,采集电位器分压产生的模拟电压,将 12 位 ADC 原始值转换为实际电压值(单位:mV),并通过串口以可读文本形式周期性输出。

硬件连接

  • 电位器两端分别接 3.3V 与 GND
  • 电位器中间抽头接开发板 A0 引脚(对应 ADC 通道 0)
  • 开发板通过 USB 连接电脑,用于串口监视与供电

完整代码

#include <Arduino.h>

// Arduino Nano 33 BLE Sense 的 A0 对应 ADC 通道 0
// 参考电压 3.3V,12 位分辨率(0~4095)
const int adcPin = A0;
const float vref = 3.3f;
const int adcMax = 4095;

void setup() {
  Serial.begin(115200);
  // 等待串口稳定(原生 USB 需要)
  while (!Serial);
  pinMode(adcPin, INPUT);
  analogReadResolution(12);  // 显式设置 12 位分辨率
  Serial.println("ADC Potentiometer Reader Ready");
}

void loop() {
  int raw = analogRead(adcPin);          // 读取 12 位原始值
  float voltage = (float)raw * vref / adcMax;  // 转换为电压
  int voltage_mv = (int)(voltage * 1000.0f);   // 转为整数 mV

  // 串口输出:原始值 + 电压值
  Serial.print("Raw: ");
  Serial.print(raw);
  Serial.print(" | Voltage: ");
  Serial.print(voltage_mv);
  Serial.println(" mV");

  delay(200);  // 5Hz 采样率
}

编译与烧录

  1. 安装 Arduino IDE(≥1.8.13)或 Arduino CLI
  2. 在 开发板管理器 中安装 Arduino Mbed OS Nano Boards 板级支持包
  3. 选择开发板:Arduino Nano 33 BLE Sense
  4. 将上述代码粘贴到编辑器,点击 上传 烧录到开发板

运行与验证

  1. 打开 串口监视器(波特率 115200)
  2. 观察输出,应看到类似以下格式的周期性数据:
Raw: 2048 | Voltage: 1650 mV
Raw: 2048 | Voltage: 1650 mV

(以上为预期输出示例,实际数值取决于电位器位置)

  1. 判定通过标准:
  • 旋转电位器旋钮,串口输出的 Raw 值应在 0~4095 范围内连续变化
  • 电压值应随旋钮转动单调变化,且始终处于 0~3300 mV 区间
  • 当旋钮旋至一端时,Raw 接近 0,电压接近 0 mV;旋至另一端时,Raw 接近 4095,电压接近 3300 mV

常见问题

  • 串口无输出:确认代码中 while(!Serial) 已执行(原生 USB 需要等待枚举),并检查串口监视器波特率是否为 115200
  • 数值跳变剧烈:检查电位器接线是否牢固,或尝试在 analogRead 后增加 10ms 延时稳定信号
  • 电压上限不足 3300mV:确认开发板供电为 3.3V(Nano 33 BLE 的 VIN 引脚供电时 AREF 为 3.3V),若使用 5V 供电需调整 vref 常量