3 mạch điều khiển tốc độ và đảo chiều động cơ bước với Arduino

Tổng hợp 3 mạch điều khiển tốc độ và đảo chiều động cơ bước với Arduino cùng với các driver A4988, L298, TB6600. Thông số kỹ thuật và ưu nhược điểm của từng mạch.

1. Điều khiển tốc độ và đảo chiều động cơ bước bằng L298

1.1 Sơ đồ đấu dây với L298

Mạch bên dưới là mạch điều khiển tốc độ và đảo chiều động cơ bước dùng driver cầu H L298. Cầu H L298 được sử dụng để điều khiển chiều và tốc độ 2 động cơ DC. Nhưng cũng được sử dụng để điều khiển được 1 động cơ bước có 4 dây.

+ Ngõ ra OUT1 và OUT 2 của L298 được kết nối với mỗi cuộn dây của động cơ bước. Động cơ bước sẽ gồm 2 cuộn dây, và có thể được xác định bằng cách đo điện trở của các cuộn dây động cơ.

+ Kết nối các chân đầu vào (IN1, IN2, IN3, IN4) của L298 với các chân (10, 9, 7, 6) của Arduino.

+ Lưu ý cần kết nối GND của arduino với GND của L298 để tam chiếu điện áp. Nhiều bạn quên kết nối dây này dẫn đến mạch không hoạt động được.

điều khiển tốc độ và đảo chiều động cơ bước với L298

Sơ đồ đấu dây Arduino với L298

1.2 Chương trình Arduino với L298

a. Điều khiển đảo chiều động cơ bước luân phiên

Chương trình sau đây điều khiển đảo chiều động cơ bước quay một vòng theo chiều thuận, sau đó dừng 2s và tiếp tục quay 1 vòng theo chiều ngược lại.

Chương trình trên Arduino sử dụng thư viện điều khiển động cơ bước nên phần chương trình rất đơn giản. Sử dụng hàm myStepper.setSpeed để điều khiển tốc độ và hàm myStepper.step để điều khiển số bước mà động cơ quay.

#include <Stepper.h>

const int stepsPerRevolution = 200;  // độ phân giải của động cơ là 200

Stepper myStepper(stepsPerRevolution, 10, 9, 7, 6);//Khai báo các chân điều khiển là 6,7, 9, 10

void setup() {

   myStepper.setSpeed(60); // cài đặt tốc độ động cơ là 60

  }

void loop() {

  myStepper.step(stepsPerRevolution);// Quay động cơ 1 vòng theo chiều thuận

  delay(2000); // Dừng 2s sau khi quay xong 1 vòng

  myStepper.step(-stepsPerRevolution);// Quay động cơ 1 vòng theo chiều nghịch

  delay(2000);

}

b. Điều khiển tốc độ động cơ bước bằng L298

Một ví dụ tiếp theo sử dụng Arduino đọc giá trị biến trở, tham chiếu giá trị điện trở để điều chỉnh tốc độ của động cơ. Biến trở sẽ được cấp nguồn 5V và chân giữa biến trở nối với chân A0 của Arduino.

Mytranshop.com khuyên bạn nên xem:  Top 8 Bài Tập Yoga Chữa Đau Khớp Gối Nhanh 2022 | Mytranshop.com

Chương trình điều khiển tốc độ động cơ bước:

#include <Stepper.h>

const int stepsPerRevolution = 200;// động cơ bước có độ phân giải 200 xung

Stepper myStepper(stepsPerRevolution, 10, 9, 7, 6);// Các chân kết nối với IN1, IN2, IN3, IN4 của L298

void setup() {

}

void loop() {

  int sensorReading = analogRead(A0);// Đọc giá trị biến trở qua chân A0

  int motorSpeed = map(sensorReading, 0, 1023, 0, 100);  // chuyển đổi giá trị biến trở từ 0 – 1023 thành giá trị tốc tốc độ từ 0 – 100

   if (motorSpeed > 0) {

    myStepper.setSpeed(motorSpeed); // Thay đổi tốc độ của động cơ

    myStepper.step(stepsPerRevolution / 100);//bước 1/100 theo độ phân giải của động cơ

   }

}

2. Điều khiển động cơ bước thông qua driver A4988

2.1 Sơ đồ đấu dây với A4988

Sơ đồ mạch điều khiển động cơ bước được vẽ như hình bên dưới:

+ Cấp nguồn cho mạch động lực ở hai chân VMOT và GND. Cấp nguồn cho mạch điều khiển tại hai chân VDD và GND, ở đây ta sử dụng nguồn 5V từ Arduino.

+ Kết nối chân 1A và 1B kết nối với một cuộn dây động cơ, chân 2A và 2B kết nối với một cuộn dây còn lại.

+ Chân DIR của A4988 kết nối với chân số 2 Arduino điều khiển chiều quay động cơ.

+ Chân STEP của A4988 kết nối với chân số 3 Arduino điều khiển số bước quay.

+ Lưu ý chân RESET cần nối với chân SLEEP để đưa lên mức cao để cho phép chạy.

+ Dòng điện động cơ có thể được điều chinh thông qua biến trở trên board A4988.

