ESP32 Động Cơ DC

Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32 để điều khiển động cơ DC bằng L298N Motor Driver. Chi tiết hơn, chúng ta sẽ học cách điều khiển tốc độ và hướng quay của động cơ DC. Chúng ta sẽ học cách điều khiển một động cơ DC đơn, và sau đó là hai động cơ DC sử dụng một driver L298N duy nhất.

Phần Cứng Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×L298N Motor Driver Module
1×5V DC Motor
1×5V Power Adapter cho 5V DC motor
1×breadboard
1×dây jumper
1×(Tùy chọn) DC Power Jack
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Động Cơ DC

Sơ Đồ Chân Động Cơ DC

Động cơ DC bao gồm hai dây: Âm (đen), và Dương (đỏ)

dc động cơ sơ đồ chân

Cách Hoạt Động Của Động Cơ DC

Hướng quay và tốc độ của động cơ DC sẽ được xác định bởi cách chúng ta cung cấp điện cho nó. Hình bên dưới cho thấy mối quan hệ chi tiết giữa điện áp và tốc độ/hướng quay

how to control dc động cơ

Trong trường hợp sử dụng PWM, độ rộng xung PWM càng lớn thì tốc độ quay của động cơ càng nhanh.

Cách điều khiển tốc độ và hướng quay của động cơ DC bằng ESP32

Đầu tiên, động cơ DC hoạt động với điện áp cao có thể làm hỏng ESP32 ⇒ Chúng ta không thể kết nối động cơ DC trực tiếp với ESP32. Chúng ta cần một driver phần cứng giữa động cơ DC và ESP32. Driver đảm nhiệm ba nhiệm vụ:

  • Bảo vệ ESP32 khỏi điện áp cao
  • Nhận tín hiệu từ ESP32 để thay đổi cực của nguồn điện để điều khiển hướng quay của động cơ.
  • Khuếch đại tín hiệu PWM từ ESP32 (dòng điện và điện áp) để điều khiển tốc độ của động cơ
ESP32 control dc động cơ

Có rất nhiều driver động cơ DC. Hướng dẫn này sẽ sử dụng driver L298N.

Về L298N Driver

Một driver L298N có thể điều khiển hai động cơ DC hoặc một stepper motor. Hướng dẫn này sử dụng driver này để điều khiển động cơ DC.

Sơ Đồ Chân L298N Driver

Hình bên dưới cho thấy sơ đồ chân của L298N driver.

l298n trình điều khiển sơ đồ chân

Giải thích chi tiết cho từng chân có sẵn trong hướng dẫn Arduino - DC motor này

Một driver L298N có thể điều khiển hai động cơ DC độc lập:

  • Động cơ đầu tiên (gọi là motor A) được điều khiển bởi các chân IN1, IN2, ENA, OUT1, OUT2.
  • Động cơ thứ hai (gọi là motor B) được điều khiển bởi các chân IN3, IN4, ENB, OUT3, OUT4.

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

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

  • Kết nối chân digital output của ESP32 với chân ENA/ENB của L298N
  • Tạo tín hiệu PWM cho chân ENA/ENB bằng hàm analogWrite(). Tín hiệu PWM này đi qua L298N Driver và được khuếch đại dòng điện và điện áp trước khi đến động cơ DC
analogWrite(PIN_ENA, speed); // điều khiển motor A analogWrite(PIN_ENB, speed); // điều khiển motor B

speed là giá trị từ 0 đến 255. Nếu là 255, động cơ chạy ở tốc độ tối đa. Nếu là 0, động cơ dừng.

Cách Điều Khiển Hướng Quay Động Cơ DC qua L298N Driver

Hướng quay của động cơ DC A có thể được điều khiển bởi các chân IN1 và IN2. Bảng sau đây cho thấy mối quan hệ giữa hướng quay của động cơ và tín hiệu trên các chân IN1 và IN2.

Chân IN1 Chân IN2 Hướng Quay
HIGH LOW Động cơ DC A quay theo chiều kim đồng hồ
LOW HIGH Động cơ DC A quay ngược chiều kim đồng hồ
HIGH HIGH Động cơ DC A dừng
LOW LOW Động cơ DC A dừng

Tương tự, bảng bên dưới dành cho động cơ DC B

