Đảo ngược việc điều khiển động cơ DC

Trong bài viết này, chúng ta sẽ khám phá cách điều khiển cả chiều quay và tốc độ của động cơ DC bằng cách sử dụng Arduino và IC điều khiển động cơ L293D.

Các linh kiện cần thiết

Thử nghiệm ban đầu

Trước khi sử dụng Arduino để điều khiển động cơ, chúng ta hãy thử nghiệm mạch với chip điều khiển động cơ L293D để hiểu cách hoạt động của nó.

Chúng ta sẽ bắt đầu bằng cách cấp nguồn 5V cho động cơ thông qua Arduino.

Thử nghiệm đảo chiều động cơ

Động cơ có thể được kết nối theo bất kỳ chiều nào. Nếu đảo ngược hai đầu dây, chúng ta sẽ có chiều quay ngược lại. Hãy chú ý đến chiều quay của động cơ. Bạn có thể thử đảo hai đầu dây của động cơ vào nguồn để điều chỉnh chiều quay của nó.

Đó là cách mà chip L293D hoạt động. Chân điều khiển cho phép chúng ta thay đổi chiều quay của động cơ.

Hãy đấu nối dây theo sơ đồ bên dưới. Arduino vẫn đóng vai trò cấp nguồn, nhưng chúng ta có thể thực hiện thử nghiệm bằng tay trước khi để Arduino đảm nhận công việc này.

Sơ đồ đấu dây

Ba chân của L293D mà chúng ta quan tâm là chân 1 (Enable – kích hoạt), chân 2 (In1) và chân 7 (In2). Chúng được kết nối vào chân 5V và GND bằng dây tím, vàng và cam.

Khi đó, động cơ sẽ quay theo chiều A.

Nếu bạn di chuyển chân 1 (Enable) đến GND, động cơ sẽ dừng ngay cả khi bạn cắm chân In1 và In2 vào bất kỳ vị trí nào. Chân Enable có chức năng bật hoặc tắt động cơ. Điều này rất hữu ích khi sử dụng một chân ngõ ra PWM để điều chỉnh tốc độ động cơ. Hãy nối chân 1 vào 5V và động cơ sẽ quay như bình thường.

Bây giờ hãy thử chuyển chân In1 (chân 2, màu vàng) từ 5V sang GND. Cả In1 và In2 bây giờ được nối vào chân GND, khi đó động cơ dừng lại.

Chuyển chân In2 từ GND sang 5V sẽ làm cho động cơ quay ngược lại (chiều B).

Cuối cùng, chuyển In2 trở lại 5V, tức là cả hai chân In1 và In2 đều được nối vào 5V, động cơ sẽ dừng.

Như vậy, tác động của chân In1 và In2 lên động cơ đã được tổng hợp thành bảng sau:

In1 In2 Chiều quay
5V GND Chạy
GND 5V Chạy ngược
5V 5V Dừng

Sơ đồ đấu dây

Bây giờ chúng ta đã hiểu cách điều khiển động cơ trực tiếp, chúng ta có thể sử dụng Arduino để quản lý các chân Enable, In1 và In2.

Khi bạn đấu dây trên breadboard, hãy chú ý rằng IC phải được cắm đúng chiều. Phần trống của IC phải hướng lên trên.

Sơ đồ đấu dây

Code Arduino

Hãy nạp đoạn code sau vào Arduino:

/* Điều khiển động cơ hai chiều */
int enablePin = 11;
int in1Pin = 10;
int in2Pin = 9;
int switchPin = 7;
int potPin = 0;

void setup() {
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(enablePin, OUTPUT);
  pinMode(switchPin, INPUT_PULLUP);
}

void loop() {
  int speed = analogRead(potPin) / 4;
  boolean reverse = digitalRead(switchPin);
  setMotor(speed, reverse);
}

void setMotor(int speed, boolean reverse) {
  analogWrite(enablePin, speed);
  digitalWrite(in1Pin, !reverse);
  digitalWrite(in2Pin, reverse);
}

