【硬件外设使用】——ADC

news2025/3/11 3:03:40

【硬件外设使用】——ADC

  • ADC基本概念
  • ADC使用方法
    • pyb.adc
    • machine.adc
  • ADC可用的传感器

ADC基本概念

ADC是模拟数字转换器(Analog-to-Digital Converter)的缩写,它是一种将模拟信号转换成数字信号的电子元件。

ADC广泛用于测量和监测领域,例如将声音、压力、温度等模拟信号转换为数字信号进行数据处理和保存。在工业自动化、医疗设备、机器人控制等领域也有着广泛的应用。

在这里插入图片描述

ADC使用方法

pyb.adc

pyb.adc是MicroPython中用于控制ADC的模块。该模块提供了一组API,可用于配置和读取ADC的输入。

常用的pyb.adc模块的方法如下:

  • pyb.ADC(pin):创建一个ADC对象,pin是输入引脚的编号。
  • read():读取ADC输入的电压值(0-4095之间)。
  • read_timed(buf, tim, mode=ADC.CIRCULAR):在指定时间内读取ADC输入的电压值并存储到缓冲区中。
  • read_timed_multi(bufs, tim, mode=ADC.CIRCULAR):同时读取多个ADC的输入电压值,并将其存储到多个缓冲区中。
  • read_channel(channel, buf=None, n=1, mode=ADC.CIRCULAR):针对指定的通道读取输入电压值。如果没有指定buf,则为单次读取;否则,会在给定buf中存储指定数量的测量值。
  • read_timed_dma(buf, tim, mode=ADC.CIRCULAR):使用DMA控制器在指定的时间内读取ADC输入的电压值,并将其存储到缓冲区中。

在使用pyb.adc模块时,需要注意以下事项:

  • 读取电压值时,最大值为4095,即3.3V。
  • 不同的硬件平台可能支持的ADC引脚数量和范围不同。例如,在Pyboard上,支持的ADC引脚是X19-X22和X5-X8,而在ESP8266上,所有引脚都可以用于ADC输入。

以下是一个例子,展示如何在Pyboard上读取ADC输入电压并输出到串口:

import pyb

# 创建一个ADC对象,引脚为X20
adc = pyb.ADC(pyb.Pin.board.X20)

while True:
    # 读取ADC输入的电压值(0-4095之间)
    adc_value = adc.read()

    # 将电压值转换为实际电压
    voltage = adc_value * 3.3 / 4095
    
    # 输出电压值到串口
    print("Voltage: {:.2f}V".format(voltage))
    
    # 等待一段时间后再次读取电压值
    pyb.delay(500)

在上述代码中,我们首先创建了一个ADC对象,并指定了输入引脚为X20。然后,在循环中通过adc.read()方法读取电位器输入的电压值,并将其转换为实际电压值。最后,将电压值通过串口输出,等待一段时间后再次读取电压值。

machine.adc

machine.adc是MicroPython中的一个模块,用于操作ADC(Analog to Digital Converter)模块。ADC模块可以将模拟信号转换为数字信号,供单片机进行处理。

该模块提供了以下几个函数:

  • machine.ADC(pin):创建一个ADC对象,并指定模拟输入引脚。参数pin可以是任何支持模拟输入的引脚,比如machine.ADC(0)表示使用引脚A0作为模拟输入。

  • ADC.read():读取ADC输入引脚上的电压值,并返回一个0-4095之间的数字。

  • ADC.read_u16():与read()函数类似,但返回一个0-65535之间的无符号整数。

  • ADC.atten(atten):设置ADC输入的衰减值(Attenuation)。参数atten可以是以下四个值之一:ADC.ATTN_0DBADC.ATTN_2_5DBADC.ATTN_6DBADC.ATTN_11DB。衰减值越大,ADC输入引脚能够接受的电压范围越广。

  • ADC.width(width):设置ADC的数据宽度。参数width可以是以下两个值之一:ADC.WIDTH_9BITADC.WIDTH_10BIT。数据宽度越大,ADC采样精度越高。

