Arduino ESP32 ADC模拟量信号读取

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino ESP32 ADC模拟量信号读取相关的知识,希望对你有一定的参考价值。

Arduino ESP32 ADC模拟量信号读取


这篇文章展示如何使用Arduino IDE读取与ESP32模拟输入。模拟读数对于读出可变电阻(如电位器或模拟传感器)的值很有用。

使用ESP32读取模拟输入就像使用analogRead(GPIO)函数一样简单,它接受要读取的GPIO作为参数。

ESP32模拟输入(ADC)

用ESP32读取模拟值意味着你可以测量0 V到3.3 V之间的变化电压等级。然后将测量的电压赋给0到4095之间的一个值,其中0 V对应0,3.3 V对应4095。0 V到3.3 V之间的任何电压都将给出两者之间的相应值。

ADC是非线性的值

理想情况下,当使用ESP32 ADC引脚时,你会期望线性行为。然而,这并没有发生。你会得到如下图所示的行为:

这种行为意味着你的ESP32无法区分3.3 V和3.2 V。你会得到相同的电压值:4095。
同样的情况发生在非常低的电压值:对于0 V和0.1 V,你将得到相同的值:0。
在使用ESP32 ADC引脚时,您需要记住这一点。

analogRead()

使用Arduino IDE读取ESP32模拟输入就像使用analogRead()函数一样简单。它接受你想要读取的GPIO作为参数:

analogRead(GPIO);
  • ESP32支持18个不同通道的测量。在DEVKIT V1 DOIT板(30 gpio版本)中只有15个可用。

其他相关的功能

  • analogReadResolution(resolution):设置样本位和分辨率。它可以是一个介于9(0 - 511)和12位(0 - 4095)之间的值。默认是12位分辨率。
  • analogSetWidth(width):设置样本位和分辨率。它可以是一个介于9(0 - 511)和12位(0 - 4095)之间的值。默认是12位分辨率。
  • analogSetCycles(cycles):设置每个样本的循环次数。默认是8。取值范围:1 ~ 255。
  • analogSetSamples(samples):设置范围内的样本数量。默认为1个样本。它有增加灵敏度的作用。
  • analogSetClockDiv(attenuation):设置ADC时钟的分压器。默认值为1。取值范围:1 ~ 255。
  • analogSetAttenuation(attenuation):设置所有ADC引脚的输入衰减。默认是ADC_11db。其他取值:

ADC_0db: 集没有衰减。ADC可以测量大约800mv (1V输入= ADC读数1088)。
ADC_2_5db: ADC的输入电压将被衰减,扩展测量范围至约。1100 mV。(1V输入= ADC读数3722)。
ADC_6db: ADC的输入电压将被衰减,扩展测量范围至约。1350 mV。(1V输入= ADC读数3033)。
ADC_11db: ADC的输入电压将被衰减,扩展测量范围至约。2600 mV。(1V输入= ADC读数1575)。

  • analogSetPinAttenuation(pin, attenuation):设置指定引脚的输入衰减。默认是ADC_11db。衰减值与前一个函数相同。
  • adcAttachPin(pin):附加一个引脚到ADC(也清除任何其他模拟模式可能是on)。返回TRUE或FALSE结果。
  • adcStart(pin), adcBusy(pin)resultadcEnd(pin):在附加引脚的总线上启动ADC转换。检查引脚的ADC总线上的转换是否正在运行(返回TRUEFALSE)。获取转换的结果:返回16位整数。

接线图

实例代码

// 电位器连接到GPIO 34(模拟ADC1_CH6)
const int potPin = 34;

// 用于存储电位器值的变量
int potValue = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  // 读取电位计值
  potValue = analogRead(potPin);
  Serial.println(potValue);
  delay(500);
}
  • 串口打印读取定位器的数值(得到的最大值是4095,最小值是0。)

以上是关于Arduino ESP32 ADC模拟量信号读取的主要内容,如果未能解决你的问题,请参考以下文章

MicroPython ESP32 ADC(模拟量转数字量)示例

ESP32-ArduinoGPIO输入操作,去抖,ADC多按键

eso32adc跳动大

Arduino ESP32 多任务运行(读取模拟量与闪灯)

arduino ide 环境esp8266 01s板bitset如何使用

arduino的adc怎么讲模型信号转化为数字信号