微雪树莓派PICO笔记 |
您所在的位置:网站首页 › 什么是把数字信号转换为模拟信号 › 微雪树莓派PICO笔记 |
文章目录
什么是ADCRP2040 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时钟)分辨率:12bitADC输入通道: 通道0-3为GPIO通道(GPIO26-29)通道4为内部温度传感器通道注意:在Pico上GPIO29并未引出引脚,而是用于检测VSYS电压,故PICO上的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.3V2脚连接到GND3脚连接到GPIO26![]() 这个程序实现了每秒读取一次GPIO26上的电压,并使片内温度传感器采集温度 调节一下蓝白电位器,可以看到电压的变化 将比较冷的物体接触一下芯片会发现温度的变化 微雪PICO教程 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |