Trong bài viết này, bạn sẽ tìm hiểu về PWM là gì và làm thế nào bạn có thể nhận được ngõ ra PWM từ các chân số của Arduino. Để thấy được ứng dụng của PWM, đầu tiên chúng ta sẽ điều khiển độ sáng của một đèn LED thông qua chương trình và sau đó chúng ta sẽ điều khiển bằng tay bằng cách thêm biến trở.
PWM là gì?
PWM là viết tắt của Pulse Width Modulation (Điều chế độ rộng xung) và nó là một kỹ thuật phổ biến được sử dụng để thay đổi độ rộng của các xung trong một chuỗi xung. PWM có nhiều ứng dụng như điều khiển độ sáng của đèn LED, điều khiển tốc độ của động cơ DC, điều khiển động cơ servo hoặc nơi bạn phải lấy ngõ ra analog bằng các thiết bị kỹ thuật số.
Các chân số của Arduino cung cấp cho chúng ta 5V (khi ở mức CAO) hoặc 0V (khi ở mức THẤP) và ngõ ra là một tín hiệu sóng vuông. Vì vậy, nếu chúng ta muốn làm mờ đèn LED, chúng ta không thể lấy điện áp trong khoảng từ 0 đến 5V từ chân số này nhưng chúng ta có thể thay đổi thời gian ON và OFF của tín hiệu. Nếu chúng ta thay đổi thời gian ON và OFF đủ nhanh thì độ sáng của đèn LED sẽ bị thay đổi.
Trước khi tiếp tục những nội dung khác, chúng ta hãy cùng thảo luận về một số thuật ngữ liên quan đến PWM.
Điều chế độ rộng xung về cơ bản là một sóng vuông với thời gian cao và thấp khác nhau. Một tín hiệu PWM cơ bản được hiển thị trong hình dưới đây.
Có một số thuật ngữ liên quan đến PWM mà chúng ta cần phải biết, đó là:
Ton (On-Time): Khoảng thời gian khi tín hiệu ở mức CAO (5V).
Toff (Off Time): Khoảng thời gian khi tín hiệu ở mức THẤP (0V).
Chu kỳ (Period):
Như trong hình trên, Ton biểu thị thời gian ON (thời gian ở mức CAO) và Toff biểu thị thời gian OFF (thời gian ở mức THẤP) của tín hiệu. Chu kỳ là tổng của cả thời gian ON và OFF và được tính theo công thức như sau
Ttotal = Ton + Toff
Chu kỳ làm việc (Duty Cycle):
Chu kỳ làm việc được tính là thời gian ON trong một chu kỳ của tín hiệu. Sử dụng công thức tính chu kỳ ở trên, chu kỳ làm việc được tính như sau
D = (Ton /Ton + Toff) = Ton/Ttotal
Vì vậy, ở chu kỳ làm việc 50% và tần số 1Hz, đèn LED sẽ sáng trong nửa giây và sẽ tắt trong nửa giây còn lại. Nếu chúng ta tăng tần số lên 50Hz (50 lần ON và OFF mỗi giây), thì đèn LED sẽ được nhìn thấy phát sáng ở một nửa độ sáng bằng mắt người.
Biểu đồ sau đây cho thấy sự so sánh của các chu kỳ làm việc khác nhau và mức điện áp tương ứng của chúng.
Từ biểu đồ, rõ ràng là khi tăng chu kỳ làm việc, điện áp ngõ ra (hoặc công suất được cung cấp) cũng tăng lên. Đối với chu kỳ làm việc 100%, điện áp tương ứng là 5V và đối với chu kỳ làm việc 50%, điện áp là 2,5V, v.v…
Arduino và PWM
Arduino IDE có một hàm được tích hợp sẵn “analogWrite()”, có thể được sử dụng để tạo ra một tín hiệu PWM. Nó có thể được sử dụng để điều khiển độ sáng của đèn LED hoặc điều khiển động cơ ở nhiều tốc độ khác nhau. Sau lệnh gọi hàm analogWrite (), chân này sẽ tạo ra một sóng vuông ổn định với chu kỳ làm việc xác định cho đến khi lệnh tiếp theo analogWrite () hoặc digitalRead () hoặc digitalWrite () trên cùng một chân.
Trên Arduino UNO, các chân PWM là 3, 5, 6, 9, 10 và 11. Tần số của tín hiệu PWM trên các chân 5 và 6 sẽ là khoảng 980Hz và trên các chân khác sẽ là 490Hz. Các chân PWM được dán nhãn với dấu ~.
analogWrite(0) có nghĩa là tín hiệu có chu kỳ làm việc 0%.
analogWrite(127) có nghĩa là tín hiệu có chu kỳ làm việc 50%.
analogWrite(255) có nghĩa là tín hiệu có chu kỳ làm việc 100%.
Linh kiện yêu cầu
Bây giờ, chúng ta cần xây dựng một mạch nhỏ để tìm hiểu ứng dụng của điều chế độ rộng xung PWM. Các linh kiện cần thiết cho mạch này được liệt kê dưới đây.
- Arduino UNO
- LED
- Điện trở 220Ω
- Biến trở 10kΩ
- Breadboard
- Dây cắm Breadboard
Điều khiển độ sáng của đèn LED thông qua chương trình
Đầu tiên, thực hiện các kết nối như hình dưới đây.
Kết nối chân anode của đèn LED với chân số 6 của Arduino. Sau đó kết nối điện trở 220Ω với chân cathode của LED và kết nối đầu kia của điện trở với chân nối đất của Arduino.
Bây giờ, chúng ta sẽ viết một đoạn chương trình để thay đổi độ sáng của đèn LED bằng cách sử dụng PWM.
Chương trình Arduino
Nạp chương trình này vào Arduino bằng phần mềm Arduino IDE và đèn LED sẽ bắt đầu mờ dần.
int led_pin = 6; //LED được kết nối với chân số 6 của Arduino
void setup() {
pinMode(led_pin, OUTPUT); //Khai báo chân nối LED là chân ngõ ra
}
void loop() {
//Làm mờ dần LED
for (int i = 0; i < 255; i++) {
analogWrite(led_pin, i);
delay(5);
}
for (int i = 255; i > 0; i–) {
analogWrite(led_pin, i);
delay(5);
}
}
Chương trình Arduino để điều khiển độ sáng của đèn LED bằng biến trở
Trong mạch ở trên, thêm biến trở 10kΩ và kết nối hai đầu biến trở với 5V và GND của Arduino và sau đó kết nối chân giữa của biến trở với chân A0 của Arduino.
Chương trình Arduino
Nạp chương trình này vào Arduino bằng phần mềm Arduino IDE và xoay biến trở, độ sáng của đèn LED sẽ thay đổi.
int led_pin = 6; //LED được nối với chân số 6 của Arduino
int pot_pin = A0; //Chân giữa của biến trở được kết nối với chân tương tự A0 của Arduino
int output;
int led_value;
void setup() {
pinMode(led_pin, OUTPUT);
}
void loop() {
//Đọc giá trị từ biến trở
output = analogRead(pot_pin);
//Ánh xạ các giá trị từ 0 đến 255 vì chúng ta có thể đưa ra ngõ ra
//giá trị từ 0 -255 bằng cách sử dụng hàm analogwrite
led_value = map(output, 0, 1023, 0, 255);
analogWrite(led_pin, led_value);
delay(1);
}