> 文章列表 > 【硬件外设使用】——ADC

【硬件外设使用】——ADC

【硬件外设使用】——ADC

【硬件外设使用】——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 machineadc = machine.ADC(0)
uart = machine.UART(0, 115200)while True:voltage = adc.read() * 3.3 / 4095print("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模块进行数据读取和处理。