BÀI 11 : TIMER-COUNTE R
1. Giới thiệu PWM
118
- Xung là các trạng thái cao / thấp (HIGH/LOW) về mức điện áp đƣợc lặp đi lặp lại. Đại lƣợng đặc trƣng cho 1 xung PWM (Pulse Width Modulation) bao gồm tần số (frequency) và chu kì xung (duty cycle).
- Tần số là gì?
Tần số là số lần lặp lại trong 1 đơn vị thời gian. Đơn vị tần số là Hz, tức là số lần lặp lại dao động trong 1 giây.
Lấy ví dụ, 1Hz = 1 dao động trong 1 giây. 2Hz = 2 dao động trong 1 giây. 16MHz = 16 triệu dao động trong 1 giây.
- Nhƣ vậy theo quy tắc tam suất: 16 triệu dao động - 1 giây --> 1 dao động tốn 1/16.000.000 (giây) = 0,0625 (micro giây)
- Cách xác định 1 dao động nhƣ thế nào? Đa phần chúng ta mới nghiên cứu điện tử
thƣờng mắc sai lầm ở việc xác định 1 dao động. Dao động đƣợc xác định từ trạng
thái bắt đầu và kết thúc ngay trƣớc khi trạng thái bắt đầu đƣợc lặp lại.
Hình 12.1 Xung Vuông
* Cách xác định 1 dao động
Nhƣ vậy thông thƣờng, 1 dao động sẽ bao gồm 2 trạng thái điện: mức cao (x giây) và mức thấp (y giây). Tỉ lệ phần trăm thời gian giữa 2 trạng thái điện này chính là chu kì xung.
Với x/y = 0% ta có xung chứa toàn bộ điện áp thấp (khái niệm xung nên hiểu mở rộng)
Với x/y = 50% thì 50% thời gian đầu, xung có điện áp cao, 50% sau xung có điện áp thấp.
Với x/y=100% ta có xung chứa toàn bộ điện áp cao. - Tóm lại, với 1 xung ta có:
Tần số: để tính toán ra đƣợc thời gian của 1 xung
Chu kì xung: bao nhiêu thời gian xung có mức áp cao, bao nhiêu thời gian xung có mức áp thấp.
1.2.Liên hệ với Arduino:
Với kiến thức cơ bản về xung, chúng ta sẽ hiểu rõ hơn về xung trong thực tế nhƣ thế nào.
119
Hình 12.2 Đồ thị dạng xung điều chế PWM (Pulse Width Modulation)
Xung khi sử dụng với hàm analogWrite trong Arduino
Giữa 2 vạch màu xanh lá cây là 1 xung.
analogWrite tỉ lệ chu kì xung
analogWrite(0) 0/255 0%
analogWrite(64) 64/255 25%
analogWrite(127) 127/255 50%
analogWrite(191) 191/255 75%
analogWrite(255) 255/255 100%
Hàm analogWrite() trong Arduino giúp việc tạo 1 xung dễ dàng hơn. Hàm
này truyền vào tham số cho phép thay đổi chu kì xung, ta có thể tính toán ra đƣợc
chu kì xung nhƣ ở bảng trên. Tần số xung đƣợc Arduino thiết lập mặc định.
Đối với board Arduino Uno, xung trên các chân 3,9,10,11 có tần số là 490Hz, xung trên chân 5,6 có tần số 980Hz.
Làm thế nào để tạo ra các xung có tần số nhanh hơn? ta có thể tham khảo
thêm các thƣ viện riêng hỗ trợ việc này. Trong mã nguồn Arduino gốc không hỗ trợ phần này.
Lưu ý: xung điều khiển servo có tên gọi PPM (Pulse Position Modulation) khác
120
Phương pháp để chuyển đổi thông tin thành những xung để truyền dẫn - PWM (Pulse Width Modulation): Độ rộng xung tỷ lệ với biên độ tín hiệu tƣơng tự.
- PPM (Pulse Position Modulation): Vị trí xung thay đổi theo biên độ tín hiệu tƣơng tự trong một khe thời gian.
- PAM (Pulse Amplitude Modulation): Biên độ xung thay đổi theo biên độ của tín hiệu tƣơng tự.
- PCM (Pulse Code Modulation): chuyển đổi chuỗi xung điều chế biên độ thành dạng tín hiệu nhị phân. PCM là phƣơng pháp phổ biến trong hệ thống viễn thông, chủ yếu là trong mạng PSTN 2. Phần cứng - Chuẩn bị: + 1 Arduino Uno r3 + 1 Breadboard + Dây cắm breadboard
+ 1 điện trở 560 Ohm (hoặc 220 Ohm hoặc 1kOhm) + 1 đèn LED siêu sáng.
- Lắp mạch:
121
3. Lập trình và giải thích
int led = 9; // khai báo chân sử dụng int brightness = 0; // khai báo độ sáng
int fadeAmount = 5; // khai báo mức thay đổi độ sáng // sau khi cấp nguồn thì hàm setup() chạy 1 lần duy nhất: void setup() {
// khai báo chân 9 là lối ra pinMode(led, OUTPUT); }
// vòng lặp thực hiện các đoạn mã tuần tự là lặp lại: void loop() {
// đặt độ sáng ban đầu:
analogWrite(led, brightness);
// thay đổi độ sáng sau từng vòng lặp: brightness = brightness + fadeAmount;
// đảo chiều độ sáng khi hết vòng tối --> sáng và sáng --> tối if (brightness <= 0 || brightness >= 255) { fadeAmount = -fadeAmount; } //chờ 30 milliseconds để quan sát delay(30); }
Câu hỏi ôn tập
Câu 1: Thế nào là điều chế PWM ?
122