Driver krokových motorů A3967

Driver krokových motorů A3967 je výstupní modul pro Arduino. Tento modul, který se také objevuje pod názvem Easy Driver, obsahuje integrovaný obvod A3967, který nám umožňuje ovládat bipolární krokové motory, jako je například 28BYJ-48. Pro řízení se v základním zapojení používá mikrokrok 1/8, přičemž toto nastavení lze pomocí pinů MS1 a MS2 změnit také na varianty 1/4, 1/2 a 1/1.
Co se týká řízení, tak lze použít pro řídící logiku napětí 3,3 i 5 Voltů, zatímco napájení motorů zvládá modul v rozpětí 7 až 30 Voltů. Na modulu se také nachází trimr pro regulaci proudu do motoru, který lze regulovat od 150 do 750 miliampér.

Pro úspěšné propojení driveru A3967 s Arduinem je nutné zapojit celkem devět vodičů. Pro řízení propojíme GND se zemí Arduina, STEP s pinem D8 a DIR s pinem D9. Poté je nutné zapojit motor, kdy pro vybraný motor jsem ve schématu použil barvy shodné s kabely v konektoru motoru.
Poslední krok je pak připojení napájecího zdroje, kdy já jsem použil 12 V motor a proto tedy připojuji na napájecí svorky napětí 12 V.
POZOR: Nepřipojujte ani neodpojujte motor, zatímco je driver pod napětím. Může to mít za následek trvalé poškození obvodu A3967!

Ukázkový kód obsahuje na svém začátku nastavení čísel propojovacích pinů DIR a STEP společně s vytvořením proměnné, do které budeme ukládat aktuální krok motoru.
Ve funkci setup si v prvním kroku nastavíme oba piny jako výstupní a následně je připojíme na zem.
Nekonečná smyčka loop začíná vždy pohybem motoru o jeden krok. Ten vytvoříme tak, že na krátký čas 100 mikrosekund zapíšeme na pin STEP jedničku a následně nulu. Poté si do proměnné kroky přičteme jedničku a v dalším kroku budeme zkoumat aktuální stav počítadla. Pokud se totiž dostaneme na hodnotu 16384 [8(mikrokroků driveru)*32(otáček)*64(kroků motoru)], tak jsme se otočili o 360 stupňů. V tomto případě si načteme aktuálně nastavený stav pinu DIR, který udává směr otáčení, a zapíšeme na něj jeho opačnou hodnotu. Poté už jen vynulujeme počítadlo a po krátké pauze budeme opět provádět 16384 kroků, avšak v opačném směru.

// Arduino driver krokových motorů A3967
// navody.dratek.cz

// nastavení čísel propojovacích pinů
#define DIR 8
#define STEP 9
// proměnná pro uchování informace o krocích
int kroky = 0;

void setup() {
  // nastavení pinů jako výstupních
  pinMode(DIR, OUTPUT);
  pinMode(STEP, OUTPUT);
  // připojení obou řídících pinů na zem
  digitalWrite(DIR, LOW);
  digitalWrite(STEP, LOW);
}

void loop() {
  // pomocí zapsání logické jedničky na krátký čas
  // 100us pro pohyb motoru o jeden krok
  digitalWrite(STEP, HIGH);
  delayMicroseconds(100);
  digitalWrite(STEP, LOW);
  delayMicroseconds(100);
  // připočtení jedničky do počítadla kroků
  kroky = kroky + 1;
  // pokud se otočíme o jednu otáčku, otočíme směr
  // 16384=8(mikrokroků driveru)*32(otáček)*64(kroků motoru)
  if (kroky == 16384) { 
    // načtení stavu pinu do proměnné
    bool stav = digitalRead(DIR);
    // zápis opačné hodnoty stavu
    digitalWrite(DIR, !stav);
    // vynulování počítadla kroků
    kroky = 0;
    // krátká pauza v hraniční poloze
    delay(500);
  }
}

Po nahrání ukázkového kódu do Arduino desky s připojeným driverem A3967 a krokovým motorem dostaneme například tento výsledek:

Driver krokových motorů A3967 je jednoduše použitelný modul, který nám usnadňuje práci s krokovými motory. Lze ho totiž ovládat pouze pomocí dvou pinů, kdy jeden určuje směr otáčení a druhý provádí samotné kroky. Tento driver lze také ovládat dalšími piny, kterými můžeme celý driver uspat či nastavit jiné mikrokroky, jak už bylo zmíněno. Hodí se tak do různých projektů, kde chceme využívat krokové motory pro řízení, polohování a další. Pokud byste se chtěli inspirovat také dalšími příklady, zde jsou stránky autora.

Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/1125-arduino-motor-driver-a3967-750-ma-30-v.html
https://dratek.cz/arduino/5041-krokovy-motor-28byj-48.html

Další podobné články