Chân IN3 Chân IN4 Hướng Quay
HIGH LOW Động cơ DC B quay theo chiều kim đồng hồ
LOW HIGH Động cơ DC B quay ngược chiều kim đồng hồ
HIGH HIGH Động cơ DC B dừng
LOW LOW Động cơ DC B dừng

Hãy học cách lập trình để điều khiển nó. Lấy motor A làm ví dụ. Motor B cũng tương tự.

  • Điều khiển hướng quay motor A theo chiều kim đồng hồ
digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, LOW);
  • Điều khiển hướng quay motor A ngược chiều kim đồng hồ
digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, HIGH);

※ Lưu ý:

Hướng quay của động cơ DC sẽ ngược lại nếu đấu dây giữa động cơ DC và L298N driver bị đảo ngược. Trong trường hợp đó, hãy hoán đổi chân OUT1 và OUT2.

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

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

  • Điều khiển tốc độ về 0
analogWrite(PIN_ENA, 0);
  • Điều khiển các chân IN1 IN2 cùng mức LOW hoặc HIGH
digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, HIGH);
  • Hoặc
digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, LOW);

Cách điều khiển động cơ DC sử dụng L298N driver

Sơ Đồ Đấu Nối

Có ba jumper trên module L298N. Hãy tháo tất cả chúng trước khi đấu dây.

ESP32 dc động cơ l298n trình điều khiển sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

Code ESP32

Hãy xem đoạn code bên dưới thực hiện các việc sau từng bước một:

  • ESP32 điều khiển tốc độ động cơ DC tăng dần.
  • ESP32 đảo chiều quay của động cơ DC
  • ESP32 điều khiển tốc độ động cơ DC giảm dần.
  • ESP32 dừng động cơ DC
/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 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/esp32/esp32-dc-motor */ #define PIN_IN1 19 // ESP32 pin GPIO19 connected to the IN1 pin L298N #define PIN_IN2 18 // ESP32 pin GPIO18 connected to the IN2 pin L298N #define PIN_ENA 17 // ESP32 pin GPIO17 connected to the EN1 pin L298N // the setup function runs once when you press reset or power the board void setup() { // initialize digital pins as outputs. pinMode(PIN_IN1, OUTPUT); pinMode(PIN_IN2, OUTPUT); pinMode(PIN_ENA, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(PIN_IN1, HIGH); // control the motor's direction in clockwise digitalWrite(PIN_IN2, LOW); // control the motor's direction in clockwise for (int speed = 0; speed <= 255; speed++) { analogWrite(PIN_ENA, speed); // speed up delay(10); } delay(2000); // rotate at maximum speed 2 seconds in clockwise direction // change direction digitalWrite(PIN_IN1, LOW); // control the motor's direction in anti-clockwise digitalWrite(PIN_IN2, HIGH); // control the motor's direction in anti-clockwise delay(2000); // rotate at maximum speed for 2 seconds in anti-clockwise direction for (int speed = 255; speed >= 0; speed--) { analogWrite(PIN_ENA, speed); // speed down delay(10); } delay(2000); // stop motor 2 second }

Các Bước Nhanh

  • Nếu đây là lần đầu bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Tháo tất cả ba jumper trên module L298N.
  • Copy đoạn code trên và paste vào Arduino IDE.
  • Biên dịch và upload code lên board ESP32 bằng cách click nút Upload trên Arduino IDE
  • Quan sát động cơ DC, bạn sẽ thấy:
    • Động cơ DC tăng tốc và quay ở tốc độ tối đa trong 2 giây
    • Hướng quay của động cơ DC được đảo ngược
    • Động cơ DC quay theo hướng ngược lại ở tốc độ tối đa trong 2 giây
    • Động cơ DC giảm tốc
    • Động cơ DC dừng 2 giây
  • Quá trình trên được lặp lại vô hạn.

※ Lưu ý:

Hướng dẫn này chỉ bạn cách điều khiển tốc độ động cơ DC tương đối. Để điều khiển tốc độ tuyệt đối (vòng quay mỗi giây), cần sử dụng bộ điều khiển PID và phản hồi từ encoder.

Cách Điều Khiển hai Động Cơ DC sử dụng L298N Driver

(sắp có)

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.

Tài Liệu Tham Khảo Ngôn Ngữ

Bình Luận