最近入手了pico学习。
〇、总的参考
①视频参考 【微雪课堂】PICO系列教程4——ADC(模拟数字转换器)
另附其github,课程中所用代码皆在其中。
②博文参考树莓派 PICO基础教程(基于MicroPython)
下面让我们开始ADC的学习吧!ε≡٩(๑>₃<)۶
一、函数说明
machine.ADC(id):
#ADC对象构造函数
#其作用为初始化对应的ADC通道
#参数id为使用的ADC通道,可以使用Pin对象,也可直接指定为ADC通道
#使用Pin对象时,指定的GPIO需要支持ADC功能,即GPIO26-29
#使用指定ADC通道时,通道0-3对应GPIO26-29,通道4则对应内部温度传感器
ADC.read_u16():
#其作用为读取对应通道ADC数值,并返回读数值
#注意!函数返回数值并非直接返回ADC读取的数值,而是经过处理的数值,数值范围为0-65535
ADC电压公式(单位为V):
ADC温度公式:
二、硬件准备
1、焊接排针的pico,1个
2、面包板,1个
3、蓝白电位器,1个
4、杜邦线(若用面包板,选用公公线),若干
三、程序-ADC模拟数字转换器(使用电位器读取GPIO电压、板载温度传感器读取)
ADC模拟数字转换器主要参考
①【微雪课堂】PICO系列教程4——ADC(模拟数字转换器)
② Micropython——关于PICO中ADC和PWM结合起来的使用
代码:
#每秒读取一次GPIO26上的电压,并使用片内温度传感器采集温度20
from machine import Pin, ADC
#从machine中引入Pin,ADC
import utime
#引入utime
#使用两种方式初始化ADC通道
ADC0= ADC(Pin(26))
#通过指定GPIO26初始化ADC通道0
sensor_temp = ADC(4)
#指定初始化ADC通道4,其对应片内温度传感器
while True:
reading = ADC0.read_u16()*3.3/65535
#读取ADC通道0的数值
#并根据ADC电压计算公式得到GPIO26引脚上的电压
print("ADC0 voltage = {0:.3f}V \r\n".format(reading))
reading = sensor_temp.read_u16()*3.3/65535
#读取ADC通道4的电压
temperature = 27 - (reading - 0.706)/0.001721
#代入官方给出的温度计算公式
#print("temperature = {0:.3f}℃ \r\n".format(temperature))
utime.sleep_ms(1000)
实验现象:
Thonny输出ADC电压、板载温度传感器数值。
调节电位器,ADC电压变化;用手触碰RP2040芯片,可发现温度变高,也可用低温物体触碰,发现温度变低。
想看实验现象的,可以看我上面附的视频或博文。
四、可能出现的问题(尚未解决)
之所以上面没有附上实验现象,是因为我的ADC电压结果有问题(温度测量没问题)。
①尝试更换ADC端口
ADC0、ADC1、ADC2这三个端口(更换端口的同时,程序也做了变动)我测出的结果都在0.5 - 0.9之间,而且不使用电位器,这个数值自己就会变动。即使使用电位器,仍是没有任何改变。
②尝试测量电位器、导线是否有问题
使用万用表,并未发现电位器、连接到pico的导线有问题。
③或许供电不足?
我测量了GPIO29(pico上未引出该引脚,用于检测VSYS电压),具体可参考这一博文树莓派Pico开发板硬件扩展接口及电源模块解析,可以知道VSYS电压应在2-5V:
但我测得的结果仅有1.5V左右。
而且又参考了这一问题AVR单片机ADC检测电压最大只能检测0.5V的现象
个人感觉,是使用笔记本供电不足导致的测量不足(别人使用的也是笔记本吧?为何没有这种问题),我更换成电脑USB其他接口,问题并未解决。
由于实验条件所限,暂时未能尝试给pico外接其他电源。
④或许面包板有问题?
⑤或许GPIO有问题?
可是更换了GND仍无改变,3V3(OUT)又只有一个。。。