0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ESP32学习笔记:ADC

CHANBAEK 来源:跳动的字节 作者:晓宇 2023-07-13 17:11 次阅读

今天我们来玩儿ADC

概述

ESP32 芯片有2 个 12位的SAR(逐次逼近)ADC,最多可以读取18个不同的模拟通道输入,由5个专用转换控制器管理,2个支持高性能多通道扫描,2个支持Deep-sleep低功耗模式下运行,还有一个专门用于功率检测和峰值监测。

图片

主要特性如下:

  • 采用 2 个 SAR ADC,可支持同时采样与转换
  • 采用 5 个专用 ADC 控制器,可支持不同应用场景(比如,高性能、低功耗,或功率检测和峰值检测)
  • 支持 18 个模拟输入管脚
  • 1个内部电压 vdd33 通道、 2 个 pa_pkdet 通道(部分控制器支持)
  • 可配置 12 位、 11 位、 10 位、 9 位多种分辨率
  • 支持 DMA(1 个控制器支持)
  • 支持多通道扫描模式(2 个控制器支持)
  • 支持 Deep-sleep 模式运行(1 个控制器支持)
  • 支持 ULP 协处理器控制(2 个控制器支持)

硬件

ADC1支持8个通道(GPIO32-GPIO39),ADC2支持10个通道(GPIO0、GPIO2、GPIO4、GPIO12-GPIO15、GPIO25-GPIO27),这里有两点需要注意:

  • ADC2的一些引脚比如GPIO0、GPIO2、GPIO15为芯片的Strapping 管脚,使用的时候要特别注意
  • ADC2只能在WiFi功能未启动的情况下使用

图片

ADC模拟输入引脚可承受最高3.3V的电压,如果需要测试更高的电压,需要通过分压之类的方式进行降压之后再进行采集。

ESP32 ADC 对噪声敏感,从而导致 ADC 读数出现较大差异。为了尽量减少噪声,可以在使用中的 ADC 输入端连接一个 0.1uF 的电容,多重采样也可用于进一步减轻噪声的影响。

软件

关于ADC的一些概念,比如时钟,分辨率,采样周期,衰减,量程等大家自行了解,下面我们讲一下基础的使用:

模拟电压读取

ADC使用不需要初始化引脚了,直接使用下面的函数读取引脚电压,使用默认的参数进行配置,这个参数配置能满足绝大部分的需求了。这里还有一点注意的是这里是阻塞的,直到采集结束。

analogRead(32);

分辨率设置

如上文中说的,ESP32的ADC是12位的,我们读取的范围默认是0-4095,如果想改也是可以的,通过下面你函数更改,一般用默认就好了。

/*
* Sets the conversion resolution
* Default is 12bit (0 - 4095)
* Range is 9 - 12
* */
void analogSetWidth(uint8_t bits);

ADC时钟

ADC根据选择的分辨率在多个时钟周期内进行转换,时钟速率越快,转换过程就越快,通过更改时钟分频系数来控制频率,分频越大速率越慢,默认就是1,最快的速率。

/*
* Set the divider for the ADC clock.
* Default is 1
* Range is 1 - 255
* */
void analogSetClockDiv(uint8_t clockDiv);

ADC参考电压

ADC的参考电压Vref,在不同的ESP型号可能是不一样的,我们这里ESP32参考电压为1.1V,一般用内部的就可以,要求高的需要校准一下,当然,也可以设置外置的引脚当做参考电压。

/*
* Set pin to use for ADC calibration if the esp is not already calibrated (25, 26 or 27)
* */
void analogSetVRefPin(uint8_t pin);

ADC衰减倍数

对应不同的电压检测范围,我们可以设置引脚的衰减倍数,默认就是11db,实际检测范围为0-3.3V,下面两个函数,一个设置所有通道的,一个设置特定通道的。

/*
* Set the attenuation for all channels
* Default is 11db
* */
void analogSetAttenuation(adc_attenuation_t attenuation);
 
/*
* Set the attenuation for a particular pin
* Default is 11db
* */
void analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation);
/*
0dB --- 1.1V
2.5dB --- 1.5V
6dB --- 2.2V
11dB --- 3.9V(实际最大采集到3.3V电压)
* */
static uint8_t __analogAttenuation = 3;//11db
typedef enum {
    ADC_0db,
    ADC_2_5db,
    ADC_6db,    
    ADC_11db
} adc_attenuation_t;

通过以上介绍一些可能用到的函数,大家了解一下即可,大部分场合都用默认的就行啦。

完整程序

#define ANALOG_PIN   32
int analog_value = 0;
void setup()
{
  Serial.begin(115200);
  Serial.println("ADC Demo!"); 
}
 
void loop()
{  
  analog_value = analogRead(ANALOG_PIN);
  Serial.println("ADC value on Pin(%d) is %d!",ANALOG_PIN,analog_value); 
  delay(1000);
}

我们直接在loop中读取ADC的值,然后把结果通过串口打印出来,ADC都使用的默认参数,没有进行配置。

打印结果

图片

使用平均数字滤波器降噪

