Fyzikální kabinet FyzKAB

Články Moduly ESP32 a ESP32-CAM ESP32 a řízení krokového motoru

ESP32 a řízení krokového motoru

V dnešním článku se dozvíte, jak pomocí ESP32 ovládat krokový motor. Již jsme si ukázali, jak ovládat servo (Ovládáme servo modulem ESP32) nebo jak řídit DC motor (Řízení DC motorů modulem ESP32), popis ovládání krokového motoru je tedy jasným pokračováním.

Pro naši ukázku použijeme unipolární krokový motor 28BYJ-48 s motorovým driverem ULN2003. Oba tyto prvky jsou běžnou součástí různých výukových sad pro modul Arduino, tak proč to nepoužít i pro modul ESP32. Pochopitelně lze použít silnější krokový motor např. z vyřazené disketové jednotky. Princip ovládání však bude obdobný. Vývojovou desku s modulem ESP32 bude opět programovat prostředím Arduino IDE.

Krokový motor

Krokový motor je bezkomutátorový stejnosměrný elektromotor, který rozděluje plnou rotaci do několika kroků. Pohybuje se vždy o jeden krok a každý krok má stejnou velikost. To nám umožňuje otočit motor o přesný úhel do přesné polohy. Krokový motor se může otáčet ve směru nebo proti směru hodinových ručiček. V tomto článku nebudeme podrobně popisovat, jak jsou krokové motory vyrobeny a jak interně fungují. Přesto si řekneme, že existuje mnoho krokových motorů s různými specifikacemi, v principu ale existují dva typy krokových motorů: unipolární (proud může téci cívkou pouze jedním směrem) a bipolární (proud může téci cívkou oběma směry).

Tento návod se zaměří na široce používaný unipolární krokový motor 28BYJ-48 s jeho driverem ULN2003 – viz obrázek č. 1.

krokový motor 28BYJ-48 s jeho driverem ULN2003
Zdroj obrázku: https://randomnerdtutorials.com/esp32-stepper-motor-28byj-48-uln2003/

Obrázek č. 1 – unipolární krokový motor 28BYJ-48 a jeho driver ULN2003

Vlastnosti krokového motoru 28BYJ-48

Základní vlastnosti krokového motoru 28BYJ-48, kterým se budeme nadá zabývat:

  • Jmenovité napájecí napětí: 5 V DC
  • Počet cívek (fází): 4
  • Úhel jednoho kroku (rotoru): 5,625°
  • Maximální pracovní frekvence: 100 Hz

Jak bylo uvedeno, krokový motor 28BYJ-48 má celkem čtyři cívky. Jeden konec cívky je vždy připojen na 5 V. Druhý konec cívek odpovídá zbylým vodičům, které jsou postupně připojované k zemi. Postupné napájení cívek v určité logické sekvenci způsobí, že se motor pohybuje vždy po jednom kroku jedním nebo druhým směrem.

zapojeni civek v krokovem motoru 28BYJ-48 princip krokoveho motoru.gif
Zdroje obrázku: https://randomnerdtutorials.com/esp32-stepper-motor-28byj-48-uln2003/
a https://gfycat.com/uk/oddornerykusimanse

Obrázek č. 2 – zapojení cívek krokového motoru 28BYJ-48

Krokový motor 28BYJ-48 má nejmenší možný úhel kroku 5,625°. Nejmenšího kroku lze dosáhnout v tzv. režimu polovičního kroku, což namená, že nejsou zapínány cívky v režimu první, druhá, třetí apod., ale jsou zapínány v režimu první, první společně s druhou (půl krok) a pak teprve druhá cívka. V režimu polovičního kroku potřebuje rotor krokového motoru 64 kroků (= 360°/5,625°) na jednu otáčku. V tzv. režimu plného kroku (zapínání cívek: první, druhá, třetí…) je krok dvojnásobný, tedy počet kroků na jednu otáčku je 32. Rozdíl mezi řízením krokového motoru v režimu celého a polovičního kroku znázorňuje obrácek č. 3.

Režim celého kroku (též tzv. čtyřtaktní režim)
cívka A 1000
cívka B 0100
cívka C 0010
cívka D 0001

zapojeni civek v krokovem motoru v rezimu celeho kroku


Režim polovičního kroku (též tzv. osmitaktní režim)
cívka A 11000001
cívka B 01110000
cívka C 00011100
cívka D 00000111

zapojeni civek v krokovem motoru v rezimu polovicniho kroku


Obrázek č. 3 – řídicí sekvence cívek při režimu celého a polovičního kroku

