STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

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

    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.

    Vũ Quang Huy

    06/10/2014
    25/07/2020
    4 phút đọc
    Điều Chế Độ Rộng Xung - Pulse-Width Modulation

    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);
    }
    0 Bình luận
    Điện Tử Ứng Dụng

    Điện Tử Ứng Dụng

    Kiến thức điện tử, Arduino, Raspberry Pi, giới thiệu sản phẩm.

    Đề xuất

    Project 2 - Auto Turn On/Off Led
    Hướng dẫn điều khiển đèn led tự động bật - tắt với cảm biến ánh sáng và ...
    Đo Tốc Độ Động Cơ Sử Dụng Cảm Biến IR FC-03
    Bài viết hướng dẫn cách sử dụng cảm biến đo tốc độ IR FC-03 kết hợp với ...

    Khám phá

    Dự Án Loa Thông Minh Điều Khiển Qua Giao Tiếp Bluetooth
    Dự án hướng dẫn các bạn một các điều khiển từ xa các thiết bị màn hình ...
    RequireJS cho Người Mới Bắt Đầu
    Khái niệm, chức năng, cách module hoá JavaScript, cách tạo module với ...
    Hướng Dẫn Sử Dụng Module RF315 Truyền Nhận Tín Hiệu Qua Sóng Vô Tuyến Bằng Arduino
    Giới thiệu và code mẫu sử dụng module RF315 thu và phát, code mẫu với ...
    Điều Khiển Động Cơ Bằng IC L298
    Hướng dẫn sử dụng IC L298 đã tích hợp sẵn mạch cầu H, ứng dụng trong ...
    Hướng Dẫn Các Bước Study Chân Dung Greyscale
    Hướng dẫn này chỉ ra các bước và kỹ thuật giúp study các bức chân dung ...
    16/10/2020
    Box2D - Phần 4: Joint (tiếp Theo)
    Giới thiệu các loại joint có sẵn trong Box2D, các khái niệm, vai trò, và ...
    Ruler - Công Cụ Đo Khoảng Cách Trên Windows
    Đối với ngành công nghiệp phần mềm, đặc biệt là trong kiến trúc, thiết ...
    Hướng Dẫn Sử Dụng Module Wifi ESP8266 v1 với Arduino Uno
    ESP8266 là một chip tích hợp cao - System on Chip (SoC), có khả năng xử ...
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích.. Tìm hiểu thêm.
    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020