Řízení krokového motoru

      21.4.2011 Před 2 týdny se mi podařilo na šroťáku získat postarší unipolární krokové motory Z42QN147 od MEZ Náchod se stat. momentem 0,75 Nm a max. proudem 5,5 A. Odpor jedné poloviny vinutí je 0,25 Ω a indukčnost jsem naměřil asi 1 mH. Další údaje lze najít v naskenovaném katalogu zde. Dnes se běžně vyrábí krokové motory s větším momentem a menším proudem, ale za pár babek neber to. Navíc vypadají, jako nové, ještě nepoužité. Říkal jsem si, že by se mohly hodit na pohon do nějakého homemade CNC strojku.

krokový motor Z42QN147

      Napřed jsem si ale potřeboval vyzkoušet, jak se vlastně takový motor řídí. Obecný popis principu a řízení viz např. tyto skripta. Generování řídicích průběhů by nebyl žádný problém - na to použiju své oblíbené AVRko, takže stačí udělat jen koncový stupeň. Protože mám unipolární motor (proud teče cívkami pouze jedním směrem), tak je buzení jednodušší - v podstatě jen 4 spínače, které budou přizemňovat konce cívek (napájení je připojeno na středy obou cívek). U bipolárního motoru by byly nutné 2 H-můstky a tedy nepříjemnosti s buzením horních plovoucích tranzistorů. Abych mohl tranzistory ovládat přímo mikrokontrolérem, použil jsem nízkonapěťové TLL-MOSFETy 20N03L (30 V / 30 A / 20 mΩ @5V) v malém SMD pouzdru vypájené z vadného motherboardu. Podle obecných pouček o spínání indukční zátěže jsem bez hlubšího rozmyslu přidal na svorky každé cívky motoru rychlou antiparalelní diodu UF5404, která povede proud po rozepnutí tranzistoru, aby nevznikla VN špička.

unipolar stepper motor driver schematic-bad diodes

      Pro tento jednoduchý obvod jsem navrhnul malý plošňák, který jsem nakreslil z hlavy lihovkou na kuprák a vyleptal v chloridu železitém. Svorky a1, a2, b1, b2 a GND jsem přímo připojil ke své bastldesce s ATmega32 napájené z 5V zdroje. Driver jsem napájel z laboratorního zdroje s omezením proudu 30 V / 3 A. Krokové motory je nutné napájet zdrojem konst. proudu, protože s rostoucí frekvencí se výrazně zvyšuje impedance vinutí a aby moment tak neklesal, je potřeba cívkami tlačit stále stejný proud (úbytek napětí na cívkách roste). V praxi se to řeší pomocí běžného zdroje konst. napětí a PWMkou, kterou se rozsekají řídicí impulsy podle jejich frekvence. Frekvence PWM je řádově vyšší než řídicí frekvence.

unipolar stepper motor driver PCB top unipolar stepper motor driver PCB top unipolar stepper motor driver PCB bottom unipolar stepper motor driver test

      Do AVRka jsem napsal a nahrál krátký prográmek v C obsahující jednu smyčku, která přepínáním kombinací I/O portů generuje buď 4-taktní průběh bez překryvu a) či 4-taktní průběh s překryvem b) nebo 8-taktní průběh s překryvem c). Dále program umožňuje pomocí 2 tlačítek čtených z dalších I/O portů zvyšovat a snižovat frekvenci impulsů.

stepper motor phase driving signal

      Po zapnutí sebou motor podivně cukal a nepomáhalo ani prohazování konců fází. Nakonec jsem zjistil, že moje AVRko má po předchozích pokusech odpálený jeden I/O port, takže jsem musel postiženou fázi přemapovat na jiný. Pak už se motor rozběhl, ale nastalo další rozčarování. Při nízké frekvenci motor běžel docela pěkně a vykazoval velký moment, že se nedal ani zastavit rukou. MOSFETy byly krásně studené. Zato při vyšších frekvencích začal motor vynechávat kroky a moment velmi slábnul. Podařilo se mi dostat sotva na 90 Hz bez zátěže (bez výpadku kroků). Také se začaly silně zahřívat antiparalelní diody a po chvíli i MOSFETy. Podezřelé bylo také to, že napětí zdroje při proudu 3 A bylo jen asi 3 V. Průběhy napětí Uds vypadaly dost příšerně.

Uds oscillogram Uds oscillogram Uds oscillogram
Uds 7@Hz Uds 30@Hz Uds 62@Hz

      Diodami zřejmě procházel proud více a déle než bylo zdrávo a důkladně to udusily. Zkusil jsem tedy diody odstranit. Aby MOSFETy tolik netrpěly indukovanými VN špičkami (sic jsou avalanche rated), přidal jsem mezi drain a source každého MOSFETu unipolární transil 1.5KE36A, který má Vbr kolem 34 V. Na fotkách výše je už driver s touto úpravou.

unipolar stepper motor driver schematic-transils

      Chování motoru se po této modifikaci dramaticky změnilo - najednou jsem byl schopen ho vytočit bez výpadků kroků přes 600 Hz, což už jsou docela slušné otáčky, viz video [MPEG4, 947 kB]. Bohužel problém přehřívání součástek nezmizel. Po minutě provozu byly transily tak horké, že při dotyku nasliněným prstem to jenom syčelo. A MOSFETy hřály taky. Nakonec se mi jeden transil šlehnul a musel jsem ho uštípnout. Fungovalo to i bez něj, protože MOSFET VN špičku požral, ale o to více topil. Na oscilogramu vpravo je tento případ zachycen, jedná se o horní průběh.

Uds oscillogram Uds oscillogram Uds oscillogram
Uds 128@Hz Uds 272@Hz Uds 568@Hz

      Další nápad byl přepojit společné katody antiparalelních diod z kladného pólu napájecího proudového zdroje na kladný pól pomocného napěťového zdroje, jehož napětí by bylo o něco vyšší než max. napájecí, takže po většinu času by byly diody polarizovány závěrně. Pokud by napětí indukované špičky přesáhlo napětí pomocného zdroje, diody by se otevřely a energie by se přelila do kondenzátoru a postupně spotřebovala ve zdroji - ten by musel být typu parametrický stabilizátor, aby se vypořádal s proudem tekoucím oběma směry, jinak by se jeho výstupní napětí neustále zvyšovalo.

unipolar stepper motor driver schematic-aux pwr supply

      Místo toho jsem ale začal uvažovat, že radši postavím můstkový bipolární driver, který to vyřeší čistě. Když jsem koukal na nabídky firem, které prodávají krokové motory a profi drivery, tak se dnes prakticky nic jiného nepoužívá a asi to má dobrý důvod. Unipolární motor se připojí k můstku jednoduše tak, že se střední vývod vinutí nechá nezapojený a použijí se oba konce.



Zpět

Aktualizováno 26.4.2011 v 4:06