Search Code

Sử dụng động cơ bước 28BYJ-48 với bộ điều khiển ULN2003 và Arduino

Sử dụng động cơ bước 28BYJ-48 với bộ điều khiển ULN2003 và Arduino

Trong hướng dẫn này, chúng ta sẽ học cách điều khiển một động cơ bước 28BYJ-48 sử dụng driver ULN2003 với Arduino. Cấu hình này cho phép kiểm soát chính xác vị trí và tốc độ của động cơ. Cuối dự án này, bạn sẽ có thể quay động cơ theo cả hai hướng và kiểm soát các bước của nó một cách hiệu quả.

Chúng tôi sẽ sử dụng động cơ bước 28BYJ-48, một lựa chọn phổ biến cho nhiều dự án robot và tự động hóa nhờ vào chi phí thấp và dễ sử dụng. Bảng điều khiển ULN2003 kết nối động cơ bước với Arduino, cho phép chúng tôi gửi tín hiệu bước để điều khiển chuyển động của động cơ. Hướng dẫn này sẽ hướng dẫn bạn qua các kết nối cần thiết và mã để làm cho động cơ của bạn quay.

Để biết thêm chi tiết, vui lòng tham khảo video liên quan đến hướng dẫn này (trong video tại 0:45).

Giải thích phần cứng

Các thành phần chính của dự án này bao gồm động cơ bước 28BYJ-48 và bảng điều khiển ULN2003. Động cơ bước bao gồm nhiều cuộn dây có thể được cấp điện theo một trình tự cụ thể để tạo ra sự quay. Bảng điều khiển ULN2003 hoạt động như một công tắc, cho phép Arduino kiểm soát nguồn điện cung cấp cho mỗi cuộn dây.

Bộ điều khiển ULN2003 sử dụng một mảng transistor Darlington để xử lý dòng điện cao hơn cần thiết cho động cơ bước. Khi một chân từ Arduino xuất tín hiệu HIGH, nó cho phép dòng điện chảy đến cuộn tương ứng trong động cơ, khiến nó di chuyển. Điều này cho phép kiểm soát chính xác góc quay và tốc độ của động cơ.

Chi tiết bảng dữ liệu

Nhà sản xuấtULN2003
Số hiệu bộ phậnULN2003
Điện áp Logic/IO5 V
Điện áp cung cấp5-30 V (tối đa)
Dòng điện đầu ra (mỗi kênh)500 mA tối đa
Dòng điện đỉnh (mỗi kênh)2 A tối đa
Hướng dẫn tần số PWMN/A
Ngưỡng logic đầu vào0,8 V (thấp), 2,4 V (cao)
Sụt áp / RDS(on)/ bão hòa1,5 V tối đa
Giới hạn nhiệt độ70 °C tối đa
GóiDIP-16
Ghi chú / biến thểThường được sử dụng với động cơ bước 5V.

  • Đảm bảo rằng bộ điều khiển có thể đáp ứng các yêu cầu hiện tại của động cơ của bạn.
  • Sử dụng tản nhiệt nếu cần thiết để quản lý giới hạn nhiệt.
  • Kiểm tra rằng tất cả các kết nối đều an toàn để tránh các đầu vào không ổn định.
  • Kiểm tra động cơ bằng cách chạy các chuỗi bước đơn giản trước khi tích hợp vào các dự án lớn hơn.
  • Hãy chắc chắn cung cấp điện cho động cơ với điện áp cung cấp đầy đủ.

Hướng dẫn đấu dây

stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_wiring

Để kết nối động cơ bước 28BYJ-48 với bộ điều khiển ULN2003 và Arduino, hãy làm theo các bước sau:

Đầu tiên, kết nối động cơ với bộ điều khiển ULN2003. Động cơ có bốn dây, thường được mã màu là cam, vàng, hồng và xanh dương. Kết nối các dây này với các chân đầu ra tương ứng trên bộ điều khiển ULN2003. Các kết nối như sau:

  • Orangedây đếnOUT1
  • Yellowdây đếnOUT2
  • Pinkdây đếnOUT3
  • Bluedây đếnOUT4

