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 采样率
}
编译与烧录
- 安装 Arduino IDE(≥1.8.13)或 Arduino CLI
- 在 开发板管理器 中安装
Arduino Mbed OS Nano Boards板级支持包 - 选择开发板:
Arduino Nano 33 BLE Sense - 将上述代码粘贴到编辑器,点击 上传 烧录到开发板
运行与验证
- 打开 串口监视器(波特率 115200)
- 观察输出,应看到类似以下格式的周期性数据:
Raw: 2048 | Voltage: 1650 mV
Raw: 2048 | Voltage: 1650 mV
(以上为预期输出示例,实际数值取决于电位器位置)
- 判定通过标准:
- 旋转电位器旋钮,串口输出的
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常量