搜索
bottom↓
回复: 0

《ESP32-S3使用指南—MicroPython版 V1.0》第十九章 ADC实验

[复制链接]

出0入234汤圆

发表于 3 天前 | 显示全部楼层 |阅读模式
2.jpg
1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729
1.png
3.png

第十九章 ADC实验


       machine.ADC 类是 machine 模块下的一个硬件类,用于指定 ADC 设备的配置和控制,提供对 ADC 设备的操作方法。本章,我们将介绍ESP32-S3的内部模数转换器ADC。我们将使用SPILCD模块来RV1的电压值,实现一个简单的实时监控。
       本章分为如下几个小节:
       19.1 ADC简介
       19.2 machine.ADC类
       19.3 硬件设计
       19.4 软件设计
       19.5 下载验证

       19.1 ADC简介
       ADC是模数转换器(Analogue to Digital Converter)的简称,是一种数据转换器。它通过将模拟信号编码为二进制代码,使数字电路能够与现实世界进行接口。
       在现实世界中,模拟信号具有不断变化的值,这些值来自各种来源和传感器,可以测量声音、光、温度或运动,许多数字系统通过测量来自这些传感器的模拟信号与环境相互作用。然而,数字电路只能处理只有两个离散状态的二进制信号,即逻辑“1”(HIGH)或逻辑“0”(LOW)。因此,需要一种能够在连续变化的模拟信号和离散数字信号这两个不同域之间进行转换的电子电路,这就是ADC的作用。
       在ESP32-S3开发板中,具有ADC功能的GPIO引脚如下图所示。

第十九章 ADC实验533.png
图19.1.1 ESP32-S3 ADC管脚

       在上图中,ESP32-S3 集成了两个12位SAR ADC,共支持20个模拟通道输入,ADC、RTC和TOUCH功能只能用这些管脚实现功能,不能在其他管脚复用这些功能。
       ESP32-S3的ADC模块的分辨率为12位,所以AD转换后的值范围为0~4095。由于ESP32-S3的工作电压为3.3V,所以当AD值为4095时,对应的电压为3.3V;当AD值为0时,对应的电压为0V。对于AD值和电压值,这里就会有一个简单的关系,如下所示。

第十九章 ADC实验776.png


       19.2 machine.ADC类
       machine模块下的ADC类提供了配置和控制ADC设备的方法,可以将连续变化的模拟信号转化为离散的数字信号。ADC设备的两个重要参数是采样值和分辨率。采样值表示当前时间由模拟信号转化的数值信号的数值,分辨率以二进制(或十进制)数的位数来表示,位数越多表示分辨率越高,采样值会更精确。

       1,machine.ADC类的构造方法
       RTC的构造对象方法如下:
  1. class machine.ADC(pin)
  2. 使用示例:adc = ADC(Pin(8))
复制代码
       该构造方法的参数描述,如下表所示。

1.png
表19.2.1 machine.ADC构造方法参数描述

       返回值:ADC对象。

       2,machine.ADC类的方法

       ①:设置输入衰减。
       其方法原型如下:
  1. adc.atten(atten)
复制代码
       该方法的参数描述,如下表所示。

2.png
表19.1.2 RTC.init方法参数描述

       返回值:无。

       ②:读取原始ADC值。
       其方法原型如下:
  1. adc.read()
复制代码
       返回值:ADC数值。

       ③:设置采样宽度。
       其方法原型如下:
  1. adc.width(bits)
复制代码
       该方法的参数描述,如下表所示。

3.png
表19.1.3 adc.width的方法描述

       返回值:无。

       19.2 硬件设计

       1. 例程功能
       本章实验功能简介:使用ADC1采集通道7(IO8)上面的电压,在SPILCD模块上面显示ADC转换值以及换算成电压后的电压值。在P3端口中,使用短路帽将AIN和RV1排针连接,使得IO8连接到电位器上,然后将ADC采集到的数据和转换后的电压值在SPILCD屏中显示。用户可以通过调节电位器的旋钮改变电压值。LED闪烁,提示程序运行。

       2. 硬件资源
       1)XL9555
              IIC_INT-IO0(需在P5连接IO0)
              IIC_SDA-IO41
              IIC_SCL-IO42

       2)SPILCD
              CS-IO21
              SCK-IO12
              SDA-IO11
              DC-IO40(在P5端口,使用跳线帽将IO_SET和LCD_DC相连)
              PWR- IO1_3(XL9555)
              RST- IO1_2(XL9555)

       3)ADC
              AIN-RV(跳线帽)

       3. 原理图
       ADC属于ESP32-S3内部资源,实际上我们只需要软件设置就可以正常工作,另外还需要将待测量的电压源连接到ADC通道上,以便ADC测量。本实验,我们通过ADC1的通道7(IO8)来采集外部电压值,开发板有一个电位器,可调节的电压范围是:0~3.3V。我们可以通过跳线帽将IO8与电位器连接,如下图所示:

