ESP32 ADC
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的更多相关文章
- ESP32引脚参考(转)
ESP32芯片配有48个具有多种功能的引脚.并非所有的引脚都暴露在所有的ESP32开发板中,有些引脚不能使用. 关于如何使用ESP32 GPIO有很多问题.你应该用什么pin?在项目中应该避免使用哪 ...
- ESP32音频输入-MAX4466,MAX9814,SPH0645LM4H,INMP441(翻译)
有几种方法可以将模拟音频数据输入到ESP32中. 直接从内置的模数转换器(ADC)读取 这对于一次性读取很有用,但不适用于高采样率. 使用I2S通过DMA读取内置ADC 适用于模拟麦克风,例如MAX4 ...
- 关于esp32的ADC采集
对于ADC采集 程序源码如下: /* ADC1 Example This example code is in the Public Domain (or CC0 licensed, at your ...
- ESP32随笔汇总
版权声明:本文为博主原创文章,未经博主本人不得转载.联系邮箱:mynoticeable@gmail.com 1.ubuntu 14.04下搭建esp32开发环境 2.UBUNTU14.0.4安装ecl ...
- ESP32 DAC
ESP32有两个DAC通道,通道1链接GPIO25, 通道2链接GPIO26; 当DAC设置为 “built-in DAC mode”的时候,I2S可以通过DAC发送数据: 使用示例: dac_out ...
- ESP32的ULP 协处理器笔记
1.ULP 协处理器是一个功耗极低的协处理器设备,无论主 CPU 是处于正常运行模式还是 Deep-sleep 模式,ULP 协处理器都可以独立运行.超低功耗协处理器的补充使得 ESP32 能够胜任一 ...
- STM32之DMA+ADC
借用小甲鱼的经典:各位互联网的广大网友们.大家早上中午晚上好..(打下小广告,因为小甲鱼的视频真的很不错).每次看小甲鱼的视频自学都是比较轻松愉快的..我在想,如果小甲鱼出STM32的视频,我会一集不 ...
- STM32之ADC+步骤小技巧(英文)
神通广大的各位互联网的网友们.大家早上中午晚上好好好.今早起来很准时的收到了两条10086的扣月租的信息.心痛不已.怀着这心情.又开始了STM32的研究.早上做了计算机控制的PID实验,又让我想起了飞 ...
- [nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC
一.本实验ADC 配置 分辨率:10 位. 输入通道:5,即使用输入通道AIN5 检测电位器的电压. ADC 基准电压:1.2V. 二.NRF51822 ADC 管脚分布 NRF51822 的ADC ...
随机推荐
- Matlab illustrate stiffness
% matlab script to illustrate stiffness % using simple flame propagation model close all clear all % ...
- Oracle win32_11gR2_database在Win7下的安装与卸载
Oracle win32_11gR2_database在Win7下的安装与卸载 by:授客 QQ:1033553122 Oracle的硬件要求 在安装oracle之前,请检查一下自己的电脑硬件是否复合 ...
- Android RecycleView 自定义Item的使用
自定义布局的RecycleView需要自己实现Adapter,ViewHolder和布局: 自定义Adapter继承RecycleView.Adapter,重写getItemCount(),onBin ...
- 慕学在线网0.2_users表设计(1)
1.Django App设计: users-用户管理(任何web中,users表都是第一个被设计的) course-课程管理 organization-机构和教师管理 operation-用户操作管理 ...
- 洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块
定制魔法方法 1.什么是定制魔法方法 首先定制是什么意思呢?其实就是自定义了,根据我们想要的要求来自定义.而在python中,其实那些所谓的内置函数,内置方法,内置属性之类的其实也是自定义出来的,不过 ...
- JavaScript高级特性-数组
1. JavaScript中的数组 在C++.Java中,数组是一种高效的数据结构,随机访问性能特别好,但是局限性也特别明显,就是数组中存放的数据必须是同一类型的,而在JavaScript中,数组中的 ...
- Hive-1.2.1_05_案例操作
1. 建库建表 # 建库 create database exercise; # 建表 create table student(Sno int,Sname string,Sex string,Sag ...
- SSRS奇怪报错Could not update a list of fields for the quer.
今天遇到一个奇怪的问题,SSRS我觉得是个半成品,很多东西都搞不了.写了一段SQL,本来SQL写法都有点怪了,如下 WITH TMP_A AS (SELECT *,ROW_NUMBER() OVER( ...
- [BZOJ 3829][POI2014] FarmCraft
先贴一波题面... 3829: [Poi2014]FarmCraft Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 421 Solved: 197[ ...
- Django之知识总结
1. 课程介绍 - 数据类型 - 函数 - 面向对象三大特性:继承,封装,多态 - socket:本质传输字节:所有网络通信都基于socket - 数据库设计:单表.FK.M2M (自己作业:自己领域 ...