You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在树莓派Pico VREF引脚使用外部电压基准(ADAFRUIT LM4040)

树莓派Pico外接LM4040电压基准的实现方案(Arduino IDE/C++ SDK)

首先必须提醒硬件风险:树莓派Pico的VREF引脚输入电压范围为1.0V~VDD(通常是3.3V),禁止输入超过3.3V的电压,否则会损坏硬件。如果你使用的是4.096V输出的LM4040,建议更换为3.3V输出的型号(如LM4040C33),或额外增加分压电路将电压降至3.3V以内。

以下是针对你提到的两个Arduino平台的具体实现方法:


一、Earle F. Philhower的Raspberry Pi Pico/RP2040核心(推荐,蓝牙支持完善)

该核心的analogReference需使用正确参数,或直接操作寄存器配置:

方法1:使用analogReference(适配新版核心)

部分版本的核心支持EXTERNAL_VREF参数,代码示例:

#include <Arduino.h>

// 根据LM4040实际输出电压修改,示例为3.3V
const float REF_VOLTAGE = 3.3f;
const int ANALOG_IN_PIN = A0;

void setup() {
  Serial.begin(115200);
  while (!Serial); // 等待串口连接

  // 配置ADC使用外部VREF引脚作为参考源
  analogReference(EXTERNAL_VREF);
}

void loop() {
  int adc_value = analogRead(ANALOG_IN_PIN);
  // Pico ADC为12位分辨率(0-4095),需除以4095.0计算电压
  float adc_voltage = (adc_value * REF_VOLTAGE) / 4095.0f;

  Serial.print("ADC值: ");
  Serial.print(adc_value);
  Serial.print(" | 电压: ");
  Serial.print(adc_voltage, 4);
  Serial.println(" V");

  delay(1000);
}

方法2:直接操作RP2040寄存器(兼容所有版本)

如果analogReference编译失败,可直接通过底层寄存器配置:

#include <Arduino.h>
#include <hardware/adc.h>

const float REF_VOLTAGE = 3.3f;
const int ANALOG_IN_PIN = A0;

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

  adc_init();
  adc_gpio_init(ANALOG_IN_PIN); // 将引脚配置为ADC输入
  adc_select_input(0); // 选择对应通道(A0对应通道0)
  // 配置ADC使用外部VREF:清除原有REFSEL位,设置为外部参考模式(REFSEL=0b11)
  adc_hw->cs = (adc_hw->cs & ~ADC_CS_REFSEL_BITS) | ADC_CS_REFSEL(3);
}

void loop() {
  uint16_t adc_value = adc_read();
  float adc_voltage = (adc_value * REF_VOLTAGE) / 4095.0f;

  Serial.print("ADC值: ");
  Serial.print(adc_value);
  Serial.print(" | 电压: ");
  Serial.print(adc_voltage, 4);
  Serial.println(" V");

  delay(1000);
}

二、Arduino Mbed OS RP2040 Boards核心

该核心的analogReference需使用AR_EXTERNAL参数,代码示例:

#include <Arduino.h>

const float REF_VOLTAGE = 3.3f;
const int ANALOG_IN_PIN = A0;

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

  // 设置ADC使用外部参考电压
  analogReference(AR_EXTERNAL);
}

void loop() {
  int adc_value = analogRead(ANALOG_IN_PIN);
  // Mbed OS下Pico ADC同样为12位分辨率
  float adc_voltage = (adc_value * REF_VOLTAGE) / 4095.0f;

  Serial.print("ADC值: ");
  Serial.print(adc_value);
  Serial.print(" | 电压: ");
  Serial.print(adc_voltage, 4);
  Serial.println(" V");

  delay(1000);
}

关键注意事项

  • 树莓派Pico的ADC为12位分辨率(输出范围0-4095),而非传统Arduino的10位(0-1023),计算电压时需用4095.0作为分母。
  • 若后续测试Pico W蓝牙功能,Earle F. Philhower的核心支持更成熟,优先选择该平台。

内容的提问来源于stack exchange,提问作者Ray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:35:34