Điều khiển tốc độ motor DC bằng PWM

Chào anh em, bài viết này mình mạn phép chia sẻ với anh em kỹ thuật điều khiển tốc độ motor DC bằng PWM hay còn gọi với cái tên quen thuộc là điều chế xung. Giống như những bài viết khác thì project này mình vẫn sử dụng Arduino với chức năng PWM của chip ATmega328 trong em UNO.

Lưu ý: PWM (Pulse-Width Modulation) là một kỹ thuật sử dụng điều khiển thiết bị điện, đặc biệt là để tải quán tính như động cơ, đây không phải là một phần cứng.

Mục tiêu:

  • Hiểu được các đặc tính của Transistor và Diode.
  • Lập trình Arduino để điều khiển tốc độ motor DC bằng PWM với nút bấm (button).

Chuẩn bị

  • Arduino UNO.
  • 1 động cơ DC (loại 9V).
  • 2 tụ 100nF (tụ gốm 101).
  • 1 Transistor NPN.(loại N2222).
  • Điện trở 1k ohm và 10k ohm.
  • 1 nút bấm (button).
  • 1 Diode. (loại N4007).
  • Breadboard và dây dẫn.

Kiến thức nền tảng

Để hiểu được cặn kẽ về dự án nhỏ này anh em cần chuẩn bị một số kiến thức điện tử cơ bản, hiểu được arduino là gì và đọc thêm một số kiến thức sau đây giùm mình.

Transistor

Transistor là 1 linh kiện cho phép chúng ta điều khiển dòng điện có cường độ lớn hơn mức cho phép của Arduino (tối đa 40mA mỗi chân Digital).

Transistor
Transistor

Cấu tạo

  • Gồm ba lớp bán dẫn ghép với nhau hình thành hai mối tiếp giáp P-N.
  • Ba lớp bán dẫn được nối ra thành ba cực:
    • Lớp giữa gọi là cực gốc hay cực nền (Base) ký hiệu là B.
    • Hai lớp bán dẫn bên ngoài được nối ra thành cực phát (Emitter) ký hiệu là E và cực thu hay cực góp (Collector) ký hiệu là C.

Có 2 loại Transistor là PNP và NPN tương ứng với 2 cách sắp xếp 3 lớp bán dẫn. Trong bài này mình sử dụng Transistor loại NPN là  N2222.

Mỗi loại Transistor có sơ đồ chân khác nhau, do đó, khi sử dụng 1 loại Transistor nào đó (VD:C1815, BC548…) bạn nên tìm đọc datasheet của nó (trên google) để sử dụng chính xác.

>> Nguyên lý hoạt động:

Để đơn giản, chúng ta xem Transistor như 1 công tắc bình thường. Đối với Transistor NPN, khi một dòng điện có cường độ nhỏ (như chân digital của Arduino) được cấp vào chân Base, Transistor sẽ cho phép dòng điện đi từ chân Collector đến chân Emitter (theo chiều mũi tên trên kí hiệu). Khi chân Base không còn được cấp điện (ở mức LOW), sẽ không có dòng điện chạy qua transitsor.

Bạn có thể xem giới thiệu đầy đủ hơn về linh kiện này tại bài viết Transistor (BJT)

Diode (đi-ốt)

Diode là 1 linh kiện rất đơn giản, nó chỉ cho phép dòng điện đi qua theo 1 chiều (từ anot đến catot).

diode
Đi-ốt (diode) tra datasheet để biết thêm nhé anh em

Trong bài viết này mình sử dụng Diode N4007 để bảo vệ các linh kiện trong mạch khỏi bị hư hỏng do dòng điện cảm ứng phát sinh khi motor, rơle, …hoạt động. Dòng điện cảm ứng có chiều ngược với chiều dòng điện trong mạch, do đó gây hại cho các thiết bị điện trong mạch vốn chỉ hoạt động với một chiều dòng điện nhất định.

Ứng dụng Transistor và Diode trong mạch điều khiển động cơ DC

Chúng ta sẽ sử dụng Transistor và Diode để điều khiển motor DC vì:

  • Chip vi điều khiển trên Arduino chỉ có thể cung cấp dòng điện tối đa 40mA trên mỗi chân Digital – nhỏ hơn yêu cầu của hầu hết motor.
  • Khi hoạt động, motor sẽ tạo ra dòng điện cảm ứng (do hiện tượng cảm ứng điện từ) có chiều ngược với chiều dòng điện trong mạch. Do đó ta phải sử dụng Diode để triệt tiêu nó.

