引言
欢迎来到Velxio博客的又一篇动手实践教程!今天,我们将深入探讨树莓派Pico的ADC(模数转换器)。Pico是一款功能强大的小型开发板,其最酷的特性之一就是能够读取模拟电压——非常适合传感器、电位器等设备。在本示例中,我们将读取三个电位器的外部模拟信号,并获取内部温度传感器的数值。这一切都可以在浏览器中通过Velxio的SPICE精确仿真来运行。

电路详解
让我们来看看这个电路。我们有一个树莓派Pico(在Velxio中为Nano RP2040变体),连接了两个电位器和一个LED。
组件
- 树莓派Pico(Nano RP2040):整个系统的大脑。
- 电位器A0(pot-a0):连接到GPIO26(A0)。其滑动端(SIG)接A0,VCC接3.3V,GND接地。
- 电位器A1(pot-a1):连接到GPIO27(A1)。接线方式相同:SIG接A1,VCC接3.3V,GND接地。
- 红色LED(led-temp):通过限流电阻(LED组件内部集成)连接到GPIO2(D2)。阳极(A)接D2,阴极(C)接地。
接线细节
- A0(GP26) 通过蓝色导线(
#4488ff)连接到pot-a0的SIG引脚。 - A1(GP27) 通过绿色导线(
#44cc44)连接到pot-a1的SIG引脚。 - D2(GP2) 通过红色导线(
#ff4444)连接到红色LED的阳极。 - 两个电位器共享Pico的3.3V电源轨(红色导线)和地线(黑色导线)。
- LED的阴极连接到地线。
注意:Pico的ADC引脚支持3.3V电压,因此我们使用3.3V电源。电位器充当分压器,在其滑动端提供0到3.3V的可变电压。
代码详解
现在我们来分析代码。代码采用Arduino风格的C++编写,适用于树莓派Pico。
// 树莓派Pico — ADC读取测试
// 读取A0-A2(GPIO26-28)的模拟值以及内部温度传感器
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("=== Pico ADC读取 ===");
Serial.println("A0=GP26 A1=GP27 A2=GP28 温度=内部传感器");
Serial.println("12位分辨率(0-4095),3.3V参考电压");
Serial.println();
analogReadResolution(12);
}
void loop() {
int a0 = analogRead(A0);
int a1 = analogRead(A1);
int a2 = analogRead(A2);
// 内部温度传感器位于通道4
// T = 27 - (V - 0.706) / 0.001721
int tempRaw = analogRead(A3); // Pico核心将通道4映射到A3
float voltage = tempRaw * 3.3f / 4095.0f;
float tempC = 27.0f - (voltage - 0.706f) / 0.001721f;
Serial.print("A0: "); Serial.print(a0);
Serial.print(" A1: "); Serial.print(a1);
Serial.print(" A2: "); Serial.print(a2);
Serial.print(" 温度: "); Serial.print(tempC, 1); Serial.println(" °C");
delay(1000);
}
关键点
analogReadResolution(12):将ADC设置为12位分辨率(0-4095)。Pico的ADC默认是12位,但显式设置是一个好习惯。analogRead(A0):读取GPIO26(A0)上的电压。Pico核心将A0映射到GPIO26,A1映射到GPIO27,A2映射到GPIO28,A3映射到内部温度传感器(通道4)。- 温度计算:内部传感器输出随温度变化的电压。公式
T = 27 - (V - 0.706) / 0.001721将电压转换为摄氏度。常数0.706V是27°C时的电压,0.001721 V/°C是斜率。 - 串口输出:结果每秒打印一次。
关键概念
- ADC分辨率:Pico的ADC是12位,意味着它可以表示4096个离散电压等级(0到4095)。参考电压为3.3V,因此每一步约为0.8 mV。
- 模拟与数字:电位器提供连续电压;ADC将其转换为数字值。
- 内部温度传感器:一个方便的功能,无需外部元件即可监测芯片温度。
- 分压器:电位器充当分压器,提供电源电压的一部分。
常见问题与调试技巧
- 引脚映射错误:记住A0是GPIO26,A1是GPIO27,A2是GPIO28,内部温度传感器通过A3(通道4)访问。
- 浮空引脚:如果电位器滑动端断开连接,ADC读数可能随机。务必确保连接牢固。
- 串口监视器:确保波特率匹配(115200)。在Velxio中,从编辑器工具栏打开串口监视器。
- LED不闪烁:本示例中的LED不受代码控制,仅作为接线示例。要使其闪烁,需要添加
digitalWrite(D2, HIGH)和delay()调用。
建议扩展
- 添加第三个电位器:将第三个电位器连接到GPIO28(A2)并在代码中读取。
- 控制LED:使用温度读数,当温度超过阈值时点亮LED。
- 绘制数据:使用Velxio的串口绘图器可视化模拟读数随时间的变化。
- 使用外部传感器:用电位器替换为光敏电阻(LDR)或LM35等温度传感器。
亲自尝试!
准备好实验了吗?在Velxio中打开实时示例,开始调整电路或代码。点击下方链接,即可在浏览器中启动仿真。
祝您玩得开心!