Hướng dẫn về ESP32 ADC | Làm thế nào để sử dụng ADC trong ESP32

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về Bộ ngoại vi ADC trong ESP32. Bộ chuyển đổi tương tự sang kỹ thuật số hoặc đơn giản là ADC od ESP32 rất hữu ích để đo điện áp tương tự từ các cảm biến khác nhau (như Cảm biến nhiệt độ LM 35), chiết áp (để điều chỉnh độ sáng của đèn LED), v.v. Tìm hiểu cách sử dụng Ngoại vi ESP32 ADC bằng cách hiểu các đặc điểm của nó , chân, chức năng và một số mạch trình diễn đôi khi bạn cần tài liệu điện tử cơ bản bạn có thể tham khảo Học điện tử cơ bản.

ESP32-ADC-LED-PWM-Control-Image-1

Đề cương

  • Lưu ý ngắn gọn về ngoại vi ESP32 ADC
  • Chân ADC của ESP32
  • Chức năng ADC
  • Đo điện áp tương tự
  • Thành phần bắt buộc
  • Sơ đồ mạch
  • LED PWM sử dụng ESP32 ADC
  • Sơ đồ mạch
  • Phần kết luận

Lưu ý ngắn gọn về ngoại vi ESP32 ADC

SoC ESP32 bao gồm hai thanh ghi xấp xỉ kế tiếp (SAR) loại Bộ chuyển đổi tương tự sang kỹ thuật số (ADC). Cùng với nhau, hai bộ SAR ADC tức là ADC1 và ADC2 trong ESP32 bao gồm 18 kênh. ADC1 bao gồm 8 kênh và ADC2 bao gồm 10 kênh.

ADC trong ESP32 có độ phân giải tối đa của ADC là 12-bit và có, độ phân giải của ADC có thể cấu hình với các giá trị có thể bao gồm 9-bit, 10-bit, 11-bit và 12-bit. Thông thường, độ phân giải được đặt thành 12-bit, nếu không thay đổi.Các ứng dùng này đều yêu cầu thiết kế nguồn ổn áp xung

Vì vậy, theo mặc định, đầu ra của ESP32 ADC sẽ là một giá trị trong phạm vi 0 và 4095 (vì độ phân giải mặc định là 12-bit, các giá trị kỹ thuật số đầu ra có thể có 2 giá trị 12 = 4096). Ngoài ra, giới hạn điện áp đầu vào của ADC là 3,3V tức là, ESP32 ADC có thể đo điện áp tương tự trong phạm vi từ 0V đến 3,3V.

Chân ADC của ESP32

Không giống như một số thiết bị ngoại vi kỹ thuật số (PWM, phần mềm SPI và I2C), các chân ADC được cố định, tức là bạn phải sử dụng các Chân GPIO được xác định trước có chức năng ADC và bạn không thể định cấu hình nó trong phần mềm. Tuy nhiên, có một số hạn chế bạn phải biết.

Mặc dù ESP32 có 18 kênh ADC, tất cả các chân ADC đều không khả dụng cho người dùng. Trong số 8 kênh ADC1, chỉ có 6 kênh khả dụng (ACD1_CH0 và ACD1_CH3 đến ACD1_CH7) trong khi ADC1_CH1 và ADC1_CH2 không có sẵn (thậm chí các chân không được tiếp xúc trong Bảng phát triển ESP32).

Đến với ADC2, nó có phần phức tạp. Khi bạn đang sử dụng Wi-Fi của ESP32, Trình điều khiển Wi-Fi sử dụng Thiết bị ngoại vi ADC2. Vì vậy, bạn chỉ có thể sử dụng ADC2 nếu trình điều khiển Wi-Fi chưa được khởi động.

Ngay cả khi bạn đang sử dụng ADC2 (giả sử không sử dụng Wi-Fi), tất cả các chân đều không có sẵn vì một số chân liên kết với ADC2 được sử dụng cho mục đích quan trọng khác (Boot Strapping).

Bảng sau đây cho thấy Kênh ADC, tên kiểu Arduino (A0, A1, v.v.), Ghim GPIO và bất kỳ điểm quan trọng nào cần nhớ.

Kênh ADC

Tên ghimPin GPIO

Ghi chú

ACD1_CH0

A0GPIO 36Miễn phí sử dụng / Pin cảm biến HallACD1_CH1 GPIO 37