Tiếp theo, kết nối bộ điều khiển ULN2003 với Arduino. Các chân đầu vào trên bộ điều khiển tương ứng với bốn chân số trên Arduino. Ví dụ:

  • IN1đếnPin 10
  • IN2đếnPin 11
  • IN3đếnPin 12
  • IN4đếnPin 13

Cuối cùng, kết nối các chân nguồn và đất của bộ điều khiển ULN2003 với Arduino. Kết nối cácVCCghim vào đầu ra 5V của Arduino vàGNDGhim vào đất của Arduino. Đảm bảo rằng tất cả các kết nối đều an toàn trước khi cấp nguồn cho hệ thống.

Ví dụ mã và Hướng dẫn

Trong phần thiết lập của mã Arduino, chúng ta định nghĩa các chân được kết nối với bộ điều khiển ULN2003:

int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 

Ở đây, chúng ta khai báo bốn biến số nguyên:Pin1,Pin2,Pin3, vàPin4, tương ứng với các chân số trên Arduino. Những chân này sẽ điều khiển chuyển động của động cơ bước.

Trongsetup()chức năng, chúng tôi cấu hình các chân này là đầu ra:

void setup() { 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 

Cài đặt này đảm bảo rằng Arduino có thể gửi tín hiệu đến bộ điều khiển ULN2003 để điều khiển động cơ.pinModeHàm đặt mỗi chân ở chế độ OUTPUT, cho phép chúng gửi tín hiệu.

Cuối cùng, trong vòng lặp chính, chúng tôi tạo một câu lệnh switch case để điều khiển các bước của động cơ dựa trên biến._step:

switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   // Additional cases follow
}

Trong đoạn trích này, chúng tôi sử dụngdigitalWriteđể gửi tín hiệu CAO hoặc THẤP đến mỗi chân dựa trên dòng điện hiện tại_step. Điều này kiểm soát cuộn dây nào được cấp điện, cho phép động cơ quay. Mã đầy đủ tích hợp các đoạn mã này sẽ được tải xuống dưới bài viết.

Trình diễn / Những gì cần mong đợi

Khi mọi thứ được kết nối đúng cách và mã đã được tải lên, động cơ bước sẽ quay theo tín hiệu từ Arduino. Bạn có thể kiểm tra động cơ bằng cách thay đổi độ trễ trong vòng lặp hoặc thay đổi số bước để xem nó phản ứng như thế nào. Hãy lưu ý rằng nếu động cơ không được cấp nguồn đúng cách, nó có thể không di chuyển hoặc có thể hoạt động không ổn định.

Chương

  • Giới thiệu - 0:00
  • Giải thích phần cứng - 1:30
  • Hướng dẫn đấu dây - 3:15
  • Ví dụ mã & Hướng dẫn - 5:00
  • Buổi trình diễn / Những gì cần mong đợi - 7:45

Hình ảnh

stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_poles
stepper_28BYJ-48_poles
stepper_28BYJ-48_waveform_actual
stepper_28BYJ-48_waveform_actual
stepper_28BYJ-48_waveform_inverted
stepper_28BYJ-48_waveform_inverted
stepper_28BYJ-48_wiring
stepper_28BYJ-48_wiring
6-The source code for stepper motor 28BYJ-48 with ULN2003 for Arduino
Ngôn ngữ: C++
// Original source is http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
// Update by Ahmad Shamshiri for RoboJax.com
// Published on March 27, 2017 in Ajax, ON, Canada.
/*
 * 
  Need wiring diagram from this code:  https://youtu.be/0glBk917HPg
  Purchase My Arduino course on Udemy.com http://robojax.com/L/?id=62
 * 

 * Get this code and other Arduino codes from RoboJax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from RoboJax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 
int _step = 0; 
boolean dir = true;// false=clockwise, true=counter clockwise
int count=0;
void setup() 
{ 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 
 void loop() 
{ 
 switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   case 1: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, HIGH); 
   break;  
   case 2: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 3: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 4: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 5: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
     case 6: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 7: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   default: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
 } 
 if(dir){ 
   _step++; 
 }else{ 
   _step--; 
 } 
 if(_step>7){ 
   _step=0; 
 } 
 if(_step<0){ 
   _step=7; 
 } 
 delay(1); 

}

Tập tin📁

Không có tệp nào khả dụng.