Raspberry Pi

22) Řízení krokového motoru

Sice k projektu ovládání dalekohledu nepotřebuji žádné motory (pohon už je součástí dalekohledu), ale i tak by se někdy mohlo hodit s něčím pohybovat pomocí krokového motoru.

Nebudu tady rozebírat dopodrobna, jak fungují krokové motory. Informace můžete získat třeba tady:

http://www.mylms.cz/text-krokovy-motor-princip/
http://www.pohonnatechnika.cz/skola/motory/krokovy-motor

Prostě jde o to, posílat na 4 dráty následující sekvenci osmi logických stavů:

1000
1100
0100
0110
0010
0011
0001
1001

Pro opačný směr je ta sekvence obrácená.
Rychlost, jakou se tyto stavy střídají, udává rychlost otáčení motoru. Tato rychlost je omezená. Když se signály posílají vyšší rychlostí, než je motor schopný zpracovat, dochází k výpadkům v běhu.


Koupil jsem od mých oblíbených Číňanů tento malý motorek a budič:

http://dx.com/p/dc-5v-deceleration-stepper-motor-module-150905?item=1
http://dx.com/p/uln2003-stepper-motor-driver-board-green-151183?item=1

Připojil jsem to k expanderu, který mám vyvedený ven z krabičky.  
Pro napájení jsem také použil 5V přímo z RasPI.
Motor si bere docela dost proudu, ale Raspíčko to ještě zvládá. Jen je vidět, že při točení se trochu sníží jas podsvětu displeje.

Schéma připojení k expanderu je jednoduché:

Pokud nemáte expander, můžete budič připojit přímo na některé z GPIO portů na Raspi. Pak si ale musíte vymyslet vlastní program pro posílání signálů do budiče.

Můj "výtvor" je tady:

#!/usr/bin/python

import os
import time
import smbus
import sys

bus = smbus.SMBus(0)) # starsi varianta RasPi (256MB)
#bus = smbus.SMBus(1) # novejsi varianta RasPi (512MB)

addr = 0x24 # I2C adresa vystupniho konektoru
bus.write_byte_data(addr , 0x00 , 0x00) # vsechny piny expanderu nastavit na vystup

# zjistovani parametru z prikazove radky
smer=int(sys.argv[1])          # smer otaceni (1 nebo 2)
pocetcyklu=int(sys.argv[2])    # pocet cyklu (1 cyklus = 8 kroku)
pauza=float(sys.argv[3])       # pauza v sekundach mezi kroky (napr: 0.002)

cyklus = 0

if smer == 1:

  while cyklus < pocetcyklu:
    cyklus = cyklus +1
    bus.write_byte_data(addr , 0x12 , 0x08)  # 1000
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x0C)  # 1100
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x04)  # 0100
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x06)  # 0110
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x02)  # 0010
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x03)  # 0011
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x01)  # 0001
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x09)  # 1001
    time.sleep (pauza)  

if smer == 2:

  while cyklus < pocetcyklu:
    cyklus = cyklus +1
    bus.write_byte_data(addr , 0x12 , 0x09)  # 1001
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x01)  # 0001
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x03)  # 0011
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x02)  # 0010
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x06)  # 0110
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x04)  # 0100
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x0C)  # 1100
    time.sleep (pauza)  
    bus.write_byte_data(addr , 0x12 , 0x08)  # 1000
    time.sleep (pauza)  

bus.write_byte_data(addr , 0x12 , 0x00)  # 0000 = po skonceni prestan zatezovat zdroj

Program se ovládá třemi parametry:

 - První parametr je směr otáčení. Může být 1, nebo 2.
 - Druhý parametr je počet cyklů (jeden cyklus obsahuje 8 kroků)
 - Třetí parametr je pauza v sekundách mezi jednotlivými kroky (při zadávání desetinných čísel se jako oddělovač používá desetinná tečka)

Takže třeba rychlé roztočení na jednu stranu o celou otáčku vypadá takto:


sudo python /home/pi/motor 1 520 0.002

A pomalé otočení o půl otáčky zpátky je takhle:


sudo python /home/pi/motor 2 260 0.01

Tady je video s otáčením motoru po zadání předchozích dvou příkazů:


Odkaz na YouTube

 

A když se spojí krokový motor a joystick z minulé kapitoly 21), může vzniknout třeba tohle video :


Odkaz na YouTube

 

 


úvodní strana webu AstroMiK.org

poslední úprava stránky 29.9.2012