Giao tiếp Module điều khiển động cơ DC L298N với Arduino

Giao tiếp Module điều khiển động cơ DC L298N với Arduino

Module điều khiển động cơ DC L298N Arduino không còn quá xa lạ với những ai yêu thích lập trình Arduino, chúng được sử dụng rộng rãi trong các ứng dụng như xe điều khiển tự động, robot, và nhiều ứng dụng khác. Với giá thành hợp lý và dễ sử dụng, L298 arduino là một module không thể thiếu trong ngăn học tập của mỗi bạn sinh viên.

Đọc thêm: Chế tạo Robot tránh vật cản – Hướng dẫn chi tiết

Đ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 dùng để kiểm soát tốc độ của động cơ DC. Trong PWM, tín hiệu được tạo thành bằng cách thay đổi độ rộng của xung (pulse) tạ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 được bật) được điều chỉnh để điều khiển mức độ công suất hay tín hiệu analog tương ứng. 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ố Digital để điều khiển độ rộng xung và tạo ra tín hiệu 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.

Đọc thêm: Hướng dẫn làm cánh tay Robot 4 bậc sử dụng Arduino + Code

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ử được sử dụng để điều khiển động cơ DC. Nó bao gồm bốn công tắc điện tử (thường là transistor hoặc MOSFET) được kết hợp thành một cấu trúc hình chữ H, cho phép điều khiển luân chuyển dòng điện theo hướng thuận và hướng ngược một cách độc lập.

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 trên phía ngược đượ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 L298N

IC L298 là một vi mạch tích hợp được sử dụng rộng rãi để điều khiển động cơ DC hai chiều. Nó là một mạch cầu H kép, điều khiển động cơ bằng cách điều chỉnh dòng điện và hướng chuyển động của động cơ.

Module L298N được thiết kế để chịu được dòng điện cao và có khả năng điều khiển động cơ với nguồn cấp tối đa lên đến 46V và dòng điện tối đa lên đến 2A cho mỗi kênh động cơ. Nó hỗ trợ các chức năng như tăng tốc (PWM) và đảo hướng chuyển động của động cơ.

L298N có các chân đầu vào điều khiển từ Arduino như chỉnh dòng điện và hướng chuyển động của động cơ. Nó cũng cung cấp các chân đầu ra để kết nối với động cơ và nguồn cấp.

Thông số kỹ thuật

Đọc thêm: Hướng dẫn chế tạo Robot dò Line Arduino, tránh vật cản HC-SR04

Sơ đồ chân Module điều khiển động cơ DC L298N

Chân nguồn cấp cho động cơ (Power Pins)

Module điều khiển động cơ DC L298N arduino có 2 chân cấp nguồn đầu vào là VS và VSS.

  • 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ừ 5 đến 12V.
  • VSS: Chân này được sử dụng để cấp nguồn cho mạch logic bên trong IC L298N và điện áp nằm trong khoảng từ 5V đến 7V.
  • GND: Chân này dùng để nối đất.

Chân đầu ra (Output Pins)

Các kênh đầu ra của module khiển động cơ L298N Arduino thứ tự: OUT1 & OUT2 cho động cơ A và OUT3 & OUT4 động cơ B. Các bạn có thể sử dụng hai động cơ DC 5-12V.

Đầu ra trên module L298N có thể chịu tải tới 2A 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 động cơ.

Chân điều khiển hướng di chuyển (Direction Control Pins)

Các chân trên module cho phép bạn có thể thay đổi hướng chuyển động của động cơ, ví dụ như đi thẳng hoặc lùi. Nguyên lý hoạt động này dựa vào việc điều khiển các công tắc của mạch cầu H bên trong IC L298N.

Module điều khiển động cơ L298N Arduino có hai chân điều khiển hướng. IN1 & IN2 chân điều khiển chiều chuyển động của động cơ A và IN3 & IN4 điều khiển hướng chuyển động của động cơ B.

Có thể điều khiển hướng chuyển động của động cơ bằng cách áp dụng logic ở mức CAO (5V) hoặc logic ở mức THẤP (GND). Bảng thông số dưới đây sẽ cho các bạn thấy được các chuyển động khi kết hợp các cặp đầu vào với nhau.

Chân điều khiển tốc độ (Speed Control Pins)

Các chân điều khiển tốc độ ENA & ENB được sử dụng để bật/tắt động cơ và kiểm soát tốc độ quay của chúng.

Khi đặt các chân này ở mức CAO sẽ làm cho động cơ quay, khi đặt ở mức THẤP sẽ dừng lại. Tuy nhiên, với việc sử dụng PWM các bạn có thể kiểm soát được tốc độ của động cơ.

Trên module L298N arduino sẽ có một Jumper chốt đi kèm, khi có Jumper này các động cơ sẽ quay với tốc độ tối đa. Nếu các bạn muốn điều khiển tốc độ của động cơ theo chương trình, hãy tháo các Jumper này ra và nối các chân hỗ trợ ~PWM trên Arduino.

