Řízení bipolárních krokových motorů.

Potřeboval jsem ovládat krokové motory, přičemž požadavky na maximální rychlost jejich otáčení byly velice malé a také jsem nechtěl investovat velké částky za speciální integrované obvody. Ano, mohl jsem za cenu složitějšího obvodového řešení realizovat tyto obvody i pomocí levných běžných integrovaných obvodů a tranzistorů a také toto řešení snad brzy zveřejním. Nicméně pro účel pomalého posuvu žhavého drátu řezajícího materiál je i níže uvedené řešení naprosto vyhovující a tudíž jsem jej pro toto zařízení využil. Pro více ks krokových motorů lze samozřejmě toto zapojení x kráte opakovat, v mém případě 4x.

Co to má přesně dělat ?

Do zapojení vedou 2 signály. Signál CLK provede kladným pulsem jeden půlkrok motoru do směru podle vstupu DIR. Jednochip zkrátka převede tyto dva signály na výkonové výstupy pro bipolární krokový motor. Dále zapojení obsahuje vstupy ze dvou koncových spínačů, které uzeměním způsobí zákaz dalšího posuvu motoru tímto směrem, ale pohyb směrem opačným je povolen.

Nešlo by to bez jednochipu ?

Jistě že by to šlo. V tomto zapojení jsem použil PIC16C84, což je starší varianta dnes používaného PIC16F84(A). Já je prostě ještě měl ve svých starých deskách, které už dosloužily a tak jsem je použil. PIC16F84(A) dnes umí programovat díky jeho rozšíření prakticky každý začátečník a existují pro něj i jednoúčelové programátory, tedy je pro mnoho lidí nejdostupnější z hlediska možnosti si ho sám vypálit. Pro všechny ostatní bych doporučil PIC16C54C, který stojí méně než polovinu PIC16F84A a poslouží zde stejně dobře, zapojení i deska plošných spojů jsou shodné, jen je nutné použít pro jeho vypálení paralelní programátor, který je dnes méně obvyklý než velice oblíbené sériové programátory v "TAIT" stylu. Za cenu PIC16C54C už opravdu není nad čím přemýšlet.

Konkrétní zapojení

K zapojení jen krátce, myslím že je ze schématu zřejmé. PIC, do kterého vstupují vstupní signály vyrábí výstupy pro ovládání výkonových výstupů v podobě můstku pro buzení bipolárního krokového motoru. Méně obvyklé je zde uspořádání výkonových tranzistorů kolektory k sobě. Toto řešní jsem si mohl dovolit proto, že jsou krokové motory ovládány po půlkrocích a tedy nikdy nedochází k nutnosti tyto tranzistory proti sobě najednou zavírat a otevírat, ale vždy jsou na jeden krok mezi těmito stavy oba zavřené. Tranzistory tak mají dostatek času se vždy zavřít a tak nedojde k průchodu proudu přes oba tranzistory do zkratu. Tady je nutné si uvědomit, že PIC má zde na svědomí jejich správné řízení a tedy při chybě programu by k tomuto zkratu mohlo dojít. Proto až uděláte nějaký zásah do programu PIC, přesvědčte se, že nikde tento stav nevyvoláte. Vhodná pojistka do napájení výkonové části zde jistě také není na škodu. Napájení 5V pro PIC a pro krokový motor je ve schématu i na desce odděleno, jsou spojeny jen zemí. Můžete tak napájet krokový motor např. 12V a PIC obvyklými 5V. Také typy tranzistorů není nutné dodržet, jen je třeba si vhodně vybrat typ. V mém případě jsem jak krokové motory tak PIC napájel z jednoho zdroje 5V a proudy vinutími byly požadovány 250mA. Pro větší proudy si pak ověřte hodnoty odporů použité u tranzistorů a počítejte se zesílením tranzistorů, aby se mohly na plno otevřít. Viděl jsem takováto zapojení i s unipolárními tranzistory, které mají v sepnutém stavu velice malý odpor, ale jsou výrazně dražší. Měřením mé hotové desky jsem naměřil napájení 4,87V na vstupech napájení do desky a 4,62V na vinutí krokového motoru. Tedy celkový úbytek napětí jen 250mV při proudu vinutím 220mA, což je způsobeno především oním zapojením tranzistorů kolektory k sobě. Krokové motory jsou deklarovány pro 250mA, takže použití napájení o pár desetin voltu vyšší by bylo na místě, ale i tak motor splnil co jsem potřeboval, tedy dostatečná maximální rychlost otáčení a kroutící moment. Měřil jsem je jen okem a rukou při taktování pomocí paralelního portu PC s poznámkou to stačí, větší přesnost informace jsem považoval pro mé účely za bezcennou.

Deska plošných spojů je pod tímto linkem

Ze strany spojů. Pokud se Vám bude obrázek zdát trochu veliký, pak je to jen z důvodu, že když ho vytisknete pixel na pixel při 300 dpi, získáte předlohu 1:1.

