Kaip valdyti žingsninį variklį su A4988 tvarkykle ir „Arduino“

Šioje „Arduino“ pamokoje sužinosime, kaip valdyti „Stepper“ variklį naudojant „A4988 Stepper“ tvarkyklę. Galite žiūrėti šį vaizdo įrašą arba perskaityti toliau pateiktą rašytinę pamoką.

REKOMENDUOJAMAS
8 geriausi „Arduino“ pradedančiųjų rinkiniai pradedantiesiems 2019 m
Apžvalga


A4988 yra bipolinių žingsninių variklių valdymui skirtas mikrovariklis, turintis įmontuotą vertėją, kad būtų lengva valdyti. Tai reiškia, kad žingsninį variklį galime valdyti tik su 2 valdiklio kaiščiais arba vienu sukimosi krypčiai valdyti, kitam – žingsniams valdyti.

A4988-„Stepper-Driver“

Vairuotojas pateikia penkis skirtingus žingsnio skiriamosios gebos: viso, keturių, aštuonių ir šešioliktų žingsnių. Be to, jame yra potenciometras, skirtas reguliuoti srovės išėjimą, terminio išjungimo temperatūrą ir apsaugą nuo kryžminės srovės.

Jo loginė įtampa yra nuo 3 iki 5,5 V, o didžiausia srovė vienoje fazėje yra 2A, jei užtikrinamas geras papildomas aušinimas, arba 1A nuolatinė srovė vienoje fazėje be šilumos kriauklės ar aušinimo.

A4988-Specifikacijos

A4988 „Stepper Driver“ kištukas


Dabar atidžiai pažvelkime į vairuotojo kištuką ir pritvirtinkite jį su žingsniniu varikliu ir valdikliu. Taigi pradėsime nuo 2 kaiščių dešinėje pusėje esančio mygtuko, skirtos vairuotojui maitinti, VDD ir „Ground“ kaiščių, kuriuos turime prijungti prie maitinimo šaltinio nuo 3 iki 5,5 V, o mūsų atveju tai bus mūsų valdiklis „Arduino“. Plokštė, kurioje bus 5 V. Šie 4 kaiščiai skirti varikliui prijungti. 1A ir 1B kaiščiai bus prijungti prie vienos variklio ritės, o 2A ir 2B kaiščiai – prie kitos variklio ritės. Varikliui maitinti naudojame kitus 2 kaiščius: „Ground“ ir „VMOT“, kuriuos turime prijungti prie maitinimo šaltinio nuo 8 iki 35 V, taip pat turime naudoti atjungimo kondensatorių, kurio mažiausia 47 µF, kad apsaugotume vairuotojo plokštę nuo įtampos šuolių.

A4988-laidų schema

Kiti du 2 kaiščiai, žingsnis ir kryptis, yra kaiščiai, kuriuos mes iš tikrųjų naudojame variklio judesiams valdyti. „Direction“ kaištis valdo variklio sukimosi kryptį, ir mes turime jį prijungti prie vieno iš mūsų mikrovaldiklio skaitmeninių kaiščių, arba mūsų atveju aš jį prijungsiu prie savo „Arduino“ plokštės kaiščio numerio 4.

„Step“ kaiščiu mes valdome variklio mirostepsus ir kiekvienas impulsas, siunčiamas į šį kaištį, variklis juda vienu žingsniu. Tai reiškia, kad mums nereikia jokio sudėtingo programavimo, fazių sekos lentelių, dažnio valdymo linijų ir pan., Nes įmontuotas „A4988 Driver“ vertėjas rūpinasi viskuo. Čia taip pat turime paminėti, kad šie 2 kaiščiai nėra įtempti į vidinę įtampą, todėl neturėtume jų palikti plaukiojančių mūsų programoje.

Kitas yra „SLEEP“ kaištis, o dėl žemos logikos plokštė įjungiama miego režimu, kad būtų sumažinta energijos sąnaudos, kai variklis nenaudojamas.

Tada RESET kaištis nustato vertėją iš anksto nustatyta namų būsena. Ši namų būsena arba namų mikrostepo padėtis matoma iš šių duomenų iš A4988 duomenų lapo. Taigi tai yra pradinės padėties vietos, nuo kurios prasideda variklis, ir jos skiriasi, priklausomai nuo mikrostepo skiriamosios gebos. Jei šio kaiščio įėjimo būsena yra logiška, visi STEP įėjimai bus ignoruojami. „Reset“ kaištis yra plūduriuojantis kaištis, todėl jei neturime tikslo jo valdyti savo programoje, turime jį prijungti prie „SLEEP“ kaiščio, kad jis būtų aukštas ir įgalintų plokštę.

A4988-tiesa-lentelė1

Kiti 3 kaiščiai (MS1, MS2 ir MS3) skirti pasirinkti vieną iš penkių skiriamųjų gebėjimų pagal aukščiau pateiktą tiesos lentelę. Šie kaiščiai turi vidinius ištraukiamuosius rezistorius, taigi, jei paliksime juos atjungtus, plokštė veiks viso žingsnio režimu.

Paskutinis, kaištis ENABLE, naudojamas įjungti arba išjungti FET išėjimus. Taigi aukšta logika neleis išvestims.

Komponentai, reikalingi šiai „Arduino“ mokymo programai


Komponentus galite gauti iš bet kurios iš toliau nurodytų svetainių:

Atskleidimas: tai yra filialų nuorodos. Kaip „Amazon“ partneris uždirbu iš kvalifikuotų pirkimų.

Grandinių schemos


Čia pateikiama visa grandinės schema. Aš naudosiu diską „Full Step“ režimu, todėl paliksiu atjungtus 3 „MS“ kaiščius ir tiesiog prijungsiu „Drive“ ir „Step“ kaiščius prie „Arduino“ plokštės 3 ir 4 kontaktų, taip pat žemės ir 5 V kaiščiai, skirti maitinti lentą. Taip pat aš naudosiu 100µF kondensatorių atjungimui ir 12V, 1,5A adapterį varikliui maitinti. Aš naudosiu NEMA 17 bipolinį žingsninį variklį, o jo laidai A ir C bus prijungti prie kaiščių 1A ir 1B, o B ir D laidai – prie 2A ir 2B kaiščių.

Valdymo-žingsninio-variklio-grandinės-schemos

Dabartinis ribojimas


Prieš prijungdami variklį, turėtume pakoreguoti vairuotojo srovės ribojimą, kad būtume tikri, jog srovė neviršija variklio srovės ribų. Tai galime padaryti reguliuodami etaloninę įtampą naudodamiesi lentos potenciometru ir atsižvelgdami į šią lygtį:

Srovės riba = VRef x 2

Etaloninės įtampos matavimas

Tačiau ši lygtis ne visada yra teisinga, nes yra įvairių gamintojų A4988 vairuotojo plokštės. Štai mano atvejo demonstracija: sureguliavau potenciometrą ir išmatavau 0,6 V etaloninę įtampą. Taigi dabartinė riba turėtų būti ta vertė 0,6 * 2, lygi 1,2 A.

Atskaitos įtampos matavimas

Dabar, kai naudoju tvarkyklę „Full Step“ režimu ir pagal A4988 duomenų lapą šiame režime apvijos srovė gali pasiekti tik 70% dabartinės ribos, 1.2A * 0.7 būtų lygus 0.84A. Norėdamas tai patikrinti, aš įkėliau paprastą kodą, kuris perkelia nepertraukiamą logiką į „Step“ kaištį (kad galėtume geriau pastebėti srovę) ir nuosekliai sujungiau savo skaitiklį su viena variklio apvija ir įjungiau. Tai, ką gavau, buvo 0,5 A, o tai reiškia, kad mano atveju lygtis nebuvo teisinga.

Atskaitos įtampos matavimas

„Arduino“ ir A4988 kodas


Štai kodo pavyzdys. Pirmiausia turime apibrėžti žingsnio ir krypties kaiščius. Mūsų atveju jie yra „Arduino“ lentos kaiščiai Nr. 3 ir 4, jie vadinami „stepPin“ ir „dirPin“, o sąrankos skyriuje turime juos apibrėžti kaip išvestis.

/*     Simple Stepper Motor Control Exaple Code
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */

// defines pins numbers
const int stepPin = 3; 
const int dirPin = 4; 
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}
void loop() {
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(500); 
  }
  delay(1000); // One second delay
  
  digitalWrite(dirPin,LOW); //Changes the rotations direction
  // Makes 400 pulses for making two full cycle rotation
  for(int x = 0; x < 400; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
  }
  delay(1000);
}

Pirmiausia kilpos skyriuje nustatysime aukšto būsenos krypties kaištį, kuris leis varikliui judėti tam tikra kryptimi. Dabar naudodami tai kilpai, mes padarysime variklį sukimąsi visą ciklą. Kai vairuotojas nustatytas „Full Step“ režimu, o mūsų „Stepper“ variklis turi 1,8 laipsnio žingsnio kampą arba 200 žingsnių, mes turime išsiųsti 200 impulsų į „Step Pin“, kad suktume vieną pilną ciklą. Taigi cikle „for“ bus 200 kartojimų ir kiekvieną kartą impulsams nustatyti „Step“ kaištis bus aukštas ir žemas. Tarp kiekvieno „digitalWrite“ reikia pridėti tam tikrą vėlavimą, nuo kurio priklausys variklio greitis.

Po šio viso ciklo sukimosi atliksime vieną sekundę, tada pakeisime sukimosi kryptį nustatydami „dirPin“ žemoje būsenoje ir dabar atliksime 2 viso ciklo apsisukimus su šia 400 pakartojimų kilpa. Pabaigoje yra dar viena sekundė. Dabar įkelkime kodą ir pažiūrėkime, kaip jis veiks.

Aš padariau dar vieną pavyzdį šiai pamokai, kur valdau variklio greitį naudodamas potenciometrą. Štai to pavyzdžio šaltinio kodas:

/*     Simple Stepper Motor Control Exaple Code
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
 
// Defines pins numbers
const int stepPin = 3;
const int dirPin = 4; 

int customDelay,customDelayMapped; // Defines variables
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
 
  digitalWrite(dirPin,HIGH); //Enables the motor to move in a particular direction
}
void loop() {
  
  customDelayMapped = speedUp(); // Gets custom delay values from the custom speedUp function
  // Makes pules with custom delay, depending on the Potentiometer, from which the speed of the motor depends
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(customDelayMapped);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(customDelayMapped);
}
// Function for reading the Potentiometer
int speedUp() {
  int customDelay = analogRead(A0); // Reads the potentiometer
  int newCustom = map(customDelay, 0, 1023, 300,4000); // Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000)
  return newCustom;  
}

Parašykite komentarą