Lắp mạch

Đến đoạn vui rồi, anh em lắp thep mạch trong hình, cần giải thích gì thì comment xuống dưới bài viết, giờ bắt đầu đoạn hay nè.

Mạch thực tế trông nó thế này

Mạch điều khiển tốc độ motor bằng PWM sử dụng arduino
Mạch điều khiển tốc độ motor bằng PWM sử dụng arduino

Còn đây là sơ đồ nguyên lý

Sơ đồ lắp mạch điều khiển motor bằng PWM
Sơ đồ lắp mạch điều khiển motor bằng PWM

Note:

  • Bạn có thể thay tụ 101 (C1,C2) bằng các loại tụ điện khác tương đương như 102,103,104,…
  • Bạn có thể thay diode 1N4001 bằng các loại diode có chức năng tương đương.
  • Các điện trở có thể thay bằng những điện trở khác có trị số gần bằng.

Lập trình

const int motor = 6;    // khai báo chân PWM điều khiển motor
const int button = 8;   // khai báo chân đọc nút bấm
boolean oldState = 0;   // trạng thái của nút bấm
int time;               // biến lưu thời gian
boolean state = 0;
int speedMotor = 0;     // biến lưu giữ tốc độ của motor

void setup() {
  Serial.begin(9600);   // giao tiếp Serial với 9600 baudrate.
  pinMode(motor,OUTPUT);
  pinMode(button,INPUT);
}

void loop() {
  if (digitalRead(button) != oldState) {  // kiểm tra thay đổi trạng thái nút bấm
    time = millis();    // reset lại bộ timer khi nút bấm thay đổi trạng thái
  }
  
  state = digitalRead(button);      // đọc giá trị nút bấm
  int duration = millis() - time;   // đo thời gian duy trì trạng thái hiện tại
  duration = constrain(duration,0,5000);   // 0 <= duration <= 5000 ms.
  if (state == 1) {   //nếu đang nhấn nút
      speedMotor = map(duration,0,5000,0,255);
      analogWrite(motor,speedMotor);  // xuất xung PWM để điều khiển tốc độ motor
                                      // duty cycle càng lớn thì motor quay càng nhanh
       delay(500);
  }
  
  Serial.println(speedMotor);  // in ra Serial monitor giá trị tốc độ
  oldState = state;            // cập nhật trạng thái nút bấm.
}

Giải thích code điều khiển tốc độ Moto DC bằng Arduino

  • Đoạn code trên thực hiện việc xác định thời gian giữ nút bấm, sau đó chuyển giá trị thời gian đó sang xung PWM. Thời gian nhấn nút càng lâu thì motor quay càng nhanh.
  • Chân Digital 8 sẽ điều khiển tốc độ motor bằng cách xuất xung PWM để cấp điện áp (mức HIGH) vào chân Base của Transistor ==> Transistor cho phép dòng điện đi qua ==> motor hoạt động. Duty cycle càng lớn thì điện áp đặt vào chân Base của Transistor càng cao ==> tốc độ motor càng lớn và ngược lại.
  • Nếu không muốn điều khiển tốc độ, chúng ta chỉ cần dùng lệnh digitalWrite(motor,1) và digitalWrite(motor,0)để bật tắt motor.
  • Nếu thay motor DC bằng relay (rơle) và lập trình 1 chút, chúng ta có thể điều khiển bật-tắt các thiết bị điện trong nhà như đèn, quạt,…. Sau này mình sẽ viết 1 bài về cách điều khiển thiết bị điện với remote TV và rơle.

Lời kết: Có rất rất là nhiều cách để điều khiển động cơ bằng Arduino và trong điện tử nói chung thì lại còn phải thêm vài chữ rất nữa mới hết được số cách điều khiển motor DC bằng PWM (điều chế xung), trên đây, #Quân gửi tới anh em một cách rất “mì ăn liền” để có thể ứng dụng được động cơ 1 chiều trong dự án của mình

Chúc anh em thành công!

Crazy Q (Quân Mạch)

2 bình luận về “Điều khiển tốc độ motor DC bằng PWM”

Viết một bình luận