Arduino Điều khiển động cơ bước bằng bộ điều khiển L298N

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

Hướng dẫn có thể áp dụng cho bất kỳ loại động cơ bước hai cực (4 dây). Hướng dẫn sẽ lấy động cơ bước NEMA 17 làm ví dụ.

bộ điều khiển động cơ bước l298n cho Arduino

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×Stepper Motor Nema 17
1×L298N Motor Driver Module
1×12V 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)

Giới thiệu về Động cơ Bước

Có hai loại động cơ bước phổ biến:

  • hai cực: loại động cơ này có 4 dây.
  • một cực: loại động cơ này có 5 hoặc 6 dây.

Đối với động cơ bước 6 dây đơn cực, chúng ta có thể dùng bốn trong sáu dây và điều khiển nó như một động cơ bước hai cực.

Đối với động cơ bước unipolar 5 dây, xem Arduino - Điều khiển động cơ bước 28BYJ-48 bằng bộ điều khiển ULN2003

Hướng dẫn này chỉ tập trung vào động cơ bước hai cực.

Sơ đồ chân của động cơ bước hai cực

Bố trí chân của động cơ bước hai cực có 4 chân. Tùy thuộc vào nhà sản xuất, các chân của động cơ có nhiều tên gọi khác nhau. Bảng dưới đây cho thấy một số tên gọi chân được sử dụng rộng rãi:

PIN NO Naming 1 Naming 2 Naming 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
sơ đồ chân của động cơ bước hai cực

Thứ tự các pin, cách đặt tên dây và màu sắc dây có thể khác nhau giữa các nhà sản xuất. Bạn cần đọc bảng dữ liệu hoặc sách hướng dẫn để xem mối liên hệ giữa màu dây và tên pin. Hình ở trên cũng cho thấy thông số kỹ thuật của hai động cơ khác nhau với cách đặt tên dây và màu sắc dây khác nhau.

Số bước trên mỗi vòng quay

Thông số của động cơ cho biết góc mỗi bước (gọi là DEG_PER_STEP). Tùy thuộc vào phương pháp điều khiển, số bước cho một vòng quay (gọi là STEP_PER_REVOLUTION) được tính theo bảng sau:

Control method Steps per Revolution Real degree per step
Full-step STEP_PER_REVOLUTION = 360 / DEG_PER_STEP DEG_PER_STEP
Half-step STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 DEG_PER_STEP / 2
Micro-step (1/n) STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n DEG_PER_STEP / n

Ví dụ: Nếu bảng thông số của động cơ ghi rõ 1,8 độ mỗi bước:

Control method Steps per Revolution Real degree per step
Full-step 200 steps/revolution 1.8°
Half-step 400 steps/revolution 0.9°
Micro-step (1/n) (200 * n) steps/revolution (1.8 / n)°

Cách điều khiển động cơ bước bằng Arduino

Arduino có thể phát tín hiệu để điều khiển động cơ bước. Tuy nhiên, tín hiệu từ Arduino không có điện áp và/hoặc dòng điện đủ để động cơ bước yêu cầu. Vì vậy, chúng ta cần một bộ driver phần cứng ở giữa Arduino và động cơ bước. Driver thực hiện hai công việc:

  • Khuếch đại tín hiệu điều khiển từ Arduino (dòng điện và điện áp)
  • Bảo vệ Arduino khỏi dòng điện và điện áp cao được sử dụng để cấp nguồn cho động cơ bước

Có nhiều loại driver phần cứng có thể được sử dụng để điều khiển động cơ bước. Driver L298N là một trong những driver phần cứng được sử dụng rộng rãi nhất để điều khiển động cơ bước.

Giới thiệu về Bộ điều khiển L298N

Một bộ điều khiển L298N duy nhất có thể được sử dụng để điều khiển hai động cơ DC hoặc một động cơ bước. Trong bài hướng dẫn này, chúng ta học cách sử dụng nó để điều khiển động cơ bước.

Bố trí chân của bộ điều khiển L298N

bản đồ chân của bộ điều khiển l298n