第十九章 ADC实验2128.png
图19.2.1 IO8(对应AIN排针)与电位器示意图

       使用杜邦线将ADC和RV1排针连接好后,并下载程序后,就可以用螺丝刀调节电位器变换多种电压值进行测量。
       有的朋友可能还想测量其它地方的电压值,我们只需要1根杜邦线,一端接到AIN排针上,另外一端就接你要测试的电压点。一定要保证测试点的电压在0~3.3V的电压范围,否则可能烧坏我们的ADC,甚至是整个主控芯片。

       19.3 软件设计

       19.3.1 程序流程图
       程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图:

第十九章 ADC实验2424.png
图19.3.1.1 程序流程图

       19.3.2 程序解析
       本书籍的代码都在main.py脚本下编写的,读者可在光盘资料下找到对应的源码。ADC实验main.py源码如下:
  1. from machine import Pin,ADC,SPI,I2C
  2. import atk_xl9555 as io_ex
  3. import atk_lcd as lcd
  4. import time


  5. """
  6. * @brief       程序入口
  7. * @param       无
  8. * @retval      无
  9. """
  10. if __name__ == '__main__':
  11.    
  12.     # 初始化LED并输出高电平
  13.     led = Pin(1,Pin.OUT,value = 1)
  14.     # IIC初始化
  15.     i2c0 = I2C(0, scl = Pin(42), sda = Pin(41), freq = 400000)
  16.     # XL9555初始化
  17.     xl9555 = io_ex.init(i2c0)
  18.    
  19.     # 复位LCD
  20.     xl9555.write_bit(io_ex.SLCD_RST,0)
  21.     time.sleep_ms(100)
  22.     xl9555.write_bit(io_ex.SLCD_RST,1)
  23.     time.sleep_ms(100)
  24.     # 初始化SPI
  25.     spi = SPI(2,baudrate = 80000000, sck=Pin(12), mosi=Pin(11), miso = Pin(13))
  26.     # 初始化LCD,lcd = 0为正点原子2.4寸屏幕;lcd = 1为正点原子1.3寸SPILCD屏幕;
  27.     display = lcd.init(spi,dc = Pin(40,Pin.OUT),cs=Pin(21, Pin.OUT),dir=1,lcd=0)
  28.     # 开启背光
  29.     xl9555.write_bit(io_ex.SLCD_PWR,1)
  30.     time.sleep_ms(100)
  31.     # 显示实验信息
  32.     display.string(30, 50, 240, 32, 32, "ESP32-S3",lcd.RED)
  33.     display.string(30, 80, 240, 24, 24, "ADC TEST",lcd.RED)
  34.     display.string(30, 110, 240, 16, 16, "ATOM@ALIENTEK",lcd.RED)
  35.     display.string(30, 130, 200, 16, 16, "ADC:  0 . 0    V", lcd.BLUE)
  36.     # 初始化ADC
  37.     adc = ADC(Pin(8))         # 引脚8跟底板的电位器相连接
  38.    
  39.     while True:

  40.         # 读取ADC值
  41.         umber = float(adc.read()/4095*3.3)
  42.         display.num(30 + 40 ,130,int(umber),2,16,lcd.RED)
  43.         display.num(30 + 72 ,130,int(umber * 100 % 100),2,16,lcd.RED)
  44.         led_state = led.value()
  45.         led.value(not led_state)
  46.         time.sleep_ms(100)
复制代码
       这示例代码的主要功能是使用各种硬件接口和模块来控制和初始化一些设备,并在LCD显示屏上显示信息。具体来说,代码首先初始化了LED灯并使其输出高电平,然后初始化了I2C总线设备,并使用I2C总线初始化了一个XL9555芯片。接着,通过这个芯片来复位LCD显示屏,并使用SPI总线设备初始化了一个LCD显示屏。然后开启LCD显示屏的背光,并在显示屏上显示一些信息。最后,代码进入一个无限循环,在循环中不断读取ADC设备的值,并将其显示在LCD显示屏上。同时,还会切换LED灯的状态

       19.4 下载验证
       下载代码后,可以看到LCD显示如下图所示:

第十九章 ADC实验4259.png
图19.4.1 ADC采集实验测试图

       上图中,我们使用跳线帽将P3的AIN和RV1连接,使得IO8连接到电位器上,测试的是电位器的电压,并可以通过螺丝刀调节电位器改变电压值,范围:0~3.3V。LED闪烁,提示程序运行。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 06:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表