Điều khiển động cơ DC L293D và Arduino

0
1022

Nếu bạn đang có kế hoạch lắp ráp một robot mới thì bạn sẽ cần phải tìm hiểu về việc điều khiển động cơ DC. Một trong những cách dễ nhất và rẻ tiền để điều khiển động cơ DC là giao tiếp IC điều khiển động cơ L293D với Arduino. Nó có thể điều khiển cả tốc độ và chiều quay của hai động cơ DC cùng lúc.

Điều khiển động cơ DC

Khi nói điều khiển hoàn toàn động cơ DC thì tức là chúng ta phải điều khiển được tốc độ và chiều quay của nó. Để thực hiện được điều này chúng ta sử dụng kết hợp hai kỹ thuật sau đây.

  • Điều chế độ rộng xung (PWM) – Để điều khiển tốc độ
  • Mạch cầu H (H-Bridge) – Để điều khiển chiều quay

PWM – Điều khiển tốc độ

Tốc độ của động cơ DC có thể được điều khiển bằng cách thay đổi điện áp đầu vào của nó. Một kỹ thuật phổ biến để thực hiện việc này là sử dụng PWM (Pulse Width Modulation – Điều chế độ rộng xung).

PWM là một kỹ thuật trong đó giá trị trung bình của điện áp đầu vào được điều chỉnh bằng cách gửi một loạt các xung ON-OFF.

Điện áp trung bình tỷ lệ thuận với chiều rộng của các xung được gọi là chu kỳ làm việc (Duty Cycle).

Chu kỳ làm việc càng cao, điện áp trung bình cung cấp cho động cơ DC càng lớn (Động cơ quay nhanh) và chu kỳ làm việc càng thấp, điện áp trung bình cung cấp cho động cơ DC càng ít (Động cơ quay chậm).

Dưới đây hình ảnh minh họa kỹ thuật PWM với các chu kỳ làm việc khác nhau và điện áp trung bình.

H-Bridge – Điều khiển chiều quay

Chiều quay của động cơ DC có thể được điều khiển bằng cách thay đổi cực tính của điện áp đầu vào. Một kỹ thuật phổ biến để làm điều này là sử dụng mạch cầu H (H-Bridge).

Một mạch cầu H gồm có bốn công tắc với động cơ ở trung tâm tạo thành một sắp xếp giống như hình chữ H.

Đóng hai công tắc cụ thể cùng một lúc sẽ đảo ngược cực tính của điện áp đặt vào động cơ. Điều này gây ra sự thay đổi hướng quay của động cơ.

Hình ảnh bên dưới minh họa hoạt động của một mạch cầu H.

 Hoạt động của mạch cầu H

IC điều khiển động cơ L293D

L293D là IC điều khiển động cơ 16 chân phổ biến. Một IC L293D có khả năng điều khiển hai động cơ DC cùng một lúc; cũng có thể điều khiển hướng của hai động cơ này một cách độc lập. Vì vậy, nếu bạn có các động cơ có điện áp hoạt động dưới 36V và dòng điện hoạt động dưới 600mA, được điều khiển bởi các mạch kỹ thuật số như Op-Amp, bộ định thời 555, cổng logic hoặc thậm chí các vi xử lý như Arduino, PIC, ARM, v.v. IC này sẽ là lựa chọn phù hợp với bạn.

Tham khảo datasheet L293D tại đây.

Sơ đồ chân

Sơ đồ chân L293D

Số chân

Tên chân

Mô tả

1

Enable 1,2

Chân này cho phép (enable) các chân ngõ vào Input 1(2) và Input 2(7)

2

Input 1

Điều khiển trực tiếp chân Output 1. Điều khiển bằng các mạch kỹ thuật số

3

Output 1

Kết nối đến một đầu của động cơ 1

4

Ground

Chân nối đất (0V)

5

Ground

Chân nối đất (0V)

6

Output 2

Kết nối đến đầu còn lại của động cơ 1

7

Input 2

Điều khiển trực tiếp chân Output 2. Điều khiển bằng các mạch kỹ thuật số

8

Vcc2 (Vs)

Kết nối với chân nguồn cho động cơ đang chạy (4.5V đến 36V)

9

Enable 3,4

Chân này cho phép (enable) các chân ngõ vào Input 3(10) và Input 4(15)

10

Input 3

Điều khiển trực tiếp chân Output 3. Điều khiển bằng các mạch kỹ thuật số

11

Output 3

Kết nối đến một đầu của động cơ 2

12

Ground

Chân nối đất (0V)

13

Ground

Chân nối đất (0V)

14

Output 4

Kết nối đến đầu còn lại của động cơ 2

