Search Code

Sử dụng Trình điều khiển động cơ L298N để điều khiển động cơ bước 4 dây

Sử dụng Trình điều khiển động cơ L298N để điều khiển động cơ bước 4 dây

Trong hướng dẫn này, chúng ta sẽ khám phá cách điều khiển động cơ bước 4 dây bằng trình điều khiển động cơ L298N kết hợp với Arduino. L298N là một trình điều khiển cầu H kép linh hoạt cho phép chúng ta điều khiển hướng và tốc độ của động cơ bước một cách hiệu quả. Đến cuối hướng dẫn này, bạn sẽ có một thiết lập hoạt động có thể xoay động cơ bước theo cả hai hướng và điều khiển tốc độ của nó bằng chiết áp.

L298N motor driver (yellow connector)

Để giúp bạn hiểu rõ hơn về quy trình, tôi khuyên bạn nên xem video liên quan, video này cung cấp minh họa trực quan về cách đấu dây và viết mã (trong video tại 01:30).

Giải thích về Phần cứng

Trình điều khiển động cơ L298N được thiết kế để điều khiển động cơ bằng cách cho phép bạn dẫn động chúng theo cả hướng tiến và lùi. Nó sử dụng cấu hình cầu H, nghĩa là nó có thể chuyển đổi cực tính của điện áp đặt vào động cơ, do đó đảo ngược hướng của nó. Trình điều khiển này có thể xử lý điện áp cung cấp lên đến 46V và dòng điện liên tục 2A mỗi kênh, phù hợp cho nhiều ứng dụng.

Trong thiết lập của chúng ta, chúng ta sẽ sử dụng bốn chân điều khiển để quản lý động cơ bước. Các chân chính là ENAENB, phải được đặt ở mức CAO (5V) để kích hoạt trình điều khiển. Các chân IN1, IN2, IN3IN4 sẽ điều khiển trạng thái cuộn dây của động cơ, cho phép nó bước theo hướng mong muốn.

Chi tiết từ Bảng dữ liệu

Nhà sản xuấtSTMicroelectronics
Số linh kiệnL298N
Điện áp logic/IO5 V
Điện áp cung cấp5–46 V (VS)
Dòng điện đầu ra (mỗi kênh)Tối đa 2 A/kênh (liên tục)
Dòng điện đỉnh (mỗi kênh)Tối đa 3 A
Hướng dẫn tần số PWM1 kHz đến 20 kHz
Ngưỡng logic đầu vào0,8 V (thấp), 2,0 V (cao)
Sụt áp / RDS(on) / bão hòaTối đa 1,5 V
Giới hạn nhiệtTối đa 150 °C
Kiểu đóng góiDIP-15
Ghi chú / biến thểCũng có sẵn ở phiên bản phẳng (L298P)

  • Đảm bảo ENAENB được kết nối với 5V để hoạt động chính xác.
  • Sử dụng tản nhiệt đầy đủ cho các ứng dụng dòng điện cao để tránh quá nhiệt.
  • Duy trì nối đất chung giữa Arduino và trình điều khiển động cơ.
  • Cẩn thận với cực tính khi đấu dây để tránh làm hỏng động cơ hoặc trình điều khiển.
  • Lắp đặt tụ điện tách rời gần các chân nguồn để lọc nhiễu.
  • Điều chỉnh tần số PWM dựa trên thông số kỹ thuật của động cơ để có hiệu suất tối ưu.

Hướng dẫn Đấu dây

L298N motor driver (yellow connector)
L298N motor driver (yellow connector)

Để đấu dây trình điều khiển động cơ L298N với Arduino và động cơ bước, hãy bắt đầu bằng cách kết nối nguồn điện. Kết nối chân VIN trên L298N với nguồn điện 12V của bạn. Tiếp theo, kết nối chân GND trên L298N với đất của nguồn điện và cũng với đất của Arduino.

Bây giờ, đối với các chân điều khiển, kết nối ENA với chân 2 trên Arduino và ENB với chân 3. Tiếp theo, kết nối IN1 với chân 8, IN2 với chân 9, IN3 với chân 10 và IN4 với chân 11 trên Arduino. Cuối cùng, kết nối dây của động cơ bước với các đầu ra của L298N. Đảm bảo rằng hai cặp dây từ động cơ được kết nối chính xác với các đầu ra.

Ví dụ Mã & Giải thích

Trong mã, trước tiên chúng ta bao gồm thư viện Stepper.h để đơn giản hóa việc điều khiển động cơ bước. Chúng ta định nghĩa tổng số bước trên mỗi vòng quay, điều này rất quan trọng cho chuyển động chính xác. Các định danh chính trong mã bao gồm stepsPerRevolution, thiết lập số bước cần thiết cho một vòng quay đầy đủ, và myStepper, khởi tạo đối tượng động cơ bước với các chân được chỉ định.

const int stepsPerRevolution = 200;  // thay đổi giá trị này để phù hợp với số bước trên mỗi vòng quay
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); // khởi tạo thư viện động cơ bước

