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. HDU3987(最小割最少割边)

    Harry Potter and the Forbidden Forest Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/ ...

  2. 关于vue,webpack 中 “exports is not defined”报错

    vue项目npm run dev 后项目报错 : 提示 “exports is not defined”. 导致这个问题是因为balbel的配置文件.babelrc的问题: { "prese ...

  3. css引入页面的三种方法

    1.内联式:直接在标签上写样式 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  4. 2017-10-10 都市传说: "部分"中文出现乱码

    知乎原链, 作者亦本人 事情起源于项目另一开发者在中文Windows下构建时遇到的部分中文出现乱码问题. 当时很不解的是, 为什么会只有部分出现乱码. 第一感觉是, 如果编码转换不正确, 要么全乱码, ...

  5. React中使用百度地图API

    今天我们来搞一搞如何在React中使用百度地图API好吧,最近忙的头皮发麻,感觉身体被掏空,所以很久都没来写博客了,但今天我一定要来一篇好吧 话不多说,我们直接开始好吧 特别注意:该React项目是用 ...

  6. [VUE ERROR] Invalid prop: type check failed for prop "list". Expected Array, got Undefined

    错误原因: 子组件 props -> list 要求接收的数据类型是 Array, 然而实际接收到的是 Undefined. 子组件代码: props: { list: { type: Arra ...

  7. Android之ProgressDialog的使用

    ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口. ProgressDialog的创建方式有两种,一种是ne ...

  8. python:序列化与数据持久化

    数据持久化的方式有: 1.普通文件无格式写入:将数据直接写入到文件中 2.普通序列化写入:json,pickle 3.DBM方式:shelve,dbm 相关内容: json pickle shelve ...

  9. java中传值方式的个人理解

    前言 这几天在整理java基础知识方面的内容,对于值传递还不是特别理解,于是查阅了一些资料和网上相关博客,自己进行了归纳总结,最后将其整理成了一篇博客. 值传递 值传递是指在调用函数时将实际参数复制一 ...

  10. enum类使用

    状态常量类使用enum public class TestEnums{ public enum STATUS{ NOMAL("01","正常"), DELETE ...