2022年8月23日 星期二

NodeMCU ADC 與 Arduino IDE

 

介紹

模數轉換器 (ADC) 用於將模擬信號轉換為數字形式。ESP8266 有一個內置的 10 位 ADC,只有一個 ADC 通道,即它只有一個 ADC 輸入引腳來從外部設備讀取模擬電壓。

NodeMCU 套件上的 ESP8266 ADC 引腳

NodeMCU ADC 引腳

NodeMCU ADC 引腳

ESP8266 上的 ADC 通道與電池電壓復用。因此,我們可以將其設置為測量板載系統電壓或外部電壓。讀取外部電壓時,ADC 引腳的輸入電壓範圍為 0–1.0V。

ADC 模式的設置,即測量系統電壓還是外部電壓,在固件的“esp_init_data_default.bin”(0-127 字節)的第 107 字節中可用。

(0 - 127 字節)的第 107 個esp_init_data_default.bin字節是“vdd33_const”。它必須設置為 0xFF 即 255 才能讀取系統電壓,即 ESP8266 的 VDD 引腳上的電壓。

並且要讀取 ADC 引腳上的外部電壓,必須將其設置為 ESP8266 的 VDD 引腳上的電源電壓。ESP8266 的工作電源電壓範圍在 1.8V 到 3.6V 之間,“vdd33_const”的單位是 0.1V,因此“vdd33_const”的取值範圍是 18 到 36。

有關“vdd33_const”的更多信息,請參閱本文檔末尾隨附的 ESP8266 數據表的 ADC 部分。

請注意,下圖所示的 NodeMCU 開發套件有一個板載寄存器分壓器網絡,可從 3.3V 向 ESP8266 的 ADC 引腳提供 1.0V 電壓。因此,我們可以為以下 NodeMCU 開發套件使用 0–3.3V 範圍的 ADC 輸入電壓。由於 ADC 具有 10 位分辨率,因此開發套件上的 ADC 輸入電壓 0-3.3V 將為 0-1023 值範圍。

 

NodeMCU ADC 功能

analogRead(A0)

該函數用於讀取施加在模塊 ADC 引腳上的外部電壓。

ESP.getVcc()

該函數用於讀取 NodeMCU 模塊 VCC 電壓。ADC 引腳必須保持懸空。

請注意,在讀取 VCC 電源電壓之前,應將 ADC 模式更改為讀取系統電壓。

要更改 ADC 模式ADC_MODE(mode),請在草圖的 #include 行之後使用。

模式是ADC_TOUT(對於外部電壓),ADC_VCC(對於系統電壓)。默認情況下,它讀取外部電壓。

例子

讓我們寫一個 Arduino 草圖來讀取 NodeMCU ADC 引腳上的模擬電壓。在這裡,我們使用電位器在開發套件的 ADC 引腳上提供 0-3.3V 的可變電壓。如下圖所示連接鍋。

NodeMCU ADC

 

用於讀取外部電壓的 Arduino Sketch

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

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

輸出窗口

下圖顯示了 Arduino IDE 串行監視器上的輸出

Arduino 輸出窗口

 

用於讀取系統電壓的 Arduino Sketch

ADC_MODE(ADC_VCC);

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

void loop() {
  Serial.print("System voltage(mV): ");Serial.println(ESP.getVcc());
  delay(300);
}

 

輸出窗口

下圖顯示了 Arduino IDE 的串口監視器輸出

Arduino輸出窗口

 

在這裡我們發現測量的值與實際值略有偏差。對於外部電壓,我們得到 0-3.3V 的 5-1007 ADC 值變化,應用於開發套件上的 ADC 引腳。對於系統電壓(模塊上的電壓),我們得到高達 2790 mV,即大約 2.8V。這顯示出與實際(即 3.3V)相比大約 0.5V 的差異。

ESP8266 Github 頁面上的#2672#3168給出了外部電壓測量的問題。關於系統電壓讀數的問題在 ESP8266 Github 頁面的#721中給出。

根據 ESP8266 的數據表,通過 ADC 測量電源電壓時,TOUT(ESP8266 的 ADC 引腳)引腳必須懸空(懸空)。但是在 NodeMCU 開發套件/模塊上,它連接到電阻分壓器網絡(100Kohm 和 220Kohm),以支持外部電壓範圍(0-3.3V),如下圖所示。

分機。 NodeMCU ESP8266 上的分壓器網絡

 

現在,如果我們移除 n/w 電阻分壓器,並使 ADC 引腳 (TOUT) 懸空,那麼我們可以獲得更好的結果精度,如下面的系統電壓讀數輸出窗口圖像所示,接近 3.3V。

Arduino 輸出窗口

 


資料來源:https://www.electronicwings.com/nodemcu/nodemcu-adc-with-arduino-ide

沒有留言: