PICAXE – krokohrátky 1

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:

stepper_typeUnipolá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.

unistepperV 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.