Nodemcu的ADC功能介绍

  • 内容
  • 评论
  • 相关

模数转换器(ADC)用于将模拟信号转换成数字形式。NodeMcu内置了10位ADC,只有一个ADC通道,即只有一个ADC输入引脚从外部设备读取模拟电压。

NodeMcu ADC引脚

NodeMcu ADC引脚
NodeMcu ADC引脚

Nodemcu内部设计中,ADC引脚与外部供电电路进行多路复用。因此,我们可以利用它来测量内部电压或外部电压。ADC引脚在读取外部电压时,输入电压范围为0-1.0V。

ADC模式的设置,测量的是系统电压还是外部电压,可在固件“esp_init_data_default”  (0-127 byte)  的第 107 byte 设置。

ADC 内部电压测量

esp_init_data_default.bin (0-127 byte) 的 第107 byte (0 - 127字节)“vdd33_const”,必须设置为0xFF,即255,才能读取系统电压,即Nodemcu的VDD引脚上的电压。

ADC 外部电压测量

要读取ADC引脚上的外部电压,必须将“ vdd33_const ”的值设置为Nodemcu VDD引脚上的电源电压映射值,Nodemcu的工作电压范围在1.8V到3.6V之间,“vdd33_const”的单元为0.1V,因此,“vdd33_const”的值范围为18到36。

NodeMCU ADC函数

analogRead(A0):该函数用于读取模块ADC引脚上的外部电压。

ESP.getVcc():该函数用于读取NodeMCU模块VCC电压。ADC引脚必须留空。

注意,在读取VCC电源电压之前,应将ADC模式改为读取系统电压。要更改ADC模式,要在代码的 #include 行之后使用ADC_MODE(mode)。mode值为:ADC_TOUT表示外部电压,值为 ADC_VCC表示系统电压。默认情况下,它读取外部电压。

Nodemcu的ADC控制实例

读取NodeMCU的ADC引脚上的模拟电压,使用电位器在ADC引脚上提供0-3.3V的可变电压。

Nodemcu的ADC控制实例
Nodemcu的ADC控制

注意:上图NodeMCU ADC输入采用了电阻分压网络从3.3V引脚连接到ADC引脚,因此可确保NodeMCU的ADC脚的输入电压在0~3.3V范围,由于ADC的分辨率为10bit,所以在ADC输入电压0-3.3V的取值范围为0-1023。

ADC读取外部电压

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.print("ADC Value: ");Serial.println(analogRead(A0));
  delay(300);
}

调整电位器,串口监视器输出如下:

nodemcu ADC读取外部电压
ADC读取外部电压

在这里,我们发现测量值与实际值略有偏差。我们得到ADC 值变化为 5-1007,最高达到2790mv,即2.8V左右,与3.3V大约存在0.5V的差异。

ADC读取内部电压

根据Nodemcu的datasheet,通过ADC测量电源电压时,必须将ESP8266的ADC引脚悬空。在上面的外部电压测量中,为了确保外部电压输入范围(0-3.3V),我们将ADC连接到电阻分压器(100K 或 220K),如下图所示。

电阻分压器
电阻分压器

现在,如果我们去掉电阻分压器,让ADC引脚(TOUT)悬空,那么我们可以得到更好的精度,如下面所示,系统电压读数接近3.3V。

ADC读取内部电压
ADC读取内部电压