Điều khiển động cơ bước (Step Motor) bằng Module L298N và Arduino
Nếu bạn đang có ý định sử dụng động cơ bước (Step Motor) trong các dự án như Robot, xe tự hành…Thì bài viết này dành cho bạn. Bài viết hôm nay sẽ hướng dẫn chi tiết cách sử dụng module điều khiển động cơ DC L298N với Arduio để điều khiển động cơ bước.
Thông qua bài viết, các bạn sẽ biết được cách điều khiển động cơ bước bằng mạch cầu H. Trước khi đi vào bài viết các bạn có thể tìm đọc bài viết chi tiết về cách sử dụng Module L298N do mình xuất bản trước đó.
Đọc thêm: Giao tiếp Module điều khiển động cơ DC L298N với Arduino
Điều khiển động cơ bước (Step Motor) bằng mạch cầu H
Module L298N có hai mạch cầu H. Mỗi mạch cầu H dùng để điều khiển một trong các cuộn dây điện từ của động cơ bước (Step Motor).
Một mạch cầu H đơn giản gồm 4 transitor (thường là transistor NPN) và các resistor điều chỉnh dòng điện. Các transitor được kết hợp theo cấu trúc đặc biệt để tạo ra các trạng thái hoạt động: chuyển động thẳng, đi lùi và dừng.
IC điều khiển động cơ DC L298N
Module L298N là một module điều khiển động cơ DC hai chiều được tích hợp IC L298. Nó được thiết kế để hỗ trợ việc điều khiển step motor arduino với dòng điện cao và khả năng tương thích với nguồn cấp lên đến 46V và dòng điện tối đa lên đến 2A cho mỗi kênh động.
IC này giúp điều chỉnh dòng điện và hướng chuyển động của động cơ bước bằng cách sử dụng mạch cầu H kép. Nó cho phép tăng tốc độ (PWM) và đảo hướng chuyển động của động cơ. Để điều khiển IC L298N, ta sử dụng các chân đầu vào từ Arduino để điều chỉnh dòng điện và hướng chuyển động của động cơ.
Thông số kỹ thuật
Sơ đồ chân Module điều khiển động cơ DC L298N
Chân nguồn cấp cho động cơ (Power Pins)
Module điều khiển động cơ DC L298N arduino có 2 chân cấp nguồn đầu vào là VS và VSS.
- VS: Chân cung cấp nguồn cho mạch cầu H của IC. Điện áp đầu vào có thể từ 5V đến 12V.
- VSS: Chân cung cấp nguồn cho mạch logic của IC L298N. Điện áp đầu vào nằm trong khoảng từ 5V đến 7V.
- GND: Chân nối đất (Ground) của mạch.
Chân đầu ra (Output Pins)
Các đầu ra của module điều khiển động cơ L298N cho Arduino được xếp theo thứ tự: OUT1 và OUT2 cho động cơ A và OUT3 và OUT4 cho động cơ B. Bạn có thể sử dụng hai động cơ DC có điện áp từ 5V đến 12V.
Đầu ra trên module L298N có khả năng chịu tải lên đến 2A cho mỗi động cơ DC. Tuy nhiên, giới hạn này còn phụ thuộc vào công suất của nguồn cấp cho động cơ.
Chân điều khiển hướng di chuyển (Direction Control Pins)
Module điều khiển động cơ L298N Arduino có các chân điều khiển hướng, cho phép thay đổi hướng chuyển động của động cơ, chẳng hạn như đi thẳng hoặc lùi. Nguyên tắc hoạt động của module dựa trên việc điều khiển các công tắc của mạch cầu H bên trong IC L298N.
Cụ thể, module điều khiển động cơ L298N Arduino có hai chân điều khiển hướng. IN1 và IN2 điều khiển hướng chuyển động của động cơ A, trong khi IN3 và IN4 điều khiển hướng chuyển động của động cơ B.
Để điều khiển hướng chuyển động của động cơ step, bạn có thể áp dụng logic mức CAO (5V) hoặc logic mức THẤP (GND). Bảng thông số dưới đây sẽ cho bạn thấy các chuyển động tương ứng khi kết hợp các cặp đầu vào:
Điều này cho phép bạn kiểm soát hướng chuyển động của động cơ bước bằng cách điều chỉnh trạng thái logic của các chân điều khiển tương ứng.
Chân điều khiển tốc độ (Speed Control Pins)
Các chân điều khiển tốc độ ENA và ENB được sử dụng để bật/tắt động cơ và điều khiển tốc độ quay của động cơ.
Khi đặt các chân này ở mức CAO, động cơ sẽ quay; khi đặt ở mức THẤP, động cơ sẽ dừng lại. Tuy nhiên, bằng cách sử dụng PWM (Pulse Width Modulation), bạn có thể điều khiển tốc độ của động cơ.
Trên module L298N Arduino, có một jumper được cắm sẵn. Khi jumper này được kết nối, các động cơ sẽ quay với tốc độ tối đa. Nếu bạn muốn điều khiển tốc độ của động cơ thông qua chương trình, hãy tháo bỏ jumper này và kết nối các chân hỗ trợ ~PWM trên Arduino. Điều này cho phép bạn sử dụng PWM để điều chỉnh tốc độ quay của động cơ theo ý muốn.
IC ổn áp 5V 78M05
Module được tích hợp một IC ổn áp 5V 78M05 và có thể bật/tắt thông qua một jumper.
Khi jumper được cắm, IC ổn áp 78M05 sẽ hoạt động, và chân VSS sẽ được cung cấp nguồn từ VS của động cơ. Trong trường hợp này, đầu vào 5V sẽ đóng vai trò là nguồn cấp 5V 0.5A. Bạn có thể sử dụng nó để cấp nguồn cho Arduino hoặc các thành phần khác.
Khi tháo jumper, IC 78M05 sẽ bị tắt, và bạn phải cung cấp nguồn 5V riêng biệt thông qua chân VSS.
Hướng dẫn cách xác định các pha của động cơ bước (Step Motor)
Trước khi bắt đầu nối động cơ với module, bạn cần xác định các pha của động cơ bước đang sử dụng. Cách tốt nhất là tìm Datasheet của động cơ này để đọc.
Nếu trong trường họp không tìm được datasheet các bạn có thể sử dụng thủ thuật sau.
- Sử dụng đồng hồ vạn năng, xoay kim đồng hồ ở chế độ ‘điện trở’ và đo điện trở của các cặp dây.
- Nếu điện trở chỉ vài ohm (<100Ω), thì xác định đây là một cặp.
- Hai dây còn lại sẽ là cặp thứ hai .
Linh kiện cần thiết cho dự án
TÊN LINH KIỆN | SỐ LƯỢNG | NƠI BÁN |
Arduino Uno R3 | 1 | Shopee | Cytron |
Module điều khiển động cơ DC L298N | 1 | Shopee | Cytron |
Động cơ bước NEMA 17 | 1 | Shopee | Cytron |
Dây cắm | 10-20 | Shopee | Cytron |
Sơ đồ đấu nối động cơ bước NEMA 17 với Module điều khiển động cơ L298N và Arduino
Trong dự án này mình sẽ sử dụng một động cơ bước NEMA 17 hoạt động ở điện áp là 12V. Do đó, mình sẽ cấp nguồn điện 12V chân VS của mạch điều khiển động cơ DC L298N.
Tiếp theo, để cấp nguồn 5V cho mạch logic của L298N, các bạn giữ nguyên Jumper được cắm sẵn trên mạch.
Để cho Step Motor hoạt động ở mức tối đa, các bạn cũng cần giữ nguyên cả hai jumper ENA và ENB.
Các chân đầu vào (IN1, IN2, IN3 và IN4) của module L298N tương bốn chân đầu ra Digital Arduino (8, 9, 10 và 11).
Cuối cùng, nối các pha của động cơ bước vào (OUT1 và OUT2) và pha còn lại vào (OUT3 và OUT4). Các bạn không cần quan tâm đến cực của động cơ.
Code Arduino: Điều khiển động cơ bước NEMA 17
// Include the Arduino Stepper Library #include <Stepper.h> // Number of steps per output rotation const int stepsPerRevolution = 200; // Create Instance of Stepper library Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); void setup() { // set the speed at 60 rpm: myStepper.setSpeed(60); // initialize the serial port: Serial.begin(9600); } void loop() { // step one revolution in one direction: Serial.println("clockwise"); myStepper.step(stepsPerRevolution); delay(500); // step one revolution in the other direction: Serial.println("counterclockwise"); myStepper.step(-stepsPerRevolution); delay(500); }
Giải thích code
// Include the Arduino Stepper Library #include <Stepper.h>
Khai báo thư viện Stepper để sử dụng.
// Number of steps per output rotation const int stepsPerRevolution = 200;
Khai báo biến stepsPerRevolution
là số bước (steps) cho mỗi vòng quay của động cơ. Trong trường hợp này, số bước là 200.
// Create Instance of Stepper library Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
Tạo một đối tượng myStepper từ lớp Stepper, với các tham số truyền vào là stepsPerRevolution và các chân Arduino kết nối đến động cơ (8, 9, 10, 11).
void setup() { // set the speed at 60 rpm: myStepper.setSpeed(60); // initialize the serial port: Serial.begin(9600); }
Trong hàm setup(), đặt tốc độ quay của động cơ bằng cách gọi phương thức setSpeed()
của đối tượng myStepper. Trong trường hợp này, tốc độ là 60 rpm (vòng quay mỗi phút). Khởi tạo cổng serial để giao tiếp với máy tính.
void loop() { // step one revolution in one direction: Serial.println("clockwise"); myStepper.step(stepsPerRevolution); delay(500); // step one revolution in the other direction: Serial.println("counterclockwise"); myStepper.step(-stepsPerRevolution); delay(500); }
Trong hàm loop(), thực hiện một vòng quay theo chiều kim đồng hồ và sau đó một vòng quay ngược chiều kim đồng hồ của động cơ bước. Mỗi vòng quay được thực hiện bằng cách gọi phương thức step() của đối tượng myStepper với tham số là stepsPerRevolution để quay theo chiều dương và stepsPerRevolution để quay theo chiều âm. Hàm delay() được sử dụng để tạo khoảng thời gian chờ giữa các vòng quay.