Krokohrátky – Merkurino 01

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í:
arduino-a49881Pří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„.