Arduino Động cơ một chiều

Trong bài hướng dẫn này, chúng ta sẽ học:

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×L298N Motor Driver Module
1×5V DC Motor
1×5V Power Adapter for 5V DC motor
1×DC Power Jack
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Động cơ một chiều

Sơ đồ đấu nối động cơ DC

Động cơ DC có hai dây:

  • Dây dương tính: thường màu đỏ
  • Dây âm tính: thường màu đen
bố trí chân của động cơ dc

Cách hoạt động

Khi bạn mua một động cơ DC, bạn cần biết động cơ DC hoạt động ở điện áp nào. Hãy lấy một động cơ DC 12V làm ví dụ.

Khi bạn cấp nguồn cho động cơ DC 12V bằng nguồn 12V:

  • 12V và GND đến dây dương và dây âm, tương ứng: động cơ DC quay với tốc độ tối đa theo hướng kim đồng hồ
  • 12V và GND đến dây âm và dây dương, tương ứng: động cơ DC quay với tốc độ tối đa theo hướng ngược chiều kim đồng hồ

Như đã mô tả ở trên, khi đảo cực nguồn giữa hai dây của động cơ DC, hướng quay sẽ bị đảo ngược. Phương pháp này được dùng để điều khiển hướng quay của động cơ DC. Tất nhiên, không phải bằng cách thay đổi thủ công mà bằng lập trình.

Nếu chúng ta cấp nguồn cho động cơ DC dưới 12V, động cơ vẫn quay nhưng không ở vận tốc tối đa. Điều này có nghĩa là nếu chúng ta thay đổi điện áp của nguồn cấp, chúng ta có thể thay đổi tốc độ của động cơ DC. Tuy nhiên, phương pháp này không được sử dụng trong thực tế vì khó kiểm soát điện áp của nguồn cấp. Thay vào đó, ta cố định điện áp của nguồn và điều khiển tốc độ của động cơ DC thông qua tín hiệu PWM. Tỷ lệ duty của PWM càng cao thì động cơ DC quay càng nhanh.

cách điều khiển động cơ dc

Cách điều khiển động cơ DC bằng Arduino

Điều khiển động cơ DC bao gồm hai yếu tố: tốc độ và hướng. Arduino có thể sinh tín hiệu PWM. Tuy nhiên, tín hiệu PWM này có điện áp và dòng điện thấp, chúng ta không thể sử dụng nó để điều khiển động cơ DC. Chúng ta cần dùng một driver phần cứng ở giữa Arduino và động cơ DC. Driver thực hiện hai công việc:

  • Khuếch đại tín hiệu PWM từ Arduino (dòng điện và điện áp) để điều khiển tốc độ
  • Nhận tín hiệu điều khiển từ Arduino để đổi cực nguồn cấp nhằm điều khiển hướng
Điều khiển động cơ dc bằng Arduino

※ Lưu ý:

  • Hướng dẫn này có thể áp dụng cho tất cả các động cơ DC. Động cơ DC 12V chỉ là một ví dụ.
  • Khi bạn điều khiển một động cơ DC 5V, dù đầu ra của pin Arduino cấp 5V (giống với điện áp của động cơ DC), bạn vẫn cần một bộ driver ở giữa Arduino và động cơ DC vì đầu ra của pin Arduino không cung cấp đủ dòng điện cho động cơ DC.

Có nhiều loại chip; các module (ví dụ như L293D, L298N) có thể được sử dụng làm bộ điều khiển động cơ DC. Trong hướng dẫn này, chúng ta sẽ sử dụng driver L298N.

Về Bộ điều khiển L298N

Driver L298N có thể được sử dụng để điều khiển động cơ DC và động cơ bước. Trong bài hướng dẫn này, chúng ta học cách sử dụng nó để điều khiển động cơ DC.

Bố trí chân của bộ điều khiển L298N

bố trí chân của bộ điều khiển l298n

