Nội Dung Bài Viết
Giới thiệu
Analog to Digital Converter (ADC) được sử dụng để chuyển đổi tín hiệu analog thành dạng số. ESP8266 có bộ ADC 10 bit sẵn có chỉ với một kênh ADC tức là nó chỉ có một đầu vào ADC để đọc điện áp analog từ thiết bị bên ngoài.
Chân ADC ESP8266 trên Kit NodeMCU
Kênh ADC trên ESP8266 được ghép với điện áp pin. Do đó, chúng ta có thể thiết lập nó để đo điện áp hệ thống trên hoặc điện áp bên ngoài. Phạm vi điện áp đầu vào cho chân ADC là 0–1.0V khi đọc điện áp bên ngoài.
Các thiết lập cho chế độ ADC tức là cho dù điện áp hệ thống hoặc điện áp bên ngoài đang được đo có sẵn trong byte 107 của “esp_init_data_default.bin” (0-127 byte) của firmware.
Byte 107 của esp_init_data_default.bin(0 – 127 byte) là “vdd33_const“. Nó phải được thiết lập 0xFF tức là 255 để đọc điện áp hệ thống tức là điện ấp trên chân VDD của ESP8266.
Và để đọc điện áp bên ngoài trên chân ADC nó phải được thiết lập để cung cấp điện áp trên chân VDD của ESP8266. Dải điện áp làm việc của ESP8266 nằm trong khoảng từ 1.8V đến 3.6V và đơn vị “vdd33_const” là 0.1V. Do đó, phạm vi giá trị của “vdd33_const” là từ 18 đến 36.
Để biết thêm thông tin về “vdd33_const”, hãy tham khảo phần ADC của ESP8266 được đính kèm ở cuối bài viết.
Lưu ý: ADC có độ phân giải 10 bit, nó sẽ cung cấp giá trị 0-1023 cho điện áp đầu vào ADC 0-3.3V trên Dev Kit.
ADC NodeMCU Function
analogRead(A0)
Function này sử dụng để đọc điện áp bên ngoài trên pin ADC của module.
ESP.getVcc()
Function này sử dụng để đọc điện áp VCC của module NodeMCU. Chân ADC phải được giữ không được kết nối.
Lưu ý rằng chế độ ADC nên được thay đổi để đọc điện áp hệ thống trước khi đọc điện áp cung cấp VCC.
Để thay đổi chế độ ADC, hãy sử dụng ADC_MODE(mode)ngay sau #include. Chế độ ADC_TOUT(cho điện áp bên ngoài), ADC_VCC(đối với điện áp hệ thống). Theo mặc định, nó đọc điện áp bên ngoài.
Ví dụ
Viết chương trình trên Arduino IDE đọc giá trị điện áp analog trên chân ADC của NodeMCU. Dùng biến trở để thay đổi giá trị điện áp 0-3.3 V trên chân ADC. Kết nối biến trở với Kit NodeMC như hình.
Chương trình Arduino đọc điện áp bên ngoài
1 2 3 4 5 6 7 8 9 10 11 | void setup() { Serial.begin(9600); } void loop() { Serial.print("ADC Value: "); Serial.println(analogRead(A0)); delay(300); } |
Kết quả đo điện áp trên màn hình Serial
Chương trình Arduino đọc điện áp hệ thống
1 2 3 4 5 6 7 8 9 10 11 12 13 | ADC_MODE(ADC_VCC); void setup() { Serial.begin(9600); } void loop() { Serial.print("System voltage(mV): "); Serial.println(ESP.getVcc()); delay(300); } |
Kết quả đo được
Từ kết quả ta thấy giá trị đo được khác với giá trị thực tế. Kết quả này lệch so với thực tế khoảng 0.5V. Vấn đề đo điện áp bên ngoài được đưa ra tại # 2672 và # 3168 trên trang ESP8266 github. Và vấn đề về đọc hệ thống điện áp được đưa ra tại # 721 trên trang ESP8266 github.
Theo datasheet của ESP8266, chân TOUT (ADC pin của ESP8266) phải lơ lửng (floating) trong khi đo điện áp cung cấp điện thông qua ADC.
Bây giờ, chúng ta loại bỏ biến trở và để chân ADC lơ lửng thì chúng ta được kết quả đo chính xác hơn như hình.
Download File
Source Code
- Arduino Sketch for ADC of NodeMCU
Attached File
- ESP8266 Datasheet
Bài viết các bạn có thể tham khảo:
- NodeMCU PWM với Arduino IDE
- NodeMCU GPIO ngắt với Arduino IDE
- NodeMCU I2C với Arduino IDE – Giao tiếp Arduino với NodeMCU thông qua I2C
Nguồn tham khảo: electronicwings.com