以下是一个简单的ADC应用示例,使用machine.adc模块读取ADC模拟输入引脚的电压值并输出到串口:

import machine

adc = machine.ADC(0)
uart = machine.UART(0, 115200)

while True:
    voltage = adc.read() * 3.3 / 4095
    print("Voltage: {:.2f}V".format(voltage))

在上述代码中,我们创建了一个ADC对象,并使用adc.read()方法读取模拟输入引脚上的电压值。由于read()函数返回的是0-4095之间的数字,我们需要将其转换为实际电压值。最后,我们将电压值输出到串口。

ADC可用的传感器

ADC广泛应用于各种传感器中,通过将传感器输出的模拟信号转换为数字信号,从而实现对传感器数据的读取和处理。

以下是一些常见的使用ADC的传感器:

  1. 温度传感器:例如LM35、NTC热敏电阻等,可以将温度转换为对应的电压信号,进而通过ADC读取并计算出实际温度值。
    在这里插入图片描述

  2. 光敏传感器:例如LDR光敏电阻、光电二极管等,可以将光线强度转换为对应的电压信号,进而通过ADC读取并计算出光线强度值。
    在这里插入图片描述

  3. 声音传感器:例如麦克风、压电传感器等,可以将声音信号转换为对应的电压信号,进而通过ADC读取并计算出声音强度值。
    在这里插入图片描述

  4. 气体传感器:例如MQ系列气体传感器,可以将气体浓度转换为对应的电压信号,进而通过ADC读取并计算出气体浓度值。
    在这里插入图片描述

以上仅是一些常见的使用ADC的传感器,实际上还有更多其他类型的传感器也可以应用ADC技术。
在MicroPython中,我们可以根据具体传感器的特性和数据格式,选择合适的ADC模块进行数据读取和处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/433408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sggJava基础第四天

1 分支结构 分支结构 根据条件,选择性地执行某段代码。 有if…else和switch-case两种分支语句。 概述 顺序结构的程序虽然能解决计算、输出等问题 但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构 if…else形式 单分支结构 代码实现 …

leetcode160. 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后&…

把脉分布式事务的模型、协议和方案

在当前的技术发展阶段,不同的业务场景对一致性、可靠性、易用性、性能等要求不同,应用架构可以根据实际场景的需求,灵活选择合适的分布式事务解决方案。行业中把分布式事务解决方案分为刚性事务方案和柔性事务方案这两大类。 就刚性事务这个…

leetcode328. 奇偶链表

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意,偶数组和奇数组内部的相…

CentOS 7安装GitLab、创建用户、创建Repo、拉取推送

效果图 前言 gitlab全球出名,包含免费的社区版CE、收费的企业版EE,在国内安装速度一般; gitlab极狐版是中国特供版,用起来就跟CE一样,推荐国内使用~ 实现步骤 - 安装&配置 先准备好gitlab服务对外的访问地址&am…

技术分享 | MySQL级联复制下进行大表的字段扩容

作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生开源社区出品,…

使用Vite工具构建OpenLayers应用

vite作为最近大火的前端构建工具,吸引了大批开发者和工具框架作者的关注。vite自称为下一代的构建工具,这是要取代webpack的节奏啊。openlayers最新版本的案例代码就使用了vite来构建,因此这一篇文章我们来给大家示范一下如何使用vite来构建一个基于openlayers的应用。 首先…

从「搭子」文化,看融云如何助力垂类社交应用增长

互联网人拜佛 be like 👆,主打的就是一个垂直和精准。关注【融云全球互联网通信云】了解更多 其实,这也是年轻人的交友现状。最近随着大学生“特种兵式”旅游出圈的“搭子”友情,就是这样。 “搭子”,AKA 垂直细分领…

怎么把图片拼接成长图,3招教你快速处理

怎么把图片拼接成长图的方法,有没有快速便捷可一键操作的呢?当我们把图片拼接成长图有很多优点,比如说我们在图片文件传输的时候就更加快捷方便,还有就是我们在图片展示的时候更加统一。虽然有这么多优点,但是如果我们…

【RobotFramework自动化测试】

robotframework介绍 RF是一个基于Python语言开发的,可扩展的,是以关键字驱动模式的自动化测试框架。RF最新的版本是2019 年7月份发布,7月份之前只支持python2.7,7月之后支持3.X的版本 robotframework的安装 安装python环境&…

【JUC】CAS

【JUC】CAS 文章目录 【JUC】CAS1. 概述2. Unsafe类 1. 概述 在Java并发编程中,CAS是一种非阻塞的算法,即Compare and Swap(比较并交换)。 CAS通过比较内存中某个位置的值和预期值,如果相同,则将该位置的…

springcloud各个组件搭配使用演示

springcloud各个组件使用demo Eureka服务注册中心 创建三个eureka服务注册中心,分别为: eureka-server1 spring:application:name: eureka-server1 server:port: 8001eureka:client:service-url:defaultZone: http://localhost:8002/eureka/,http://localhost:8003/eureka/…

EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?

小伙伴们,我们又来了。上期大概介绍了EtherCAT的一些特性,本期我们将会更详细的介绍一下EtherCAT的实现方式,通信周期的意义到底是什么、SDO和PDO到底是什么等概念。 首先要声明,尽管本期介绍略微深入,实际上小伙伴使…

超详细!腾讯NLP算法岗面经(已offer)

作者 | ZipZou 整理 | NewBeeNLP 面试锦囊之面经分享系列,持续更新中 可以后台回复"面试"加入交流讨论组噢 分享一篇旧文,希望大家都成功上岸~ 写在前面 首先来段简单的自我介绍:2021届硕士,硕士期间未有实习经历&…

【Micropython】ESP8266通过NTP同步本地RTC时间

【Micropython】ESP8266通过NTP同步本地RTC时间 📌相关篇《【MicroPython esp8266】固件烧写教程》✨本案例基于Thonny平台开发。✨ 📋实时时钟 (RTC) 🔖RTC属于machine模块中的子类。 datetime([value]): 获取或设置当前时间。如果没有指定…

GitLab合并操作自动构建Jenkins任务

最终实现当git库 有合并操作自动构建jenkins的指定任务 1、安装Build Authorization Token Root插件 Build Authorization Token Root:使用拥有读取权限的匿名用户访问,配置钩子链接时需要用到,如果不使用,每次访问链接都需要提供认证&#…

Rancher 部署带有密码认证 Elasticsearch 服务

Rancher 部署带有密码认证 Elasticsearch 服务 1. 工作负载部署 镜像地址 elasticsearch:7.6.2端口映射 NodePort 9200 -> 31627(随机)环境变量 node.namees1 network.host0.0.0.0 discovery.typesingle-node配置映射 新建配置映射,内容如下: xpack.…

Python VTK 绘制线条

前言: Python-VTK绘制线条,主要绘制直线和曲线 主要函数介绍: vtk.vtkPoints() 在VTK中用于定义点的类,使用points.InsertPoint(index, x, y, z) 即可插入点集。函数中,第一个参数是点的序号,后面是三个参…

垃圾回收面试总结

堆空间的基本结构 Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。 Java 堆是垃圾收集器管理的主要区域,因此也被称作 GC 堆(Garbage Collected Heap&am…

含可再生能源的配电网最佳空调负荷优化控制

目录 1 主要内容 2 部分代码 3 程序结果 4 程序链接 1 主要内容 该程序完美复现《Optimal air-conditioning load control in distribution network with intermittent renewables》,中文题目(翻译)为《含可再生能源的配电网最佳空调负荷…