Các chân được định nghĩa và chức năng của chúng được thiết lập trong hàm setup như bình thường.

Trong hàm loop, tốc độ động cơ được xác định bằng cách chia giá trị đọc từ biến trở cho 4.

Tại sao lại là 4? Vì giá trị đọc từ hàm analogRead nằm trong khoảng từ 0 đến 1023, trong khi giá trị ngõ ra analog chỉ có thể được thiết lập trong khoảng từ 0 đến 255.

Nếu nút nhấn được nhấn, động cơ sẽ quay theo chiều thuận, ngược lại sẽ quay theo chiều nghịch. Giá trị của biến reverse được thiết lập theo giá trị đọc từ chân của nút nhấn. Vì vậy, nếu nút nhấn được nhấn, nó sẽ mang giá trị False, ngược lại nó mang giá trị True.

Tốc độ và giá trị của biến reverse sẽ được truyền vào một hàm có tên là setMotor, hàm này có nhiệm vụ điều khiển các chân tương ứng của L293D để điều khiển động cơ.

void setMotor(int speed, boolean reverse) {
  analogWrite(enablePin, speed);
  digitalWrite(in1Pin, !reverse);
  digitalWrite(in2Pin, reverse);
}

Trong hàm setMotor, đầu tiên ta thiết lập tốc độ cho động cơ bằng cách sử dụng lệnh analogWrite. Chân enable của L293D chỉ đơn giản là bật/tắt động cơ, bất kể giá trị của chân In1 và chân In2 là gì.

Để điều khiển chiều quay của động cơ, chân In1 và chân In2 được thiết lập các giá trị đối lập nhau.

Nếu In1 là HIGH và In2 là LOW, động cơ sẽ quay theo một chiều, ngược lại nếu In1 là LOW và In2 là HIGH thì động cơ sẽ quay theo chiều ngược lại.

Lệnh ! có nghĩa là not (không phải). Dòng digitalWrite đầu tiên sẽ thiết lập chân In1 đến giá trị đối lập với giá trị của biến reverse, ví dụ nếu reverse mang giá trị HIGH thì chân In1 sẽ được đặt giá trị LOW và ngược lại.

Cùng với đó, dòng digitalWrite thứ hai thiết lập chân In2 đến giá trị của biến reverse. Như vậy, giá trị của In1 và In2 luôn đối lập với nhau.

IC L293D

Đây là một con chip rất hữu ích. Thực tế, nó có thể điều khiển hai động cơ DC độc lập. Trong ví dụ trên, chúng ta chỉ sử dụng một nửa của nó, nửa còn lại được sử dụng để điều khiển động cơ thứ hai.

IC L293D

Động cơ thứ hai sẽ sử dụng chân OUT3 và OUT4. Bạn cũng sẽ cần thêm ba chân nữa để điều khiển.

  • EN2 sẽ được kết nối vào một ngõ ra PWM trên Arduino
  • IN3 và IN4 sẽ được kết nối vào các ngõ ra digital trên Arduino

L293D có hai chân +V (8 và 16). Chân ‘+Vmotor’ (8) cấp nguồn cho động cơ, và +V (16) cấp nguồn cho IC. Bạn có thể kết nối cả hai chân này vào chân 5V của Arduino. Tuy nhiên, nếu bạn sử dụng động cơ có công suất lớn hoặc động cơ có điện áp cao hơn, bạn sẽ cần cấp nguồn riêng bằng cách nối chân 8 vào cực dương của nguồn cấp ngoài và nối cực GND của nguồn cấp ngoài vào chân GND của Arduino.

Mở rộng

Hãy thử thay đổi code để điều khiển động cơ mà không sử dụng biến trở hoặc nút nhấn. Động cơ sẽ bắt đầu quay chậm, sau đó tăng dần tốc độ, sau đó giảm dần tốc độ và đổi chiều, cứ như vậy lặp đi lặp lại.

FEATURED TOPIC