Caută cod

Utilizarea motorului pas cu pas 28BYJ-48 cu un driver ULN2003 și Arduino

Utilizarea motorului pas cu pas 28BYJ-48 cu un driver ULN2003 și Arduino

În acest tutorial, vom învăța cum să controlăm un motor pas cu pas 28BYJ-48 folosind un driver ULN2003 cu un Arduino. Această configurație permite controlul precis al poziției și vitezei motorului. La sfârșitul acestui proiect, veți putea roti motorul în ambele direcții și să controlați pașii săi eficient.

Vom folosi motorul pas cu pas 28BYJ-48, care este o alegere populară pentru diverse proiecte de robotică și automatizare datorită costului său redus și a ușurinței în utilizare. Placa de driver ULN2003 interfațează motorul pas cu pas cu Arduino, permițându-ne să trimitem semnale de pas care controlează mișcarea motorului. Acest tutorial te va ghida prin cablarea necesară și codul pentru a face motorul tău să se rotească.

Pentru clarificări suplimentare, vă rugăm să consultați videoclipul asociat cu acest tutorial (în videoclip la 0:45).

Hardware explicat

Componente cheie ale acestui proiect includ motorul pas cu pas 28BYJ-48 și placa de driver ULN2003. Motorul pas cu pas este compus din mai multe bobine care pot fi energizate într-o secvență specifică pentru a crea rotație. Driverul ULN2003 acționează ca un comutator, permițând Arduino-ului să controleze puterea livrată fiecărei bobine.

Driverul ULN2003 folosește un aranjament de tranzistori Darlington pentru a gestiona curentul mai mare necesar de motorul pas cu pas. Când un pin de la Arduino emite un semnal HIGH, permite curentului să curgă către bobina corespunzătoare din motor, determinându-l să se miște. Acest lucru permite un control precis asupra unghiului de rotație și vitezei motorului.

Detalii fișă tehnică

ProducătorULN2003
Număr de parteULN2003
Tensiune logică/IO5 V
Tensiune de alimentare5-30 V (max)
Curent de ieșire (pe canal)500 mA max
Curent de vârf (pe canal)2 A max
Ghid pentru frecvența PWMN/A
Praguri logici de intrare0,8 V (scăzut), 2,4 V (ridicat)
Cădere de tensiune / RDS(on)/ saturație1,5 V max
Limite termice70 °C max
PachetDIP-16
Note / varianteUtilizat frecvent cu motoare pas cu pas de 5V.

  • Asigurați-vă că driverul poate gestiona cerințele actuale ale motorului dumneavoastră.
  • Folosiți radiatoare dacă este necesar pentru a gestiona limitele termice.
  • Verificați că toate conexiunile sunt sigure pentru a evita intrările flotante.
  • Testează motorul rulând secvențe simple de pași înainte de a-l integra în proiecte mai mari.
  • Asigurați-vă că alimentați motorul cu o tensiune de alimentare adecvată.

Instrucțiuni de cablare

Stepper 28BYJ-48 wiring battery
Stepper 28BYJ-48 wiring

Pentru a conecta motorul pas cu pas 28BYJ-48 la driverul ULN2003 și la Arduino, urmați acești pași:

În primul rând, conectați motorul la driverul ULN2003. Motorul are patru fire, de obicei codificate prin culori: portocalie, galbenă, roz și albastră. Conectați aceste fire la pini de ieșire corespunzători de pe driverul ULN2003. Conexiunile sunt următoarele:

  • Orangesârmă laOUT1
  • Yellowsârmă laOUT2
  • Pinksârmă laOUT3
  • Bluesârmă laOUT4

Apoi, conectează driverul ULN2003 la Arduino. Pines de intrare de pe driver corespund la patru pini digitali de pe Arduino. De exemplu:

  • IN1pentruPin 10
  • IN2pentruPin 11
  • IN3pentruPin 12
  • IN4pentruPin 13

În cele din urmă, conectați pini de alimentare și masă ai driverului ULN2003 la Arduino. Conectați VCCpin la ieșirea de 5V a Arduino-ului șiGNDconectează la masa Arduino-ului. Asigură-te că toate conexiunile sunt sigure înainte de a porni sistemul.

Exemple de cod și ghiduri

În secțiunea de configurare a codului Arduino, definim pini conectați la driverul ULN2003:

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

Aici, declarăm patru variabile întregi:Pin1,Pin2,Pin3, șiPin4, care corespund pinilor digitale de pe Arduino. Aceste pini vor controla mișcarea motorului pas cu pas.

În setup()funcție, configurăm acești pini ca ieșiri:

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

Această configurație asigură că Arduino poate trimite semnale către driverul ULN2003 pentru a controla motorul.pinModefuncția setează fiecare pin în modul OUTPUT, permițându-le să trimită semnale.

În cele din urmă, în bucla principală, creăm un switch case pentru a controla pașii motorului pe baza variabilei._step:

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

În acest extras, folosimdigitalWritea trimite semnale ÎNALT sau SCĂZUT către fiecare pin în funcție de curentul actual_step. Acest lucru controlează care bobine sunt energizate, permițând motorului să se rotească. Codul complet care integrează aceste fragmente va fi încărcat sub articol.

Demonstrație / Ce să aștepți

Odată ce totul este conectat corect și codul este încărcat, motorul pas cu pas ar trebui să se rotească ca răspuns la semnalele de la Arduino. Poți testa motorul modificând întârzierea din buclă sau schimbând pașii pentru a vedea cum reacționează. Fii conștient că, dacă motorul nu este alimentat corect, s-ar putea să nu se miște sau ar putea avea un comportament imprevizibil.

Capitole

  • Introducere - 0:00
  • Hardware explicat - 1:30
  • Instrucțiuni de cablare - 3:15
  • Exemple de cod și ghid - 5:00
  • Demonstrație / Ce să aștepți - 7:45

Imagini

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
Limba: 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); 

}

Fișiere📁

Nu sunt disponibile fișiere.