Bài viết hỗ trợ tài liệu cho chương trình đào tạo lập trình web front-end với Angular cho doanh nghiệp của STDIO Training.
Quý doanh nghiệp vui lòng liên hệ tại đây.
STDIO Trong bài viết này, tôi sẽ hướng dẫn các bạn sử dụng IC L298 đã tích hợp sẵn mạch cầu H, ứng dụng trong việc điều khiển cùng lúc 2 động cơ theo chiều quay bất kì, kết hợp với điều xung PWM có thể điều chỉnh tốc độ xoay của động cơ.
Nội dung bài viết

Giới thiệu

Trong bài viết này, tôi sẽ hướng dẫn các bạn sử dụng IC L298 đã tích hợp sẵn mạch cầu H, ứng dụng trong việc điều khiển cùng lúc 2 động cơ theo chiều quay bất kì, kết hợp với điều xung PWM có thể điều chỉnh tốc độ xoay của động cơ.

Tiền đề bài viết

Trong quá trình làm việc với dự án xe của STDIO, việc đầu tiên khi bắt tay vào làm là cho xe chạy thẳng, nhưng vấn đề giữa lý thuyết và thực tế rất khác nhau, vì không phải trong điều kiện lý tưởng nên các linh kiện như: bánh xe, động cơ,.. hoạt động công suất không đều nhau, thực tế sẽ có trường hợp bánh xe to, nhỏ hoặc động cơ xoay nhanh, chậm...

Tôi có đặt vấn đề với anh Vu Quang Huy tại sao không sử dụng một động cơ cho 2 bánh sẽ giúp cho bánh chạy đều, nhưng điều đó thật ngớ ngẩn khi bạn không thể nào đổi hướng khi xe quẹo trái - phải.

Để giải quyết vấn đề đó, tôi sử dụng IC L298 vừa để điều khiển 2 động cơ cùng lúc vừa có thể điều xung PWM để cân bằng độ chênh lệch giữa 2 bánh xe.

Đối tượng hướng đến

Bài viết này hướng đến các bạn đang nghiên cứu với việc lập trình Arduino.

Bạn đọc có thể tham khảo các bài viết khác về Arduino trong Chuyên Mục Arduino.

Các linh kiện điện tử cần thiết các bạn có thể tự mua hoặc truy cập STDIO Electronics​​​ để ủng hộ sản phẩm của STDIO.

Chuẩn bị

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

IC L298N

ss_3

Điện áp điều khiển: +5 V ~ +12 V.

L298 gồm các chân:

  • 12V power, 5V power: bên trong mạch có sử dụng IC điều hướng dòng điện, hoạt động với điện áp 5V, khi nối nguồn 12V mạch sẽ hoạt động với nguồn 12V, tuy nhiên mạch sẽ điều hướng dòng điện.
    • Dòng 12V đẩy vào động cơ để hoạt động.
    • Hạ dòng điện xuống thành 5V và cấp nguồn cho IC.
  • Như vậy khi cấp nguồn 9V: động cơ hoạt động với dòng 9V và IC của mạch sẽ hoạt động với dòng điện 5V. Việc thiết kế có nhằm điều hướng thành 2 dòng điện khác nhau giúp IC hoạt động ổn định và tách nguồn riêng biệt với động cơ.
  • Power GND chân này là GND của nguồn cấp cho Động cơ.
  • 2 Jump A enable và B enable, nếu bạn dùng Board để điều khiển động cơ bước thì giữa nguyên. Nếu điều khiển động cơ bình thường thì nối với chân PWM để điều khiển tốc độ.
  • 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ơ giảm tốc V1. bạn chú ý chân +, -. Nếu bạn nối ngược thì động cơ sẽ chạy ngược.

 

ss_4(2)

Sơ đồ nối dây

ss_1(3)

Điều khiển động cơ A

- Khai báo chân ENA nối với chân số 8 của mạch Arduino.

- Chân In1 - In2 lần lượt nối với chân số 7 - 6 của mạch Arduino.

- Hàm chạy động cơ A theo chiều kim đồng hồ:

  • Chân In1 trạng thái HIGH.
  • Chân In2 trạng thái LOW.

- Hàm chạy động cơ A theo chiều ngược kim đồng hồ:

  • Chân In1 trạng thái LOW.
  • Chân In2 trạng thái HIGH.

- Tắt động cơ :

  • Chân In1 trạng thái LOW.
  • Chân In2 trạng thái LOW.
 //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);   
}

Điều khiển động cơ A - B cùng lúc

//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);
}

Lưu ý

Như tôi đã nói ở trên, việc điều khiển 2 động cơ tuy dễ dàng, nhưng vấn đề phát sinh trong thực tế, 2 động cơ hoạt động không đều nhau, do đó trong quá trình băm xung PWM, ta phải thay đổi giá trị analogWrite để động cơ hoạt động có vận tốc ngang nhau và truyền giá trị PWM vào. Hướng giải quyết là phải đo được vận tốc của từng motor, sau đó điều chỉnh. Như vậy ta phải sử dụng FC-03 có tích hợp IC Lm-393 để đo được vận tốc. Bài viết sau tôi sẽ giúp các bạn giải quyết vấn đề đo vận tốc sử dụng FC-03.

THẢO LUẬN
ĐÓNG