Bài viết chia sẻ cách sử dụng Module L298D để điều khiển động cơ dễ dàng và có độ chính xác cao.Giúp các bạn mới có thể sử dụng một cách dễ dàng.
I.Giới thiệu Module L298D
Module L298N cũng là một module thông dụng với chức năng thông dụng và giá thành cực kỳ rẻ là lựa chọn của các bạn học sinh, sinh viên.
II.Thông số kỹ thuật
- Driver: L298N tích hợp hai mạch cầu H.
- Điện áp điều khiển: +5 V ~ +12 V
- Dòng tối đa cho mỗi cầu H là: 2A (=>2A cho mỗi motor)
- Điện áp của tín hiệu điều khiển: +5 V ~ +7 V
- Dòng của tín hiệu điều khiển: 0 ~ 36mA (Arduino có thể chơi đến 40mA nên khỏe re nhé các bạn)
- Công suất hao phí: 20W (khi nhiệt độ T = 75 ℃)
- Nhiệt độ bảo quản: -25 ℃ ~ +130 ℃
1.L298 gồm các chân
- 12V power, 5V power. Đây là 2 chân cấp nguồn trực tiếp đến động cơ.
- Bạn có thể cấp nguồn 9-12V ở 12V.
- Bên cạnh đó có jumper 5V, nếu bạn để như hình ở trên thì sẽ có nguồn 5V ra ở cổng 5V power, ngược lại thì không. Bạn để như hình thì ta chỉ cần cấp nguồn 12V vô ở 12V power là có 5V ở 5V power, từ đó cấp cho Arduino .
- Power GND chân này là GND của nguồn cấp cho Động cơ.
- Nếu chơi Arduino thì nhớ nối với GND của Arduino
- 2 Jump A enable và B enable, để như hình, đừng rút ra bạn nhé!
- Gồm có 4 chân Input. IN1, IN2, IN3, IN4. Chức năng các chân này tôi sẽ giải thích ở bước sau.
- Output A: nối với động cơ A. bạn chú ý chân +, -. Nếu bạn nối ngược thì động cơ sẽ chạy ngược. Và chú ý nếu bạn nối động cơ bước, bạn phải đấu nối các pha cho phù hợp.
- Nói chung thì cứ thử sai mà sửa thôi haha.
Board này gồm 2 phần điều khiển động cơ. Và có thể điều khiển cho 1 động cơ bước 6 dây hoặc 4 dây.
III.Chuẩn bị phần cứng
- Arduino uno
- Cầu H L298
- Trục vít
- Dây cắm
- Động cơ DC (motor)
1.Nối mạch
Các bạn nối như hình nhé.
- Nếu bạn điều khiển 2 Động cơ của robot, bạn cần chú ý bài đấu nối Cực +, – của động cơ tương ứng với chân + , – của OUTPUT X.
- Tiếp bạn cấp nguồn cho Module L298 như phần giải thích ở trên. Chú ý chọn Jump cho đúng.
- Nguồn cấp cho động cơ nếu dòng I < 1A thì có thể dùng nguồn của Arduino.Ngược lại thì dùng nguồn ngoài.
- Các chân số D7, D6, D5 và D4 của Arduino sẽ nối tương ứng với IN1, IN2, IN3 và IN4 của L298.
- Chiều quay của động cơ được điều khiển bằng cách xuất các đầu ra HIGH hoặc LOW tại các chân INx.
- Ví dụ với Động Cơ A: Logic HIGH ở IN1 và IN2 Logic LOW sẽ làm động cơ quay 1 hướng nếu đặt Logic ngược lại sẽ làm động cơ quay theo hướng khác.
- Bạn cần phải nhớ, đây là làm động cơ chỉ quay hết công suất mà thôi. Nếu muốn thay đổi tốc độ của nó, bạn cần phải băm xung PWM bằng các chân có hỗ trợ PWM trên Arduino (những chân có dấu ~).
- Để hiêu rõ, bây giờ mình sẽ giúp các bạn tưởng tượng nhé:
- Tưởng tượng, chân IN1 là chân OutA.1, chân IN2 là chân OutA.2.
- Bạn cấp cực dương vào IN1, cực âm vào IN2 => motor quay một chiều (chiều 1).
- Bạn cấp cực âm vào IN1, cực dương vào IN2 => motor quay chiều còn lại (chiều 2)!
- Cực dương ở đây là điện thế 5V, cực âm ở đây là điện thế 0V. Hiện điện thế được tính là điện thế ở IN1 trừ hiệu điện thế IN2.
- Giả sử, hiệu điện thế 5V sẽ là mạnh nhất trong việc điều khiển động cơ. Như vậy, chỉ cần hạ hiệu điện thế xuống là động cơ sẽ bị yếu đi.
- Và nếu hiệu điện thế < 0 => động cơ sẽ đảo chiều!
- Hãy vận dụng các luật này để hiểu những dòng code của mình phía dưới nhé!
2.Code điều khiển động cơ
Code:
#define IN1 7
#define IN2 6
#define IN3 5
#define IN4 4
#define MAX_SPEED 255 //từ 0-255
#define MIN_SPEED 0
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void motor_1_Dung() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
}
void motor_2_Dung() {
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void motor_1_Tien(int speed) { //speed: từ 0 - MAX_SPEED
speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
digitalWrite(IN1, HIGH);// chân này không có PWM
analogWrite(IN2, 255 - speed);
}
void motor_1_Lui(int speed) {
speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
digitalWrite(IN1, LOW);// chân này không có PWM
analogWrite(IN2, speed);
}
void motor_2_Tien(int speed) { //speed: từ 0 - MAX_SPEED
speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
analogWrite(IN3, speed);
digitalWrite(IN4, LOW);// chân này không có PWM
}
void motor_2_Lui(int speed) {
speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
analogWrite(IN4, 255 - speed);
digitalWrite(IN3, HIGH);// chân này không có PWM
}
void loop()
{
motor_1_Tien(MAX_SPEED); // motor 1 tiến
delay(5000);//tiến 5 s
motor_2_Lui(MAX_SPEED); //motor 2 lùi
// motor 1 vẫn tiến
delay(2000);//tiến 2 s
motor_1_Dung();
motor_2_Dung();
delay(10000);//dừng 10s
}
Chúc các bạn thành công !