Đoạn trích này khởi tạo động cơ bước với các chân phù hợp. Trong hàm setup(), chúng ta đặt tốc độ của động cơ và kích hoạt trình điều khiển bằng cách đặt chân 2 và 3 ở mức CAO.

void setup() {
  myStepper.setSpeed(300); // đặt tốc độ ở 60 vòng/phút
  pinMode(2,OUTPUT); // cho EN1
  digitalWrite(2,HIGH); // kích hoạt EN1
  pinMode(3,OUTPUT); // cho EN2
  digitalWrite(3,HIGH); // kích hoạt EN2
}

Trong hàm loop(), động cơ bước một vòng quay theo cả chiều kim đồng hồ và ngược chiều kim đồng hồ với độ trễ ở giữa. Điều này cho phép bạn quan sát hoạt động của động cơ.

void loop() {
  myStepper.step(stepsPerRevolution); // bước một vòng quay theo một hướng
  delay(500); // chờ nửa giây
  myStepper.step(-stepsPerRevolution); // bước một vòng quay theo hướng khác
  delay(500); // chờ nửa giây
}

Đoạn trích này minh họa cách điều khiển động cơ để xoay theo cả hai hướng. Mã đầy đủ được tải bên dưới bài viết để bạn tham khảo.

Trình diễn / Điều gì sẽ xảy ra

Khi mọi thứ đã được kết nối đúng cách và mã đã được tải lên, bạn sẽ thấy động cơ bước quay một vòng đầy đủ theo một hướng, sau đó quay một vòng đầy đủ theo hướng ngược lại. Ngoài ra, nếu bạn tích hợp chiết áp để điều khiển tốc độ, việc điều chỉnh nó sẽ thay đổi tốc độ quay của động cơ. Hãy chú ý đến dòng điện của động cơ; khi bạn tăng tốc độ, động cơ có thể tiêu thụ nhiều dòng điện hơn, điều này có thể dẫn đến quá nhiệt nếu không được quản lý đúng cách (trong video tại 09:45).

Nếu động cơ không quay như mong đợi, hãy kiểm tra hệ thống dây điện để đảm bảo rằng tất cả các kết nối đều chắc chắn và được định hướng đúng. Đồng thời, xác minh rằng điện áp nguồn cung cấp phù hợp với động cơ bước của bạn.

Mốc Thời Gian Video

  • 00:00 - Giới thiệu
  • 01:30 - Giải thích về hệ thống dây điện
  • 05:00 - Tổng quan về mã
  • 09:45 - Trình diễn điều khiển động cơ

Hình ảnh

L298N motor driver (yellow connector)
L298N motor driver (yellow connector)
L298N motor driver (yellow connector)
L298N motor driver (yellow connector)
L298N motor driver (yellow connector)
L298N motor driver (yellow connector)
Nema17_stpper_motor-1
Nema17_stpper_motor-1
Nema17_stpper_motor-2
Nema17_stpper_motor-2
94-Code for One Revolution
Ngôn ngữ: C++
/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 Modified by Ahmad S. for Robojax.com
 on May 19, 2018 at 19:31, in Ajax, Ontario, Canada

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(300);
  // initialize the serial port:
  Serial.begin(9600);
  // L298N for Robojax.com 
  pinMode(2,OUTPUT);// for EN1
  digitalWrite(2,HIGH);// enable EN1
  pinMode(3,OUTPUT);// for EN1
  digitalWrite(3,HIGH); // enable EN2
}

void loop() {
  // step one revolution  in one direction:
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);

// L298N for Robojax.com 
  // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}
95-Code for rotating a stepper motor one step at a time
Ngôn ngữ: C++
/*
 Stepper Motor Control - one step at a time

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor will step one step at a time, very slowly. You can use this to
 test that you've got the four wires of your stepper wired to the correct
 pins. If wired correctly, all steps should be in the same direction.

 Use this also to count the number of steps per revolution of your motor,
 if you don't know it. Then plug that number into the oneRevolution
 example to see if you got it right.

 Created 30 Nov. 2009
 by Tom Igoe

 Modified by Ahmad S. for Robojax.com
 on May 19, 2018 at 19:31, in Ajax, Ontario, Canada
 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

int stepCount = 0;         // number of steps the motor has taken

void setup() {
  // initialize the serial port:
  Serial.begin(9600);

  // L298N for Robojax.com 
  pinMode(2,OUTPUT);// for EN1
  digitalWrite(2,HIGH);// enable EN1
  pinMode(3,OUTPUT);// for EN1
  digitalWrite(3,HIGH); // enable EN2
}  


void loop() {
  // step one step:
    // L298N for Robojax.com 
  myStepper.step(-1);
  Serial.print("steps:");
  Serial.println(stepCount);
  stepCount++;
  delay(200);
}

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Chưa có tài nguyên nào.

Tập tin📁

Bảng dữ liệu (pdf)