Arduino Điều khiển động cơ bước 28BYJ-48 bằng bộ điều khiển ULN2003

Trong hướng dẫn này, chúng ta sẽ học:

Động cơ bước 28byj-48 uln2003 cho Arduino

Động cơ bước là những động cơ tuyệt vời cho điều khiển vị trí. Động cơ bước chia một vòng quay đầy thành một số bước bằng nhau. Chúng được sử dụng trong nhiều thiết bị như máy in, máy in 3D, máy CNC, và được ứng dụng trong tự động hóa công nghiệp.

Một trong những cách tiết kiệm để tìm hiểu về động cơ bước là sử dụng các động cơ bước 28BYJ-48. Chúng thường đi kèm với một bảng điều khiển dựa trên ULN2003, điều này khiến chúng rất dễ sử dụng.

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×28BYJ-48 stepper motor + ULN2003 Driver Module
1×5V Power Adapter
1×DC Power Jack
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về động cơ bước 28BYJ-48

Theo bảng dữ liệu, khi động cơ 28BYJ-48 hoạt động ở chế độ full-step, mỗi bước tương ứng với góc quay 11.25°. Điều này có nghĩa là có 32 bước cho mỗi vòng quay (360°/11.25° = 32).

Ngoài ra, động cơ có bộ giảm tốc 1/64. Điều này có nghĩa là nó thực sự có 32 x 64 = 2048 bước. Mỗi bước tương đương với 360°/2048 = 0,1758°.

Kết luận: nếu động cơ thực hiện 2048 bước (ở chế độ bước đầy đủ), động cơ quay một vòng

Bố trí các chân pin

Động cơ bước 28BYJ-48 có 5 chân. Chúng ta không cần quan tâm đến chi tiết của các chân này. Chúng ta chỉ cần cắm nó vào đầu nối của bộ driver ULN2003.

động cơ bước 28byj-48

Về mô-đun điều khiển động cơ bước ULN2003

ULN2003 là một trong những mô-đun driver động cơ phổ biến nhất dành cho động cơ bước.

  • Module có bốn đèn LED cho thấy hoạt động của bốn dây tín hiệu điều khiển (để chỉ trạng thái bước). Chúng tạo ra hiệu ứng tuyệt vời khi thực hiện các bước.
  • Module còn đi kèm với một jumper bật/tắt để cô lập nguồn cấp cho động cơ bước.

Sơ đồ chân ULN2003

bố trí chân của uln2003 trình điều khiển động cơ bước

Mô-đun ULN2003 bao gồm 6 chân và một đầu nối cái:

  • Chân IN1: dùng để điều khiển động cơ. Kết nối nó với một chân xuất trên Arduino.
  • Chân IN2: dùng để điều khiển động cơ. Kết nối nó với một chân xuất trên Arduino.
  • Chân IN3: dùng để điều khiển động cơ. Kết nối nó với một chân xuất trên Arduino.
  • Chân IN4: dùng để điều khiển động cơ. Kết nối nó với một chân xuất trên Arduino.
  • Chân GND: là chân nối đất chung. Nó phải kết nối với cả hai GND của Arduino và nguồn cấp ngoài.
  • Chân VDD: cấp nguồn cho động cơ. Kết nối nó với nguồn cấp ngoài.
  • Đầu nối động cơ: đây là nơi động cơ cắm vào.

※ Lưu ý:

  • Điện áp của nguồn cấp ngoài nên bằng điện áp của động cơ bước. Ví dụ, nếu một động cơ bước hoạt động với 12V DC, chúng ta cần sử dụng nguồn cấp 12V. Trong trường hợp động cơ bước 28BYJ-48, nó hoạt động với 5V DC, chúng ta sẽ sử dụng nguồn cấp 5V.
  • Ngay cả khi một động cơ bước yêu cầu nguồn cấp 5V, xin đừng kết nối chân VDD với chân 5V trên Arduino. Thay vào đó, kết nối nó với một nguồn cấp 5V bên ngoài. Đó là vì động cơ bước tiêu thụ quá nhiều điện.

Sơ đồ đấu dây

sơ đồ đấu nối động cơ bước Arduino với bộ trình điều khiển uln2003

This image is created using Fritzing. Click to enlarge image

Xin lưu ý rằng chúng ta không cần quan tâm đến màu dây của động cơ bước. Chúng ta chỉ cần cắm đầu nối đực (ở động cơ bước 28BYJ-48) vào đầu nối cái (trên bộ điều khiển ULN2003).

Cách lập trình để điều khiển động cơ bước

Có ba phương pháp để điều khiển một động cơ bước:

  • Bước đầy
  • Nửa bước
  • Bước vi mô

Đối với ứng dụng đơn giản, chúng ta có thể sử dụng phương pháp toàn bước. Chi tiết về ba phương pháp sẽ có ở phần cuối của bài hướng dẫn này. Việc lập trình cho các phương pháp này khá phức tạp. May mắn là có nhiều thư viện đã làm điều đó cho chúng ta. Chúng ta chỉ cần sử dụng một thư viện.

Arduino IDE có một thư viện Stepper tích hợp. Tuy nhiên, chúng tôi không khuyến nghị bạn sử dụng thư viện này vì:

  • Thư viện này bị chặn (blocking). Điều này có nghĩa là nó ngăn Arduino thực hiện các công việc khác trong khi đang điều khiển động cơ bước.
  • Nó không có đủ các chức năng.

Thay vào đó, chúng tôi khuyến nghị bạn sử dụng thư viện AccelStepper. Thư viện này hỗ trợ:

  • Gia tốc
  • Giảm tốc.
  • Chạy ở chế độ đầy bước và nửa bước.
  • Nhiều động cơ bước đồng thời, mỗi động cơ bước có thể thực hiện các bước một cách độc lập và đồng thời.
  • Nhược điểm: không hỗ trợ điều khiển bước vi mô

