Search Code

Używanie silnika krokowego 28BYJ-48 z układem ULN2003 i Arduino

Używanie silnika krokowego 28BYJ-48 z układem ULN2003 i Arduino

W tym samouczku nauczymy się, jak kontrolować silnik krokowy 28BYJ-48 za pomocą sterownika ULN2003 z Arduino. Ta konfiguracja umożliwia precyzyjne sterowanie pozycją i prędkością silnika. Na koniec tego projektu będziesz w stanie obracać silnik w obu kierunkach i skutecznie kontrolować jego kroki.

Użyjemy silnika krokowego 28BYJ-48, który jest popularnym wyborem w różnych projektach robotyki i automatyzacji ze względu na niską cenę i łatwość użycia. Płytka sterownika ULN2003 łączy silnik krokowy z Arduino, co pozwala nam wysyłać sygnały krokowe, które kontrolują ruch silnika. Ten samouczek poprowadzi cię przez niezbędne okablowanie i kod, aby uruchomić twój silnik.

W celu dalszego wyjaśnienia proszę odwołać się do wideo związanym z tym samouczkiem (w wideo o 0:45).

Wyjaśnienie sprzętu

Kluczowe komponenty tego projektu to silnik krokowy 28BYJ-48 oraz płytka sterująca ULN2003. Silnik krokowy składa się z kilku cewek, które mogą być zasilane w określonej sekwencji, aby wytworzyć obrót. Sterownik ULN2003 działa jako przełącznik, umożliwiając Arduino kontrolowanie mocy dostarczanej do każdej cewki.

Sterownik ULN2003 wykorzystuje układ tranzystorów Darlingtona do obsługi wyższego prądu wymaganego przez silnik krokowy. Gdy pin z Arduino wysyła sygnał HIGH, pozwala na przepływ prądu do odpowiadającej cewki w silniku, powodując jego ruch. Umożliwia to precyzyjną kontrolę nad kątem obrotu i prędkością silnika.

Szczegóły karty katalogowej

ProducentULN2003
Numer częściULN2003
Napięcie logiczne/IO5 V
Napięcie zasilania5-30 V (maks)
Prąd wyjściowy (na kanał)500 mA max
Prąd szczytowy (na kanał)2 A max
Wskazówki dotyczące częstotliwości PWMN/A
Progi logiki wejściowej0,8 V (niski), 2,4 V (wysoki)
Spadek napięcia / RDS(on)/ nasycenie1,5 V max
Limity termiczne70 °C max
PakietDIP-16
Notatki / wariantyPowszechnie używane z silnikami krokowymi 5V.

  • Upewnij się, że sterownik może obsłużyć aktualne wymagania Twojego silnika.
  • Użyj radiatorów, jeśli to konieczne, aby zarządzać limitami termicznymi.
  • Sprawdź, czy wszystkie połączenia są pewne, aby uniknąć unoszących się wejść.
  • Przetestuj silnik, wykonując proste sekwencje kroków, zanim zintegrowasz go z większymi projektami.
  • Upewnij się, że zasilasz silnik odpowiednim napięciem zasilania.

Instrukcje dotyczące okablowania

stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_wiring

Aby podłączyć silnik krokowy 28BYJ-48 do sterownika ULN2003 i Arduino, wykonaj następujące kroki:

Najpierw podłącz silnik do sterownika ULN2003. Silnik ma cztery przewody, zazwyczaj w kolorach pomarańczowym, żółtym, różowym i niebieskim. Podłącz te przewody do odpowiadających pinów wyjściowych na sterowniku ULN2003. Połączenia są następujące:

  • Orangeprzewód doOUT1
  • Yellowprzewód doOUT2
  • Pinkprzewód doOUT3
  • Blueprzewód doOUT4

Następnie podłącz sterownik ULN2003 do Arduino. Piny wejściowe na sterowniku odpowiadają czterem pinom cyfrowym na Arduino. Na przykład:

  • IN1doPin 10
  • IN2doPin 11
  • IN3doPin 12
  • IN4doPin 13

Na koniec podłącz piny zasilania i masy sterownika ULN2003 do Arduino. Podłącz VCCpin do wyjścia 5V Arduino iGNDpodłącz do masy Arduino. Upewnij się, że wszystkie połączenia są pewne przed włączeniem zasilania systemu.

Przykłady kodu i przewodnik

W sekcji konfiguracji kodu Arduino definiujemy piny podłączone do sterownika ULN2003:

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

Tutaj deklarujemy cztery zmienne całkowite:Pin1,Pin2,Pin3, iPin4, które odpowiadają cyfrowym pinom na Arduino. Te piny będą kontrolować ruch silnika krokowego.

W setup()funkcja, konfigurujemy te piny jako wyjścia:

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

To ustawienie zapewnia, że Arduino może wysyłać sygnały do sterownika ULN2003 w celu kontrolowania silnika.pinModefunkcja ustawia każdy pin w tryb WYJŚCIE, umożliwiając im wysyłanie sygnałów.

W końcu, w głównej pętli, tworzymy instrukcję switch case, aby kontrolować kroki silnika na podstawie zmiennej._step:

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

W tym fragmencie używamydigitalWritewysłać sygnały WYSOKIE lub NISKIE do każdego pinu w zależności od prądu_stepTo kontroluje, które cewki są zasilane, co pozwala silnikowi obracać się. Pełny kod, który integruje te fragmenty, zostanie załadowany poniżej artykułu.

Demonstracja / Czego się spodziewać

Gdy wszystko jest poprawnie podłączone, a kod został wgrany, silnik krokowy powinien obracać się w odpowiedzi na sygnały z Arduino. Możesz przetestować silnik, modyfikując opóźnienie w pętli lub zmieniając kroki, aby zobaczyć, jak reaguje. Pamiętaj, że jeśli silnik nie jest zasilany prawidłowo, może się nie poruszać lub zachowywać się nieregularnie.

Rozdziały

  • Wprowadzenie - 0:00
  • Wyjaśnienie sprzętu - 1:30
  • Instrukcje dotyczące okablowania - 3:15
  • Przykłady kodu i przewodnik - 5:00
  • Demonstracja / Czego się spodziewać - 7:45

Obrazy

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
Język: 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); 

}

Pliki📁

Brak dostępnych plików.