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.
Đề cương
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.
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.
Có chín chức năng được trình điều khiển ADC hiển thị. Họ đang:
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.
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.
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
Đầu ra của Serial Monitor trông giống như sau:
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Ω.
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.
# 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
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.