微雪树莓派PICO笔记——4. ADC(模拟数字转换器)
文章目录
- 什么是ADC
- RP2040 ADC技术参数
- ADC大致框架图
- 【MicroPython】machine.ADC类函数详解
- 代码实现
- 如果我们需要使用PWM精准的控制LED的亮度,就需要反馈
- 但是LED的亮度是一个模拟变量,MCU不能直接处理模拟信号
- 我们需要将其转换为数字信号才能进行处理
什么是ADC
模拟数字转换器 (Analog Digital Converter)
作用:将时间连续,幅值也连续的模拟信号转换为时间离散,幅值也离散的数字信号
基本原理:把输入的模拟信号按规定的时间间隔进行采样,并与一系列标准的电压进行比较,使其对应的二进制数值逐次收敛,直至输入电压与内部比较电压一致时为止,然后输出代表该电压的二进制值
- 常见的ADC类型
- 逐次逼近型ADC
- 根据基准电压生成一系列电压,与输入电压逐个比较,获取最接近输入电压的编码值
- 速度中等,精度较高,较为常见
- 并联比较型ADC
- 根据基准电压生成一系列电压,同时进行比较,获取最接近输入电压的编码值
- 速度较快,精度较快,是用于高速,低分辨率的场合
- 区别
- 好比CPU,GPU,前者可以单独处理比较高难度事件,后者并行处理比较简单的事件
RP2040 ADC技术参数
- ADC类型:逐次逼近型ADC(SAR ADC)
- 转化速率:500KS/s(使用内部独立48M时钟)
- 分辨率:12bit
- ADC输入通道:
- 通道0-3为GPIO通道(GPIO26-29)
- 通道4为内部温度传感器通道
注意:在Pico上GPIO29并未引出引脚,而是用于检测VSYS电压,故PICO上的ADC引脚
ADC大致框架图
ADC的大致流程为:
模拟信号通过模拟信号多路选择器进入到比较器的一端
- 假如我们需要采集ADC通道0的电压,也就是GPIO26引脚上的电压
- 其会通过模拟信号多路选择器进到比较器的一端
所谓的DAC就是将基准电压平分成2的N次方份
若我们的分辨率是12bit,那么基准电压会被平均分成4096份
逐次比较控制器准备就绪后,在开始转换信号到来后开始工作
其输出,逐次比较控制信号(SAR control signals)
控制比较器将输入电压和生成的内部电压进行逐次比较
逐次比较控制器将会记录比较结果
然后再比较完成后输出最为接近输入电压所对应的二进制值,这就完成了一次ADC转化
模拟的信号最大值由IO口供电I0VDD决定,而不是基准电压ADC_AVDD
通用ADC输入电压计算公式如下:
基准电压乘上ADC读取数值再除以分辨率等于ADC输入引脚的输入电压
代入Pico中的参数,简单推得ADC输入电压计算公式如下:
3.3乘上ADC读数值除以4096
等于ADC输入引脚电压,单位为V
官方提供的片内温度传感器计算公式
将ADC读取电压值代入即可得到当前温度
【MicroPython】machine.ADC类函数详解
- machine.ADC(id):
- ADC对象构造函数,并初始化对应的ADC通道。
- id:可为GPIO(PIN)对象,也可为ADC通道;
ADC对象构造函数,作用为初始化对应ADC通道。 参数ID为使用的ADC通道,可以使用Pin对象,也直接指定ADC通道,
使用Pin对象时,指定的GPIO需要支持ADC功能,即GPIO26-29;
使用指定ADC通道,通道0-3 对应GPIO26-29,通道数4则是对应内部温度传感器。
- ADC.read_u16():
- 读取对应通道ADC数值
read_u16函数,其作用读取对应通道ADC,并返回读取数值 数值;
这里需要注意一点,该函数返回值并不是直接返回ADC读取的数值,而是处理过的数值,其数值范围为0-65535;
故ADC电压计算公式应为:
Vin =\frac{3.3*ReadData}{65535}Vin=655353.3∗ReadData
ADC读取电压为3.3乘上返回值除以65535,单位为V
此文章仅针对RP2040 MicroPython固件,以源码为准,本文根据编写时官方源码编写,用于为初学者提供便利,仅供于参考,如有能力者建议自行查询MicroPython源码
代码实现
准备器件:
- pico 1
- 蓝白电位器 1
- 双公头杜邦线若干
原理图:
- 把蓝白电位器的1脚连接到3.3V
- 2脚连接到GND
- 3脚连接到GPIO26
from machine import Pin,ADC
import utimeADC0 = ADC(Pin(26)) # 通过GPIO26初始化ADC
sensor_temp = ADC(4) # 指定初始化ADC通道4,其对应片内温度传感器while True:read_voltage = ADC0.read_u16()*3.3/65535 # 读取ADC通道0的数值并根据ADC电压计算公式得到GPIO26引脚上的电压read_temp_voltage = sensor_temp.read_u16()*3.3/65535 # 计算出ADC通道4上的电压temperature = 27 - (read_temp_voltage - 0.706)/0.001721 # 温度计算公式,即可计算出当前温度print("ADC0 voltage = {0:.2f}V \t\t temperature = {1:.2f}℃ \r\n".format(read_voltage, temerature)) # 将GPIO26上的电压输出到控制台,将当前温度输出到控制台utime,sleep_ms(1000)
这个程序实现了每秒读取一次GPIO26上的电压,并使片内温度传感器采集温度
调节一下蓝白电位器,可以看到电压的变化
将比较冷的物体接触一下芯片会发现温度的变化
微雪PICO教程
微雪树莓派PICO笔记——4. ADC(模拟数字转换器)相关推荐
- 微雪树莓派PICO笔记——1.基础介绍
文章目录 基础硬件 原理图讲解 电路图重点讲解 点灯实操 基础硬件 长度51mm,宽度21mm,板厚1mm pcb使用了沉金工艺,所以引脚都做了半孔设计,即可焊接2.54mm的排针,也可以直接焊在主板 ...
- 微雪树莓派PICO笔记——3.PWM(脉冲宽度调制)
文章目录 什么是PWM PWM的应用 RP2040 PWM框架图 PWM流程图 PWM内部框架图 [MicroPython]machine.PWM类函数详解 代码实现 什么是PWM 脉冲宽度调制 (P ...
- 微雪树莓派PICO笔记——7. SPI(串行外设接口)
文章目录 SPI简介 硬件连接 通讯协议详解 RP2040 SPI 主要参数 RP2040 SPI 逻辑框图 machine.SPI类函数详解 例程地址 代码示例 代码实现 SPI简介 SPI全称为串 ...
- 微雪树莓派PICO笔记——5. UART (异步收发传输器)
文章目录 通讯协议 UART UART详解 RP2040 UART参数 UART流程图 函数详解 例程地址 码代码 通讯协议 MCU如果要说话需要约定一定的规则,这些规则,我们称为通信协议 常见的有U ...
- 微雪树莓派PICO笔记——6. I2C(集成电路总线)
文章目录 简介 协议详解 RP2040 I2C主要参数 函数讲解 内存操作 软件I2C 例程地址 实操 程序讲解 简介 I2C 集成电路总线,一种串行通信总线,使用多主从架构 由飞利浦公司在20世纪8 ...
- stm32学习笔记 ADC模拟数字转换器 ADC模数转化器详解
一.为什么要使用ADC模拟数字转换器 STM32主要是数字电路,数字电路只有高低电平,没有几V电压的概念,所以如果想要读取电压值,就需要借助ADC模数转化器来实现.可以说ADC是模拟 ...
- STM32单片机(七)ADC模拟数字转换器----第二节:ADC模数转换器练习1(AD单通道)
❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分:建议先学习51单片机,其是STM32等高级单片机的基础:这样再学习STM32时才能融会贯通. ☀️ 专栏适 ...
- STM32 深入模拟数字转换器ADC
ADC 是现实世界和数字化世界的的桥梁 1.ADC整体思路 2.STM32 ADC模块结构 3.单次单通道ADC1 软件触发 4.规则组多通道转换 a.不使用DMA b.使用DMA c.EXTI Li ...
- [树莓派]PICO基础使用_微雪OLED显示
简介 Raspberry Pi Pico是具有灵活数字接口的低成本,高性能微控制器板.它集成了Raspberry Pi自己的RP2040微控制器芯片,运行速度高达133 MHz的双核Arm Corte ...
最新文章
- 对于容器环境来说 全栈监控究竟意味着什么?
- 【Spark Summit East 2017】BigDL:Spark上的分布式深度学习库
- 老BOJ 13 K-based Numbers
- acwing2019. 拖拉机(最短路径)
- android 联系人批量插入,GitHub - Atinerlengs/InsertDemo: android 简单的批量插入通话记录、联系人、短信demo...
- 命名实体识别以及词性自动标注
- 图片区域帧差法识别物体_matlab
- 上市公司回购股票是利好还是利空?
- 设置代理_PC客户端爬虫,这样设置代理就对了
- python 导入自己写的类_Python3.7模块的定义、导入、优化操作图文完全详解,附视频教程...
- flutter 弹幕插件_Flutter 实现虎牙/斗鱼 弹幕效果
- 爬虫mm131明星照片
- XP连接网络计算机未启动服务,网络不存在或尚未启动/以及局域网互访的解决办法...
- 两独立样本非参数检验的Mann-whitneyU检验
- 无法定位程序输入点于动态链接库(更新)
- Yolov5学习笔记(1)——训练出自己的模型
- 7.22版本服务器维护,7月22日服务器例行维护公告
- python/sympy求解矩阵方程
- 数字化赋能三农 农行、邮储如何保“质”更保“智”?
- 使用RPA有什么好处