- Potřebné materiály
- Krokový motor (28BYJ-48)
- Integrovaný obvod ovladače motoru ULN2003
- Schéma zapojení a zapojení
- Rotační krokový motor s STM32F103C8
- PROGRAMOVÁNÍ STM32 pro krokový motor
Krokový motor je střídavý stejnosměrný motor, který lze otáčet v malých úhlech, tyto úhly se nazývají kroky. Krokový motor obecně používá 200 kroků k dokončení rotace o 360 stupňů, což znamená, že se otáčí o 1,8 stupně na krok. Krokový motor se používá v mnoha zařízeních, která vyžadují přesný rotační pohyb, jako jsou roboti, antény, pevné disky atd. Krokový motor můžeme otáčet do jakéhokoli konkrétního úhlu tím, že mu poskytneme náležité pokyny. K dispozici jsou hlavně dva typy krokových motorů, Unipolární a Bipolární. Unipolární se snadněji ovládá, ovládá a také snáze získává. Zde v tomto výukovém programu propojujeme krokový motor s deskou STM32F103C8 (modrá pilulka).
Potřebné materiály
- STM32F103C8 (modrá pilulka)
- Krokový motor (28BYJ-48)
- ULN2003 IC
- Potenciometr 10k
- Nepájivá deska
- Propojovací vodiče
Krokový motor (28BYJ-48)
28BYJ-48 je Unipolární krokový motor, který vyžaduje napájení 5 V. Motor má unipolární uspořádání se 4 cívkami a každá cívka je dimenzována na + 5 V, a proto je relativně snadné ho ovládat pomocí jakýchkoli mikrokontrolérů, jako je Arduino, Raspberry Pi, také STM32. K jeho řízení však potřebujeme integrovaný obvod Motor Drive jako ULN2003, protože krokové motory spotřebovávají vysoký proud a mohou poškodit mikrokontroléry.
Dalším důležitým údajem je Stride Angle: 5,625 ° / 64. To znamená, že motor, který pracuje v 8krokové sekvenci, se bude pohybovat o 5 625 stupňů pro každý krok a bude trvat 64 kroků (5 625 * 64 = 360) k dokončení jedné plné rotace. Další specifikace jsou uvedeny v datovém listu níže:
Zkontrolujte také propojení s krokovým motorem s jinými mikrokontroléry:
- Propojovací krokový motor s Arduino Uno
- Ovládání krokového motoru s Raspberry Pi
- Rozhraní krokového motoru s mikrokontrolérem 8051
- Propojovací krokový motor s mikrokontrolérem PIC
Krokový motor lze ovládat také bez mikrokontroléru, viz tento obvod ovladače krokového motoru.
Integrovaný obvod ovladače motoru ULN2003
Slouží k pohonu motoru podle impulzů přijatých z mikrokontroléru. Níže je uveden grafický diagram ULN2003:
Piny (IN1 až IN7) jsou vstupní piny a (OUT 1 až OUT 7) odpovídající výstupní piny. COM je dáno Pozitivní zdrojové napětí požadované pro výstupní zařízení. Další zapojení pro krokový motor jsou uvedena níže v části schématu zapojení.
Schéma zapojení a zapojení
Níže je vysvětleno připojení výše uvedeného schématu zapojení.
STM32F103C8 (modrá pilulka)
Jak vidíme na níže uvedeném diagramu, piny PWM jsou indikovány ve formátu vlny (~), existuje 15 takových pinů, které lze použít pro pulzní výstup do krokového motoru. Potřebujeme pouze čtyři piny, používáme (PA0 až PA3).
STM32F103C8 s integrovaným obvodem ovladače motoru ULN2003
Piny (PA0 až PA3) jsou považovány za výstupní piny, které jsou spojeny se vstupními piny (IN1-IN4) IC ULN2003.
PINY STM32F103C8 |
PINY ULN2003 IC |
PA0 |
V 1 |
PA1 |
IN2 |
PA2 |
IN3 |
PA3 |
IN4 |
5V |
KOM |
GND |
GND |
ULN2003 IC s krokovým motorem (28BYJ-48)
Výstupní piny (OUT1-OUT4) ULN2003 IC jsou připojeny k pinům krokových motorů (oranžová, žlutá, růžová a modrá).
PINY ULN2003 IC |
PINY STEPPER MOTORU |
OUT1 |
ORANŽOVÝ |
OUT2 |
ŽLUTÁ |
OUT3 |
RŮŽOVÝ |
OUT4 |
MODRÝ |
KOM |
ČERVENÉ |
STM32F103C8 s potenciometrem
Potenciometr slouží k nastavení rychlosti krokového motoru.
POTENCIOMETR |
STM32F103C8 |
VLEVO (VSTUP) |
3.3 |
CENTRUM (VÝSTUP) |
PA4 |
VPRAVO (GND) |
GND |
Rotační krokový motor s STM32F103C8
Níže je uvedeno několik kroků k ovládání krokového motoru:
- Nastavte rychlost krokového motoru změnou potenciometru.
- Pak ručně zadejte kroky pro rotaci buď ve směru hodinových ručiček (+ hodnoty), nebo proti směru hodinových ručiček (-hodnoty) přes SERIAL MONITER přítomný v ARDUINO IDE (Tools-> Serial monitor) nebo CTRL + SHIFT + M.
- Podle vstupní hodnoty uvedené na sériovém monitoru dochází v krokovém motoru k určitým krokům otáčení.
Například
HODNOTA UVEDENÁ V SÉRIOVÉM MONITORU |
OTÁČENÍ |
2048 |
(360) CLK WISE |
1024 |
(180) CLK WISE |
512 |
(90) CLK WISE |
-2048 |
(-360) ANTI CLK WISE |
-1024 |
(-180) ANTI CLK WISE |
-512 |
(-90) ANTI CLK WISE |
PROGRAMOVÁNÍ STM32 pro krokový motor
Stejně jako v předchozím tutoriálu jsme naprogramovali STM32F103C8 na Arduino IDE přes USB port bez použití programátoru FTDI. Chcete-li se dozvědět více o programování STM32 s Arduino IDE, klikněte na odkaz. Můžeme to programovat jako Arduino. Celý kód je uveden na konci projektu.
Nejprve musíme zahrnout soubory krokové knihovny # zahrnout
#zahrnout
Pak definujeme ne. kroků k dokončení při rotaci, zde používáme 32, protože používáme Full-Step (4-Step-sequence), takže (360/32 = 11,25 stupně). Takže v jednom kroku se hřídel pohybuje o 11,25 stupně, což je úhel kroku. Ve 4krokové sekvenci jsou nutné 4 kroky pro jedno úplné otočení.
#define KROKY 32
Můžeme také použít půlkrokový režim, kde je 8kroková sekvence (360/64 = 5,625) úhel kroku.
Kroky na otáčku = 360 / KROKOVÝ ÚHEL
Když nastavujeme rychlost, musíme vzít analogovou hodnotu z PA4, která je připojena k potenciometru. Za to tedy musíme deklarovat pin
const int speedm = PA4
Potom jsme převedli analogovou hodnotu na digitální uložením těchto hodnot do proměnné celočíselného typu, poté musíme namapovat hodnoty ADC pro nastavení rychlosti, takže použijeme následující příkaz. Další informace o používání ADC s STM32 se dozvíte zde.
int adc = analogRead (speedm); int výsledek = mapa (adc , 0, 4096, 1, 1023);
K nastavení rychlosti používáme stepper.setSpeed (result); Máme rozsah rychlostí (1-1023).
Musíme vytvořit instanci jako níže, abychom nastavili piny, které jsou připojeny k motoru. V těchto krocích buďte opatrní, protože většina z nich zde v tomto vzoru udělá chybu. Dávají špatný vzor a kvůli tomu nemohou být cívky napájeny.
Stepper stepper (STEPS, PA0, PA2, PA1, PA3);
Níže uvedený příkaz se používá k získání hodnoty kroků ze sériového monitoru. Například potřebujeme 2048 hodnot pro jednu plnou rotaci (32 * 64 = 2048), což je 64 bude převodový poměr a 32 bude půlkroková sekvence pro jednu rotaci.
rotate = Serial.parseInt ();
Níže uvedený kód se používá k volání instance a spuštění motoru. Pokud je hodnota otočení 1, zavolá se funkce stepper jednou a provede se jeden pohyb.
stepper.step (rotace);
Kompletní kód s ukázkovým videem je uveden níže. Také zde zkontrolujte všechny projekty týkající se krokových motorů s propojením s různými jinými mikrokontroléry