Osazení desky plošných spojů je pod tímto linkem.

Ze strany součástek. V rozích desky jsou díry, kterými můžete protáhnout 1mm tlustý měděný drát a jeho připájením vytvořit distanční sloupky mezi několika stejnými deskami nad sebou zároveň s rozvodem napájení pro krokové motory. Bod označený Vdd pak můžete také protáhnout oněmi deskami na patra a tak rozvést 5V pro napájení PIC. Bod CLKOUT pak můžete propojit vždy na bod původně druhého vývodu krystalu na další desce (CLKIN PICu) a vypustit na všech dalších deskách kondenzátory 33p a krystaly, takže se využije jen jeden oscilátor s krystalem pro všechny desky a ostatní PICy pak jen využijí hradlo z oscilátoru pro vstup hodin z předchozího PICu a výstup do dalšího. Sníží se tím počet použitých krystalů na 1ks. Takto stačí přivést napájení jen do jedné desky a do každé desky pak jen 2 vstupy pro řízení krokování motoru. Konfigurační bity PIC při použití externího oscilátoru a krystalu se nastaví stejně.

Program pro PIC16C84 v ASM pro MPASM.

Pozor na nastavení konfiguračních bitů při vypalování PICu. Je třeba je nastavit na WDT=OFF, HSOSC nebo XTOSC dle frekvence krystalu, zbytek dle Vaší úvahy. Program není závislý na kmitočtu použitého krystalu, jen s rychlejším krystalem bude zařízení reagovat na přicházející pulsy CLK do desky rychleji a bude možné i rychleji akceptovat přicházející pulsy CLK. Ale při rychlosti krokování krokových motorků to není nijak kritické, takže používám 4MHz XTAL, 20MHz je jistě lépe, ale není to nutné a 4MHz PICy bývají lacinější. Můžete si zde stáhnout i HEX soubor, který lze vypálit do PIC16C84, PIC16F84 a PIC16F84A s tím, že je nutné si správně nastavit konfigurační bity WDT a oscilátoru ve vypalovacím programu. Bohužel z časových důvodů jsem nezkoušel PIC16C54C, musel bych si ho jít koupit, takže zde ani neuvádím pro něj HEX soubor, ale při troše znalosti není problém si program pro něj upravit a do desky plošných spojů sedí. Jinak do této desky sedí i PIC16F628, PIC16C554 a další se stejným rozložením vývodů.

Závěrem

Nebylo účelem vytvořit nejlepší zapojení na světě, ale funkční zapojení odpovídající mému zadání. Tranzistory použité pro můstek jsou relativně levné a v tomto zapojení nehřejí a tedy není ani nutné je opatřovat chladičem. Pokud je problém vypálit PIC, pak požádejte někoho z Vašeho okolí. Pokud se zmíníte o PIC16F84, budete možná překvapeni, kolik lidí ve vašem okolí je umí vypálit. Pokud použijete PIC16C54C, získáte cenově velice přijatelné zapojení, tedy pokud odhlédnete od počtu součástek k osazení, ale čas se u koníčka nepočítá do ceny :-). Pokud budete potřebovat připojit tuto desku k PC, pak jen vyveďte z paralelního portu dva signály, třeba D0 a D1 + zem a propojte je přes odpory 4k7 (jen pro ochranu portu) na vstupy desky CLK a DIR a propojte země portu a desky. Pak už si motorky můžete ovládat z PC jen softwarem. Také se dá desek připojit k paralelnímu portu více kusů, vždy po 2 signálech na desku, nebo k řízení jednotlivých desek použít nadřízenou desku zase s jednochipem, klidně i jiného typu, třeba AT89C2051.

Pokud mne budete informovat o svých úspěšných pokusech s tímto zapojením, budete mít nějaké připomínky či návrhy, neváhejte mi napsat.

PIC16C621A

Dodatečně doplňuji materiál o konverzi na PIC16C621A. Jeho výhodou oproti PIC16F84A je podstatně nižší cena. Jinak zůstává vše nezměněno. Pokud Váš programátor nenabízí typ PIC16C621A, pak zvolte PIC16C621 (tedy bez A). Vypalování se na verzi A oproti verzi bez A nijak neliší. Zde uvádím ASM a HEX soubory. POZOR, HEX neobsahuje nastavení konfiguračních bitů, to je popsáno v ASM souboru. Všechno běhá stejně dobře jako na originálu, komparátory jimiž tento chip disponuje jsou nepoužity, stejně jako napěťová reference. Dá se říci, že to není o ničem jiném než o ceně. Pokud nebudete experimentovat přímo na programu tohoto chipu věřím, že Vás portace na OTP chip se sériovým programováním (stejný typ programátoru jako pro PIC16x84x) potěší. Jen pro představu, za PIC16C621A-04/P jsem v listopadu 2001 zaplatil v maloobchodě GM 84.70Kč i s DPH.

Autorův e-mail: jiri@bezstarosti.cz