PWM là gì?

Xung PWM (Pulse Width Modulation) là phương pháp điều chỉnh điện áp đầu ra, phương pháp điều chế dựa trên sự thay đổi độ rộng của chuỗi xung vuông, dẫn đến sự thay đổi điện áp ra.

Ứng dụng PWM

PWM được ứng dụng nhiều trong điều khiển. Điển hình nhất mà chúng ta thường hay gặp là điều khiển động cơ (vận tốc và góc quay động cơ)… Sử dụng PWM điều khiển độ nhanh chậm của động cơ hay cao hơn nữa, nó còn được dùng để điều khiển sự ổn định tốc độ động cơ.

Với ESP32, thông thường khi xuất tín hiệu của pin, một dạng tín hiệu bài trước chúng ta đã sử dụng là bật/tắt đèn LED. Tín hiệu sẽ xuất ra dưới dạng 3.3V. Bây giờ PWM sẽ được ứng dụng để tăng/giảm điện áp đầu ra của một chân pin. Tạo ra hiệu ứng sáng mờ cho đèn LED.

PWM cho ESP32 và ứng dụng

Như mình đã giới thiệu ở phần tổng quan, ESP32 có bộ điều khiển LED PWM với 16 kênh độc lập có thể được cấu hình để tạo tín hiệu PWM với các đặc tính khác nhau, thường được gọi là PWM mềm. Dưới đây là các bước chúng ta sẽ phải làm theo để làm sáng dần LED với PWM bằng Arduino IDE:

  1. Đầu tiên, bạn cần chọn một kênh PWM. Có 16 kênh từ 0 đến 15.
  2. Sau đó, bạn cần đặt tần số tín hiệu PWM. Đối với đèn LED, nên sử dụng với tần số là khoảng 5000Hz. Tần số: là số chu kì thực hiên được trong 1s.
  3. Bạn cũng cần đặt Phần trăm ở mức cao của 1 chu kỳ xung (duty cycle), Độ phân giải (resolution) của tín hiệu: ESP32 có độ phân giải từ 1 đến 16 bit. Chúng ta sẽ sử dụng độ phân giải 8bit, có nghĩa là kiểm soát độ sáng LED bằng cách sử dụng giá trị từ 0 đến 255.
  1. Tiếp theo, bạn cần chỉ định GPIO mà tín hiệu sẽ xuất hiện. Đối với điều đó, bạn sẽ sử dụng chức năng sau:
    ledcAttachPin(GPIO, channel)
    Bạn cần truyền vào hàm này hai đối số, đầu tiên là GPIO xuất tín hiệu và thứ hai là kênh tạo ra tín hiệu.
  2. Cuối cùng, để điều khiển độ sáng đèn LED bằng PWM, bạn sử dụng chức năng sau:
    ledcWrite(channel, dutycycle)
    Cần truyền cho hàm này kênh đang tạo tín hiệu PWM và chu kỳ xung.

Ví dụ: Bài toán điều chế độ rộng xung cho đèn LED ở chân GPIO2 sáng dần và tối dần.

Sử dụng GPIO 2 làm chân xuất tín hiệu. Chúng ta sẽ làm cho LED GPIO 2 có hiệu ứng sáng dần và tối dần. Chúng ta có thể chuẩn bị mạch như hình bên dưới hoặc có thể sử dụng LED xanh dương có sẵn trên Board ESP32.

Code với Arduino IDE

Giải thích code:

Xác định tần số 5000 Hz, chọn kênh 0 để tạo tín hiệu và đặt độ phân giải 8 bit. Bạn có thể chọn các thuộc tính khác, khác với các thuộc tính này, để tạo ra các tín hiệu PWM khác nhau.

const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;

Trong Setup() cấu hình LED với các thuộc tính đã khai báo ở trên bằng ledcSetup() và chọn chân GPIO cần xuất tín hiệu PWM.

ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(LedPwm, ledChannel);

Trong Loop(), bạn sẽ thay đổi chu kỳ từ 0 đến 255 để tăng độ sáng của đèn LED

for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--)
{
// thay đổi độ sáng đèn LED với PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}

Và sau đó, từ 255 đến 0 để giảm độ sáng.

for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--)
{
// thay đổi độ sáng đèn LED với PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}

Chúc các bạn thành công!

Trao đổi học tập

Comments