2个12位的ADC,共计18通道,ADC2比较特殊的一点就是:ADC2和wifi共用,wifi的优先级更高,所以ADC2只有在WIFI模块不用的情况下好使;

在读取ADC数据之前,必须先对ADC进行设置,然后才可以读出数据,设置的示例代码如下:

//Configure ADC
if (unit == ADC_UNIT_1) {
  adc1_config_width(ADC_WIDTH_BIT_12);
  adc1_config_channel_atten(channel, atten);
} else {
  adc2_config_channel_atten((adc2_channel_t)channel, atten);
}

可以很明显对比出ADC1和ADC2的初始化是不一样的,ADC2知己设置通道&衰减之后就可以用了,通道2没有设置宽度,以后咱们就直接按照示例来用就可以,我也不知道为什么;

The reading width of ADC2 is configured every time you take the reading.这是官方给出的原因,说是每次读ADC2数据之前的时候设置ADC2的宽度;

经过上述的设置之后就可以读取ADC的数据了,读取数据的函数如下: adc1_get_raw() and adc2_get_raw()

这里需要特别注意的一点就是,大家不要忘记我们在初始化ADC2的时候没有初始化宽度,在读ADC2数据的时候需要把宽度作为一个参数输入读数据的API函数adc2_get_raw()中;

ADC1还可以用来读取霍尔传感器的数值,但是又两点特别注意的地方:读内置霍尔传感器数值的时候智能用ADC1的0和3通道,这就要求我们这两个通道别拿出来干别的事情,就是(GPIO36和GPIO39)别链接别的设备了,用特定函数hall_sensor_read()来读取霍尔传感器数值,和普通的读取函数不同哦;

adc2_vref_to_gpio()用来把内部的参考电压引流至GPIO口,消除噪音的时候,这个函数有用处;

ESP32是存在噪音的,读值需要校正,可以在GPIO上连接一个0.1微法的电容来降低噪音,也可以读取多个数值后取平均值来降低噪音;ESP32的参考电压在应该是1100mV,但是实际上每片ESP32的参考电压都不同(参考电压在1000-1200之间),这就要求我们得校正参考电压,因为参考电压不一样的时候,对相同电压的读值就不同了,所以得校正参考电压;

读取adc1_get_raw() and adc2_get_raw()的数值需要校正成mV,是通过一个函数来校正的(y = coeff_a * x + coeff_b),实际上就是一条斜率一定的曲线,那么怎么得到这条曲线呢?这就需要存储在eFuse里的参数或者是咱们用户自己提供的参数,至于这些参数怎么得到,咱不讲了,就知道esp_adc_cal_raw_to_voltage(reading, adc_chars);就是通过一条斜率曲线把读取adc1_get_raw() and adc2_get_raw()的数值转变成了mV的就行了,当然是用之前要得到斜率曲线的代码必须码上如下:

//Characterize ADC at particular atten
esp_adc_cal_characteristics_t *adc_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));
esp_adc_cal_value_t val_type = esp_adc_cal_characterize(unit, atten, ADC_WIDTH_BIT_12, DEFAULT_VREF, adc_chars);
//Check type of calibration value used to characterize ADC
if (val_type == ESP_ADC_CAL_VAL_EFUSE_VREF) {
printf("eFuse Vref");
} else if (val_type == ESP_ADC_CAL_VAL_EFUSE_TP) {
printf("Two Point");
} else {
printf("Default");
}

至此ADC就算可以正常读值了!总结一下,读值之前必须先设置宽度和量程,然后读值,读值需要转化成毫伏,所以需要得到校正曲线,然后把原始读值转化成毫伏;

