Điều khiển động cơ một chiều bằng L298

Điều khiển động cơ một chiều bằng L298 là một cách dùng phổ biến hiện nay. Có thể thay thế cho cách IC cầu H và Motor shield của Arduino. Hãy cùng tìm hiểu qua bài viết sau nhé.

Module L298 là

Module L298 là một mạch điều khiển động cơ một chiều DC cùng lúc. L298 là IC điều khiển cầu kép toàn kỳ có dải điện áp hoạt động rộng, xử lý dòng tải có mức tối đa 3A. Bao gồm điện áp bão hòa thấp và bảo vệ quá nhiệt. Có cấu tạo từ hai mạch cầu H transistor.

Thông số kỹ thuật của L298:

  • Điện áp ở đầu vào: dao động từ 5 – 30 V
  • Điện áp tín hiệu điều khiển: 5 – 7V
  • Điện áp logic: Low: từ -0,3V dao động đến 1,5V; High: 2,3V đến Vss.
  • Dòng điện tối đa cho từng động cơ là 2A.
  • Dòng yêu cầu của tín hiệu điều khiển từ 0 – 36 mA.
  • Công suất: 1 cầu tương đương 25W.
  • Kích thước: 43x43x27mm.

Điều khiển động cơ một chiều bằng L298

Cấu tạo và sơ đồ chân của L298

1. Cấu tạo của module L298 bao gồm các chân sau

  • Hai chân cấp nguồn trực tiếp đến động cơ là 12V power và 5V power. Ngoài ra bạn cũng có thể cấp nguồn 9 -12V ở 12V.
  • Power GND là GDN của nguồn cấp cho động cơ.
  • 2 Jump A enable và B enable.
  • 4 chân Input gồm có: IN1, IN2, IN3,IN4.
  • Output A sẽ được nối với động cơ A. Khi nối bạn phải chú ý ký hiệu “ +;-” vì khi bạn nối ngược động cơ sẽ chạy theo chiều ngược.
  • Gồm hai phần điều khiển động cơ. Có thể điều khiển cho động cơ 4 dây và động cơ 6 dây.
Điều khiển động cơ một chiều bằng L298
Sơ đồ chân

2. Sơ đồ chân của module L298

  • Khi nối mạch để điều khiển động cơ, bạn cần chú ý hai cực +; – của động cơ sao cho tương xứng với chân + ; – của Output.
  • Tiếp theo cấp nguồn cho module L298, khi đó phải chú ý chọn đúng Jump.
  • Đối với động cơ dưới 1A bạn có thể sử dụng chân 5V của Arduino.
  • Các chân Input IN1, IN2, IN3, IN4 của L298 sẽ được nối tương ứng với các chân D7, D6, D5, D4 của Arduino.
  • Các đầu ra High và Low có nhiệm vụ điều khiển chiều quay của động cơ ở các chân INx.

Ví dụ:

  • Chân IN1 là chân OutA 1, chân IN2 là chân OutA 2.
  • Khi cấp nguồn cực dương vào IN1 và cực âm vào IN2 thì động cơ quay 1 chiều. Còn khi cực âm vào IN1 và cực dương vào IN2 thì động cơ quay chiều còn lại.
  • Cực dương sẽ mang điện thế 5V, cực âm điện thế 0V. Hiệu điện thế bằng điện thế IN1 – điện thế IN2. Nếu hiệu điện thế 5V là mạnh nhất để điều khiển động cơ thì khi bạn hạ hiệu điện thế xuống động cơ sẽ tự động yếu đi. Và khi hiệu điện thế bằng 0 thì động cơ sẽ đổi chiều.

Điều khiển động cơ một chiều bằng L298

Bước 1: Chuẩn bị phần cứng

  • Arduino Uno.
  • IC L298.
  • 2 Pin sạc 18650 Panasonic 4.2V 4200mAh.
  • Động cơ DC giảm tốc V1.

Bước 2: Điều khiển động cơ

  • Khai báo chân ENA nối với chân số 8 đối với mạch Arduino.
  • Nối chân IN1 với chân số 7 và chân IN2 với chân số 6 của mạch Arduino.
  • Hàm của động cơ theo chiều kim đồng hồ: chân IN1 mang trạng thái High, chân IN2 mang trạng thái Low.
  • Hàm của động cơ chạy ngược chiều kim đồng hồ khi: chân IN1 mang trạng thái Low và chân IN2 mang trạng thái High.
  • Khi tắt động cơ thì chân IN1 và chân IN2 đều mang trạng thái Low.
