资讯详情

[树莓派 PICO(基于MicroPython)]基础教程04-ADC模拟数字转换器(使用电位器读取GPIO电压、板载温度传感器...

目录

  • 〇、总的参考
  • 一、函数说明
  • 二、硬件准备
  • 三、程序-ADC模拟数字转换器(用电位器读取GPIO读取电压和板载温度传感器)
  • 四、可能出现的问题(尚未解决)

〇、总的参考

【微雪课】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)又只有一个。。。

标签: r1216电位器r09n系列电位器r9011电位器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台