Search Code

Korištenje 28BYJ-48 koraknog motora s ULN2003 upravljačem i Arduinom

Korištenje 28BYJ-48 koraknog motora s ULN2003 upravljačem i Arduinom

U ovom tutorijalu naučit ćemo kako kontrolirati 28BYJ-48 steper motor koristeći ULN2003 drajver s Arduinom. Ova postavka omogućava preciznu kontrolu položaja i brzine motora. Na kraju ovog projekta, moći ćete rotirati motor u oba smjera i učinkovito kontrolirati njegove korake.

Koristit ćemo 28BYJ-48 stepper motor, koji je popularan izbor za razne projekte robotike i automatizacije zbog svoje niske cijene i jednostavnosti korištenja. ULN2003 upravljačka ploča povezuje stepper motor s Arduinom, omogućavajući nam slanje signala koraka koji kontroliraju kretanje motora. Ovaj vodič će vas provesti kroz potrebne veze i kod kako biste pokrenuli svoj motor.

Za daljnje pojašnjenje, molimo vas da se obratite videu povezanom s ovim tutorijalom (u videu na 0:45).

Objašnjeni hardver

Ključne komponente ovog projekta uključuju 28BYJ-48 steper motor i ULN2003 upravljačku ploču. Steper motor se sastoji od nekoliko namotaja koji se mogu energizovati u specifičnom redoslijedu kako bi se stvorila rotacija. ULN2003 upravljač djeluje kao prekidač, omogućavajući Arduinu da kontroliše snagu isporučenu svakom namotaju.

ULN2003 drajler koristi Darlingtonov tranzistorski niz za upravljanje višim strujama koje zahtijeva stepper motor. Kada pin sa Arduina šalje HIGH signal, omogućava protok struje do odgovarajuće zavojnice u motoru, uzrokujući njegovo kretanje. To omogućava preciznu kontrolu nad uglom rotacije i brzinom motora.

Tehnički podaci

ProizvođačULN2003
Broj dijelaULN2003
Logika/IO napon5 V
Napon napajanja5-30 V (maks)
Izlazna struja (po kanalu)500 mA max
Vrhunjska struja (po kanalu)2 A max
Upute za PWM frekvencijuN/A
Ulazni logički pragovi0.8 V (nisko), 2.4 V (visoko)
Napon pada / RDS(on)/ zasićenje1,5 V max
Termalne granice70 °C max
PakovanjeDIP-16
Napomene / varijanteUglavnom se koristi sa 5V steper motorima.

  • Osigurajte da vozač može zadovoljiti trenutne zahtjeve vašeg motora.
  • Koristite hladnjake ako je potrebno za upravljanje termalnim granicama.
  • Provjerite da su sve veze sigurne kako biste izbjegli lebdeće ulaze.
  • Testirajte motor pokretanjem jednostavnih koraka prije integracije u veće projekte.
  • Pobrinite se da napajate motor odgovarajućim naponskim izvorom.

Uputstva za povezivanje

stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_wiring

Da biste povezali 28BYJ-48 steper motor sa ULN2003 drajverom i Arduinom, slijedite ove korake:

Prvo, povežite motor sa ULN2003 drajverom. Motor ima četiri žice, obično obojene u narandžastu, žutu, roza i plavu. Povežite ove žice na odgovarajuće izlazne pinove na ULN2003 drajveru. Povezivanja su sledeća:

  • Orangežica doOUT1
  • Yellowžica doOUT2
  • Pinkžica doOUT3
  • Bluežica doOUT4

Sljedeće, povežite ULN2003 upravljač s Arduinom. Ulazni pinovi na upravljaču odgovaraju četiri digitalna pina na Arduinu. Na primjer:

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

Na kraju, povežite naponske i uzemljene pinove ULN2003 drajvera na Arduino. PovežiteVCCpriključite na Arduino-ov 5V izlaz iGNDpriključite na Arduinoovu masu. Osigurajte da su sve veze sigurne prije nego što uključite sustav.

Primjeri koda i vodič

U odjeljku za postavljanje Arduino koda definiramo pinove povezane s ULN2003 upravljačem:

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

Ovdje deklariramo četiri cjelobrojne varijable:Pin1,Pin2,Pin3, iPin4, koji odgovaraju digitalnim pinovima na Arduinu. Ovi pinovi će kontrolisati kretanje stepper motora.

Usetup()funkcija, konfigurišemo ove pinove kao izlaze:

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

Ova postavka osigurava da Arduino može slati signale ULN2003 drajveru za kontrolu motora.pinModefunkcija postavlja svaki pin u MOD izlaza, omogućavajući im da šalju signale.

Na kraju, u glavnoj petlji, kreiramo switch case za kontrolu koraka motora na osnovu varijable._step:

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

U ovom izvatku koristimodigitalWriteslati VISOKE ili NISKE signale na svaki pin na osnovu trenutne vrijednosti_step. Ovo kontrolira koje su namotaje energizirane, omogućavajući motoru da se okreće. Cijeli kod koji integrira ove isječke bit će učitan ispod članka.

Demonstracija / Šta očekivati

Kada je sve ispravno povezano i kod je učitan, stepper motor bi trebao rotirati kao odgovor na signale iz Arduina. Možete testirati motor tako što ćete promijeniti kašnjenje u petlji ili promijeniti korake da vidite kako reagira. Budite svjesni da ako motor nije ispravno napajan, možda se neće kretati ili bi mogao ponašati nepredvidivo.

Poglavlja

  • Uvod - 0:00
  • Objašnjenje hardvera - 1:30
  • Uputstva za povezivanje - 3:15
  • Primjeri koda i vodič - 5:00
  • Demonstracija / Šta očekivati - 7:45

Images

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

}

Files📁

No files available.