Merkurino 01 a krokový motor s A4988

Dnes si povíme něco o ovládání krokových motorů pomocí Arduina/Merkurina 01.

Co k tomu potřebujete:

  • Merkurino 01
  • unipolá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 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ými 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 + modul A4988

Arduino + modul A4988

Příklad zapojení:

Merkurino + a4988

Merkurino + a4988

Merkurino + a4988 1

Merkurino + a4988 1

Program, který jednou otočí 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----------------------

Napsat komentář