IC ổn áp 5V 78M05

Module tích hợp một IC ổn áp 5V 78M05 và có thể bật/tắt thông qua một Jumper bên dưới.

Khi Jumper được cắm, IC ổn áp 78M05 hoạt động, chân VSS được cấp nguồn sử dụng từ VS của động cơ. Trong trường hợp này, đầu vào 5V đóng vai trò là chân đầu ra cấp nguồn 5V 0,5A. Các bạn có thể sử dụng để cấp cho Arduino.

Khi tháo jumper, IC 78M05 bị tắt và các bạn phải cung cấp nguồn riêng 5V thông qua chân VSS.

Điện áp rơi của trình điều khiển động cơ L298N

Điện áp rơi (Voltage Drop) của L298N là thông số chỉ ra mức điện áp mất đi khi dòng điện chạy qua IC. Điện áp rơi của L298N được xác định bởi hai yếu tố chính: điện áp đầu vào và dòng điện đầu ra.

Thông thường, L298N có mức điện áp rơi khoảng 1.8V đến 2.5V khi dòng điện đầu ra là 1A. Tuy nhiên, điện áp rơi có thể tăng lên đến khoảng 3V nếu dòng điện đầu ra cao hơn. Do đó, khi tính toán và thiết kế mạch sử dụng L298N, cần lưu ý điện áp rơi để đảm bảo điện áp đầu ra phù hợp với yêu cầu.

Ví dụ điện áp rơi ở đây mình cho là giảm 2V, trong trường hợp các bạn đang sử dụng động cơ 5V, bạn sẽ cần cấp nguồn 7V cho động cơ. Nếu bạn có động cơ 12V thì điện áp cấp cho động cơ là 14V.

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
Module điều khiển động cơ DC L298N 1 Shopee | Cytron
Động cơ vàng 2 Shopee | Cytron
Dây cắm 10-20 Shopee | Cytron

Sơ đồ đấu nối Module điều khiển động cơ L298N với Arduino

Như vậy là các bạn đã hiểu rõ về module điều khiển động cơ L298N Arduino, tiếp theo mình sẽ hướng dẫn các bạn cách nối mạch động cơ với Arduino Uno

Ở đây mình sẽ sử dụng động cơ vàng DC, thường dùng trong các mô hình xe điều khiển và nó có thể sử dụng ở điện áp từ 3 đến 12V DC. Trong dự án này mình sẽ sử dụng nguồn 12V cấp vào chân VS trên L298N, vì điện áp rơi khoảng 2V nên động cơ sẽ hoạt động ở mức là 10V.

Tiếp theo, để cấp nguồn cho IC L298N, các bạn giữ nguyên Jumper để cho IC ổn áp 78M05 trên bo mạch hoạt động.

Các chân điều khiển tốc độ và hướng chuyển động của module động cơ DC l298N (ENA, IN1, IN2, IN3, IN4 và ENB) sẽ nối tương ứng với các chân Digital của Arduino (9, 8, 7, 5, 4 và 3). Lưu ý: hai chân 9 và 3 đều phải được hỗ trợ PWM.

Cuối cùng, đấu dây của hai động cơ vào (OUT1 và OUT2) và (OUT3 và OUT4).

Giao tiếp Module điều khiển động cơ DC L298N với Arduino

Code điều khiển động cơ L298N Arduino

Đoạn code mình sẽ sử dụng để điều khiển động cơ sử dụng mạch L298N. Mạch điều khiển được kết nối với hai động cơ (Motor A và Motor B), thông qua các chân in1, in2, in3, in4 để điều khiển hướng chuyển động và chân enA, enB để điều khiển tốc độ.

// 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

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 và được khởi tạo ở trạng thái ban đầu LOW để tắt động cơ.

void loop() {
	directionControl();
	delay(1000);
	speedControl();
	delay(1000);
}

Trong hàm loop(), có hai phần chính: directionControl()speedControl(). Hàm directionControl() được sử dụng để điều khiển hướng chuyển động của động cơ. Đầu tiên, tốc độ động cơ được đặt là tối đa (255) bằng cách sử dụng hàm analogWrite(). Sau đó, các chân in1 và in3 được điều khiển để quay theo một hướng trong một khoảng thời gian nhất định (2000ms). Tiếp theo, hướng quay của động cơ được thay đổi và tiếp tục quay theo hướng mới trong khoảng thời gian tương tự. Cuối cùng, động cơ được tắt bằng cách đặt các chân điều khiển là LOW.

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() được sử dụng để điều khiển tốc độ của động cơ. Đầu tiên, hướng quay của động cơ được đặt. Sau đó, tốc độ của động cơ tăng dần từ 0 lên tối đa (256) trong một khoảng thời gian nhất định (20ms cho mỗi mức tăng). Sau đó, tốc độ giảm dần từ tối đa xuống 0 trong cùng một khoảng thời gian. Cuối cùng, động cơ được tắt bằng cách đặt các chân điều khiển là LOW.

Bài viết liên quan

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments