〇、总的参考
① 【微雪课】PICO系列教程4——ADC(模拟数字转换器) 另附其github,课程中使用的代码都在其中。 ②树莓派 PICO基础教程(基于MicroPython)
一、函数说明
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-655535555
ADC电压公式(单位为V): ADC温度公式:
二、硬件准备
焊接排针pico,1个 2.面包板,一个 三、蓝白电位器,一个 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)又只有一个。。。