Kontrolér krokového motorku nejen pro stavebnici Merkur
Před Vánoci jsem byl požádán o výrobu přípravku s motorkem pro stavebnici Merkur. Výrobce sice nabízí i nějaké elektronické komponenty, ale nic to neumí, dost to stojí, a je to tak na úrovni před padesáti lety. Tak jsem zabral šponu a v rekordním čase spíchl následující kontrolér pro krokový motorek. Doba trochu pokročila, takže jsem se rozhodl do toho integrovat Bluetooth modul a napsat aplikaci pro Android pro vzdálené ovládání. Nepředpokládám, že by tato konstrukce jako celek byla mnoha lidem užitečná, ale může posloužit jako příklad, jak se to (ne)má dělat a také jako zdroj ke kanibalizaci částí SW.
1. Hardware Řadič je postaven na 8-bit mikrokontroleru AVR taktovaném na 20 MHz. Konkrétně jsem použil ATmega328PB, ale vešlo by se to hravě i do ATmega168PB. Jako krokový motor jsem použil NEMA 17 17HS4023 s bipolárním vinutím. Neměl jsem po ruce vhodný řadič krokových motorů a většina řadičů ani nejede pod nějakých 5 V, takže jsem použil co bylo po ruce a po ruce byl pytel budičů GaN-fetů 1EDN7512B. Jedná se o polomůstek s FETy s celkem malým odporem kanálů v malém pouzdře SOT23 a nic moc nestojí. Jediná nevýhoda je, že mají obvod pro detekci podpětí (UVLO) nastavený na cca 4,2 V. To je zásadní funkce pro použití jako budič MOSFETů (drží MOSFET bezpečně vypnutý), ale v této aplikaci jedna stana můstku padne do UVLO dříve než druhá a tím poteče celkem velký neřiditelný proud. Nedestruktivní, ale vybije to baterie. Proto MCU detekuje podpětí a deaktivuje oba budiče předem. Ke komunikaci přes Bluetooth je použit levný modul JDY33-TTL. Pro dosažení minimálního klidového odběru je výkonový stupeň, BT modul a dělič pro měření napětí spínán výkonovým P-MOSFETem. Zamýšlené napájení je ze 4xAA NiMh akumulátorů, takže je třeba omezit napětí MCU na 5 V. K tomu je použit LDO regulátor TI TPS709B50 s velmi malým klidovým proudem. Celkový odběr v uspaném režimu je cca 2 µA. Ovládání je pomocí čtyř tlačítek START, STOP, VLEVO a VPRAVO a jedním enkodérem pro nastavení rychlosti a směru otáčení.
Konstrukce je navržena do plastové krabičky MASZCZYK KM-276I/G.
Je to trochu větší než bych chtěl, ale baterie jsou dost rozměrné. V nějaké příští verzi by se to dalo předělat na Li-ion,
ale to by chtělo pořešit battery management a na to nebyl čas.
2. Firmware Firmware jsem napsal v prostředí Microchip Studio v AVRGCC. Budiče motoru nemají zpětnou vazbu proudu, takže je proud řízen amplitudou sinus a cosinus signálů generovaných PWM výstupy AVR podle otáček motoru. Modulační frekvence je 78,125 kHz. Amplituda pro použitý motor je nastavena empiricky na proud cca 200 až 250 mA naprázdno. Maximální použitelné otáčky pro napětí 5 V jsou cca 270 ot/min. Pak se motor dostává do rezonance. Komunikace přes BT je řešena příjmem dat do kruhového bufferu v přerušení a následné zpracování povelů je řešeno v hlavní smyčce programu spolu se vším ostatním co není časově kritické. Povely jsou řešeny ve stylu SCPI syntaxe. Příkazy musí být zakončeny znakem LF (0x0A). Odpovědi jsou rovněž zakončeny LF. Příkazy lze řetězit středníky až do délky 127 znaků.
Ruční ovládání je řešeno pomocí tlačítek a enkodéru. START probudí kontrolér. Další stisk spustí motor.
STOP zastaví motor. Podržení STOP vypne zařízení (přechod do režimu spánku). Stisk LEFT nebo RIGHT spustí motor daným směrem.
Enkodér nastavuje rychlost a směr motoru. Vybitá baterie je indikována červeně blikající LED a zařízení se vypne. V normálním stavu svítí LED zeleně.
Při příjmu přes BT bliká LED zeleně. 3. Aplikace pro Android
Zařízení lze ovládat přes terminál SCPI příkazy, ale není to zrovna praktické.
Takže jsem se pokusil realizovat svou první aplikaci pro Android.
Po krátkém průzkumu jsem zvolil Android studio
a populární jazyk Kotlin.
Kotlin se ukázal být dobrá volba. Proti např. C++ je nesrovnatelně jednodušší a pohodlnější.
Původně jsem chtěl pro BT komunikaci použít jednu z dostupných knihoven,
ale nějak se mi nepovedlo vyřešit kolize použitých knihoven.
Tak jsem to zkusil naprogramovat pomocí základních Androidích knihoven a bylo to až překvapivě snadné:
Získat seznam spárovaných zařízení, jedno vybrat, otevřít socket a vstupně/výstupní streamy. Toť vše.
Největší zádrhel bylo udílení oprávnění pro BT komunikaci, které se liší pro různě verze Androidu.
Problém byl také ošetřit situace, kdy BT zařízení zmizí, ale i to se snad nějak povedlo ošetřit.
Aplikaci jsem testoval ve vezích Android 11 až 14. U verzí 11 a nižších může být problém s udělením oprávnění pro BT.
Možná to bude chtít párkrát restartovat nebo udělit ručně.
4. Licence Všechny části jsou distribuované pod licencí MIT. (c) 2025, Stanislav Mašláň - Všechna práva vyhrazena.
|