3

Điều khiển động cơ bước dùng Arduino và A4988 driver

arduino-dieu-khien-dong-co-buoc
2.8/5 - (6 bình chọn)

Nếu bạn đang thực hiện các dự án có sử dụng các động cơ để di chuyển theo tọa độ thì động cơ bước chính là thứ bạn đang cần. Đặc biệt bài viết hướng dẫn từng bước thực hiện dùng Arduino A4988 driver.

Bạn chưa hiểu về nguyên lý, cấu tạo và cách điều khiển động cơ bước, hãy để espitek giúp bạn hiểu rõ hơn trước khi bắt đầu lập trình điều khiển loại động cơ này nhé.

Các bài viết khác:

Tìm hiểu về động cơ bước

Cấu tạo và nguyên lý

Động cơ bước có thể được coi là tổng hợp của hai loại động cơ: Động cơ một chiều không tiếp xúcđộng cơ đồng bộ giảm tốc công suất nhỏ.

Về cấu tạo động cơ bước gồm có các bộ phận là

  • Stato: cuộn dây.
  • Roto: nam châm vĩnh cửu (hoặc trong trường hợp của động cơ biến từ trở là những khối răng làm bằng vật liệu nhẹ có từ tính).

Cấu tạo động cơ bước

Động cơ bước được điều khiển bởi bộ điều khiển bên ngoài (trong bài này mình sẽ sử dụng module A4988). Động cơ bước và bộ điều khiển được thiết kế sao cho động cơ có thể giữ nguyên bất kỳ vị trí cố định nào cũng như quay đến một vị trí bất kỳ nào.

Góc bước là góc quay của trục động cơ tương ứng với một xung điều khiển. Góc bước được xác định dựa vào cấu trúc của động cơ bước và phương pháp điều khiển động cơ bước.

Nguyên lý động cơ bước

Động cơ bước không quay theo cơ chế thông thường, chúng quay theo từng bước nên có độ chính xác rất cao về mặt điều khiển học. Chúng làm việc nhờ các bộ chuyển mạch điện tử đưa các tín hiệu điều khiển vào stato theo thứ tự và một tần số nhất định.

Tổng số góc quay của rôto tương ứng với số lần chuyển mạch, cũng như chiều quay và tốc độ quay của rôto phụ thuộc vào thứ tự chuyển đổi và tần số chuyển đổi.

Ứng dụng của động cơ bước

Trong điều khiển chuyển động kỹ thuật số, động cơ bước là một cơ cấu chấp hành đặc biệt hữu hiệu bởi nó có thể thực hiện trung thành các lệnh đưa ra dưới dạng số.

Động cơ bước được ứng dụng nhiều trong ngành tự động hoá, chúng được ứng dụng trong các thiết bị cần điều khiển chính xác. ví dụ: Điều khiển robot, điều khiển tiêu cự trong các hệ quang học, điều khiển định vị trong các hệ quan trắc, điều khiển bắt, bám mục tiêu trong các khí tài quan sát, điều khiển lập trình trong các thiết bị gia công cắt gọt, điều khiển các cơ cấu lái phương và chiều trong máy bay…

Trong công nghệ máy tính, động cơ bước được sử dụng cho các loại ổ đĩa cứng, ổ đĩa mềm, máy in…

Có thể thấy động cơ bước được ứng dụng rất nhiều trong công nghiệp đặc biệt nó được sử dụng gần như là bắt buộc trong các máy công nghiệp. Hệ thống đòi hỏi cần di chuyển với vị trí và độ chính xác cao.

Tiến hành lập trình điều khiển động cơ bước sử dụng Arduino và A4988

Chuẩn bị:

  • Arduino UNO
  • NEMA17 Stepper Motor
  • A4988 Driver Module
  • Tụ 47µf (bảo vệ board điều khiển khỏi các xung điện áp)
  • Biến trở

Động cơ bước NEMA17

Động cơ bước Nema 17

  • Có 6 dây
  • Hoạt động ở 12v (<12v thì mô-men xoắn sẽ giảm)
  • Góc bước 1.8 độ
  • -10 đến 40 °C

Sơ đồ chân của động cơ bước NEMA17:

Sơ đồ chân động cơ Nema 17

Số bước / 1 vòng = 360/1.8 = 200

Module điều khiển động cơ bước A4988

A4988 là driver điều khiển động cơ bước cực kỳ nhỏ gọn, hỗ trợ nhiều chế độ làm việc, điều chỉnh được dòng ra cho động cơ, tự động ngắt điện khi quá nóng .

  • Công suất ngõ ra: 8 – 35V, 2A
  • Có 5 chế độ: 1/2, 1/4, 1/8, 1/16 bước
  • Điều chỉnh dòng ra bằng triết áp
  • Tự động ngắt khi quá nhiệt

Sơ đồ chân của module A4988

Cách sử dụng module

Có 5 chế độ lựa chọn nếu bạn không muốn chạy đầy đủ 200 bước / vòng. Theo mình chúng ta nên chạy đầy đủ tức là không cần quan tâm đến 3 chân này, sau đó sẽ điều chỉnh bước của động cơ trong code.

MS1 MS2 MS3 Microstep Resolution
Low Low Low Full Step
High Low Low ½ Step (Half Step)
Low High Low ¼ Step (Quarter Step)
High High Low 1/8 Step (Eighth Step)
High High High 1/16 Step (Sixteenth Step)