điều khiển tốc độ và đảo chiều động cơ bước với A4988

Sơ đồ đấu dây mạch A4988 điều khiển động cơ bước

2.2 Chương trình Arduino với A4988

a. Điều khiển đảo chiều động cơ bước luân phiên

Giả sử động cơ có độ phân giải 200 xung/vòng, chương trình dưới đây điều khiển động cơ chạy 1 vòng theo chiều thuận, sau đó dừng 2s. Sau đó động quay theo chiều ngược lại và sau đó ngừng 2s trước khi quay theo chiều thuận trở lại.

const int stepPin = 2; //Chân số 2 kết nối với chân STEP của A4988

const int dirPin = 3;  //Chân số 3 kết nối với chân DIR của A4988

void setup() {

  pinMode(stepPin,OUTPUT); //Thiết lập 2 chân số 2,3 là ngõ ra

  pinMode(dirPin,OUTPUT);

}

void loop() {

  digitalWrite(dirPin,HIGH); // Cho động cơ quay theo một chiều xác định

   for(int x = 0; x < 200; x++) { // Chương trình tạo ra 200 xung vuông, độ rộng xung 0,5ms

    digitalWrite(stepPin,HIGH);

    delayMicroseconds(500);

    digitalWrite(stepPin,LOW);

    delayMicroseconds(500);

  }

  delay(2000); // Dừng 2 giây sau khi quay

   digitalWrite(dirPin,LOW); //Thay đổi chiều động cơ ngược lại

  for(int x = 0; x < 400; x++) { // Chương trình tạo ra 400 xung để động cơ quay 2 vòng

    digitalWrite(stepPin,HIGH);

    delayMicroseconds(500);

    digitalWrite(stepPin,LOW);

    delayMicroseconds(500);

  }

  delay(2000);

}

b. Chương trình điều khiển tốc độ động cơ bước bằng A4988

Tốc độ động cơ được thay đổi bằng các thay đôi tần số của xung điều khiển từ Arduino. Chương trình dưới đây sẽ đọc giá trị biến trở tại chân A0, giá trị đọc được sẽ từ 0 – 1023.

Mytranshop.com khuyên bạn nên xem:  Ý tưởng thiết kế phòng khách kết hợp phòng làm việc độc đáo - 2022 | Mytranshop.com

Sau đó chuyển giá trị này về từ 0,3 – 4ms, có thể hiệu chỉnh giá trị này phù hợp với động cơ. Vì nếu tần số động cơ quá thấp động cơ không đủ moment quay, tần số quá cao động cơ không thể đáp ứng được.

const int stepPin = 2; //Chân số 2 điều khiển bước động cơ

const int dirPin = 3; //Chân số 3 điều khiển chiều quay động cơ

int potentionmeter,delaytime;

void setup() {

  pinMode(stepPin,OUTPUT);

  pinMode(dirPin,OUTPUT);

  digitalWrite(dirPin,HIGH); //Cho phép động cơ động cơ quay theo chiều xác định

}

void loop() {

  potentionmeter = analogRead(A0); // Đọc giá trị biến trở

  delaytime = map(potentionmeter, 0, 1023, 300,4000); //chuyển giá trị biến trở từ 0-1023 về 300-4000

  // Tạo xung điều khiển, với độ rộng xung có giá trị tham chiếu từ biến trở

  digitalWrite(stepPin, HIGH);

  delayMicroseconds(delaytime); // Thời gian delay từ 0,3ms – 4ms

  digitalWrite(stepPin, LOW);

  delayMicroseconds(delaytime);

}

3. Điều khiển tốc độ và đảo chiều động cơ bước bằng driver TB6600

3.1 Sơ đồ đấu dây với driver TB6600

Mạch bên dưới là sơ đồ đấu dây giữa Arduino với driver Tb6600 và động cơ bước:

+ Nguồn cấp từ 9 – 42V tùy theo điện áp định mức của động cơ.

+ 2 cuộn dây động cơ ra 4 đầu dây kết nối tương ứng với các chân A+, A- và B+, B-

+ Các chân tín hiệu

ENA+: 5V Arduino

DIR-: Pin 9 Arduino

DIR+: 5V Arduino

PUL-: Pin 8 Arduino

PUL+: +5V

điều khiển tốc độ và đảo chiều động cơ bước với TB6600

Sơ đồ đấu dây Arduino với TB6600 điều khiển động cơ bước

3.2 Chương trình trên Arduino

Ví dụ sao đây sẽ điều khiển được đảo chiều quay và tốc độ của động cơ bước. Theo chu kỳ như sau:

+ Động cơ quay 1 vòng theo chiều thuận với xung điều khiển có chu kỳ 4ms

+ Động cơ quay 1 vòng theo chiều ngược lại với xung điều khiển có chu kỳ 2ms. Động cơ quay nhanh hơn.

+ Động cơ quay 4 vòng theo chiều thuận, với chu kỳ xung 1ms nên động cơ quay nhanh

+ Động cơ quay 4 vòng theo chiều ngược, với chu kỳ xung 1ms nên động cơ quay nhanh

