Xung PWM

Kiến thức cơ bản

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 các bạn 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.

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ó:

  1. Tần số: để tính toán ra được thời gian của 1 xung
  2. 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.

Liên hệ với Arduino

Với kiến thức cơ bản về xung, các bạn sẽ hiểu rõ hơn về xung trong thực tế như thế nào.

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, bạn 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? Bạn 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 với xung PWM.

Reference Tags: 
lên
57 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

"Dấu hiệu nhận biết" của Cộng đồng Arduino Việt Nam - Gây quỹ cộng đồng

Cũng đã hơn 1 năm kể từ ngày Cộng đồng Arduino Việt Nam của chúng ta ra đời, và đây cũng là lúc tri ân đến các thành viên tích cực trong cộng đồng và cũng là lúc đẩy Cộng đồng Arduino Việt Nam lên một bước phát triển mới.

lên
18 thành viên đã đánh giá bài viết này hữu ích.

detachInterrupt()

Hàm detachInterrupt() sẽ tắt các ngắt đã được kích hoạt tương ứng với thông số truyển vào. Giả sử sau khi nhấn nút bấm lần đầu tiên đèn led sẽ tắt nhưng nhấn lần thứ 2 đèn sẽ không tắt nữa. Lúc này cần dùng đến detachInterrupt() để tắt ngắt chúng ta đã tạo ra.

lên
8 thành viên đã đánh giá bài viết này hữu ích.