Lựa chọn chế độ full hay 1/2 hay 1/4.. sẽ được thông qua 3 pin MS1 MS2 MS3. Lưu ý là nếu thả nổi 3 pin này tức là chạy chế độ full step.

  • Bật tắt động cơ thì thông qua pin ENABLE, mức LOW là bật module, mức HIGH là tắt module.
  • Điều khiển chiều quay của động cơ thông qua pin DIR.
  • Điều khiển bước của động cơ thông qua pin STEP, mỗi xung là tương ứng với 1 bước hoặc vi bước.
  • Hai chân Sleep với Reset luôn nối với nhau.

Bạn có thể tham khảo Datasheet.

Tiến hành kết nối mạch như sơ đồ dưới

Sơ đồ kết nối thực tế

Cụ thể hơn kết nối giữa Nema 17 và A4988 chúng ta sẽ kết nối theo cặp pha của động cơ đến 2 cặp 1A-1B, 2A-2B

Giữa Arduino và A4988 các bạn kết nối theo đúng sơ đồ chân.

Sơ đồ kết nối tổng quát

Sơ đồ nối chân:

S.NO.

A4988 Pin

Connection

1

VMOT

+12V

2

GND

-12V

3

VDD

5V  Arduino

4

GND

GND  Arduino

5

STP

Pin 3 Arduino

6

DIR

Pin 2  Arduino

7

1A, 1B, 2A, 2B

Stepper Motor

Code:

Các bạn tiến hành nạp code này vào Arduino IDE để thử nghiệm nhé (nhớ cài đặt thư viện động cơ bước)

#include <Stepper.h> 
#define STEPS 200

Stepper stepper(STEPS, 2, 3); // Pin 2 connected to DIRECTION & Pin 3 connected to STEP Pin of Driver
#define motorInterfaceType 1
int Pval = 0;
int potVal = 0;

void setup() {
  stepper.setSpeed(1000);
}
void loop() {
  potVal = map(analogRead(A0),0,1024,0,500);
  if (potVal>Pval)
      stepper.step(10);
  if (potVal<Pval)
      stepper.step(-10);
  Pval = potVal;
  
}

Giải thích code:

#include <Stepper.h>
#define STEPS 200

Khai báo thư viện cho động cơ bước hãy tải về và thêm vào Arduino IDE nhé.

Định nghĩa số bước trên 1 vòng quay của động cơ (200 bước/vòng).

Stepper stepper(STEPS, 2, 3);
#define motorInterfaceType 1

Định nghĩa chân điều khiển số bước của động cơ (STP-2) và chiều quay của động cơ (DIR-3). Và định nghĩa motor được điều khiển bởi module ngoài (A4988).

potVal = map(analogRead(A0),0,1024,0,500);
  if (potVal>Pval)
      stepper.step(10);
  if (potVal<Pval)
      stepper.step(-10);

Pval = potVal;

Tiếp theo trong vòng loop ta tiến hành đọc chân của biến trở để chuyển đổi mức vặn của biến trở trong khoảng từ 0~500. So sánh giá trị khi chỉnh biến trở nếu nó lớn hơn giá trị trước đó (vẹn theo chiều kim đồng hồ) thì động cơ sẽ di chuyển 10 bước theo chiều kim đồng hồ. Nếu giá trị nhỏ hơn giá trị trước đó (vẹn ngược kim đồng hồ) thì động cơ sẽ di chuyển 10 bước theo chiều ngược kim đồng hồ.

Vậy bài viết trên đây ESPITEK đã giới thiệu đến các bạn cấu tạo và nguyên lý của động cơ bước và cách điều khiển động cơ bước dùng Arduino và A4988 driver.

Chúc các bạn thành công!

3 Comments

  1. bài hướng dẫn của anh/ chị đã đưa người nghiên cứu đi vào bụi rậm… rớt ao.
    // defines pins numbers
    const int stepPin = 3;
    const int dirPin = 4;

    void setup() {
    // Sets the two pins as Outputs
    pinMode(stepPin,OUTPUT);
    pinMode(dirPin,OUTPUT);
    }
    void loop() {
    digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
    // Makes 200 pulses for making one full cycle rotation
    for(int x = 0; x < 600; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
    }
    delay(3000); // One second delay

    digitalWrite(dirPin,LOW); //Changes the rotations direction
    // Makes 400 pulses for making two full cycle rotation
    for(int x = 0; x < 1000; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
    }
    delay(3000);
    }

    CHỈ ĐƠN GIẢN VẬY THÔI MÀ…
    bài hướng dẫn của anh/chị nên gỡ bỏ để người đi sau họ không biết, mà phải mò mẫm gặp sai thế này thì chán quá….

    • a ơi, e đang tự mò mẫm lắp mạch chạy được động cơ rồi, nhưng e ko biết lập trình để thay đổi tốc độ, nhờ a hướng dẫn e tí với ạ, a kết bạn qua zalo 0373010787 e với, cảm ơn a nhiều

    • E có sản phẩm cần làm với động cơ giảm tốc và arduino nhưng gặp khó khăn do thiếu hiểu biết, mong nhờ a chỉ dẫn giúp về code ạ và đi lại mạch ạ, a kết bạn qua zalo 0338033346 hướng dẫn giúp e với ạ

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 *