Bộ điều khiển L298N có thể điều khiển hai động cơ DC độc lập cùng lúc, được gọi là động cơ A và động cơ B. Bộ điều khiển L298N có 13 chân:

Các chân chung cho cả hai động cơ:

  • Chân VCC: cấp nguồn cho động cơ. Nó có thể có điện áp từ 5V đến 35V.
  • Chân GND: là chân đất chung, cần được kết nối với GND (0V).
  • Chân 5V: cấp nguồn cho mô-đun L298N. Nó có thể được cấp bằng 5V từ Arduino.

Chân động cơ A (Kênh A):

  • Các chân ENA: được sử dụng để điều khiển tốc độ của Động cơ A. Việc tháo jumper và kết nối chân này với đầu vào PWM sẽ cho phép chúng ta điều khiển tốc độ của Động cơ A.
  • Các chân IN1 và IN2: được sử dụng để điều khiển hướng quay của Động cơ A. Khi một trong hai chân ở mức HIGH và chân kia ở mức LOW, Động cơ A sẽ quay. Nếu cả hai đầu vào đều ở mức HIGH hoặc đều ở mức LOW, Động cơ A sẽ dừng.
  • Các chân OUT1 và OUT2: được kết nối với Động cơ A.

Các chân của Motor B (Kênh B):

  • Các chân ENB được dùng để điều khiển tốc độ của Động cơ B. Việc loại bỏ jumper và nối chân này với đầu vào PWM sẽ cho phép chúng ta điều khiển tốc độ của Động cơ B.
  • Các chân IN3 và IN4 được dùng để điều khiển hướng quay của Động cơ B. Khi một chân ở mức cao và chân kia ở mức thấp, Động cơ B sẽ quay. Nếu cả hai đầu vào đều ở mức cao hoặc thấp, Động cơ B sẽ dừng.
  • Các chân OUT3 và OUT4 được kết nối với Động cơ B.

Như đã mô tả ở trên, bộ điều khiển L298N có hai nguồn cấp đầu vào:

  • Một dành cho động cơ DC (chân VCCGND): từ 5 đến 35V.
  • Một dành cho hoạt động nội bộ của mô-đun L298N (chân 5V và GND): từ 5 đến 7V.

Bộ điều khiển L298N cũng có ba jumper cho các mục đích nâng cao hoặc mục đích khác. Để đơn giản hơn, vui lòng loại bỏ toàn bộ jumper khỏi bộ điều khiển L298N.

Chúng ta có thể điều khiển hai động cơ DC độc lập cùng lúc bằng cách sử dụng Arduino và bộ điều khiển L298N. Để điều khiển mỗi động cơ, chúng ta chỉ cần ba chân từ Arduino.

※ Lưu ý:

Phần còn lại của bài hướng dẫn này điều khiển một động cơ DC bằng kênh A. Việc điều khiển động cơ DC khác cũng tương tự.

Cách Điều Khiển Tốc Độ Động Cơ DC Bằng Bộ Điều Khiển L298N

Việc điều khiển tốc độ của động cơ DC bằng cách tạo tín hiệu PWM tới chân ENA của L298N rất đơn giản. Chúng ta có thể làm điều này bằng cách:

  • Nối một chân của Arduino với ENA của L298N
  • Tạo tín hiệu PWM cho chân ENA bằng cách sử dụng hàm analogWrite(). Driver L298N khuếch đại tín hiệu PWM cho động cơ DC
analogWrite(ENA_PIN, speed); // speed is a value from 0 to 255

Tốc độ là một giá trị nằm giữa 0 và 255. Nếu tốc độ bằng 0, động cơ dừng. Nếu tốc độ bằng 255, động cơ quay ở tốc độ tối đa.

Cách Điều Khiển Hướng Quay của Động Cơ DC bằng Bộ Điều Khiển L298N

Hướng quay của động cơ có thể được điều khiển bằng cách áp dụng tín hiệu HIGH/LOW cho các chân IN1 và IN2. Bảng dưới đây minh họa cách điều khiển hướng quay ở cả hai kênh.

