Điều chế độ rộng xung (PWM) là một kỹ thuật làm thay đổi độ rộng của xung trong khi vẫn giữ tần số sóng không đổi. Kỹ thuật PWM chủ yếu được sử dụng để điều khiển độ sáng của đèn LED, tốc độ của động cơ DC, điều khiển động cơ servo hoặc trong các trường hợp khác, khi phải tạo ra tín hiệu tương tự bằng cách sử dụng nguồn kỹ thuật số. Chúng tôi đã giải thích chi tiết về PWM trong bài viết trước.
Trong hướng dẫn này, chúng ta sẽ nói về các chân PWM (điều chế độ rộng xung) của bảng phát triển ESP32. Tất cả các chân GPIO của bảng phát triển ESP32 (Ngoại trừ Power, GND, Tx, Rx và EN) đều có thể được sử dụng để lấy tín hiệu PWM. Như ví dụ về ESP32 PWM, chúng tôi sẽ xây dựng một mạch đơn giản để thay đổi độ sáng của đèn LED theo tín hiệu PWM.
Thành phần bắt buộc
- ESP32
- Đèn LED
- Điện trở 330 Ω
- Nồi 10k
- Breadboard
Thế hệ PWM
Trước khi giải thích thế hệ PWM trên ESP32, chúng ta hãy thảo luận một số thuật ngữ liên quan đến PWM.
TON (On Time): Khoảng thời gian khi tín hiệu ở mức cao.
TOFF (Off Time): Khoảng thời gian tín hiệu ở mức thấp.
Thời gian: Là tổng thời gian bật và tắt của tín hiệu PWM.
TotalPeriod = T BẬT + T TẮT
Chu kỳ nhiệm vụ: Phần trăm thời gian khi tín hiệu ở mức cao trong khoảng thời gian của tín hiệu PWM.
Chu kỳ làm việc = T ON / T Tổng * 100
Ví dụ, nếu một xung có tổng chu kỳ là 10ms vẫn BẬT (cao) trong 5ms. Sau đó, chu kỳ nhiệm vụ sẽ là:
Chu kỳ nhiệm vụ = 5/10 * 100 = 50% chu kỳ nhiệm vụ
Mạch chứa một đèn LED, một điện trở và một chiết áp 10K. Chân âm của LED được kết nối với GND của ESP32 thông qua một điện trở 330 Ω. Bạn có thể sử dụng bất kỳ giá trị điện trở nào từ 230 Ω đến 500 Ω. Kết nối chân dương LED với GPIO 16 và chân tín hiệu của Pot với chân ADC1 (VP) của ESP32.
Giải thích mã cho ESP32 PWM
Mã hoàn chỉnh được đưa ra ở cuối trang.
Mã này không yêu cầu bất kỳ thư viện nào, vì vậy hãy bắt đầu mã của bạn bằng cách xác định mã pin, đèn LED được gắn vào. Trong trường hợp của tôi, tôi đã sử dụng GPIO 16 để kết nối đèn LED.
const int ledPin = 16; // 16 tương ứng với GPIO16
Sau đó, thiết lập các thuộc tính tín hiệu PWM trong các dòng tiếp theo. Tôi đặt tần số PWM thành 9000 và độ phân giải thành 10, bạn có thể thay đổi tần số đó để tạo ra các tín hiệu PWM khác nhau. Bo mạch ESP32 hỗ trợ độ phân giải PWM từ 1 bit đến 16 bit. Bạn cũng cần chọn một kênh PWM. ESP32 có tổng cộng 16 (0 đến 15) kênh PWM.
const int freq = 9000; const int ledChannel = 0; độ phân giải const int = 10;
Bây giờ bên trong hàm void setup () , hãy cấu hình LED PWM với các thuộc tính bạn đã đặt trước đó bằng cách sử dụng hàm ledcSetup () . Trong dòng tiếp theo, xác định chân GPIO nơi đèn LED được kết nối. Hàm ledcAttachPin () được sử dụng để xác định chân GPIO và kênh đang tạo tín hiệu. Trong trường hợp của tôi, tôi đã sử dụng ledPin là GPIO 16 và ledChannel tương ứng với kênh 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, freq, độ phân giải); ledcAttachPin (ledPin, ledChannel); }
Trong vòng lặp void, đọc chân Analog nơi Pot được kết nối và lưu trữ số đọc trong một biến gọi là 'dutyCycle' . Độ sáng của đèn LED sẽ tăng hoặc giảm theo vòng quay của chiết áp. Các ledcWrite () rất giống với analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); chậm trễ (15); }
Kiểm tra tín hiệu PWM ESP32
Để kiểm tra tín hiệu PWM của ESP32, hãy kết nối đèn LED và chiết áp theo sơ đồ mạch và tải mã lên ESP32 của bạn. Đảm bảo rằng bạn đã chọn đúng bo mạch và cổng COM. Bây giờ xoay chiết áp để tăng hoặc giảm độ sáng của đèn LED.
Hoàn thành công việc được hiển thị trong video dưới đây. Ngoài ra, hãy kiểm tra các dự án dựa trên ESP32 khác bằng cách nhấp vào liên kết.