Dnes si povíme něco o ovládání krokových motorů pomocí Arduina/Merkurina 01.
Co k tomu potřebujete:
Merkurino 01
bipolární krokový motor („ten se 4 dráty“)
modul pro ovládání krokových motorů – driver A4988 step+dir
propojovací vodiče
napájecí zdroj
Jak to funguje:
Určitě jste si všimli, že příklady v Arduinu obsahují návody Stepper – speed control a další.
To je určeno pro zapojení, kdy je motor zapojen přes dvojitý můstek (H-bridge) a procesor řídí taktování jednotlivých cívek přímo.
Na internetu najdete nejčastěji nabídku můstku s obvodem L298, který však přes ujišťování prodejců není vhodný pro běžné motory typu Nema17, protože nemá zpětnou vazbu pro snímání proudu. Důsledkem je velká tepelná ztráta na chladiči a motoru a velký příkon.
Moderní zapojení využívá obvody se zpětnou vazbou, které se řídí pouze dvěmi signálními vodiči – step a dir. Dobře dostupný je obvod A4988 na malé desce s 2×8 piny, vhodný na pokusy v nepájivém poli.
Step je krok, Dir je směr. Takže stačí jen dokola posílat LOW a HIGH na vstup Step a pomocí Dir přepínat směr.
Schema zapojení:
Příklad zapojení:
Program, který jednou otočí motorem tam a vrátí se do stejné pozice:
//základní zapojení Arduino/Merkurino 01 a modulu s A4988: //spojit dohromady reset a sleep //spojit VDD k Arduino 3.3v nebo 5v //spojit GND k Arduino GND (GND near VDD) //spojit 1A a 1B k stepper cívce 1 (nutno ověřit, jinak dojde ke zničení A4988) //spojit 2A a 2B k stepper cívce 2 //spojit VMOT k napájení ( +8 až +35V ) //spojit GRD k GND - zemi ( 0V ) //Jednoduché použití LiquidCrystal knihovny #include <LiquidCrystal.h> // použité piny pro Merkurino 01 LCD panel LiquidCrystal lcd(13, 12, 8, 7, 4, 2); // definice proměnných int stp = 3; // 13; // spojit pin 13 k step int dir = 5; // 12; // spojit pin 12 k dir int a = 99; // čítač kroků int pauza = 10; // pauza mezi kroky motoru [ms] int pauza1 = 2000; // pauza mezi otočením směru [ms] void setup() { pinMode(stp, OUTPUT); // pinMode(dir, OUTPUT); digitalWrite(dir, LOW); lcd.begin(16, 2); // start LCD library } void loop() //loop----------------------------- { otvirat(); delay(pauza1); zavirat(); delay(pauza1); } //konec loop--------------------------- void otvirat() // otvirat ---------------------- { digitalWrite(dir, HIGH); //nastavení směru otáčení for ( a = 100; a < 300; a++) { digitalWrite(stp, HIGH); delay(pauza); digitalWrite(stp, LOW); delay(pauza); lcd.setCursor(0,0); lcd.print(a);lcd.print("+"); } } //konec otvirat---------------------- void zavirat() // zavirat ---------------------- { digitalWrite(dir, LOW); //nastavení obráceného směru otáčení for (int a = 300; a>100; a--) { digitalWrite(stp, HIGH); delay(pauza); digitalWrite(stp, LOW); delay(pauza); lcd.setCursor(0,0); lcd.print(a);lcd.print("-"); } } //konec zavirat----------------------
S Merkurinem 01 se můžete podrobněji seznámit na setkání „CNC a robotika amatérsky„.