Výstupní hřídel krokového je však ještě osazena převodovkou s převodovým poměrem 64:1. To znamená, že hřídel vystupující vně motoru dokončí jednu otáčku, až pokud se rotor uvnitř otočí 64krát. Rotor se tedy bude muset otočit o 32×64 = 2048 kroků, aby hřídel dokončila jednu plnou otáčku. Tím získáme výslednou přesnost 2048 kroků na jednu otáčku, dosáhneme tedy výsledného úhlu 0,18° na jeden krok.

Takže shrnuto:

  • Celkový počet kroků na otáčku = 2048 kroků
  • Úhel jednoho kroku (hřídele) = 0,18°/krok

Pokud používáme jiný krokový motor, musíme si prostudovat technický list daného motoru, neboť se tyto údaje budou lišit.

Ovladač motoru ULN2003

K propojení krokového motoru s ESP32 použijeme ovladač motoru ULN2003, který je vyfotografován níže na obrázku č. 4. Krokový motor 28BYJ-48 se často rovnou prodává spolu s tímto ovladačem ULN2003.

deska ovladače ULN2003

Obrázek č. 4 – Ovladač krokového motoru ULN2003

Modul je dodáván s konektorem, který usnadňuje připojení motoru k modulu. Modul ULN2003 má čtyři vstupní kolíky pro řízení cívek, které uvádějí do pohybu krokový motor. Čtyři LED diody poskytují vizuální kontrolu stavu zapnutí cívek. Na desce ovladače ULN2003 vidíme kolíky pro připojení napájecího napětí VCC a GND, vedle těchto pinů je zkratovací propojka (jumper), který funguje jako vypínač pro napájení krokového motoru – pokud propojku odstraníte, motor bude odpojen od napájení. Následující tabulka zobrazuje popis pinů ovladače modulu:

IN1 Ovládání cívky 1: připojit k řídicímu digitálnímu pinu mikrokontroléru
IN2 Ovládání cívky 2: připojit k řídicímu digitálnímu pinu mikrokontroléru
IN3 Ovládání cívky 3: připojit k řídicímu digitálnímu pinu mikrokontroléru
IN4 Ovládání cívky 4: připojit k řídicímu digitálnímu pinu mikrokontroléru
VCC Napájecí napětí motoru
GND Společné GND
Konektor motoru Konektor pro připojení motoru


Tabulka č. 1 – popis konektorů ovladače desky ULN2003 (ovladače krokového motoru)

I když modul ULN2003 může být připojen na napětí 5–12 V, jak vidíme na jeho potisku na obrázku č. 4, nemusíme se zde obávat o modul ESP32. Použitý integrovaný obvod je jen tranzistorové pole, které na základě přivedeného signálu spíná jednotlivé cívky krokového motoru – tedy 3,3 V logika modulu ESP32 se nedostane do kontaktu s napájecím napětím krokového motoru. Schéma elektronického zapojení (včetně vnitřního uspořádání jednoho „proudového zesilovače“ pro cívku motoru) zobrazuje obrázek č. 5.

Elektronické schéma ovladače krokového motoru ULN2003

Obrázek č. 5 – Elektronické schéma ovladače krokového motoru ULN2003


   Poznámka:
POZOR, existují i jiné typy řadičů krokových motorů, které mohou mít vstupní signály IN1–4 drženy pomocí pull-up rezistorů na napěťové úrovni +5 V. To by náš modul ESP32 ohrozilo! Je tedy vždy nutné u jiných typů ovladače krokových motorů zkontrolovat elektronické schéma a princip jejich činnosti.
 

Připojení krokového motoru k ESP32

Nyní už konečně připojíme krokový motor k modulu ESP32, pochopitelně prostřednictvím ovladače motoru ULN2003. K pinům GPIO 19, 18, 5 a 17 připojíme vstupy IN1, IN2, IN3 a IN4. Můžete použít jakékoli jiné vhodné digitální piny (podívejte se na článek ESP32 – Jak používat GPIO piny?). Modul ESP32 společně s krokovým motorem 28BYJ-48 budeme napájet externím napájecím zdrojem 5 V – schéma tohoto propojení vidíme na obrázku č. 6. Pokud bychom krokový motor příliš nezatěžovali (tedy kupříkladu JEN pro ilustraci otáčení krokového motoru), mohli bychom modul ESP32 napájet z USB konektoru a napájecí napětí (5 V) pro napájení krokového motoru odebírat z pinu Vin (ale není to nejlepší nápad pro praktické trvalé řešení). Spotřeba krokového motoru 28BYJ-48 je přibližně 280 mA.

