4、Arduino_esp32 ADC使用

3、基于Arduino框架esp32的GPIO使用介绍:基于Arduino框架esp32的GPIO使用介绍

注:本文章内容是基于arduino框架进行esp32的开发。
开发环境搭建可以参考上一篇文章:2、搭建ESP32开发环境

1、ADC简介

ADC(模数转换器)是非常常见的外围设备之一,用于将模拟电压信号转换为数字形式。在监控大多数产生模拟输出电压的传感器(例如温度、压力、水压等)中使用非常广泛。
在实际使用中被采集的电压可能超出片内ADC的电压采集范围,此时需要设计相应的分压电路分压后才进行采集计算得到实际电压。
不同芯片有不同数量的ADC,每个ADC也可能具有不同数量的可用通道和引脚。请参阅每个板的数据手册。

2、Arduino框架下ESP32的ADC相关函数

Arduino框架ADC通用API:1~6
ESP32芯片专用的ADC API:7~9

(1)analogReadResolution设置所有ADC分辨率

**功能:**用于设置模拟读取返回值的分辨率。所有芯片的默认值为12位(范围从0到4096),但ESP32S3除外,ESP32S3的默认值是13位(范围为0到8192)。当设置不同的分辨率时,读取的值将被移动以匹配给定的分辨率。范围为1-16。如果未使用此函数,将使用默认值。对于ESP32,分辨率介于9到12之间,这将改变ADC硬件分辨率。否则将移动值。
函数原型:

void analogReadResolution(uint8_t bits);
/*
参数说明:
bits:ADC模拟读取分辨率。
*/

(2)analogSetClockDiv设置ADC时钟分频

**功能:**用于设置ADC时钟的分频器。
函数原型:

void analogSetClockDiv(uint8_t clockDiv);
/*
参数说明:
clockDiv:为ADC时钟设置分频器。范围为1-255,默认值为1。
*/

(3)analogSetAttenuation设置所有ADC通道衰减(设计电压采集范围)

**功能:**用于设置所有通道的衰减,实现修改ADC的电压测量范围。
函数原型:

void analogSetAttenuation(adc_attenuation_t attenuation);
/*
参数说明:
attenuation:设置的衰减。(ADC_ATTEN_DB_0、ADC_ATTEN_DB_2_5、ADC_ATTEN_DB_2_5、ADC_ATTEN_DB_2_5)
*/

宏定义

衰减宏对于esp32的意义
ADC_ATTEN_DB_0电压测量范围100 mV ~ 950 mV
ADC_ATTEN_DB_2_5电压测量范围100 mV ~ 1250 mV
ADC_ATTEN_DB_6电压测量范围150 mV ~ 1750 mV
ADC_ATTEN_DB_11电压测量范围150 mV ~ 2450 mV

(4)analogSetPinAttenuation设置特定ADC通道衰减(设计电压采集范围)

**功能:**用于设置特定pin/ADC通道的衰减。
函数原型:

void analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation);
/*
参数说明:
pin: ADC通道对应的特定管脚。
attenuation:设置衰减。(ADC_ATTEN_DB_0、ADC_ATTEN_DB_2_5、ADC_ATTEN_DB_2_5、ADC_ATTEN_DB_2_5)
*/

宏定义

衰减宏对于esp32的意义
ADC_ATTEN_DB_0电压测量范围100 mV ~ 950 mV
ADC_ATTEN_DB_2_5电压测量范围100 mV ~ 1250 mV
ADC_ATTEN_DB_6电压测量范围150 mV ~ 1750 mV
ADC_ATTEN_DB_11电压测量范围150 mV ~ 2450 mV

(5)analogRead读取ADC通道原始值

**功能:**用于获取给定pin/ADC通道的ADC原始值。
函数原型:

uint16_t analogRead(uint8_t pin);
/*
参数说明:
pin:ADC通道对应的管脚编号。
*/

(6)analogReadMillivolts读取ADC通道电压值

**功能:**用于获取给定pin/ADC通道的ADC值,f返回值单位为毫伏。
函数原型:

uint32_t analogReadMilliVolts(uint8_t pin);
/*
参数说明:
pin:ADC通道对应的管脚编号。
*/

(7)analogSetWidth设置所有ADC通道硬件分辨率

**功能:**用于设置硬件采样位和读取分辨率。默认值为12位(0-4095),范围为9-12。
函数原型:

void analogSetWidth(uint8_t bits);
/*
参数说明:
bits:ADC采样分辨率位宽。
*/

(8)analogSetVRefPin设置ADC校准引脚

**功能:**用于在esp32尚未校准时用于设置ADC校准的引脚(引脚25、26或27)。
函数原型:

void analogSetVRefPin(uint8_t pin);
/*
参数说明:
pin:用于设置ADC校准的VRefPin的引脚编号。
*/

(9)hallRead读取引脚36、39连接的HALL传感器ADC值

**功能:**用于获得连接到引脚36(SVP)和39(SVN)的HALL传感器的ADC值。
函数原型:

int hallRead();
/*
参数说明:
*/

3、ESP32 ADC使用例子(Arduino框架)

#include <Arduino.h>

#define PIN_ADC2_CH2 2   //定义引脚宏  

void setup() {

  Serial.begin(115200);      //初始化配置串口
  analogReadResolution(12);  //设置ADC的分辨率为12位(0-4096)
}

void loop() {
  //定义两个变量用于保存ADC采集的原始值和电压值(单位毫伏)
  int analogOriginalValue = 0;
  int analogVoltsValue = 0;

  analogOriginalValue = analogRead(PIN_ADC2_CH2);         //读取ADC原始值
  analogVoltsValue = analogReadMilliVolts(PIN_ADC2_CH2);  //读取ADC电压值(范围毫伏)
  
  // 上传A读取的ADC值:
  Serial.printf("ADC analog value = %d\n",analogOriginalValue);
  Serial.printf("ADC millivolts value = %d ms\n",analogVoltsValue);
  
  delay(100);  //延时
}
如有不对之处,欢迎大家指正!
  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程先生w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值