Điều khiển động cơ bước lưỡng cực bằng Arduino
Bài đăng này cho thấy cách điều khiển tốc độ và hướng quay của động cơ bước lưỡng cực bằng cách sử dụng board Arduino UNO và chip điều khiển động cơ L293D.
Động cơ bước được sử dụng trong ví dụ này chỉ là ổ đĩa PC-ROM (hoặc DVD-ROM) có 4 dây.
Mô phỏng Proteus của ví dụ được cung cấp ở cuối.
Về cơ bản có hai loại động cơ bước: lưỡng cực và đơn cực. Động cơ bước lưỡng cực là động cơ không chổi than hai pha có hai cuộn dây (cuộn dây), động cơ này có 4 dây (2 dây cho mỗi cuộn dây).
Loại còn lại là động cơ bước đơn cực, nó là động cơ không chổi than 4 pha có 5 hoặc 6 dây.
Các chế độ điều khiển phổ biến của động cơ bước là: bước đầy đủ và nửa bước . Bước đầy đủ có thể được chia thành 2 loại: một pha và hai pha .
Ở chế độ một pha đầy đủ, trình điều khiển cung cấp năng lượng cho một cuộn dây tại một thời điểm. Kiểu điều khiển này đòi hỏi ít năng lượng nhất nhưng cung cấp ít mô-men quay nhất.
Ở chế độ hai pha đầy đủ, trình điều khiển cung cấp năng lượng cho hai cuộn dây cùng một lúc. Chế độ này cung cấp mô-men quay cao nhất nhưng nó đòi hỏi năng lượng gấp đôi so với chế độ một pha.
Chế độ nửa bước là sự kết hợp của hai chế độ bước đầy đủ (một pha và hai pha). Chế độ này tăng độ chính xác bằng cách chia mỗi bước cho 2. nó yêu cầu công suất ở giữa chế độ một pha và hai pha, mô-men quay cũng ở giữa.
Có một loại điều khiển khác gọi là microstepping , loại này chính xác hơn chế độ nửa bước, nó yêu cầu hai nguồn dòng hình sin với độ dịch chuyển 90 °.
Trong ví dụ này, tôi sẽ sử dụng chế độ hai pha đầy đủ để điều khiển động cơ bước lưỡng cực.
Hình ảnh sau đây cho thấy một sơ đồ đơn giản của động cơ bước lưỡng cực:
Để có thể điều khiển động cơ bước lưỡng cực, cần có hai mạch cầu H. Trong ví dụ này, tôi sẽ sử dụng IC L293D có thể hoạt động như mạch cầu H kép. Con chip này nhỏ, chi phí thấp và dễ sử dụng, những điều này làm cho nó trở thành một lựa chọn tốt cho sinh viên và người yêu thích.
Trong chế độ điều khiển bước đầy đủ, cả hai cuộn dây luôn luôn được cấp năng lượng cùng lúc theo hai bảng sau trong đó bảng đầu tiên hiển thị trình điều khiển cho một hướng quay và bảng thứ hai cho hướng còn lại:
Yêu cầu phần cứng:
- Board UNO
- Động cơ bước lưỡng cực
- Chip L293D điều khiển động cơ
- Biến trờ 10k ohm
- Nút nhấn
- Nguồn điện có điện áp bằng điện áp quy định của động cơ
- Breadboard
- Dây dẫn
Mạch điều khiển động cơ bước lưỡng cực Arduino:
Ví dụ sơ đồ mạch được hiển thị bên dưới.
Tất cả các điểm mút nối đất được nối với nhau.
Chip L293D có 16 chân với 4 đầu vào (IN1, IN2, IN3 và IN4) và 4 đầu ra (OUT1, OUT2, OUT3 và OUT4). 4 đầu ra được nối với động cơ bước lưỡng cực như trong sơ đồ mạch.
4 đầu vào được nối như sau:
- IN1 tới chân Arduino 8
- IN2 tới chân Arduino 9
- IN3 tới chân Arduino 10
- IN4 tới chân Arduino 11
L293D có 2 chân VCC: VCC1 (chân số 16) và VCC2 (chân số 8). VCC1 được nối với chân Arduino + 5V. VCC2 được nối với một nguồn điện khác (cực dương) với điện áp bằng điện áp quy định của động cơ, nó được dán nhãn trong sơ đồ mạch là V_Motor (V_Motor = điện áp động cơ). Vì vậy, nếu chúng ta có một động cơ bước với điện áp là 5V, chúng ta sẽ nối VCC2 với + 5V (không nên sử dụng đầu ra Arduino 5V) và nếu điện áp của động cơ bước là 12V, chúng ta sẽ nối VCC2 với + 12V ( điểm mút âm của nguồn này được nối với đất)
Biến trở 10k ohm được sử dụng để điều khiển tốc độ của động cơ bước, đầu ra của nó được nối với chân tương tự Arduino 0.
Nút ấn được kết nối với chân Arduino 4 được sử dụng để thay đổi hướng quay của động cơ bước.
Code cho điều khiển động cơ bước lưỡng cực Arduino:
Trong ví dụ này tôi đã sử dụng thư viện động cơ bước Arduino (tích hợp) để đơn giản hóa code, nó được thêm vào trong code bằng cách sử dụng dòng sau:
#include <Stepper.h>
Động cơ bước mà tôi đã sử dụng trong dự án này có 20 bước trên một vòng quay, nó được xác định trong code như dưới đây:
#define STEPS 20
và kết nối của các dòng điều khiển của động cơ bước được định nghĩa là:
Stepper stepper(STEPS, 8, 9, 10, 11);
Sử dụng hàm stepper.step (direction_) di chuyển động cơ bước theo biến direction_ , trong ví dụ này biến này có thể là 1 hoặc -1. Nếu direction_ = 1 thì động cơ sẽ di chuyển theo hướng đầu tiên và nếu direction_ = -1 thì động cơ sẽ di chuyển theo hướng ngược lại.
Khi nhấn nút nhấn, hướng direction_ sẽ được đảo ngược (1 hoặc -1).
Phần còn lại của code được mô tả bên dưới.
// include Arduino stepper motor library #include <Stepper.h> // change this to the number of steps on your motor #define STEPS 20 // create an instance of the stepper class, specifying // the number of steps of the motor and the pins it's // attached to Stepper stepper(STEPS, 8, 9, 10, 11); const int button = 4; // direction control button is connected to Arduino pin 4 const int pot = A0; // speed control potentiometer is connected to analog pin 0 void setup() { // configure button pin as input with internal pull up enabled pinMode(button, INPUT_PULLUP); } int direction_ = 1, speed_ = 0; void loop() { if ( digitalRead(button) == 0 ) // if button is pressed if ( debounce() ) // debounce button signal { direction_ *= -1; // reverse direction variable while ( debounce() ) ; // wait for button release } // read analog value from the potentiometer int val = analogRead(pot); // map digital value from [0, 1023] to [5, 100] // ===> min speed = 5 and max speed = 100 rpm if ( speed_ != map(val, 0, 1023, 5, 100) ) { // if the speed was changed speed_ = map(val, 0, 1023, 5, 100); // set the speed of the motor stepper.setSpeed(speed_); } // move the stepper motor stepper.step(direction_); } // a small function for button debounce bool debounce() { byte count = 0; for(byte i = 0; i < 5; i++) { if (digitalRead(button) == 0) count++; delay(10); } if(count > 2) return 1; else return 0; }
Video demo:
và video này cho thấy mô phỏng Proteus:
Mô phỏng Proteus:
Liên kết tải xuống tập tin mô phỏng ở bên dưới.
Động cơ bước Arduino + lưỡng cực
code hình như bị sai r ad