Không có sẵn

ACD1_CH2

GPIO 38Không có sẵnACD1_CH3A3GPIO 39

Miễn phí sử dụng / Pin cảm biến Hall

ACD1_CH4

A4GPIO 32Sử dụng miễn phíACD1_CH5A5GPIO 33

Sử dụng miễn phí

ACD1_CH6

A6GPIO 34Sử dụng miễn phíACD1_CH7A7GPIO 35

Sử dụng miễn phí

ACD2_CH0

A10GPIO 4 ACD2_CH1A11GPIO 0

Được sử dụng làm Pin BOOT / Không khả dụng

ACD2_CH2

A12GPIO 2Được sử dụng làm chốt đóng đai BOOTACD2_CH3A13GPIO 15

Được sử dụng làm chốt đóng đai BOOT

ACD2_CH4

A14GPIO 13 ACD2_CH5A15GPIO 12

ACD2_CH6

A16GPIO 14 ACD2_CH7A17

GPIO 27

ACD2_CH8

A18GPIO 25 ACD2_CH9A19GPIO 26

Bằng cách xem xét tất cả các thông tin được đề cập ở trên, có thể đặt cược an toàn rằng 6 chân ADC1 có sẵn (ACD1_CH0 và ACD1_CH3 đến ACD1_CH7) có thể được sử dụng mà không có bất kỳ sự mơ hồ nào nguồn xung flyback

ADC1_CH0 và ADC1_CH3 cũng được kết hợp với Cảm biến hiệu ứng Hall.

Các Ban phát triển ESP32 khác có thể có những hạn chế riêng. Vì vậy, hãy chắc chắn kiểm tra biểu dữ liệu và sơ đồ và kiểm tra xem một chân ADC cụ thể có được sử dụng miễn phí hay không.

Chức năng ADC

Có chín chức năng được trình điều khiển ADC hiển thị. Họ đang:

  • analogRead (pin): Nhận Giá trị ADC cho chân được chỉ định.
  • analogReadResolution (bit): Đặt độ phân giải đầu ra của analogRead. Mặc định là 12-bit nhưng các giá trị có thể là 9 đến 12.
  • analogSetWidth (bits): Đặt các bit mẫu và độ phân giải đọc. Mặc định là 12-bit nhưng phạm vi là 9 đến 12.
  • analogSetClockDiv (clockDiv): Đặt vạch chia cho đồng hồ ADC.
  • analogSetAttenuation (suy giảm): Đặt mức suy giảm cho tất cả các kênh. Mặc định là 11db nhưng các giá trị có thể là 0db, 2_5db, 6db và 11db.
  • analogSetPinAttenuation (pin, suy hao): Đặt mức suy giảm cho một chân cụ thể.
  • adcAttachPin (pin): Gắn pin vào ADC (thực hiện tự động trong analogRead).
  • analogSetVRefPin (pin): Đặt chân để sử dụng cho hiệu chuẩn ADC nếu ESP32 chưa được hiệu chuẩn. Các chân có thể là 25, 26 hoặc 27.
  • analogReadMilliVolts (pin): Nhận giá trị milivôn cho pin.

Đo điện áp tương tự

Với lý thuyết, thông tin chân và các chức năng thư viện đã trình bày, bây giờ chúng ta có thể bắt đầu phát triển các mạch để thực sự sử dụng ADC ngoại vi của ESP32. Đối với dự án đầu tiên, chúng ta hãy xem cách định cấu hình kênh ADC của ESP32 và đo điện áp tương tự được áp dụng cho một trong các Chân ADC.

Cách đơn giản nhất để cung cấp điện áp tương tự có thể thay đổi là với sự trợ giúp của một chiết áp. Kết nối các đầu của POT với 3.3V và GND của Bảng phát triển ESP32 và kết nối Wiper với bất kỳ Chân ADC nào. Để đơn giản hóa mọi thứ, tôi đã sử dụng ADC1_CH0 tức là GPIO 36 (A0) làm Chân ADC.

Thành phần bắt buộc

  • Ban phát triển ESP32 DevKit
  • Chiết áp 10 KΩ
  • Breadboard
  • Kết nối dây
  • LED 5mm
  • Điện trở 220Ω

Sơ đồ mạch

Hình ảnh sau đây cho thấy sơ đồ mạch đo điện áp tương tự sử dụng ADC của ESP32.

