Giỏ hàng
DANH MỤC

Cách dùng Module điều khiển động cơ L298N - cầu H để điều khiển động cơ DC

Đăng bởi Cửa hàng linh kiện điện tử KME ngày 0 bình luận

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 ℃

Datasheet bạn có thể tải về tại đây.

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.

Chuẩn bị phần cứng

Nối mạch

Các bạn nối như hình nhé, click vào ảnh để có ảnh to hơn 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.
  • Nếu bạn dùng 5V và động cơ dưới 1A bạn có thể dùng chân 5V của Arduino, nếu không nguồn cấp cho động cơ ở L298 phải là nguồn riêng để không làm hỏng Arduino của bạn.
  • 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é!

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

Mình chơi cũng dễ chịu thôi, các bạn xem nhé, mình sẽ comment trong các dòng code!

 
  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.  
  15. void motor_1_Dung() {
  16. digitalWrite(IN1, LOW);
  17. digitalWrite(IN2, LOW);
  18. }
  19.  
  20. void motor_2_Dung() {
  21. digitalWrite(IN3, LOW);
  22. digitalWrite(IN4, LOW);
  23. }
  24.  
  25. void motor_1_Tien(int speed) { //speed: từ 0 - MAX_SPEED
  26. speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED
  27. digitalWrite(IN1, HIGH);// chân này không có PWM
  28. analogWrite(IN2, 255 - speed);
  29. }
  30.  
  31. void motor_1_Lui(int speed) {
  32. speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED
  33. digitalWrite(IN1, LOW);// chân này không có PWM
  34. analogWrite(IN2, speed);
  35. }
  36.  
  37. void motor_2_Tien(int speed) { //speed: từ 0 - MAX_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
  39. analogWrite(IN3, speed);
  40. digitalWrite(IN4, LOW);// chân này không có PWM
  41. }
  42.  
  43. void motor_2_Lui(int speed) {
  44. speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED
  45. analogWrite(IN4, 255 - speed);
  46. digitalWrite(IN3, HIGH);// chân này không có PWM
  47. }
  48.  
  49. void loop()
  50. {
  51. motor_1_Tien(MAX_SPEED); // motor 1 tiến
  52. delay(5000);//tiến 5 s
  53. motor_2_Lui(MAX_SPEED); //motor 2 lùi
  54. // motor 1 vẫn tiến
  55. delay(2000);//tiến 2 s
  56. motor_1_Dung();
  57. motor_2_Dung();
  58. delay(10000);//dừng 10s
  59. }
 

0 bình luận


Bình luận

Lưu ý: Các bình luận phải được duyệt trước khi được hiển thị.


Cũ hơn Mới hơn