ESP8266 Động cơ bước

Hướng dẫn này sẽ chỉ cho bạn cách sử dụng ESP8266 để điều khiển động cơ bước bằng bộ điều khiển L298N. Cụ thể, chúng ta sẽ tìm hiểu:

Hướng dẫn này áp dụng cho mọi loại động cơ bước hai cực có bốn dây. Nó sẽ sử dụng một động cơ bước NEMA 17 làm ví dụ.

ESP8266 NodeMCU trình điều khiển động cơ bước l298n

Nếu bạn muốn điều khiển một loại động cơ bước khác, hãy tham khảo bài hướng dẫn này ESP8266 - Động cơ bước 28BYJ-48, Bộ điều khiển ULN2003.

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

1×ESP8266 NodeMCU ESP-12E
1×Recommended: ESP8266 NodeMCU ESP-12E (Uno-form)
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (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 Expansion Board for ESP8266
1×(Khuyến nghị) Power Splitter for ESP8266 Type-C

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về động cơ bước

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

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

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

Đối với động cơ bước 5 dây đơn cực, tham khảo ESP8266 - Động cơ bước 28BYJ-48, 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.

Bố trí chân của động cơ bước hai cực

Sơ đồ chân của động cơ bước hai cực có 4 chân. Các nhà sản xuất khác nhau sử dụng các tên gọi khác nhau cho các chân của động cơ. Bảng dưới đây cung cấp một số tên gọi chân được sử dụng phổ biến nhất.

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

Thứ tự các chân, việc đánh dấu dây và màu sắc của các dây có thể khác nhau giữa các nhà sản xuất. Cần đọc datasheet hoặc sách hướng dẫn để hiểu mối quan hệ giữa màu dây và tên chân. Hình ảnh ở trên cũng hiển thị chi tiết của hai động cơ khác nhau với việc đánh dấu dây và màu dây không giống nhau.

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

Thông số của động cơ cho biết DEG_PER_STEP. Tùy thuộc vào loại điều khiển, STEP_PER_REVOLUTION có thể được xác định bằng bảng dưới đây:

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 dữ liệu của động cơ cho biết nó có 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 ESP8266

ESP8266 có thể phát ra tín hiệu để điều khiển động cơ bước. Tuy nhiên, tín hiệu từ ESP8266 thiếu điện áp và/hoặc dòng cần thiết mà động cơ bước yêu cầu. Do đó, một trình điều khiển phần cứng được yêu cầu giữa ESP8266 và động cơ bước. Trình điều khiển này có hai chức năng:

  • Tăng tín hiệu điều khiển từ ESP8266 (dòng điện và điện áp)
  • Bảo vệ ESP8266 khỏi dòng điện và điện áp cao được 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. Một trong những driver phần cứng được sử dụng phổ biến nhất để điều khiển động cơ bước là driver L298N.

Về bộ điều khiển L298N

Một bộ điều khiển L298N có thể được sử dụng để điều khiển hai động cơ DC hoặc một động cơ bước. Bài hướng dẫn này chỉ cho bạn cách sử dụng nó để điều khiển động cơ bước.

Sơ đồ chân của bộ điều khiển L298N

cấu hình chân của bộ điều khiển l298n

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

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

Bộ điều khiển L298N có hai nguồn cấp điện đầu vào:

  • Một nguồn dành cho động cơ bước (các chân VCCGND): từ 5 đến 35 V.
  • Một nguồn cho hoạt động nội bộ của mô-đun L298N (các chân 5V và GND): từ 5 đến 7 V. Nếu jumper 5V-EN để ở vị trí, không cần nguồn này.

Sơ đồ đấu dây

sơ đồ nối dây ESP8266 NodeMCU cho động cơ bước và bộ điều khiển l298n

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

※ Lưu ý:

  • Giữ nguyên ba jumper trên mô-đun L298N và để ở vị trí hiện tại nếu nguồn cấp cho động cơ là 12V hoặc thấp hơn.
  • Việc bố trí 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 tham khảo bảng dưới đây để đảm bảo cách đấu dây đúng.

Bảng nối dây giữa ESP8266 và bộ điều khiển L298N

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

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

Quan trọng: Đừng chú ý tới thứ tự các dây trên động cơ bước trong hình ảnh sơ đồ nối dây. Nó chỉ là minh họa. Việc sắp xếp các chân kết nối trên động cơ bước có thể khác nhau tùy thuộc vào nhà sản xuất. Hãy đảm bảo việc đấ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 một động cơ bước, chúng tôi gợi ý bạn xem qua bảng dữ liệu, thông số kỹ thuật hoặc sách hướng dẫn của động cơ bước. Đảm bảo rằng nó bao gồm sự tương quan 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 ánh xạ như được thấy trong hình ảnh dưới đây:

bảng mã màu cuộn dây động cơ bước

Dựa trên bảng ánh xạ, bảng nối dây là:

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 các bảng nối được trình bày ở trên, OUT1 và OUT2, cũng như OUT3 và OUT4, có thể hoán đổi cho nhau. Điều này làm tăng số lượng các cấu hình nối dây có thể có. Tuy nhiên, điều này cũng có thể khiến động cơ đổi hướng quay (từ quay theo chiều kim đồng hồ sang ngược chiều kim đồng hồ, hoặc ngược lại).

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

Việc điều khiển động cơ bước có thể là một nhiệm vụ đầy thách thức, đặc biệt là khi chúng ta cần thực hiện điều đó mà không bị gián đoạn. May mắn thay, thư viện AccelStepper làm cho việc này trở nên dễ dàng.

Arduino IDE có một thư viện Stepper được tích hợp sẵn. Tuy nhiên, chúng tôi không đề xuất sử dụng thư viện này như:

  • Nó chứa một hàm chặn, điều này ngăn ESP8266 thực hiện các tác vụ khác trong khi điều khiển động cơ bước.
  • Nó thiếu các tính năng cần thiết.

Thay vào đó, chúng tôi gợi ý bạn sử dụng thư viện AccelStepper. Thư viện này cung cấp:

  • Tăng tốc
  • Giảm tốc
  • Điều khiển ở chế độ đầy đủ bước và bán bước
  • Khả năng điều khiển nhiều động cơ bước cùng lúc, mỗi động cơ bước có thể di chuyển độc lập
  • Nhược điểm: Không hỗ trợ điều khiển bước vi mô

Cách Điều Khiển Vị Trí Động Cơ Bước Qua Driver L298N

Chúng ta có thể đạt được vị trí mong muốn của động cơ bước thông qua: 1. Đặt vị trí hiện tại làm điểm tham chiếu 2. Thiết lập điểm tham chiếu là vị trí hiện tại

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

※ Lưu ý:

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

  • Đảm bảo rằng 'stepper.run()' được gọi càng thường xuyên càng tốt, tốt nhất là trong hàm void loop().
  • Tránh sử dụng hàm delay() trong khi động cơ đang chuyển động.
  • Không sử dụng các hàm Serial.print() hoặc Serial.println() khi động cơ đang chạy, vì điều này sẽ làm chậm quá trình di chuyển của nó.

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 chỉnh cả tốc độ và gia tốc cũng như giảm tốc thông qua việc sử dụng một vài 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 Của Động Cơ Bước Qua Bộ Điều Khiển L298N

Nếu bạn nối động cơ theo đúng chỉ dẫn, nó sẽ quay theo hướng:

  • Hướng kim đồng hồ: khi động cơ được di chuyển từ vị trí thấp hơn lên vị trí cao hơn (tăng vị trí)
  • Hướng ngược kim đồng hồ: khi động cơ được dịch chuyển từ vị trí cao hơn xuống vị trí thấp hơn (giảm vị trí)
  • Nếu vị trí hiện tại là 100, và chúng ta cấp lệnh cho động cơ về 200, nó sẽ quay theo hướng kim đồng hồ.
  • Khi vị trí hiện tại là -200 và động cơ được cấp lệnh về -100, nó sẽ quay theo hướng kim đồng hồ.
  • Nếu vị trí hiện tại là 200 và động cơ được cấp lệnh về 100, nó sẽ quay ngược kim đồng hồ.
  • Nếu vị trí hiện tại là -100 và động cơ được cấp lệnh về -200, nó sẽ quay ngược kim đồng hồ.

※ Lưu ý:

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

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

  • Động cơ bước sẽ dừng lại khi đạt vị trí mong muốn.
  • Nếu muốn dừng ngay lập tức, có thể sử dụng hàm stepper.stop().

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

Đoạn mã dưới đây:

  • Làm cho động cơ quay một vòng theo chiều kim đồng hồ
  • Tạm dừng động cơ trong 5 giây
  • Làm cho động cơ quay một vòng theo chiều ngược kim đồng hồ
  • Dừng động cơ trong 5 giây
  • Tiếp tục lặp lại quá trình này
/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, D1, D2, D5, D6); 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

Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:

  • Xem tutorial ESP8266 - Cài đặt phần mềm nếu đây là lần đầu tiên bạn sử dụng ESP8266.
  • Nối các linh kiện như được hiển thị trong sơ đồ.
  • Kết nối bo mạch ESP8266 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP8266 phù hợp, ví dụ NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng của nó.
  • Nhấp vào biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm kiếm “AccelStepper”, sau đó định vị thư viện AccelStepper được tạo bởi Mike McCauley.
  • Nhấp nút Cài đặt để cài đặt thư viện AccelStepper.
thư viện accelstepper cho ESP8266 NodeMCU

Sao chép mã và mở nó bằng Arduino IDE.

Nhấn nút Tải lên trên Arduino IDE để tải mã lên ESP8266.

Bạn sẽ nhận thấy động cơ bước quay một vòng theo chiều kim đồng hồ, dừng lại 5 giây, sau đó quay lại một vòng theo chiều ngược kim đồng hồ và lại dừng thêm 5 giây. Quá trình này được lặp lại liên tục.

Kiểm tra kết quả trên cửa sổ 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

Hãy xem lời giải thích theo từng dòng có trong các 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.