IN1 pin IN2 pin Direction
LOW LOW Motor A stops
HIGH HIGH Motor A stops
HIGH LOW Motor A spins Clockwise
LOW HIGH Motor A spins Anti-Clockwise
  • Điều khiển động cơ A quay theo chiều kim đồng hồ
digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW);
  • Điều khiển động cơ A quay ngược chiều kim đồng hồ
digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH);

※ Lưu ý:

Hướng quay bị đảo ngược nếu các chân OUT1 và OUT2 kết nối với hai chân của động cơ DC theo cách ngược lại. Nếu đúng như vậy, chỉ cần hoán đổi giữa chân OUT1 và OUT2 hoặc thay đổi tín hiệu điều khiển trên chân IN1 và IN2 trong mã nguồn.

Cách Dừng Động Cơ DC Đang Quay

Có hai cách để dừng động cơ DC.

  • Điều khiển vận tốc về 0
analogWrite(ENA_PIN, 0);
  • Điều khiển hai chân IN1 và IN2 về cùng một giá trị (LOW hoặc HIGH)
digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, LOW);
  • Hoặc
digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, HIGH);

Cách điều khiển động cơ DC bằng bộ điều khiển L298N.

Sơ đồ đấu dây

Xin tháo bỏ cả ba jumper trên mô-đun L298N trước khi đấu dây.

sơ đồ nối dây cho động cơ dc điều khiển bằng Arduino và trình điều khiển l298n

This image is created using Fritzing. Click to enlarge image

Mã Arduino

Đoạn mã dưới đây thực hiện điều gì:

  • Tăng tốc động cơ DC
  • Đổi hướng quay
  • Giảm tốc động cơ DC
  • Dừng động cơ DC
/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-dc-motor */ // constants won't change const int ENA_PIN = 9; // the Arduino pin connected to the EN1 pin L298N const int IN1_PIN = 6; // the Arduino pin connected to the IN1 pin L298N const int IN2_PIN = 5; // the Arduino pin connected to the IN2 pin L298N // the setup function runs once when you press reset or power the board void setup() { // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise for (int speed = 0; speed <= 255; speed++) { analogWrite(ENA_PIN, speed); // control the speed delay(10); } delay(1000); // rotate at maximum speed 1 seconds in in clockwise direction // change direction digitalWrite(IN1_PIN, LOW); // control motor A spins anti-clockwise digitalWrite(IN2_PIN, HIGH); // control motor A spins anti-clockwise delay(1000); // rotate at maximum speed 1 seconds in in anti-clockwise direction for (int speed = 255; speed >= 0; speed--) { analogWrite(ENA_PIN, speed); // control the speed delay(10); } delay(1000); // stop motor 1 second }

Hướng dẫn từng bước

  • Loại bỏ cả ba jumper trên mô-đun L298N.
  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấn nút Tải lên trên Arduino IDE để tải mã lên Arduino
  • Bạn sẽ thấy:
  • Động cơ DC được tăng tốc và sau đó quay ở tốc độ tối đa trong 1 giây
  • Hướng của động cơ DC được thay đổi
  • Động cơ DC quay ở tốc độ tối đa trong 1 giây theo hướng ngược lại
  • Động cơ DC giảm tốc
  • Động cơ DC dừng 1 giây
  • Quá trình ở trên được lặp lại.

※ Lưu ý:

Trong bài hướng dẫn này, chúng ta học cách điều khiển tốc độ của động cơ DC theo tỷ lệ với tốc độ tối đa. Để điều khiển tốc độ tuyệt đối (vòng mỗi giây), chúng ta cần sử dụng bộ điều khiển PID và một bộ mã hóa. Việc điều khiển tốc độ tuyệt đối của động cơ DC sẽ được trình bày trong một bài hướng dẫn khác.

Cách điều khiển hai động cơ DC bằng bộ điều khiển L298N

(sắp ra mắt)

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.