Niedawno kupiłem jedną z tych kart silnika krokowego i sterowników - i nie mogę znaleźć żadnej dokumentacji, jak podłączyć ją do Raspberry Pi - próbuję skorzystać z samouczka AdaFruit i chociaż wszystkie połączenia zostały wykonane prawidłowo podłączone piny gpio (diody na płycie sterownika świecą się prawidłowo, silnik nic nie robi).
Czy ktoś wie, gdzie mogę znaleźć więcej informacji na temat podłączania Raspberry Pi do silnika krokowego?
Aktualizacja: 15 listopada 2013 Mój kod programu to
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)
setStep(0, 1, 1, 0)
setStep(0, 1, 0, 1)
setStep(1, 0, 0, 1)
def backwards(delay, steps):
for i in range(0, steps):
setStep(1, 0, 0, 1)
setStep(0, 1, 0, 1)
setStep(0, 1, 1, 0)
setStep(1, 0, 1, 0)
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))
Moja tablica wygląda tak
Moja karta sterowników wygląda tak
mam
IN1 => GPIO 4
IN2 => GPIO 17
IN3 => GPIO 23
IN4 => GPIO 24
Odpowiedzi:
Potrzebujesz sterowników od 3,3 V do 5 V. Zestaw silnika, który kupiłeś, był dla Arduino, które wykorzystuje 5 woltów gpio, rpi zużywa 3,3 wolta, wystarczające do wyzwolenia diod LED, ale nie działa. można również uzyskać sterownik silnika, który akceptuje linie sterujące 3,3 wolta.
Pamiętaj zawsze sprawdzaj swoje wartości napięcia !!
źródło
Artykuł z adafruita mówi
Jeśli diody LED zapalają się i dwukrotnie sprawdziłeś, czy na czerwonym przewodzie jest napięcie 5 V, czas podejrzewać, że silnik jest uszkodzony.
Przy odłączonym silniku za pomocą multimetru sprawdź rezystancję między każdym przewodem a czerwonym przewodem. Wszystkie powinny być mniej więcej takie same
źródło
Po pierwsze, jakiego zasilacza używasz? W konfiguracji, którą widzę, to samo Vcc służy do sterowania RPi, silnikiem i płytką (zwarcie zworki). Dziwię się, że nie resetuje Raspberry (często pobiera zbyt dużo prądu z + 5 V), ale tak naprawdę nie znam charakterystyki silnika - więc może?
Czy możesz zmusić silnik krokowy do poruszania się (minimalnie, pojedyncze kroki), podłączając + 5 V od zasilacza do Czerwonego od silnika i GND do pozostałych 4 zacisków w sekwencji?
Jeśli zaświecą się diody LED, a silnik się nie porusza, wygląda na to, że nie pobiera wystarczającej ilości prądu. Jeśli tak jest, uzyskaj mocniejszy zasilacz lub (zalecane) dodaj oddzielny zasilacz, aby zasilić silnik - zdejmij zworkę i na jej miejscu podłącz Vcc do najbardziej zewnętrznego pinu i podłącz GND do tej samej linii na płycie przewód „-” (wspólna masa, nie odłączaj tego, który już tam jest).
(istnieje niewielka możliwość, że coś jest nie tak z płytą. Czy możesz podać dobre zdjęcie odwrotnej strony płytki? (strona lutowana)?
źródło
Patrząc na kod AdaFruit i twój, wydaje się, że sekwencja kroków jest niewłaściwa, w szczególności wydaje się, że musisz wbić dwa piny jednocześnie, a nie tylko jeden.
Myślę, że następująca sekwencja powinna działać w oparciu o kod AdaFruit:
źródło
Postępowałem zgodnie z przewodnikiem tutaj http://www.raspberrypi-spy.co.uk/2012/07/stepper-motor-control-in-python/ , ładne grupowanie pinów GPIO, ale skończyło się na stosie wymiany, ponieważ silnik nic nie robił. Tyle że było. Po podniesieniu czułem małe „bicie serca” za każdym razem, gdy zmieniała się dioda LED, zmieniałem parametr WaitTime z 0,5 na coraz mniejsze i mniejsze, aż 0,001 pozwoliło na pełny obrót w 8,5 sekundy.
Ale zmieniłem typ sekwencji na 2 (producenci), ponieważ typ 1 zdawał się czasami zatrzymywać silnik nawet z działającym „biciem serca”.
Zmieniłem kod, aby móc przetestować liczbę kroków wykonanych przy pełnym obrocie i zbudowałem przełącznik wiersza poleceń do obracania w prawo lub w lewo.
Przy czasie oczekiwania o godzinie 0.001 uruchomienie testu CW, a następnie przy użyciu tej samej liczby kroków, CCW spowodowało niewielki błąd, tzn. Nie ustawiło się w linii w miejscu, w którym się zaczęło.
Ustawienie WaitTime na 0,01 pozwoliło mi pokazać wielokrotne wykonywanie 4100 kroków, albo CW albo CCW zawsze kończyły się w tym samym punkcie.
źródło