15

Input 4

Điều khiển trực tiếp chân Output 4. Điều khiển bằng các mạch kỹ thuật số

16

Vcc2 (Vss)

Kết nối với nguồn +5V để cho phép IC hoạt động

Thông số kỹ thuật

  • Có thể được sử dụng để điều khiển 2 động cơ DC với cùng một lúc.

  • Có thể điều khiển được tốc độ và chiều quay của động cơ.
  • Điện áp động cơ Vcc2 (Vs): 4.5V đến 36V
  • Dòng điện động cơ cực đại: 1.2A
  • Dòng điện động cơ liên tực cực đại: 600mA
  • Điện áp cung cấp cho Vcc1(vss): 4.5V đến 7V
  • Thời gian chuyển tiếp: 300ns (ở 5V và 24V)

Cách sử dụng IC L293D

Sử dụng IC điều khiển động cơ L293D này rất đơn giản. IC hoạt động theo nguyên tắc mạch cầu H. Mạch dưới đây sẽ cho thấy hoạt động của IC này.

Tất cả các chân Ground (GND) phải được nối đất. IC này có 2 chân nguồn, một là Vss (Vcc1) cung cấp điện áp cho IC hoạt động, chân này phải được kết nối với + 5V. Chân còn lại là Vs (Vcc2) cung cấp điện áp cho động cơ chạy, dựa trên thông số kỹ thuật của động cơ bạn có thể kết nối chân này với điện áp trong khoảng từ 4,5V đến 36V, ở đây tôi đã kết nối với + 12V.

Các chân Enable (Enable 1,2 và Enable 3,4) được sử dụng để cho phép (Enable) các chân ngõ vào cho động cơ 1 và động cơ 2 tương ứng. Vì trong hầu hết các trường hợp, chúng ta sẽ sử dụng cả hai động cơ, cả hai chân được giữ ở mức cao theo mặc định bằng cách kết nối với nguồn + 5V. Các chân ngõ vào Input 1,2 được sử dụng để điều khiển động cơ 1 và Input 3,4 được sử dụng để điều khiển động cơ 2. Các chân đầu vào được kết nối với bất kỳ mạch Kỹ thuật số hoặc vi điều khiển nào để điều khiển tốc độ và hướng của động cơ. Bạn có thể chuyển đổi các chân đầu vào dựa trên bảng sau để điều khiển động cơ của bạn.

Input 1 = HIGH(5v)

Output 1 = HIGH

Động cơ 1 quay cùng chiều kim đồng hồ

Input 2 = LOW(0v)

Output 2 = LOW

Input 3 = HIGH(5v)

Output 1 = HIGH

Động cơ 2 quay cùng chiều kim đồng hồ

Input 4 = LOW(0v)

Output 2 = LOW

 

Input 1 = LOW(0v)

Output 1 = LOW

Động cơ 1 quay ngược chiều kim đồng hồ

Input 2 = HIGH(5v)

Output 2 = HIGH

Input 3 = LOW(0v)

Output 1 = LOW

Động cơ 2 quay ngược chiều kim đồng hồ

Input 4 = HIGH(5v)

Output 2 = HIGH

 

Input 1 = HIGH(5v)

Output 1 = HIGH

Động cơ 1 đứng yên

Input 2 = HIGH(5v)

Output 2 = HIGH

Input 3 = HIGH(5v)

Output 1 = LOW

Động cơ 2 đứng yên

Input 4 = HIGH(5v)

Output 2 = HIGH

Kết nối IC L293D với Arduino UNO

Bây giờ thì chúng ta đã biết mọi thứ về IC, chúng ta có thể bắt đầu kết nối nó với Arduino của chúng ta!

Bắt đầu bằng cách kết nối nguồn cung cấp cho các động cơ. Tôi đang sử dụng động cơ DC Gearbox (còn được gọi là động cơ TT) thường được tìm thấy trong các robot hai bánh. Điện áp cung cấp cho động cơ hoạt động 3 đến 9V. Vì vậy, tôi sẽ kết nối nguồn điện 9V bên ngoài với chân Vcc2.

Tiếp theo, chúng ta cần cung cấp 5V cho mạch logic L293D. Kết nối chân Vcc1 với đầu ra 5V trên Arduino. Hãy chắc chắn rằng bạn nối tất cả các chân Gound trong mạch lại với nhau.

Bây giờ, các chân input và enable (ENA, IN1, IN2, IN3, IN4 và ENB) của IC L293D được kết nối với 6 chân đầu ra số của Arduino (9, 8, 7, 5, 4 và 3). Lưu ý rằng các chân đầu ra Arduino 9 và 3 đều hỗ trợ PWM.

