Điều khiển động cơ bước Stepper Motor bằng IC L293D và Arduino
Trong những bài viết trước đó, mình đã hướng dẫn cho các bạn cách điều khiển động cơ bước bằng IC L298N, trong bài biết hôm nay mình sẽ sử dụng một IC tương tự là L293D để điều khiển động cơ bước 28BYJ-48 và NEMA 17.
Để nắm rõ hơn về cấu tạo cũng như cách thức hoạt động của IC điều khiển động cơ L293D này, các bạn nên xem trước bài viết bên dưới.
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 |
IC điều khiển động cơ bước L293D | 1 | Shopee | Cytron |
Động cơ bước NEMA 17 | 1 | Shopee | Cytron |
Động cơ bước 28BYJ-48 | 1 | Shopee | Cytron |
Breadboard | 1 | Shopee | Cytron |
Dây cắm | 10-20 | Shopee | Cytron |
Điều khiển động cơ bước Stepper Motor bằng mạch cầu H
IC L293D có hai mạch cầu H. Mỗi mạch cầu H được sử 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ạch cầu H có cấu tạo đơn giản bao gồm các công tắc để đóng mở dòng điện chạy qua. Việc đóng mở từng công tắc giúp cho cuộn dây có thể chuyển động theo ý muốn như chuyển động theo hướng thẳng, chuyển động lùi và dừng động cơ bước.
Điều khiển động cơ bước 28BYJ-48
Trong bài viết này, mình sẽ sử dụng L293D Arduino để điều khiển động cơ bước 28BYJ-48, là một động cơ hoạt động ở điện áp 5V.
Như hình bên dưới, các bạn sẽ thấy động cơ bước có 4 cuộn dây và 5 dây ra: Các cuộn dây được ký hiệu là: A+ (Màu cam), A- (Màu hồng), và B+ (Xanh dương), B- (Màu vàng).
Đọc thêm: Hướng dẫn làm cánh tay Robot 4 bậc sử dụng Arduino + Code
Bây giờ mình sẽ đấu nối theo sơ đồ bên dưới. Đầu tiên các chân nguồn của IC L293D (Vcc1 và Vcc2) được nối vào chân 5V trên Arduino, chân GND được nối với GND.
Hai chân ENA & ENB với được nối với nguồn 5V để động cơ bước luôn được hoạt động.
Các chân đầu vào (IN1, IN2, IN3 và IN4) của IC L293D sẽ nối tương ứng với bốn chân đầu ra Digital (12, 11, 10 và 9) trên Arduino.
Các cuộn dây của động cơ bước A+ (Cam), A- (Hồng), B- (Vàng) và B+ (Xanh dương) được nối với các chân đầu ra của L293D (Out4, Out3, Out2 & Out1).
Điều khiển động cơ bước NEMA 17
Trong phần tiếp theo, mình sẽ sử dụng L293D Arduino để điều khiển động cơ bước NEMA 17, là một động cơ hoạt động ở điện áp 12V.
Như hình bên dưới, các bạn sẽ thấy động cơ bước có 4 cuộn dây và 4 dây ra: Các cuộn dây được ký hiệu là: A+ (Màu đỏ), A- (Màu xanh lá cây), và B+ (Xanh dương), B- (Màu vàng).
Đọc thêm: Điều khiển động cơ bước (Step Motor) bằng Module L298N và Arduino
Bây giờ mình sẽ đấu nối theo sơ đồ bên dưới. Đầu tiên các chân nguồn của IC L293D (Vcc1 và Vcc2) được nối vào chân 5V trên Arduino, chân GND được nối với GND.
Hai chân ENA & ENB với được nối với nguồn 5V để động cơ bước luôn được hoạt động.
Các chân đầu vào (IN1, IN2, IN3 và IN4) của IC L293D sẽ nối tương ứng với bốn chân đầu ra Digital (12, 11, 10 và 9) trên Arduino.
Các cuộn dây của động cơ bước A+ (Đỏ), A- (Xanh lá), B- (Vàng) và B+ (Xanh dương) được nối với các chân đầu ra của L293D (Out4, Out3, Out2 & Out1).
Code điều khiển động cơ bước
Ở đoạn code này, sẽ hướng dẫn cho các bạn cách điều khiển động cơ bước 28BYJ-48 và NEMA 17 sử dụng IC L293D, đoạn code này sẽ điều khiển cho cả hai động cơ trên, lưu ý các bạn cần thay đổi tham số stepsPerRevolution
là số bước (steps) cho mỗi vòng quay của động cơ.
- Động cơ bước 28BYJ-48:
stepsPerRevolution
= 48
- Động cơ bước NEMA 17:
stepsPerRevolution
= 200
// 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, 12, 11, 10, 9); void setup() { // set the speed at 20 rpm: myStepper.setSpeed(20); // 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 để điều khiển động cơ bước.
// 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 sử dụng động cơ bước NEMA 17 là 200 và 28BYJ-48 là 48.
void setup() { // set the speed at 20 rpm: myStepper.setSpeed(20); // initialize the serial port: Serial.begin(9600); }
Trong hàm setup(), tốc độ quay của động cơ được đặt là 20 vòng mỗi phút bằng cách sử dụng hàm setSpeed(20).
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(), đầu tiên động cơ được di chuyển một vòng quay theo chiều kim đồng hồ bằng cách gọi myStepper.step(stepsPerRevolution)
. Số bước cần di chuyển được truyền vào hàm step() và động cơ sẽ di chuyển một bước tại mỗi lần gọi hàm này. Sau đó, chương trình dừng lại trong 500ms bằng cách sử dụng delay(500).
Tiếp theo, động cơ được di chuyển một vòng quay ngược chiều kim đồng hồ bằng cách gọi myStepper.step(-stepsPerRevolution)
. Số bước truyền vào là số âm để di chuyển động cơ theo chiều ngược lại. Sau đó, chương trình dừng lại trong 500ms.