Điều khiển động cơ DC bằng IC L293D và Arduino
IC L293D Arduino là một linh kiện không còn quá xa lạ với những ai yêu thích kỹ thuật điện nói chung và lập trình Arduino nói riêng. Với giá thành rẻ, cấu tạo đơn giản và hiệu suất cao, nên việc ứng dụng vào các dự án là vô cùng dễ dàng. Một số ứng dụng hay ho từ IC L293D có thể kể đến như là xe điều khiển từ xa, mô hình cửa thông minh, Robot dò line…
Cuối cùng để Team Arduino có thể ra thêm nhiều món ăn hấp dẫn hơn cho cộng đồng Arduino, các bạn đừng ngần ngại ủng hộ chúng mình bằng cách Donate qua đường link mình để bên dưới.
Điều khiển động cơ DC
Để có thể kiểm soát trong việc điều khiển động cơ DC các bạn có thể kết hợp hai kỹ thuật sau đây:
- PWM – Kiểm soát tốc độ động cơ
- Mạch cầu H – Đảo chiều quay động cơ DC
PWM – Kiểm soát tốc độ động cơ
PWM (Pulse Width Modulation) là một phương pháp được sử dụng để điều khiển tốc độ của động cơ DC. Trong PWM, tín hiệu được tạo ra bằng cách thay đổi độ rộng của các xung (pulse) với một tần số cố định.
Cơ chế hoạt động của PWM là tạo ra một chuỗi các xung có độ rộng khác nhau trong một chu kỳ thời gian. Độ rộng của xung (thời gian xung bật) được điều chỉnh để điều khiển mức công suất hoặc tín hiệu tương ứng theo tín hiệu analog. Mức công suất được điều chỉnh bằng cách thay đổi tỷ lệ giữa thời gian xung bật và thời gian xung tắt trong một chu kỳ.
Với Arduino, bạn có thể sử dụng chức năng PWM trên một số chân số để điều khiển độ rộng của xung và tạo ra tín hiệu tương tự analog. Chức năng analogWrite() của Arduino được sử dụng để tạo ra tín hiệu PWM trên các chân hỗ trợ PWM.
Xem ngay: Giao tiếp Module điều khiển động cơ DC L298N với Arduino
Mạch cầu H – Đảo chiều quay động cơ DC
Mạch cầu H (H-Bridge) là một loại mạch điện tử dùng để điều khiển động cơ DC. Nó bao gồm bốn công tắc điện tử được kết hợp thành một cấu trúc hình chữ H. Mạch cầu H cho phép kiểm soát và thay đổi hướng chuyển động của động cơ bằng cách tắt và bật các công tắc điện tử tương ứng.
Khi hai công tắc cùng một phía được bật, dòng điện sẽ chảy qua động cơ theo một hướng. Khi hai công tắc phía ngược lại được bật, dòng điện sẽ chảy theo hướng ngược lại. Bằng cách kết hợp các trạng thái công tắc, mạch cầu H cho phép điều khiển động cơ di chuyển theo cả hai hướng và dừng lại.
IC điều khiển động cơ DC L293D
IC điều khiển động cơ DC L293D là một mạch tích hợp hai mạch cầu H, được sử dụng rộng rãi để điều khiển động cơ DC hai chiều. IC này có khả năng chịu được dòng điện tải cao lên đến 1.2A (peak) và 0.6A (continuous). L293D còn có tính năng bảo vệ quá nhiệt, giúp đảm bảo an toàn và bền bỉ cho hệ thống.
IC L293D bao gồm 4 công tắc điện tử (transistor) NPN và PNP, được kết hợp thành một cấu trúc hình chữ H. Bao gồm 4 chân để điều khiển hướng chuyển động của động cơ (INPUT1, INPUT2, INPUT3, INPUT4 ). Bên cạnh đó, IC cũng cung cấp 4 chân đầu ra (OUTPUT1, OUTPUT2, OUTPUT3, OUTPUT4) để kết nối với động cơ DC.
IC L293D hoạt động ổn định với nguồn cấp từ 4.5V đến 36V, nên phù hợp cho nhiều ứng dụng điện tử và robot. Sự tiện ích, tính linh hoạt và khả năng chịu tải cao của IC L293D đã làm cho nó trở thành một giải pháp phổ biến cho điều khiển động cơ DC trong các dự án điện tử và robot.
Thông số kỹ thuật
Sơ đồ chân IC điều khiển động cơ DC L293D
IC L293D có tổng cộng 16 chân, như hình bên dưới;
Chân nguồn cấp cho IC động cơ (Power Pins)
Module điều khiển động cơ DC L293D arduino có 2 chân cấp nguồn đầu vào là VS (Vcc2) và VSS (Vcc1).
- VS: Chân này dùng để cung cấp cấp nguồn cho mạch cầu H bên trong của IC. Nguồn điện áp đầu vào từ 4.5 đến 36V.
- VSS: Chân này được sử dụng để cấp nguồn cho mạch logic bên trong IC L293D điện áp là 5V.
- GND: Chân này dùng để nối đất. IC có bốn chân GND, các chân này sẽ được nối chung với nhau.
Xem ngay: Điều khiển động cơ bước Stepper Motor bằng IC L293D và Arduino
Chân đầu ra (Output Pins)
Các đầu ra của IC khiển động cơ L293D có thứ tự chân: OUT1(3) & OUT2(6) cho động cơ A và OUT3(11) & OUT4(14) động cơ B. Các bạn có thể cấp nguồn sử dụng hai động cơ có điện áp DC 5-36V.
Đầu ra trên IC L293D có thể chịu tải tới 600mA cho mỗi động cơ DC. Tuy nhiên, nó còn phụ thuộc vào công suất của nguồn điện cấp cho động cơ.
Chân điều khiển hướng di chuyển (Direction Control Pins)
IC điều khiển động cơ DC L293D Arduino cung cấp hai chân điều khiển hướng chuyển động (IN1 và IN2) cho động cơ A và hai chân (IN3 và IN4) để điều hướng chuyển động của động cơ B. Bằng cách điều chỉnh mức logic của các chân này (CAO hoặc THẤP), các bạn có thể thay đổi hướng chuyển động của động cơ.
Dưới đây là bảng thông số mô tả các chuyển động tương ứng với việc kết hợp các cặp chân điều khiển:
Bằng cách kết hợp các trạng thái của các chân điều khiển, bạn có thể điều khiển động cơ di chuyển thẳng, lùi và dừng lại theo ý muốn.
Chân điều khiển tốc độ (Speed Control Pins)
Hai chân ENA và ENB được sử dụng để bật/tắt động cơ và còn dùng để điều khiển tốc độ quay.
Khi đặt trạng thái của chân ở mức CAO, động cơ sẽ quay. Khi đặt trạng thái của chân ở mức THẤP, động cơ sẽ dừng lại. Tuy nhiên, việc sử dụng PWM giúp cho các bạn có thể điều khiển tốc độ của động cơ.
Linh kiện cần thiết cho dự án
TÊN LINH KIỆN | SỐ LƯỢNG | NƠI BÁN |
Arduino Uno R3 | 1 | Shopee | Cytron |
IC điều khiển động cơ DC L293D | 1 | Shopee | Cytron |
Động cơ vàng | 2 | Shopee | Cytron |
Dây cắm | 10-20 | Shopee | Cytron |
Breadboard | 1 | Shopee | Cytron |
Sơ đồ đấu nối IC điều khiển động cơ L293D với Arduino
Như vậy là các bạn đã hiểu rõ về IC điều khiển động cơ DC L293D Arduino, bước tiếp theo mình sẽ hướng dẫn cách nối IC L293D với Arduino Uno.
Trong ví dụ này, mình sẽ sử dụng hai động cơ DC màu vàng, thường được sử dụng trong các mô hình xe điều khiển và chúng hoạt động ở điện áp từ 3 đến 12V DC. Để cấp nguồn cho động cơ mình sẽ cấp vào 5V trên chân VS (Vcc2) của L293D.
Tiếp theo, các bạn cần cấp nguồn 5V cho mạch logic của L293D. Chân VSS (Vcc1) được nối với chân 5V trên Arduino.
Các chân điều khiển tốc độ và hướng di chuyển động của IC động cơ DC L293D (ENA, IN1, IN2, IN3, IN4 và ENB) sẽ được nối tương ứng với các chân Digital trên Arduino (9, 8, 7, 5, 4 và 3). Lưu ý: Hai chân 9 và 3 đều cần hỗ trợ PWM.
Cuối cùng, kết nối dây của hai động cơ vào (OUT1 và OUT2) và (OUT3 và OUT4).
Code điều khiển động cơ DC L293D
// Motor A connections int enA = 9; int in1 = 8; int in2 = 7; // Motor B connections int enB = 3; int in3 = 5; int in4 = 4; void setup() { // Set all the motor control pins to outputs pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); // Turn off motors - Initial state digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void loop() { directionControl(); delay(1000); speedControl(); delay(1000); } // This function lets you control spinning direction of motors void directionControl() { // Set motors to maximum speed // For PWM maximum possible values are 0 to 255 analogWrite(enA, 255); analogWrite(enB, 255); // Turn on motor A & B digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(2000); // Now change motor directions digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(2000); // Turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } // This function lets you control speed of the motors void speedControl() { // Turn on motors digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // Accelerate from zero to maximum speed for (int i = 0; i < 256; i++) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // Decelerate from maximum speed to zero for (int i = 255; i >= 0; --i) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // Now turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }
Giải thích code
// Motor A connections int enA = 9; int in1 = 8; int in2 = 7; // Motor B connections int enB = 3; int in3 = 5; int in4 = 4;
Các biến enA, in1, in2, enB, in3, in4 được khai báo và gán giá trị cho các chân điều khiển.
void setup() { // Set all the motor control pins to outputs pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); // Turn off motors - Initial state digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }
Trong hàm setup(), các chân điều khiển được khai báo là OUTPUT, tức là chúng được sử dụng để gửi tín hiệu điều khiển đến IC L293D.
Sau đó, tất cả các chân điều khiển của L293D được đặt ở trạng thái LOW để tắt động cơ khi khởi động.
void loop() { directionControl(); delay(1000); speedControl(); delay(1000); }
Trong hàm loop(), sử dụng hai hàm directionControl()
và speedControl()
để điều khiển hướng và tốc độ quay của động cơ.
void directionControl() { // Set motors to maximum speed // For PWM maximum possible values are 0 to 255 analogWrite(enA, 255); analogWrite(enB, 255); // Turn on motor A & B digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(2000); // Now change motor directions digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(2000); // Turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }
Hàm directionControl()
cho phép điều khiển hướng quay của động cơ bằng cách thay đổi trạng thái của các chân điều khiển in1, in2, in3 và in4.
void speedControl() { // Turn on motors digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // Accelerate from zero to maximum speed for (int i = 0; i < 256; i++) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // Decelerate from maximum speed to zero for (int i = 255; i >= 0; --i) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // Now turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }
Hàm speedControl() cho phép điều khiển tốc độ quay của động cơ bằng cách sử dụng PWM (Pulse Width Modulation) trên các chân enA và enB.
Trong hàm speedControl(), động cơ được gia tăng từ tốc độ 0 lên tốc độ tối đa và sau đó giảm từ tốc độ tối đa về 0.
Cuối cùng, trong cả hai hàm directionControl() và speedControl(), sau khi hoàn thành, tất cả các chân điều khiển được đặt ở trạng thái LOW để tắt động cơ.