ESP32 ADC - Đọc giá trị tương tự với Arduino IDE

Esp32 Adc Doc Gia Tri Tuong Tu Voi Arduino Ide



ADC (bộ chuyển đổi tương tự sang kỹ thuật số) là một mạch điện tử đi kèm với các bo mạch vi điều khiển khác nhau hoặc được tích hợp bên trong vi điều khiển. ADC được sử dụng để chuyển đổi điện áp tương tự từ các cảm biến khác nhau sang dạng kỹ thuật số. Giống như Arduino, ESP32 cũng có một ADC có thể đọc dữ liệu tương tự. Hãy cùng tìm hiểu thêm về ESP32 ADC.

Giới thiệu ESP32 ADC

Bo mạch ESP32 có hai bộ ADC 12 bit tích hợp còn được gọi là bộ ADC SAR (Thanh ghi xấp xỉ kế tiếp). Các ADC của bo mạch ESP32 hỗ trợ 18 kênh đầu vào tương tự khác nhau, có nghĩa là chúng ta có thể kết nối 18 cảm biến tương tự khác nhau để lấy đầu vào từ chúng.

Nhưng đây không phải là trường hợp ở đây; các kênh tương tự này được chia thành hai loại kênh 1 và kênh 2, cả hai kênh này đều có một số chân không phải lúc nào cũng có sẵn cho đầu vào ADC. Hãy xem những chân ADC đó cùng với những chân khác là gì.







Chân ADC ESP32

Như đã đề cập trước đó, board ESP32 có 18 kênh ADC. Trong số 18, chỉ có 15 người có sẵn trong bảng DEVKIT V1 DOIT có tổng cộng 30 GPIO.



Nhìn vào bảng của bạn và xác định các chân ADC như chúng tôi đã đánh dấu chúng trong hình ảnh bên dưới:







Kênh 1 chân ADC

Sau đây là bản đồ chân đã cho của bảng ESP32 DEVKIT DOIT. ADC1 trong ESP32 có 8 kênh tuy nhiên bo mạch DOIT DEVKIT chỉ hỗ trợ 6 kênh. Nhưng tôi đảm bảo những điều này vẫn là quá đủ.

ADC1 Mã PIN GPIO ESP32
CH0 36
CH1 NA trong 30 Pin Phiên bản ESP32 (Devkit PHẢI)
CH2 CÁI ĐÓ
CH3 39
CH4 32
CH5 33
CH6 3. 4
CH7 35

Hình ảnh sau đây hiển thị các kênh ESP32 ADC1:



Kênh 2 chân ADC

Bảng DEVKIT DOIT có 10 kênh tương tự trong ADC2. Mặc dù ADC2 có 10 kênh tương tự để đọc dữ liệu tương tự, nhưng không phải lúc nào các kênh này cũng có sẵn để sử dụng. ADC2 được chia sẻ với các trình điều khiển WiFi trên bo mạch, có nghĩa là tại thời điểm bo mạch đang sử dụng WIFI, ADC2 này sẽ không khả dụng. Giải pháp cho vấn đề này là chỉ sử dụng ADC2 khi trình điều khiển Wi-Fi tắt.

Hình ảnh dưới đây cho thấy ánh xạ chân của kênh ADC2.

Cách sử dụng ESP32 ADC

ESP32 ADC hoạt động theo cách tương tự như Arduino chỉ khác ở đây là nó có ADC 12 bit. Vì vậy, bảng ESP32 lập bản đồ các giá trị điện áp tương tự từ 0 đến 4095 ở các giá trị kỹ thuật số rời rạc.

  • Nếu điện áp cấp cho ESP32 ADC bằng không, một kênh ADC thì giá trị kỹ thuật số sẽ bằng không.
  • Nếu điện áp cấp cho ADC là tối đa có nghĩa là 3,3V, giá trị kỹ thuật số đầu ra sẽ bằng 4095.
  • Để đo điện áp cao hơn, chúng ta có thể sử dụng phương pháp chia điện áp.

Ghi chú: ESP32 ADC theo mặc định được đặt ở 12 bit, tuy nhiên, có thể định cấu hình nó thành 0 bit, 10 bit và 11 bit. ADC mặc định 12 bit có thể đo giá trị 2 ^ 12 = 4096 và điện áp tương tự nằm trong khoảng từ 0V đến 3,3V.