Điều khiển động cơ một chiều bằng L298
Điều khiển động cơ một chiều bằng L298

Một số mẫu code điều khiển động cơ một chiều bằng L298

Mẫu 1:

//Motor A

int enA = 8;

int in1 = 7;

int in2 = 6;

void setup()

{

pinMode(enA, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

}

void motorA()

{

//Running motor A

digitalWrite(in1, HIGH);

digitalWrite(in2, LOW);

analogWrite(enA, 200);

//Speed PWM 0~255

//Reverse 2s.

delay(2000);

digitalWrite(in1, LOW);

digitalWrite(in2, HIGH);

//STOP 2s.

delay(2000);

digitalWrite(in1, LOW);

digitalWrite(in2, LOW);

}

void loop()

{

motorA();

delay(1000);

Mẫu 2:

//Motor A

int enA = 8;

int in1 = 7;

int in2 = 6;

//Motor B

int in3 = 5;

int in4 = 4;

int enB = 3;

void setup()

{

pinMode(enA, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

pinMode(enB,OUTPUT);

pinMode(in3, OUTPUT);

pinMode(in4, OUTPUT);

}

void MotorRunning()

{

//Running motor A

digitalWrite(in1, HIGH);

digitalWrite(in2, LOW);

analogWrite(enA, 200);

//Speed PWM: 0~255

//Running motor B

digitalWrite(in3, HIGH);

digitalWrite(in4, LOW);

analogWrite(enB, 200);

//Speed PWM: 0~255

//Reverse 2s.

delay(2000);

digitalWrite(in1, LOW);

digitalWrite(in2, HIGH);

digitalWrite(in3, LOW);

digitalWrite(in4, HIGH);

//STOP 2s.

delay(2000);

digitalWrite(in1, LOW);

digitalWrite(in2, LOW);

digitalWrite(in3, LOW);

digitalWrite(in4, LOW);

}

void loop()

{

MotorRunning();

delay(1000);

}

Mẫu 3:

  1. #define IN1 7
  2. #define IN2 6
  3. #define IN3 5
  4. #define IN4 4
  5. #define MAX_SPEED 255 //từ 0-255
  6. #define MIN_SPEED 0
  7. void setup()
  8. {
  9.      pinMode(IN1, OUTPUT);
  10.      pinMode(IN2, OUTPUT);
  11.      pinMode(IN3, OUTPUT);
  12.      pinMode(IN4, OUTPUT);
  13. }
  14. void motor_1_Dung() {
  15.      digitalWrite(IN1, LOW);
  16.      digitalWrite(IN2, LOW);
  17. }
  18. void motor_2_Dung() {
  19.      digitalWrite(IN3, LOW);
  20.      digitalWrite(IN4, LOW);
  21. }
  22. void motor_1_Tien(int speed) { //speed: từ 0 – MAX_SPEED
  23.      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
  24.      digitalWrite(IN1, HIGH);// chân này không có PWM
  25.      analogWrite(IN2, 255 – speed);
  26. }
  27. void motor_1_Lui(int speed) {
  28.      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
  29.      digitalWrite(IN1, LOW);// chân này không có PWM
  30.      analogWrite(IN2, speed);
  31. }
  32. void motor_2_Tien(int speed) { //speed: từ 0 – MAX_SPEED
  33.      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
  34.      analogWrite(IN3, speed);
  35.      digitalWrite(IN4, LOW);// chân này không có PWM
  36. }
  37. void motor_2_Lui(int speed) {
  38.      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
  39.      analogWrite(IN4, 255 – speed);
  40.      digitalWrite(IN3, HIGH);// chân này không có PWM
  41. }
  42. void loop()
  43. {
  44.      motor_1_Tien(MAX_SPEED); // motor 1 tiến
  45.      delay(5000);//tiến 5 s
  46.      motor_2_Lui(MAX_SPEED); //motor 2 lùi
  47.      // motor 1 vẫn tiến
  48.      delay(2000);//tiến 2 s
  49.      motor_1_Dung();
  50.      motor_2_Dung();
  51.      delay(10000);//dừng 10s
  52. }

Trên đây là tổng hợp các kiến thức về Điều khiển động cơ một chiều bằng L298. Hy vọng sẽ giúp ích cho các bạn.

Tham khảo thêm về Điều khiển tốc độ động cơ một chiều bằng PWM

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Hotline Miền Bắc: 0971.591.766
Hotline Miền Nam: 0912.434.956