Cuối cùng, kết nối một động cơ với OUT1 & OUT2 và động cơ khác trên OUT3 & OUT4. 

Khi bạn làm xong, bạn sẽ có một sơ đồ mạch trông giống như hình minh họa bên dưới.

Sơ đồ mạch kết nối arduino và L293D

Chương trình Arduino – Điều khiển động cơ DC

Chương trình sau đây sẽ cung cấp cho bạn sự hiểu biết đầy đủ về cách điều khiển tốc độ và chiều quay của động cơ DC với IC điều khiển động cơ L293D và có thể làm cơ sở cho các thử nghiệm và dự án thực tế khác.

// Kết nối động cơ A

int enA = 9;

int in1 = 8;

int in2 = 7;

// Kết nối động cơ B

int enB = 3;

int in3 = 5;

int in4 = 4;

 

void setup()

{

                // Set tất cả các chân điều khiển động cơ thành output

                pinMode(enA, OUTPUT);

                pinMode(enB, OUTPUT);

                pinMode(in1, OUTPUT);

                pinMode(in2, OUTPUT);

                pinMode(in3, OUTPUT);

                pinMode(in4, OUTPUT);

 

                // Tắt tất cả động cơ – Trạng thái ban đầu

                digitalWrite(in1, LOW);

                digitalWrite(in2, LOW);

                digitalWrite(in3, LOW);

                digitalWrite(in4, LOW);

}

 

void loop()

{

                directionControl();

                delay(1000);

                speedControl();

                delay(1000);

}

 

// Đoạn chương trình này cho phép bạn điều khiển chiều quay của động cơ

void directionControl()

{

                // Cho động cơ quay với tốc độ tối đa

                // Giá trị của PWM thay đổi từ 0 đến 255

                analogWrite(enA, 255);

                analogWrite(enB, 255);

 

                // Tắt động cơ A và B

                digitalWrite(in1, HIGH);

                digitalWrite(in2, LOW);

                digitalWrite(in3, HIGH);

                digitalWrite(in4, LOW);

                delay(2000);

 

                // Thay đổi chiều quay của động cơ

                digitalWrite(in1, LOW);

                digitalWrite(in2, HIGH);

                digitalWrite(in3, LOW);

                digitalWrite(in4, HIGH);

                delay(2000);

 

                // Tắt tất cả các động cơ

                digitalWrite(in1, LOW);

                digitalWrite(in2, LOW);

                digitalWrite(in3, LOW);

                digitalWrite(in4, LOW);

}

 

// Đoạn chương trình điều khiển tốc độ của động cơ

void speedControl()

{

                // Khởi động các động cơ

                digitalWrite(in1, LOW);

                digitalWrite(in2, HIGH);

                digitalWrite(in3, LOW);

                digitalWrite(in4, HIGH);

 

                // Tăng tốc từ 0 đến tốc độ tối đa

                for (int i = 0; i < 256; i++)

                {

                                analogWrite(enA, i);

                                analogWrite(enB, i);

                                delay(20);

                }

 

                // Giảm tốc từ tốc độ tối đa về 0

                for (int i = 255; i >= 0; –i)

                {

                                analogWrite(enA, i);

                                analogWrite(enB, i);

                                delay(20);

                }

 

                // Tắt tất cả các động cơ

                digitalWrite(in1, LOW);

                digitalWrite(in2, LOW);

                digitalWrite(in3, LOW);

                digitalWrite(in4, LOW);

}

 

Giải thích chương trình

Chương trình arduino khá đơn giản. Nó không yêu cầu bất kỳ thư viện để làm cho nó hoạt động. Chương trình bắt đầu bằng việc khai báo các chân Arduino mà các chân điều khiển L293D được kết nối.

Trong phần setup, tất cả các chân điều khiển động cơ được khai báo là OUTPUT và đưa xuống THẤP để tắt cả hai động cơ.

Trong phần loop, chúng ta gọi hai hàm do người dùng định nghĩa trong khoảng thời gian một giây. Các hàm này là:

  • directionControl() – Hàm này quay cả hai động cơ theo chiều thuận với tốc độ tối đa trong hai giây. Sau đó, nó đảo chiều quay của động cơ và quay thêm hai giây nữa. Cuối cùng thì tắt động cơ.
  • speedControl() – Hàm này tăng tốc cả hai động cơ từ 0 đến tốc độ tối đa bằng cách tạo ra tín hiệu PWM sử dụng hàm analogWrite(), sau đó giảm tốc độ động cơ về 0. Cuối cùng thì tắt động cơ.

BÌNH LUẬN

Please enter your comment!
Please enter your name here