Search…

Điều Chế Độ Rộng Xung - Pulse-Width Modulation

25/07/20204 min read
Giới thiệu và sử dụng kỹ thuật điều chế độ rộng xung (Pulse-Width Modulation - PWM) thông qua ví dụ lập trình với Arduino.

Trong điện tử, kỹ thuật điều chế độ rộng xung (Pulse-Width Modulation - PWM) là một kỹ thuật sử dụng sự hỗ trợ của phần cứng thiết bị để thông qua đó xuất ra xung điện với một biên độ xác định. Kỹ thuật này thường được dùng để điều khiển các thành phần cơ khí như động cơ, servo, ...

Giả sử muốn động cơ chạy nhanh thì băm xung với biên độ nhỏ, để động cơ chạy chậm thì băm xung với biên độ cao.

Bài viết này sẽ hướng dẫn bạn đọc sử dụng Arduino Uno R3 để thực hiện kỹ thuật này.

Điều chế độ rộng xung

Cơ sở lý thuyết

Đặt trường hợp cần đèn LED sáng với nhiều mức độ khác nhau, giải pháp đầu tiên có thể kể đến là thay vì sử dụng tín hiệu số (digital) để điều khiển LED thì sử dụng tín hiệu tương tự (analog). Khi đó, hiệu điện thế sẽ được tinh chỉnh theo thời gian, và đèn LED sẽ sáng theo yêu cầu - tìm hiểu thêm về Tín Hiệu Số Và Tương Tự - Analog/Digital.

Với Arduino việc tăng / hạ áp tại một pin bất kì không phải là một việc đơn giản. Đơn cử như muốn đưa điện áp từ một hiệu điện thế bất kì về 5V phải sử dụng IC giảm áp, ví dụ như LM25695. Vì vậy, kỹ thuật điều chế độ rộng xung ra đời để khắc phục vấn đề này. Với kỹ thuật này, nhờ vào tần số dao động của tín hiệu điện trong mạch đẻ có được kết quả của việc sử dụng tín hiệu tương tự bằng tín hiệu số.

Tín hiệu số tạo ra các xung vuông, một dạng tín hiệu bật / tắt, tương ứng với mức 5V và 0V. Bằng việc thay đổi khoảng thời gian bật và tắt trong một chu kì rất ngắn, có thể tạo ra được "ảo giác" đèn LED sáng mờ. Khoảng thời gian bật / tắt trong một chu kì được gọi là biên độ xung - pulse width.

Xét hình bên dưới, vạch màu xanh đại diện cho một chu kì tín hiệu. Ví dụ tần số PWM của Arduino tại thời điểm đang xét là 500Hz, mỗi chu kì khoảng 2 mili-giây. Việc điều chế xung được Arduino hỗ trợ thông qua các pin có kí hiệu ~ ở trước. Với Arduino Uno R3, các pin đó là: 3, 5, 6, 9, 10, 11 - tham khảo chi tiết Arduino Uno R3 - Thông Số Kỹ Thuật Arduino Uno R3 - Các Biến Thể Và Lưu Ý.

Để điều chế xung PWM, sử dụng hàm analogWrite(pin, value).

Với 2 tham số là số pin và mức độ (0 - 255). Với lời gọi hàm analogWrite(0) tương ứng điều xung mức 0% của chu kì - luôn tắt, tương đương với digitalWrite(LOW), hay analogWrite(127) - 50% chu kì hay analogWrite(255) - 100% chu kì tương ứng với việc luôn bật, digitalWrite(HIGH).

Lưu ý: tần số PWM có thể được điều chỉnh qua các ngắt của vi điều khiển ATmega, thông số mặc định ở các pin 5, 6 là 1000 Hz và pin 9, 10, 11 là 500Hz.

Ví dụ minh họa

Ví dụ cho đèn LED sáng dần lên và tối dần đi bằng việc điều chế biên độ xung. Chuẩn bị các linh kiện sau:

  • 1 x Arduino Uno R3 hoặc tương đương
  • 1 x breadboard
  • 1 x LED màu bất kì
  • 1 x điện trở 560 Ohm
  • Dây cắm

Do Arduino Uno R3 chỉ hỗ trợ PWM ở các pin 3, 5, 6, 9, 10, 11. Vì vậy mắc mạch của theo sơ đồ sau:

Kết nối Arduino với máy tính và nạp đoạn code

#define LED_PIN 9

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  // Make LED brighter time-to-time
  for (int i = 0; i < 256; i++)
  {
    analogWrite(LED_PIN, i);
    delay(10);
  }

  // Stop for a while
  delay(1000);

  // Make LED dimmer time-to-time
  for (int i = 255; i >= 0; i--)
  {
    analogWrite(LED_PIN, i);
    delay(10);
  }

  // Stop for a while
  delay(1000);
}
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024