ESP32 ADC的更多相关文章

  1. ESP32引脚参考(转)

    ES​P32芯片配有48个具有多种功能的引脚.并非所有的引脚都暴露在所有的ESP32开发板中,有些引脚不能使用. 关于如何使用ESP32 GPIO有很多问题.你应该用什么pin?在项目中应该避免使用哪 ...

  2. ESP32音频输入-MAX4466,MAX9814,SPH0645LM4H,INMP441(翻译)

    有几种方法可以将模拟音频数据输入到ESP32中. 直接从内置的模数转换器(ADC)读取 这对于一次性读取很有用,但不适用于高采样率. 使用I2S通过DMA读取内置ADC 适用于模拟麦克风,例如MAX4 ...

  3. 关于esp32的ADC采集

    对于ADC采集 程序源码如下: /* ADC1 Example This example code is in the Public Domain (or CC0 licensed, at your ...

  4. ESP32随笔汇总

    版权声明:本文为博主原创文章,未经博主本人不得转载.联系邮箱:mynoticeable@gmail.com 1.ubuntu 14.04下搭建esp32开发环境 2.UBUNTU14.0.4安装ecl ...

  5. ESP32 DAC

    ESP32有两个DAC通道,通道1链接GPIO25, 通道2链接GPIO26; 当DAC设置为 “built-in DAC mode”的时候,I2S可以通过DAC发送数据: 使用示例: dac_out ...

  6. ESP32的ULP 协处理器笔记

    1.ULP 协处理器是一个功耗极低的协处理器设备,无论主 CPU 是处于正常运行模式还是 Deep-sleep 模式,ULP 协处理器都可以独立运行.超低功耗协处理器的补充使得 ESP32 能够胜任一 ...

  7. STM32之DMA+ADC

    借用小甲鱼的经典:各位互联网的广大网友们.大家早上中午晚上好..(打下小广告,因为小甲鱼的视频真的很不错).每次看小甲鱼的视频自学都是比较轻松愉快的..我在想,如果小甲鱼出STM32的视频,我会一集不 ...

  8. STM32之ADC+步骤小技巧(英文)

    神通广大的各位互联网的网友们.大家早上中午晚上好好好.今早起来很准时的收到了两条10086的扣月租的信息.心痛不已.怀着这心情.又开始了STM32的研究.早上做了计算机控制的PID实验,又让我想起了飞 ...

  9. [nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC

    一.本实验ADC 配置 分辨率:10 位. 输入通道:5,即使用输入通道AIN5 检测电位器的电压. ADC 基准电压:1.2V. 二.NRF51822 ADC 管脚分布 NRF51822 的ADC ...

随机推荐

  1. Java集合之Vector源码分析

    概述 Vector与ArrayLIst类似, 内部同样维护一个数组, Vector是线程安全的. 方法与ArrayList大体一致, 只是加上 synchronized 关键字, 保证线程安全, 下面 ...

  2. MAC下搭建个人博客

    安装homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/inst ...

  3. php7.27: export excel from mysql

    https://stackoverflow.com/questions/15699301/export-mysql-data-to-excel-in-php https://github.com/PH ...

  4. 微信小程序下拉框之二维数组或对象

    在项目中,我们大多数时候传的值并不是需要这个下标,而是其他的值.像我项目中,需要获取到的是它对应的Id,那么我们如何通过它的这个下标值返回你想要的值呢? 通过picker返回的索引值,去获取匹配你想获 ...

  5. HTML命名规范

    一.关于选择器的命名   W3C CSS2.1的 4.1.3 节中提到:标识符(包括选择器中的元素名,类和ID)只能包含字符[a- zA-Z0-9]和ISO 10646字符编码U+00A1及以上,再加 ...

  6. 共用的h5回调页面

    产生背景: APP里的公用页面,像帮助中心页.授权认证结果页.各种协议页面,都需要做成H5页面,方便安卓和ios去调用. 交互情况描述: 要是有动态值,就需要定义在自己H5链接的后面,让他们传值,自己 ...

  7. nativefier(一行代码将任意网页转化为桌面应用)

    刚刚在看前端九部的手册的时候,发现一个之前没有用过的骚东西,看上去还挺好用,我这个好奇心瞬间就窜的老高了,赶紧试一试,看看这个东西有没有必要收入我的胯下 结果实验完了之后, 必须必须要强行安利给你们 ...

  8. python之管道, 事件, 信号量, 进程池

    管道:双向通信 2个进程之间相互通信 from multiprocessing import Process, Pipe def f1(conn): from_zjc_msg = conn.recv( ...

  9. 为什么radio没有出现单选效果?

    原因是radio一定要设置相同的name,如下: <input type="radio" name="yunsuan" checked="che ...

  10. mysql5.7 安装和多源复制实践

    MySQL 5.7发布后,在复制方面有了很大的改进和提升.比如开始支持多源复制(multi-source)以及真正的支持多线程复制了.多源复制可以使用基于二进制日子的复制或者基于事务的复制.下面我们说 ...