Hlavní navigace

Motor připojený k počítači a ovládaný Linuxem

16. 7. 2009
Doba čtení: 4 minuty

Sdílet

V Linuxu je možné většinou poměrně jednoduše spojit skriptovacími jazyky funkcionalitu různých programů a udělat si jednoduchou aplikaci na míru. Pojďme tento koncept rozšířit i do fyzického světa v nejbližším okolí našeho počítače. Dnes si připojíme k našemu linuxovému počítači krokový motor z tiskárny.

Princip krokového motoru

Krokový motor je stroj zpravidla nevelkého výkonu (má špatný poměr hmotnosti a výkonu), který má několik preferovaných poloh rotoru oproti statoru. Po přivedení proudu na řídící cívky skončí motor v některé z preferovaných poloh. V těchto polohách je nejmenší energie magnetického pole (nejvyšší magnetická vodivost mezi rotorem a statorem pro aktuálně buzené pole).

Použijeme dvoufázový krokový motor, ten má dvě ovládací cívky (fáze) a ovládá se tak, že se přivede proud do jedné cívky, pak do druhé, pak do první, ale v opačném směru a nakonec do druhé v opačném směru (+1, +2, –1, –2). Celý cyklus se opakuje. Pro opačný chod se pouze otočí pořadí čtveřice (-2, –1, +2, +1). Číslo je číslo cívky, znaménko směr proudu.

Toto je základní řízení, které jsem použil na inkubátor pavoučího kokonu. Motor pochází z devítijehličkové tiskárny ALPS P2000G, pracuje na 3,9 V a má 1,8 úhlového stupně na krok. Takže udělá celou otočku za 100 kroku (25 čtveřic). Ve velkém množství tiskáren, kopírek, faxu a podobných zařízení bývá jeden, nebo dva krokové motory.

Krokový motor

Bez odporu do země šlo krokovat prstem (připojením báze tranzistorů na napájecí napětí přes odpor těla) a obával jsem se, že tranzistory budou spínat i špičky z napájecího napětí a další rušení. Jsou to darlingtony a mají zesílení větší než 750. Pokud si z minulého dílu vzpomínáte na zpětné diody zapojené paralelně s cívkou, vzpomínáte si správně. Ale použité tranzistory mají dostatečné kolektorové napětí a energie cívky může odtéct do výkonových odporů, takže nevznikne vysoká napěťová špička.

Zapojení je energeticky neefektivní, protože po sepnutí jednoho tranzistoru jím protéká proud cívkou krokového motoru a také (zbytečně) proud jeho odporu v kolektoru. Nicméně to příliš nevadí, protože stačí méně než 1 ms dlouhé sepnutí (záleží na setrvačnosti a mechanickém odporu zátěže, nutno vyzkoušet v konkrétní aplikaci a s konkrétním motorem). Tranzistory jsou bez chladičů, ale ani při kontinuálním běhu pomalou rychlostí (10 kroků za sekundu) se nezahřejí a odpory také ne. Podstatnou výhodou oproti běžnému můstkovému zapojení (místo odporu v kolektorech další čtveřice tranzistorů) je, že chyba softwaru nezpůsobí zkrat napájecího zdroje a zničení zařízení (což jde samozřejmě zařídit i jinak). Navíc není třeba ovládat tranzistory v kladné větvi.

Tento skript pak otáčí motorem na jednu stranu

while true; do
        for a in 1 2 4 8; do
                par_out "$a"
                par_out 0
                sleep 0.1
        done
done

a po otočení čísel (8 4 2 1) nazpět.

Krokový motor

Mezikrok

Pokud by počet kroků nestačil, dá se motor provozovat s dvojnásobným počtem kroků, ale tam už lze silně doporučit můstkové zapojení, protože motorem v polovině kroku protéká proud oběma cívkami. Zatímco u minulého zapojení šlo krokovat (+1, 0, +2, 0, –1, 0, –2, 0), kde je motor většinu času ve stavu 0 (žádnou cívkou neteče proud), u tohoto řízení se krokuje (+1, +1+2, +2, +2–1, –1, –1–2, –2, –2+1). Po dosažení stavu, kdy protéká proud jen jednou cívkou, je samozřejmě možné zařadit stav 0 (vše vypnout), ale ve stavu, kdy protéká proud oběma cívkami, je nutné tyto proudy nechat zapnuté. Odběr energie je výrazně vyšší, než u jednoduchého řízení.

Můstek

Princip můstku je jednoduchý. Zapojíme dva tranzistory nad sebe (často se používá komplementární pár – dva stejné tranzistory, jeden PNP a druhý NPN), jeden do kladné a jeden do záporné větve (u komplementárního páru spojíme kolektory, emitor NPN připojíme na zem a emitor PNP na plus napájecího napětí). Druhý vývod cívky zapojíme na druhou dvojici tranzistorů. Na jedné straně sepneme tranzistor na zem, na druhé na plus a a cívkou protéká proud v jednom směru.

Zapnutím druhé dvojice tranzistorů dostaneme opačný směr proudu. Ke každému tranzistoru je třeba paralelně připojit zpětnou diodu, která vede v opačném směru než tranzistor. Tranzistorové budiče s polomůstkem (párem tranzistorů) nebo více polomůstky se běžné prodávají s bipolárními tranzistory i s FETy. Je rozumné vytvořit ovládací signál kombinačními obvody tak, aby z portu šel pro každý můstek směr a enable. Pak není možné odpálit celé zařízení softwarovou chybou Pro více informací navštivte Wikipedii.

Jemnější řízení

Nejsem si jist, zda je toto možné udělat se všemi krokovými motory (nemám s tím praktickou zkušenost, ale třeba se najde někdo v diskusi), ale obě cívky lze také napájet analogově dvěma sinusovými průběhy signálů posunutými o 90 stupňů, které lze (pro větší energetickou efektivitu) vytvořit PWM modulaci. Pak je počet mezikroků neomezený (a spotřeba energie ještě vyšší, než u řízení s mezikrokem).

CS24_early

Přesnost řízení v Linuxu

Pokud je třeba motor řídit s přesným časováním, je lepší použít nějaký mikroprocesor a Linuxem mu pouze posílat co má udělat. Pokud třeba Firefox spotřebuje všechnu paměť a systém začne swapovat, je možné, že se krok zpozdí třeba i o několik sekund. S trochou smůly bude celou dobu zapnutá jedna z fází motoru. Z tohoto důvodu bych určitě dal tranzistory na chladič (já jsem inkubátor řídil procesorem Atmega8 se zakázanými interrupty).

Rozhodně doporučuji nepoužívat řídící počítač k žádným náročným úlohám (měl by mít tak 90 % idle), ale ani to nezaručuje nic (jen výrazně snižuje pravděpodobnost). Pokud by nedodržení časování znamenalo problém a řešení s extra procesorem by bylo nevhodné, volil bych RT Linux.

Byl pro vás článek přínosný?