Pomocí PICAXE-08M2 a řadiče s obvodem ULN 2003 roztočíme malý krokový motorek 28BYJ48 s vestavěnou převodovkou.
Nejprve si v krátkosti připomeňme, že existují tři různá zapojení vinutí krokových motoru:
Unipolární motor může mít vyvedeno všech šest vodičů, jak je naznačeno na obrázku, nebo může mít oba středy cívek propojeny a vyvedeno je jen pět vodičů. To je i případ našeho malého krokového motorku.
Způsob řízení krokového motoru
Krátká definice říká, že krokový motor je je impulsně napájený motor, jehož funkční pohyb je nespojitý a děje se po jednotlivých úsecích (krocích).
Znamená to tedy, že aby motor začal krokovat, je nutno vstupy výkonového budiče připojovat k napájecímu napětí v určitém pořadí; tím začne protékat proud cívkami a uvnitř motoru se vytvoří rotační magnetické pole, jež po malých krocích pohybuje rotorem motoru. Prodleva mezi jednotlivými kombinacemi sepnutí je nepřímo úměrná rychlosti otáčení motoru.
Zapojení motoru 28BYJ48 a jeho budiče
Jak je zřejmé z obrázku, obvod ULN 2003 obsahuje nejen sedm výkonových spínačů (použity jsou jen čtyři), ale i ochranné diody, které chrání polovodičové prvky před zničením napětím, indukovaným v jednotlivých vinutích motoru.
V praxi to tedy znamená, že přivedením log.1 na vstup IN1 zapneme cívku L1, potom cívku L3 (IN3), potom cívku L2 (IN2) a nakonec cívku L4 (IN4) a chceme-li, aby se motor plynule otáčel, opakujeme tuhle sekvenci do nekonečna.
Propojme tedy budič (ULN2003) s PICAXE-08M2 takto: IN1 = C.0, IN2=C.1, IN3=C.2 a IN4=C.4. Pin C.3 je vynechán, protože u PICAXE-08M2 je, stejně jako pin C.5, jen vstupní.
Wave drive – magnetizace jedné fáze
Budeme postupně stále dokola budit cívku L1, L2, L3 a L 4.
Vložte do PICAXE tento program:
#rem UNIstepper_1 - wave drive Unipolární motor (5 drátů) 28BYJ48 s buzením ULN 2803 Napájení 5 V IN1 = C.0 IN2 = C.2 IN3 = C.1 IN4 = C.4 Pozor C.3 a C.5 jsou pouze vstupy! #endrem ; direktivy #picaxe 08M2 #no_data ; definice symbol cekej = b0 cekej=2 ; 2 a více ms, jinak se motor nerozběhne dirsC = %11111111 ; všechny piny jako výstupní ; začátek programu do ; nekonečná smyčka let pinsC=%00000001 ; nastav C.0 na log. 1 pause cekej ; pauza, určující rychlost otáčení motoru let pinsC=%00000010 ; nastav C.1 na log. 1 pause cekej let pinsC=%00000100 ; nastav C.2 na log. 1 pause cekej let pinsC=%00010000 ; nastav C.4 na log. 1 pause cekej loop ; zpět na začátek
Tomuto způsobu řízení krokového motoru se říká buzení s magnetizací jedné fáze, anglicky wave drive.
Vyzkoušejte si, že pro správnou činnost potřebuje motor prodlevu mezi jednotlivými kroky přibližně 2 milisekundy a jeho točivý moment není největší.
Full drive – magnetizace dvou fází zároveň
Motor ale můžeme budit i jinak. Zkusme zapnout buzení cívky L1 (IN1) a zároveň buzení cívky L3 (IN3) a potom buzení cívky L2 (IN2) a cívky L4 (IN4). A vida, motor se nejen otáčí, ale má i mnohem větší sílu (tedy správně točivý moment). Je to způsobeno samozřejmě tím, že práci nyní odvádí ne jedna, ale dvě cívky. Daní za tento způsob řízení je tvrdší chod, větší odběr proudu a tedy větší oteplení motoru.
Vložte do PICAXE tento program:
#rem UNIstepper_2 - full drive Unipolární motor (5 drátů) 28BYJ48 s buzením ULN 2803 Napájení 5 V IN1 = C.O IN2 = C.2 IN3 = C.1 IN4 = C.4 Pozor C.3 a C.5 jsou pouze vstupy! #endrem ; direktivy #picaxe 08M2 #no_data ; definice symbol cekej = b0 cekej=100 ; 100 a více mikrosekund, jinak se motor nerozběhne dirsC = %11111111 ; všechny piny jako výstupní ; začátek programu do ; nekonečná smyčka let pinsC=%00000011 ; nastav C.O a C.1 na log. 1 pauseus cekej ; pauza v mikrosekundách, určující rychlost otáčení let pinsC=%00000110 ; nastav C.1 a C.2 na log. 1 pauseus cekej let pinsC=%00010100 ; nastav C.2 a C.4 na log. 1 pauseus cekej let pinsC=%00010001 ; nastav C.4 a C.1 na log. 1 pauseus cekej loop ; zpět na začátek
Tomuto způsobu se říká buzení s magnetizací dvou fází, anglicky full drive.
Nyní už se motor bude rozbíhat a otáčet i při prodlevě mezi kroky jen 100 mikrosekund.
Half step drive – střídavá magnetizace jedné a dvou fází
Třetím způsobem buzení motoru je sloučení buzení wave drive a full drive do jedné sekvence, ve které se nyní střídavě spínají cívky L1, L1+L2, L2, L2+L3, L3, L3+L4, L4, L4+L1.
#rem UNIstepper_3 - half step Unipolární motor (5 drátů) 28BYJ48 s buzením ULN 2803 Napájení 5 V IN1 = C.O IN2 = C.2 IN3 = C.1 IN4 = C.4 Pozor C.3 a C.5 jsou pouze vstupy! #endrem ; direktivy #picaxe 08M2 #no_data ; definice symbol cekej = b0 cekej=10 ; 10 a více mikrosekund, jinak se motor nerozběhne dirsC = %11111111 ; všechny piny jako výstupní ; začátek programu do ; nekonečná smyčka let pinsC=%00000001 pauseus cekej ; pauza v mikrosekundách, určující rychlost otáčení let pinsC=%00000011 pauseus cekej let pinsC=%00000010 pauseus cekej let pinsC=%00000110 pauseus cekej let pinsC=%00000100 pauseus cekej let pinsC=%00010100 pauseus cekej let pinsC=%00010000 pauseus cekej let pinsC=%00010001 pauseus cekej loop ; zpět na začátek
Tomuto způsobu se říká buzení osmitaktní, anglicky half step drive. Nyní už motoru postačí prodleva mezi kroky jen 10 mikrosekund.
Rychleji, jednodušeji
Demonstrační programy jsou napsány tak, aby byly dobře čitelné, bez ohledu na jejich efektivitu. Na závěr tedy příklad programu, který je kratší a běží o dost rychleji.
Odblokováním zakomentovaných začátků smyčky FOR .. NEXT si můžete nastavit způsoby buzení motorku i směr jeho otáčení.
#rem UNIstepper_4 Unipolární motor (5 drátů) 28BYJ48 s buzením ULN 2803 Napájení 5 V IN1 = C.O IN2 = C.2 IN3 = C.1 IN4 = C.4 Pozor C.3 a C.5 jsou pouze vstupy! #endrem ; direktivy #picaxe 08M2 #no_data ; definice setfreq m16 ; to je maximální taktovací frekvence, při které se motor v režimu half step ještě rozběhne let dirsC = %00010111 ; C.4, C.2, C.1 a C.0 jako výstup ; začátek programu do for b0 = 0 to 7 ; half step CW ; for b0 = 7 to 0 step -1 ; half step CCW ; for b0 = 0 to 6 step 2 ; full step CW ; for b0 = 6 to 0 step -2 ; full step CCW ; for b0 = 1 to 7 step 2 ; wave drive CW ; for b0 = 7 to 1 step -2 ; wave drive CCW ; CW = po směru hodinových ručiček, CCW opačně lookup b0,(%00000001,%00000011,%00000010,%00000110,%00000100,%00010100,%00010000,%00010001),b1 ; kde je 1, tam je na výstupu log.1 let pinsC = b1 next b0 loop
Tentokrát už mezi jednotlivé kroky nemusíme vkládat žádnou prodlevu, ale dokonce můžeme v režimu half step zvýšit taktovací frekvenci PICAXE ze 4 na na 16 MHz.