Bài 6: Driver L298N Module tuyệt vời để điều khiển chiều quay và tốc độ của động cơ DC

Bài trước: Nút nhấn và cách lấy trang thái nút nhấn bằng INPUT và INPUT_PULLUP 
1. L298N là gì?

Module điều khiển motor L298N loại 1 có sẵn ốc gắn sử dụng IC điều khiển L298N có thể điều khiển 2 động cơ một chiều hoặc 1 động cơ bước 4 pha.
Module L298N:
+ Được thiết kế chắc chắn, có sẵn chỗ bắt ốc vào mô hình
+ Có gắn tản nhiệt chống nóng cho IC, giúp IC có thể điều khiển với dòng đỉnh đạt 2A.
+ IC L298N được gắn với các đi ốt trên board giúp bảo vệ vi xử lý chống lại các dòng điện cảm ứng từ việc khởi động/ tắt động cơ.

2. 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 : +5V ~ +12 V
Dòng tối đa cho mỗi cầu H là :2A
Đ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
Công suất hao phí : 20W (khi nhiệt độ T = 75 °C)
Nhiệt độ bảo quản : -25°C ~ +130.

3. Các chân tín hiệu của L298N


1. DC motor 1 “+” hoặc stepper motor A+
2. DC motor 1 “-” hoặc stepper motor A-
3. 12V jumper – tháo jumper ra nếu sử dụng nguồn trên 12V. Jumper này dùng để cấp nguồn cho IC ổn áp tạo ra nguồn 5V nếu nguồn trên 12V sẽ làm cháy IC Nguồn
4. Cắm dây nguồn cung cấp điện áp cho motor vào đây từ 6V đến 35V.
5. Cắm chân GND của nguồn vào đây
6. Ngõ ra nguồn 5V, nếu jumper đầu vào không rút ra.
7. Chân Enable của Motor 1, chân này dùng để cấp xung PWM cho motor nếu dùng VDK thì rút jumper ra và cắm chân PWM vào đây. Giữ nguyên khi dùng với động cơ bước (Điều khiển tốc độ động cơ DC)
8. IN1
9. IN2
10. IN3
11. IN4
12. Chân Enable của Motor 2, chân này dùng để cấp xung PWM cho motor nếu dùng VDK thì rút jumper ra và cắm chân PWM vào đây. Giữ nguyên khi dùng với động cơ bước. (Điều khiển tốc độ động cơ DC)
13. DC motor 2 “+” hoặc stepper motor B+
14. DC motor 2 “-” hoặc stepper motor B-

Chú ý: Chân 5V có thể dùng để nuôi mạch Arduino mà không cần cấp nuồn riêng.


4. Nối mạch với Arduino Uno R3.

Chuẩn bị: 

  • Board Arduino Uno R3.
  • Driver L298N
  • 1 hoặc 2 động cơ để test
  • Dây cắm các loại
  • Pin 3,6V 2 viên, đế pin.
Lắp mạch:

  Sơ đồ không nối chân ENA và ENB. Cách này khi điều khiển động cơ sẽ chạy hết công suât (Không điều khiển được tốc độ động cơ).




Chú ý: Nếu chỉ điều khiển một động cơ như hình chỉ cần dùng chân INT3 và INT4. Nếu các bạn kết nối thêm một động cơ ở chân OUT1 và OUT2 thì dùng thêm chân IN1 và IN2.
Code điều khiển động cơ:
int in1=9;
int in2=10;
int in3=11;
int in4=12;
void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);

}

void loop() {
  
    tien();
    delay(5000);
    dung();
    delay(1000);
    lui();
    delay(5000);
    dung();
    delay(1000);
}
void tien(){
  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);
  }
 void lui(){
  digitalWrite(in1,LOW);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);
  }
 void dung(){
  digitalWrite(in1,LOW);
  digitalWrite(in2,LOW);
  digitalWrite(in3,LOW);
  digitalWrite(in4,LOW);
  }

Giải thích code:
  • Các chân In1, In2, In3, In4 của L298N nối với chân 9,10,11,12 của Arduino.
  • Các chân này được khai báo là chân OUTPUT.
  •  Trong vòng loop() sẽ cho động cơ tiến 5 giây sau đó dừng 5 giây, lùi 5 giây và quá trình lặp lại cho đến khi ngắt kết nối với nguồn.
  • Để động cơ tiến cần cấp tín hiệu ở mức cao cho chân in1 và In3, chân In2 và In4 được cấp tín hiệu mức thấp.
  • Để động cơ lùi cấp tín hiệu ngược lại.
  • Để động cơ dừng cấp tín hiệu mức thấp cho tất cả các chân.   
Sơ đồ có nối chân ENA và ENB (Điều khiển được tốc độ động cơ thông qua việc cấp xung cho các chân ena và enb: 



Chú ý: Chân ENA và ENB phải kết nối với chân có dấu ~ phía trước của Arduino. Trong trường hợp này là chân 3 và chân 5.
Code:
int ena=3
int enb=5;
int in2=10;
int in3=11;
int in4=12;
void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(ena, OUTPUT);
  pinMode(enb, OUTPUT);

}

void loop() {
  
    tien(150);
    delay(5000);
    dung();
    delay(1000);
    lui(150);
    delay(5000);
    dung();
    delay(1000);
}
void tien(int tocdo){
  analogWrite(ena,tocdo);
  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  analogWrite(enb,tocdo);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);
  }
 void lui(int tocdo){
  analogWrite(ena,tocdo);
  digitalWrite(in1,LOW);
  digitalWrite(in2,HIGH);
  analogWrite(enb,tocdo);
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);
  }
 void dung(){
  digitalWrite(ena,0);
  digitalWrite(in1,LOW);
  digitalWrite(in2,LOW);
  digitalWrite(ena,0);
  digitalWrite(in3,LOW);
  digitalWrite(in4,LOW);
  }

Giải thích code:
  • Các chân In1, In2, In3, In4 của L298N nối với chân 9,10,11,12 của Arduino. Các chân ena và enb được nối với chân 3 và 5 đây là 2 chân có thể cấp xung như chân analog nên có thể cấp xùng theo ý muốn từ 0 đến 255.
  • Các chân này được khai báo là chân OUTPUT.
  •  Trong vòng loop() sẽ cho động cơ tiến 5 giây sau đó dừng 5 giây, lùi 5 giây và quá trình lặp lại cho đến khi ngắt kết nối với nguồn. có kèm theo tốc độ là tham số (150). Tham số này càng lờn (<=255) thì tốc độ động cơ càng cao.
  • Để động cơ tiến cần cấp tín hiệu ở mức cao cho chân in1 và In3, chân In2 và In4 được cấp tín hiệu mức thấp.
  • Để động cơ lùi cấp tín hiệu ngược lại.
  • Để động cơ dừng cấp tín hiệu mức thấp cho tất cả các chân. 
Các bạn có thể tham khảo thêm video trên kênh youtube:

Trên đây tôi đã giới thiệu với các bạn cách sử dụng driver L298N để điều khiển động cơ như thế nào. Trong bài sau tôi sẽ trình bày với các bạn cách sử dụng nút nhấn và L298N để điều khiển động cơ và ứng dụng của nó vào việc đóng mở mà cửa. 
Hẹn gặp lại các bạn vào bài tiếp theo.

2 Nhận xét

  1. L298N_TIENLUI:19: error: 'dung' was not declared in this scope

    L298N_TIENLUI:21: error: 'lui' was not declared in this scope

    exit status 1
    'tien' was not declared in this scope

    Trả lờiXóa

Đăng nhận xét

Mới hơn Cũ hơn