Kontroliranje koračnega motorja
V tem vodiču vam bom pokazal kako lahko z vašo malino kontrolirate koračni motor. Spekter uporabe takih motorjev je zelo širok, saj se nahajajo praktično povsod (za CD bralnike, v radijih…), osebno jih uporabljam za vožnjo robota . So popolnoma prilagodljivi, saj lahko določamo število korakov ter čas med koraki.
Za vodič bom uporabil zelo majhne motoroje, ki se jih lahko napaja kar preko maline, če je le-ta priklopljena na vsaj 1A:
Med malino in motorjem potrebujemo še vezni člen. Za to uporabimo L293D čip:
Da bomo lahko vse skupaj povezali med seboj uporabimo breadboard:
Sočasno lahko malina kontrolira dva čipa, se pravi dva koračna motorja (potem pa zmanjka priklopov). Ko imamo vse sestavne dele z žicami zvežemo skupaj tako kot je prikazano na sliki:
Sedaj potrebujemo še mehki del, ki bo kontroliral napetost na GPIOtih ter s tem kontroliral motor. V terminalu odpremo nov dokument:
1 |
nano stepper.py |
ter noter prilepimo naslednjo kodo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) enable_pin = 18 coil_A_1_pin = 4 coil_A_2_pin = 17 coil_B_1_pin = 23 coil_B_2_pin = 24 GPIO.setup(enable_pin, GPIO.OUT) GPIO.setup(coil_A_1_pin, GPIO.OUT) GPIO.setup(coil_A_2_pin, GPIO.OUT) GPIO.setup(coil_B_1_pin, GPIO.OUT) GPIO.setup(coil_B_2_pin, GPIO.OUT) GPIO.output(enable_pin, 1) def forward(delay, steps): for i in range(0, steps): setStep(1, 0, 1, 0) time.sleep(delay) setStep(0, 1, 1, 0) time.sleep(delay) setStep(0, 1, 0, 1) time.sleep(delay) setStep(1, 0, 0, 1) time.sleep(delay) def backwards(delay, steps): for i in range(0, steps): setStep(1, 0, 0, 1) time.sleep(delay) setStep(0, 1, 0, 1) time.sleep(delay) setStep(0, 1, 1, 0) time.sleep(delay) setStep(1, 0, 1, 0) time.sleep(delay) def setStep(w1, w2, w3, w4): GPIO.output(coil_A_1_pin, w1) GPIO.output(coil_A_2_pin, w2) GPIO.output(coil_B_1_pin, w3) GPIO.output(coil_B_2_pin, w4) while True: delay = raw_input("Delay between steps (milliseconds)?") steps = raw_input("How many steps forward? ") forward(int(delay) / 1000.0, int(steps)) steps = raw_input("How many steps backwards? ") backwards(int(delay) / 1000.0, int(steps) |
Shranimo in zaženemo z ukazom:
1 |
sudo python stepper.py |
Če se nam motor pravilno vrti smo končali, drugače pa preverite ali ste povezave na breadboardu vspostavili pravilno.
Vir: http://learn.adafruit.com/adafruits-raspberry-pi-lesson-10-stepper-motors/overview