Bộ điều khiển L298N có 11 chân và ba jumper:

  • Pin VCC: cung cấp nguồn cho động cơ. Nó có thể nằm ở bất kỳ đâu từ 5 đến 35V.
  • Pin GND: là một chân đất chung, cần được kết nối với GND (0V).
  • Pin 5V: cung cấp nguồn cho module L298N. Nó có thể được cấp bằng 5V từ Arduino.
  • Pin IN1, IN2, IN3, IN4: được kết nối tới các chân của Arduino để nhận tín hiệu điều khiển nhằm điều khiển động cơ bước.
  • Pin OUT1, OUT2, OUT3, OUT4: được kết nối với động cơ bước.
  • Jumpers ENA, ENB: được dùng để kích hoạt động cơ bước. Bạn cần giữ nguyên cả hai jumper ENA và ENB.
  • Jumper 5V-EN: nếu chúng ta để nguyên jumper 5V-EN, nguồn cho module L298N được lấy từ VCC, chúng ta không cần kết nối gì với pin 5V. nếu chúng ta bỏ jumper 5V-EN, chúng ta cần cấp nguồn cho module L298N thông qua pin 5V.

Như đã được mô tả ở trên, bộ điều khiển L298N có hai nguồn cấp điện đầu vào:

  • Một cho động cơ bước (các chân VCCGND): từ 5 đến 35V.
  • Một cho hoạt động nội bộ của mô-đun L298N (các chân 5V và GND): từ 5 đến 7V. nếu jumper 5V-EN được giữ nguyên, chúng ta không cần kết nối chân này với bất kỳ đâu.

Sơ đồ đấu dây

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

This image is created using Fritzing. Click to enlarge image

※ Lưu ý:

  • Vui lòng giữ nguyên cả ba jumper trên mô-đun L298N (trong trường hợp nguồn cấp cho động cơ ≤ 12V).
  • Thứ tự các chân trên các động cơ bước có thể khác nhau giữa các nhà sản xuất. Vui lòng kiểm tra bảng dưới đây để đấu dây đúng.

Bảng kết nối giữa Arduino và Driver L298N

Arduino pins L298N pins
7 IN1
6 IN2
5 IN3
4 IN4

Bảng nối dây giữa bộ driver L298N và động cơ bước

Quan trọng!: Xin đừng quan tâm đến thứ tự dây của động cơ bước trên hình sơ đồ đấu dây ở phía trên. Nó chỉ là một ví dụ. Thứ tự các chân trên động cơ bước có thể khác nhau giữa các nhà sản xuất. Hãy đảm bảo rằng cách đấu dây của bạn tuân theo bảng dưới đây.

L298N pins Stepper motor pins Or Or
OUT1 A+ A A
OUT2 A- A C
OUT3 B+ B B
OUT4 B- B D

Trước khi mua động cơ bước, chúng tôi khuyến nghị bạn kiểm tra datasheet, thông số kỹ thuật hoặc hướng dẫn sử dụng của động cơ bước. Hãy đảm bảo rằng chúng cung cấp sự ánh xạ giữa màu sắc của các chân và tên của chúng. Ví dụ, Động cơ bước này stepper motor cung cấp sự ánh xạ như hình dưới đây:

bảng mã màu của cuộn động cơ bước

Dựa trên sự ánh xạ đó, bảng nối dây sẽ trở thành:

L298N pins stepper motor pins wire color
OUT1 A black wire
OUT2 C green wire
OUT3 B red wire
OUT4 D blue wire

※ Lưu ý:

Trong tất cả các bảng nối đã trình bày ở trên giữa động cơ bước và bộ điều khiển L298N, chúng ta có thể hoán đổi OUT1 với OUT2, OUT3 với OUT4. Do đó, có nhiều cách nối dây hơn. Tuy nhiên, nếu chúng ta hoán đổi chúng, hướng quay của động cơ có thể bị thay đổi (từ quay theo chiều kim đồng hồ sang quay ngược chiều kim đồng hồ, và ngược lại).

Cách điều khiển động cơ bước bằng bộ điều khiển L298N.

Việc điều khiển động cơ bước không phải là một nhiệm vụ đơn giản, đặc biệt khi chúng ta muốn điều khiển nó theo cách không chặn. May mắn thay, nhờ thư viện AccelStepper, việc điều khiển động cơ bước trở nên dễ như ăn bánh.

Arduino IDE cũng có một thư viện Stepper tích hợp sẵn. 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 cung cấp hàm chặn. Đ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 nó điều khiển động cơ bước.
  • Nó không có đầy đủ các chức năng.

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

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

Cách điều khiển vị trí của động cơ bước bằng driver L298N

Chúng ta có thể di chuyển động cơ bước đến vị trí mong muốn bằng cách sử dụng:

stepper.moveTo(desiredPosition); // move motor one revolution

※ Lưu ý:

Hàm stepper.moveTo() không chặn. Đây là một điểm nổi bật của thư viện. Tuy nhiên, chúng ta phải chú ý khi sử dụng hàm này:

  • Gọi stepper.run() càng thường xuyên càng tốt. Nó nên được gọi trong hàm void loop().
  • Không được sử dụng hàm delay() khi động cơ đang di chuyển.
  • Không được sử dụng hàm Serial.print()Serial.println() khi động cơ đang di chuyển. Những hàm này làm cho động cơ bước chạy chậm lại.

Cách Điều Khiển Tốc Độ Động Cơ Bước Qua Bộ Điều Khiển L298N

Chúng ta có thể điều khiển không chỉ tốc độ mà còn gia tốc và giảm tốc bằng cách sử dụng một số hàm đơn giản.

stepper.setAcceleration(50.0); // set acceleration/deceleration stepper.setSpeed(200); // set desired speed

Cách Điều Khiển Hướng Động Cơ Bước Qua Bộ Điều Khiển L298N

Nếu bạn đấu dây như trên, động cơ sẽ quay theo hướng:

  • Hướng kim đồng hồ: nếu chúng ta điều khiển động cơ từ một vị trí đến vị trí cao hơn (tăng vị trí)
  • Hướng ngược chiều kim đồng hồ: nếu chúng ta điều khiển động cơ từ một vị trí đến vị trí thấp hơn (giảm vị trí)

Ví dụ:

  • Nếu vị trí hiện tại là 100 và chúng ta điều khiển động cơ đến 200, động cơ quay theo chiều kim đồng hồ
  • Nếu vị trí hiện tại là -200 và chúng ta điều khiển động cơ đến -100, động cơ quay theo chiều kim đồng hồ
  • Nếu vị trí hiện tại là 200 và chúng ta điều khiển động cơ đến 100, động cơ quay ngược chiều kim đồng hồ
  • Nếu vị trí hiện tại là -100 và chúng ta điều khiển động cơ đến -200, động cơ quay ngược chiều kim đồng hồ

※ Lưu ý:

Như đã đề cập trước đây, nếu bạn hoán đổi OUT1 với OUT2, hoặc OUT3 với OUT4, việc tăng vị trí có thể là ngược chiều kim đồng hồ và việc giảm vị trí có thể là theo chiều kim đồng hồ.

Cách Dừng Động Cơ Bước

  • Động cơ bước sẽ tự động dừng sau khi đạt được vị trí mong muốn.
  • Động cơ bước có thể được dừng ngay lập tức bất cứ lúc nào bằng cách gọi hàm stepper.stop().

Mã Arduino - Mã động cơ bước

Đoạn mã dưới đây thực hiện:

  • Xoay động cơ một vòng theo chiều kim đồng hồ
  • Dừng động cơ 5 giây
  • Xoay động cơ lại một vòng ngược chiều kim đồng hồ
  • Dừng động cơ 5 giây
  • Quá trình đó được lặp lại nhiều lần
/* * 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-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, 7, 6, 5, 4); long moveToPosition = STEP_PER_REVOLUTION; void setup() { Serial.begin(9600); stepper.setAcceleration(200.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position to 0 stepper.moveTo(STEP_PER_REVOLUTION); // move motor one revolution, in clockwise direction Serial.println("Motor moving in clockwise direction"); } void loop() { if (stepper.distanceToGo() == 0) { Serial.println("Motor is stopped"); delay(5000); // stop 5 seconds stepper.setCurrentPosition(0); // reset position to 0 moveToPosition = -1 * moveToPosition; // reverse direction stepper.moveTo(moveToPosition); // move motor one revolution if (stepper.distanceToGo() > 0) Serial.println("Motor moving in clockwise direction"); else if (stepper.distanceToGo() < 0) Serial.println("Motor moving in anticlockwise direction"); } // Serial.print(F("position: ")); // Serial.println(stepper.currentPosition()); stepper.run(); // MUST be called as frequently as possible }

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ấn nút Cài đặt để cài đặt thư viện AccelStepper.
thư viện accelstepper cho Arduino
  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấp vào nút Upload trên Arduino IDE để tải mã lên Arduino
  • Bạn sẽ thấy:
    • Động cơ bước quay một vòng theo chiều kim đồng hồ
    • Động cơ bước dừng 5 giây
    • Động cơ bước quay ngược lại một vòng theo chiều ngược kim đồng hồ
    • Động cơ bước dừng 5 giây
    • Quá trình ở trên được lặp lại.
  • Xem kết quả trên Serial Monitor
COM6
Send
Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Giải thích mã nguồn

Đọc giải thích theo từng dòng trong các dòng chú thích của mã nguồn!

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.