Mã Arduino

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(FULLSTEP, 11, 9, 10, 8); void setup() { Serial.begin(9600); stepper.setMaxSpeed(1000.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position stepper.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper.distanceToGo() == 0) stepper.moveTo(-stepper.currentPosition()); stepper.run(); // MUST be called in loop() function Serial.print(F("Current Position: ")); Serial.println(stepper.currentPosition()); }

Hướng dẫn từng bước

  • Đi tới biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm kiếm “AccelStepper”, sau đó tìm thư viện AccelStepper của Mike McCauley
  • Nhấp vào nút Cài đặt để cài đặt thư viện AccelStepper.
thư viện Arduino accelstepper
  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấp vào Tải lên trên Arduino IDE để tải mã lên Arduino
  • Quan sát động cơ quay. Nó nên:
    • Quay một vòng theo chiều kim đồng hồ, và sau đó
    • Quay hai vòng ngược chiều kim đồng hồ, và sau đó
    • Quay hai vòng theo chiều kim đồng hồ.

    Quá trình đó được lặp lại vô hạn.

    • Xem kết quả trên Trình theo dõi nối tiếp
    COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

Cách điều khiển nhiều động cơ bước 28BYJ-48

Chúng ta cùng học cách điều khiển hai động cơ bước độc lập cùng lúc.

Sơ đồ đấu dây cho hai động cơ bước 28BYJ-48

sơ đồ đấu nối Arduino cho hai động cơ bước với bộ trình điều khiển uln2003

This image is created using Fritzing. Click to enlarge image

Mã Arduino cho hai động cơ bước 28BYJ-48

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, 11, 9, 10, 8); AccelStepper stepper_2(FULLSTEP, 7, 5, 6, 4); void setup() { Serial.begin(9600); stepper_1.setMaxSpeed(1000.0); // set the maximum speed stepper_1.setAcceleration(50.0); // set acceleration stepper_1.setSpeed(200); // set initial speed stepper_1.setCurrentPosition(0); // set position stepper_1.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution stepper_2.setMaxSpeed(1000.0); // set the maximum speed stepper_2.setAcceleration(50.0); // set acceleration stepper_2.setSpeed(200); // set initial speed stepper_2.setCurrentPosition(0); // set position stepper_2.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper_1.distanceToGo() == 0) stepper_1.moveTo(-stepper_1.currentPosition()); if (stepper_2.distanceToGo() == 0) stepper_2.moveTo(-stepper_2.currentPosition()); stepper_1.run(); // MUST be called in loop() function stepper_2.run(); // MUST be called in loop() function Serial.print(F("stepper_1# current position: ")); Serial.println(stepper_1.currentPosition()); Serial.print(F("stepper_2# current position: ")); Serial.println(stepper_2.currentPosition()); }

Kiến thức bổ sung

1. Động cơ bước rung khi đang di chuyển

Đừng lo lắng nếu động cơ bước rung khi di chuyển. Đây là đặc tính của động cơ bước. Chúng ta có thể giảm rung bằng cách sử dụng phương pháp điều khiển micro-stepping.

Ngoài ra, vì đặc tính này, nếu chúng ta điều khiển đúng cách, động cơ bước có thể phát ra những âm thanh như nhạc cụ. Bạn có thể xem dự án này trên Arduino Project Hub.

2. Phương pháp điều khiển động cơ bước

  • Full-step: Đơn vị di chuyển là một bước, tương ứng với một giá trị độ được ghi trong datasheet hoặc sổ tay hướng dẫn của động cơ bước.
  • Half-step: Chia mỗi bước đầy thành hai bước nhỏ hơn. Đơn vị di chuyển là một nửa của bước đầy. Phương pháp này cho phép động cơ di chuyển với độ phân giải gấp đôi.
  • Micro-step: Chia mỗi bước đầy thành nhiều bước nhỏ hơn. Đơn vị di chuyển là một phân số của bước đầy. Phân số có thể là 1/4, 1/8, 1/16, 1/32 hoặc thậm chí cao hơn. Phương pháp này cho phép động cơ di chuyển với độ phân giải cao hơn. Nó cũng làm cho động cơ di chuyển mượt mà hơn ở tốc độ thấp. Phân số càng lớn thì độ phân giải càng cao và chuyển động càng mượt.

Ví dụ, nếu tài liệu đặc tính của động cơ cho biết 1,8 độ/bước:

  • Bước đầy đủ: Động cơ có thể di chuyển với 1.8 độ mỗi bước <⇒ 200 bước/vòng quay
  • Bước nửa: Động cơ có thể di chuyển với 0.9 độ mỗi bước <⇒ 400 bước/vòng quay
  • Bước vi mô: Động cơ có thể di chuyển với 0.45, 0.225, 0.1125, 0.05625 độ mỗi bước <⇒ 800, 1600, 3200, 6400... bước/vòng quay

Mã ở trên đã sử dụng phương pháp điều khiển ở chế độ full-step.

3. Vấn đề cộng hưởng

Đây là các cách sử dụng nâng cao. Người mới bắt đầu không cần chú ý đến điều này. Điều này xảy ra trong một phạm vi tốc độ, trong đó tần số bước bằng tần số tự nhiên của động cơ. Có thể có sự thay đổi tiếng ồn do động cơ phát ra, cũng như sự tăng độ rung. Trong các ứng dụng thực tế, nhà phát triển nên chú ý đến vấn đề này.

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

WARNING

Hướng dẫn này đang được phát triển.