ESP32-ADC-Đo-Tương tự-Điện áp-Mạch

Mã rất dễ hiểu nếu bạn đã từng làm việc với ADC của Arduino hoặc ESP8266. Đọc giá trị ADC của Chân ADC (trong trường hợp này là A0) bằng chức năng 'analogRead', chuyển đổi giá trị kỹ thuật số thành điện áp bằng một phép tính nhỏ và hiển thị kết quả trên Serial Monitor.

# xác định  ADCPIN A0   int adcValue; float voltValue; void  setup () {   Nối tiếp. bắt đầu ( 115200 ); } void  loop () {  adcValue = analogRead (ADCPIN);  voltValue = ((adcValue * 3,3 ) / 4095 );  Nối tiếp. print ( " Giá trị ADC = " );  Nối tiếp. in (adcValue); // delay (1000);  Nối tiếp. print ( "  " );  Nối tiếp. print ( " Điện áp = " );  Nối tiếp. in (voltValue);  Nối tiếp. println ( " V " ); chậm trễ ( 1000 ); }

xem thôESP32-ADC-Analog-Voltage.ino được lưu trữ

❤

bởi GitHub

ESP32-ADC-Đo-Tương tự-Điện áp-Hình ảnh-1

Đầu ra của Serial Monitor trông giống như sau:

ESP32-ADC-Đo-Tương tự-Điện áp-Nối tiếp

LED PWM sử dụng ESP32 ADC

Tôi đã thực hiện một hướng dẫn chuyên dụng về hoạt động của LEDC PWM trong ESP32 . Đọc hướng dẫn đó để hiểu sâu hơn về PWM trong ESP32. Chúng ta có thể đặt chu kỳ nhiệm vụ của đầu ra PWM của ESP32 bằng cách sử dụng ADC.

Chân ADC giống như trước đó tức là A0 (ADC1_CH0 - GPIO 36) và Chân PWM là GPIO 16. Tôi đã kết nối một đèn LED màu đỏ 5mm với chân này bằng cách sử dụng một điện trở giới hạn dòng điện 220Ω.

Sơ đồ mạch

Hình ảnh sau đây cho thấy sơ đồ mạch để cấu hình thủ công chu kỳ nhiệm vụ của PWM bằng cách sử dụng ADC của ESP32 và do đó điều chỉnh độ sáng của đèn LED.

ESP32-ADC-LED-PWM-Điều khiển-Mạch

# xác định  ADCPIN A0 const  int LEDPin = 16 ; / * GPIO16 * /   uint16_t dutyCycle;   const  int PWMFreq = 5000 ; const  int PWMChannel = 0 ; const  int PWMResolution = 12 ; const  int MAX_DUTY_CYCLE = ( int ) (pow ( 2 , PWMResolution) - 1 );   // const int ADC_RESOLUTION = 4095;     void  setup () {  / * Khởi tạo các kênh PWM với tần số và độ phân giải * / ledcSetup (PWMChannel, PWMFreq, PWMResolution);   / * Gắn Kênh PWM LED vào Chân GPIO * / ledcAttachPin (LEDPin, PWMChannel);     } void  loop () { / * Đọc đầu vào tương tự từ ba đầu vào ADC * /  dutyCycle = analogRead (ADCPIN); / * Ánh xạ đầu ra ADC đến vòng quay nhiệm vụ tối đa có thể * / // redDutyCycle = map (redDutyCycle, 0, ADC_RESOLUTION, 0, RED_MAX_DUTY_CYCLE);   / * Đặt Ngõ ra PWM của Kênh với vòng xoay mong muốn * / ledcWrite (PWMChannel, dutyCycle);   chậm trễ ( 10 ); }

xem thôESP32-ADC-LED-PWM-Control.ino được lưu trữ

❤

bởi GitHub

ESP32-ADC-LED-PWM-Control-Image-2

Phần kết luận

Hướng dẫn đầy đủ về cách sử dụng Mô-đun ADC trong ESP32. Bạn đã tìm hiểu về Thiết bị ngoại vi ADC ESP32, các chân kết hợp của nó, các chân ADC nào an toàn khi sử dụng, cách đo điện áp tương tự bằng ADC trong ESP32 và cũng như cách điều chỉnh thủ công độ sáng của đèn LED bằng ADC và PWM trong ESP32.