Elektronické schéma ovladače krokového motoru ULN2003
Zdroj obrázku: https://randomnerdtutorials.com/esp32-stepper-motor-28byj-48-uln2003/

Obrázek č. 6 – propojení modulu ESP 32 a krokového motoru 28BYJ-48 pomocí modulu ULN2003

Následující tabulka uvádí propojení řadiče ULN2003 s modulem ESP32.

Řadič motoru
ULN2003
modul ESP32
IN1 GPIO 19
IN2 GPIO 18
IN3 GPIO 5
IN4 GPIO 17


Tabulka č. 2 – propojení řadiče ULN2003 a modulem ESP32

Ovládací program krokového motoru

Jako ukázku ovládání krokového motoru si vytvoříme v prostředí Arduino IDE jednoduchý program, který nejdříve otočí krokovým motorem o jednu otáčku ve směru hodinových ručiček, počká jednu vteřinu, pak se otočí o jednu otáčku zpět a po jedné vteřině čekání se vše bude opakovat.

Existují různé způsoby, jak ovládat krokové motory pomocí mikrokontroléru. První způsob je přímé zapínání jednotlivých cívek. Tedy postupné adresování GPIO pinů. Nevýhodou tohoto řešení je, že neustále musíme řešit sekvenci zapojených cívek, stejně tak řešit časování kroků, aby bylo otáčení krokového motoru rovnoměrné.

Asi lepší bude použít způsob druhý, který je postavený na knihovně Stepper.h. Tato knihovna poskytuje snadný způsob ovládání pohybu motoru o definovaný počet kroků a definovanou rychlostí.

Krokový motoru se díky knihovně Stepper.h ovládá prostřednictvím objektu Stepper a jeho příkazů. Například příkaz setStepper nastavuje rychlost otáčení, příkaz step vykoná zadaný počet kroků – v případě kladného počtu kroků se motor otáčí ve směru hodinových ručiček, při zadání záporného počtu je směr otáčení opačný.

Následující program nám ukazuje, jak vyřešit naše zadání.

Kód

/* KROKOVY MOTOR */

#include <Stepper.h>

const int stepsPerRevolution = 2048;   // pocet otacek motoru na jednu otacku

// ULN2003 - zapojeni pinu
#define IN1 19
#define IN2 18
#define IN3 5
#define IN4 17

// vytvoreni objektu Stepper (pocet kroku na otacku, piny civek)
Stepper myStepper(stepsPerRevolution, IN1, IN2, IN3, IN4);

// funkce SETUP se spusti jednou pri stisknuti tlacitka reset nebo pri zapnuti desky.
void setup() {
  Serial.begin(115200);   // nastaveni rychlosti sériového portu

  myStepper.setSpeed(5);   // nastaveni rychlosti motoru (5 ot/min)
}

// funkce LOOP bezi stale dokola.
void loop() {
  // jedna otacka ve smeru hodinovych rucicek

  Serial.println("Otacim ve smeru hodinovych rucicek...");
  myStepper.step(stepsPerRevolution);
  delay(1000);

  // jedna otacka proti smeru hodinovych rucicek
  Serial.println("Otacim proti smeru hodinovych rucicek...");
  myStepper.step(-stepsPerRevolution);
  delay(1000);
}


Po přeložení a nahrání programu do modulu ESP32 se motor opakovaně otáčí o jednu otáčku ve směru hodinových ručiček a pak zpět proti směru hodinových ručiček – viz obrázek č. 7.

ukázka řízení krokového motoru 28BYJ-48 pomocí modulu ESP32
Zdroj obrázku: https://randomnerdtutorials.com/esp32-stepper-motor-28byj-48-uln2003/

Obrázek č. 7 – ukázka řízení krokového motoru 28BYJ-48 pomocí modulu ESP32

Závěr:

Ukázali jsme si jednoduchý příklad, jak lze modulem ESP32 řídit krokový motor. Výše uvedená knihovna Stepper.h není jediná, kterou lze pro ovládání krokového motoru využít. Hlubší zájemce o problematiku krokového motoru si dovolíme odkázat na následující anglický článek ESP32 with Stepper Motor (28BYJ-48 and ULN2003 Motor Driver), ze kterého jsme čerpali i pro tento text. Na samém závěru zmíněného článku lze najít odkaz na knihovnu AccelStepper, která umožní vývojáři získat větší kontrolu nad krokovým motorem. Použití této knihovny je tam i doloženo odkazem na stránku s několika příklady.

UPOZORNĚNÍ:
Nesouhlasíme s vyřazením Newtonových zákonů, Ohmova zákona a zákona zachování energie z učiva fyziky základních škol v České republice!