Chương trình Arduino viết trên phần mềm IDE cụ thể như sau:

#define dirPin 9

#define stepPin 8

void setup() {

  pinMode(stepPin, OUTPUT);

  pinMode(dirPin, OUTPUT);

}

void loop() {

/////Điều khiển động cơ quay chiều thuận, với tốc độ thấp

  digitalWrite(dirPin, HIGH); // Động cơ chạy thuận

  for (int i = 0; i < 200; i++) {

    digitalWrite(stepPin, HIGH);

    delayMicroseconds(2000); //Độ rộng xung điều khiển là 2ms

    digitalWrite(stepPin, LOW);

    delayMicroseconds(2000);

  }

  delay(3000);//Sau khi quay 1 vòng thì dừng 3s

/////Điều khiển khiển động cơ quay 1 vòng theo chiều ngược lại với tốc độ nhanh hơn

  digitalWrite(dirPin, LOW); // Động cơ chạy ngược

  for (int i = 0; i < 200; i++) {

    digitalWrite(stepPin, HIGH);

    delayMicroseconds(1000);// Độ rộng xung điều khiển là 1ms, do đó động cơ quay nhanh hơn

    digitalWrite(stepPin, LOW);

    delayMicroseconds(1000);

  }

  delay(3000);

  // Điều khiển động cơ quay 4 vòng theo chiều thuận, với tốc độ nhanh

  digitalWrite(dirPin, HIGH); // Động cơ chạy thuận

  for (int i = 0; i < 4 * 200; i++) { // Vòng lặp 4 lần, mỗi lần phát 200 xung

    digitalWrite(stepPin, HIGH);

    delayMicroseconds(500); // Độ rộng xung điều khiển 0,5ms

    digitalWrite(stepPin, LOW);

    delayMicroseconds(500);

  }

  delay(3000);

  // Điều khiển động cơ quay 4 vòng theo chiều ngược tốc độ nhanh

  digitalWrite(dirPin, LOW); // Động cơ chạy ngược

  for (int i = 0; i < 4 * 200; i++) {

    digitalWrite(stepPin, HIGH);

    delayMicroseconds(500); // Độ rộng xung điều khiển 0,5ms

    digitalWrite(stepPin, LOW);

    delayMicroseconds(500);

  }

  delay(3000);

}

4. So sánh ưu và nhược điểm giữa các module

4.1 Module L298

+ Điện áp đầu vào 5 – 32VDC

Mytranshop.com khuyên bạn nên xem:  Cách gói bánh chưng chuẩn vị truyền thống đơn giản 2022 | Mytranshop.com

+ Công suất tối đa 25W và dòng tối đa là 2A cho mỗi cầu H.

+ Kích thước mạch: 43x43x27

+ Giá bán module L298 chỉ từ 27.000đ

+ Ưu điểm là giá thành rẻ, mạch nhỏ gọn, điều khiển được một động cơ bước hoặc 2 động cơ một chiều độc lập.

+ Nhược điểm là không có mạch bảo vệ, công suất module thấp.

Driver L298

Giá bán các module L298 ở Shopee

4.2 Module A4988

+ Điện áp hoạt động 8 – 35VDC

+ Dòng điện liên tục mỗi pha 1A – 2A

+ Kích thước 15 x 20 x 6

+ Có thể điều chỉnh dòng điện cho phép hoạt động bằng biến trở.

+ Có bảo vệ sự cố quá nhiệt, quá áp, quá dòng, ngắn mạch

+ Có 5 chế độ điều khiển: Full step, 1/2, 1/4, 1/8, 1/16

+ Giá bán module A4988 chỉ từ 17.000đ

+ Ưu điểm là kích thước mạch rất nhỏ, giá rẻ nhất trong các loại driver, có chức năng bảo vệ và có 5 chế độ điều khiển góc bước.

+ Nhược điểm: công suất thấp, không có các terminal kết nối dây nên chỉ thích hợp sử dụng test board hoặc làm mạch.

Driver A4988

Giá bán các module A4988 ở Shopee

4.3 Module TB6600

+ Điện áp từ 9 – 42VDC

+ Dòng cấp tối đa là 4A

 + Kích thước: 96 x 71 x 37mm.

+ 6 độ phân giải: Full step, 1/2, 1/4, 1/8, 1/16, 1/32

+ Bảo vệ quá dòng, quá áp, bảo vệ nhiệt

+ Giá bán module TB6600 chỉ từ 119.000đ

+ Ưu điểm là công suất đủ đáp ứng cho hầu hết các loại động cơ bước, độ phân giải góc bước lên đến 1/32, có các chức năng bảo vệ.

+ Nhược điểm: giá thành cao hơn so với các driver còn lại.

driver Tb6600

Giá bán các module A4988 ở Shopee

>>> Xem thêm:

6 mạch điều khiển đảo chiều động cơ 3 pha – ưu và nhược điểm từng mạch

4 sơ đồ nguyên lý mạch điều khiển đảo chiều động cơ DC

Phân tích 3 sơ đồ mạch đảo chiều sao tam giác dùng timer, PLC

Leave a Comment