实际采集中,我们一般使用多次采集取平均值的办法,这样出来的结果可以避免一些错误的噪声影响准确性,方法有多种,具体就是采集多次求平均值,或者去掉最大最小求平均值,大家可以试一下。

对于精度较高的场合,我们可以校准ADC,这样出来的结果就非常准确,后面我们再展开实际细说。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16191

    浏览量

    177358
  • 滤波器
    +关注

    关注

    160

    文章

    7726

    浏览量

    177648
  • adc
    adc
    +关注

    关注

    98

    文章

    6430

    浏览量

    544051
  • GPIO
    +关注

    关注

    16

    文章

    1196

    浏览量

    51899
  • ESP32
    +关注

    关注

    17

    文章

    956

    浏览量

    17071
收藏 人收藏

    评论

    相关推荐

    ESP32单片机学习笔记

    ESP32 单片机学习笔记 - 03 - MCPWM脉冲输出/PCNT脉冲计数前言,继续上一篇的内容。因为上一篇刚好实验了iic和spi,形成一对。接下来讲pwm另起一篇。一、电机PWM输出
    发表于 08-23 08:47

    ESP32ESP-IDF学习笔记

    ESP32ESP-IDF 学习笔记(六)【I2C数据总线(I²C)】文章目录ESP32ESP
    发表于 02-22 07:30

    ESP32 开发笔记(四)LVGL控件学习 Window 窗口控件 X

    ESP32 开发笔记(四)LVGL控件学习 Window 窗口控件 X
    发表于 11-14 09:06 6次下载
    <b class='flag-5'>ESP32</b> 开发<b class='flag-5'>笔记</b>(四)LVGL控件<b class='flag-5'>学习</b> Window 窗口控件 X

    [ESP32]学习笔记02

    [ESP32学习笔记02]使用ViusalStudio2017开发ESP32、按键输入检测前言一、安装Visual Studio 2017二、配置开发环境1.安装ViusalGDB2.
    发表于 12-03 17:36 23次下载
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>02

    [ESP32]学习笔记04

    Analog-to-Digital Converter(模数转换器)的使用今天我们学习ESP32提供的ADC外设的使用,ESP32的每个ADC
    发表于 12-22 19:02 9次下载
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>04

    ESP32ESP-IDF 教学(八)—— 模数转换器(ADC

    ESP32ESP-IDF 学习笔记(七)——模数转换器(ADC)文章目录ESP32
    发表于 12-22 19:08 38次下载
    <b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教学(八)—— 模数转换器(<b class='flag-5'>ADC</b>)

    SPI主线协议——ESP32学习笔记

    目录SPI主线协议——ESP32学习笔记零、前言一、什么是SPI?二、通信过程​三、极性和相位四、总结SPI主线协议——ESP32学习
    发表于 12-22 19:23 18次下载
    SPI主线协议——<b class='flag-5'>ESP32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    ESP32 单片机学习笔记 - 08 - WebSocket客户端

    前言,终于要到网络模型的最后一层,第四层,应用层,http、websocket的实践了。文章目录ESP32 单片机学习笔记 - 08 - WebSocket客户端一、应用层协议 科普概念二、编程指南
    发表于 12-29 18:56 12次下载
    <b class='flag-5'>ESP32</b> 单片机<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 08 - WebSocket客户端

    ESP32 单片机学习笔记 - 04 - ADC和定时器

    ESP32 单片机学习笔记 - 04 - ADC和定时器一、模拟数字转换器 ADC编程指南:Analog to Digital Conver
    发表于 01-17 13:18 11次下载
    <b class='flag-5'>ESP32</b> 单片机<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 04 - <b class='flag-5'>ADC</b>和定时器

    ESP32芯片模组机器学习算法运行的应用

    强大的机器学习算法。 ESP32集天线开关、射频巴伦、功率放大器、低噪声放大器、滤波器以及电源管理模块于一体,占用较小的PCB空间,即可最大化满足实际应用多样的功能需求。 使用EdgeImpulse在ESP32上运行机器
    发表于 03-15 17:23 1237次阅读

    ESP32上的深度强化学习

    电子发烧友网站提供《ESP32上的深度强化学习.zip》资料免费下载
    发表于 12-27 10:31 0次下载
    <b class='flag-5'>ESP32</b>上的深度强化<b class='flag-5'>学习</b>

    ESP32学习笔记:存储分布和启动过程

    今天我们来说说ESP32 for Arduino存储分布以及启动过程。
    的头像 发表于 07-14 15:10 2718次阅读
    <b class='flag-5'>ESP32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:存储分布和启动过程

    ESP32学习笔记:NVS分区永久保存数据

    今天我们来说说ESP32 for Arduino NVS分区永久保存数据。
    的头像 发表于 07-15 16:14 1w次阅读
    <b class='flag-5'>ESP32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:NVS分区永久保存数据

    ESP32学习笔记:双核

    今天我们来说说ESP32 for Arduino 的双核。
    的头像 发表于 07-15 16:16 4748次阅读
    <b class='flag-5'>ESP32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:双核

    ESP32学习笔记:WiFi

    今天我们来说说ESP32 的WiFi。
    的头像 发表于 07-15 16:20 3727次阅读
    <b class='flag-5'>ESP32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:WiFi