Giới hạn ADC trên ESP32

Dưới đây là một số hạn chế của ESP32 ADC:

  • ESP32 ADC không thể đo trực tiếp điện áp lớn hơn 3,3V.
  • Khi trình điều khiển Wi-Fi được bật, ADC2 không thể được sử dụng. Chỉ có thể sử dụng 8 kênh ADC1.
  • ESP32 ADC không phải là rất tuyến tính; nó cho thấy phi tuyến tính hành vi và không thể phân biệt giữa 3.2V và 3.3V. Tuy nhiên, có thể hiệu chỉnh ESP32 ADC. Nơi đây là bài viết hướng dẫn bạn hiệu chỉnh hành vi phi tuyến tính của ESP32 ADC.

Hành vi phi tuyến tính của ESP32 có thể được nhìn thấy trên màn hình nối tiếp của Arduino IDE.

Lập trình ESP32 ADC bằng Arduino IDE

Cách tốt nhất để hiểu hoạt động của ESP32 ADC là sử dụng một chiết áp và đọc các giá trị so với điện trở bằng 0 đến mức tối đa. Sau đây là hình ảnh mạch đã cho của ESP32 với chiết áp.

Kết nối chân giữa của chiết áp với chân số 25 của ESP32 và 2 chân đầu cuối tương ứng với chân 3.3V và GND.

Phần cứng

Hình ảnh sau đây hiển thị phần cứng của ESP32 với chiết áp. Sau đây là danh sách các thành phần cần thiết:

  • Bảng ESP32 DEVKIT DOIT
  • Chiết áp
  • Breadboard
  • Dây nhảy

Mã số

Mở Arduino IDE và tải lên đoạn mã dưới đây trong bảng ESP32. Để kiểm tra cách cài đặt và cấu hình ESP32 với Arduino IDE, hãy nhấp vào nơi đây .

hăng sô int Pin_Potentiometer = 25 ; / * Chiết áp được kết nối tại GPIO 25 (Analog ADC2_CH8) * /
int Val_Potentiometer = 0 ; / * Giá trị đọc của chiết áp sẽ được lưu ở đây * /
vô hiệu thành lập ( ) {
Nối tiếp. bắt đầu ( 115200 ) ; / * Giao tiếp nối tiếp bắt đầu * /
}
vô hiệu vòng ( ) {
Val_Potentiometer = analogRead ( Pin_Potentiometer ) ; / * Đọc giá trị chiết áp * /
Nối tiếp. println ( Val_Potentiometer ) ; / * In giá trị chiết áp * /
sự chậm trễ ( 2000 ) ; / * độ trễ 2 giây * /
}

Ở đây trong đoạn mã trên, chúng tôi khởi tạo chân kỹ thuật số 25 cho chiết áp trên bo mạch ESP32. Tiếp theo để lấy đầu vào, một biến Val_Potentiometer được khởi tạo. Giao tiếp nối tiếp tiếp theo được bắt đầu bằng cách xác định tốc độ truyền.

bên trong vòng một phần mã sử dụng hàm analogRead () Các giá trị ADC sẽ được đọc trên chân 25 của ESP32. Tiếp theo, sử dụng Serial.print () tất cả các giá trị được in trên màn hình nối tiếp.

Đầu ra

Đầu ra hiển thị các giá trị tương tự được ánh xạ với các giá trị rời rạc kỹ thuật số. Khi điện áp đọc tối đa là 3,3V đầu ra kỹ thuật số bằng 4095 và khi điện áp đọc là 0V, đầu ra kỹ thuật số trở thành 0.

Sự kết luận

Bộ chuyển đổi tương tự sang kỹ thuật số được sử dụng ở khắp mọi nơi, đặc biệt là khi chúng ta phải giao tiếp các bảng vi điều khiển với cảm biến và phần cứng tương tự. ESP32 có hai kênh cho ADC là ADC1 và ADC2. Hai kênh này kết hợp để cung cấp 18 chân cho các cảm biến tương tự giao tiếp. Tuy nhiên, 3 trong số chúng không có trên phiên bản ESP32 30 pin. Để xem thêm về cách đọc các giá trị tương tự, hãy đọc bài viết.