Jak podłączyć silnik krokowy?

10

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 wprowadź opis zdjęcia tutaj

Moja karta sterowników wygląda tak wprowadź opis zdjęcia tutaj

mam

IN1 => GPIO 4

IN2 => GPIO 17

IN3 => GPIO 23

IN4 => GPIO 24

Steve French
źródło
Czy diody LED zapalają się we właściwej kolejności, z opóźnieniem 0,5 sekundy?
John La Rooy,
Chciałbym móc głosować wiele razy.
Loko,
Z opóźnieniem zapalają się we właściwej kolejności.
Steve French,

Odpowiedzi:

6

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 !!

Hildred
źródło
[Uderza głową] Nie myślałem o tym - czy jest jakiś sposób na uruchomienie sterownika silnika, o którym można pomyśleć - Zdaję sobie sprawę, że proszę o coś cudownego, czy po prostu mam pecha?
Steve French
@ SteveFrench, dlatego produkują sterowniki magistrali z podwójnym napięciem, które buforują między napięciami, kupiłem kilka w serwisie eBay kilka miesięcy temu, ale nie pamiętam części nr. są powszechne i łatwo dostępne
hildred
Ale czerwony na zdjęciu jest podłączony do styku 5 V, a nie do 3.3. Czy to nie powinno być w porządku? Sam go nie użyłem, ale myślę, że są pewne zastrzeżenia ..
Złotowłosa
1
@Goldilocks zależy od układu kontrolera, ale prawdopodobnie nie. Nie szukałem arkusza danych dla układu kontrolera, ale większość układów z podwójnym napięciem używa 3.3v io, gdy vcc jest podłączone do 3.3v. ale zanim spróbujesz upewnić się, że jest to układ podwójnego napięcia, większość z nich to pojedyncze napięcie. istnieją również układy o szerokim napięciu, ale najważniejsze jest sprawdzenie karty danych dla układu.
Hildred
0

Artykuł z adafruita mówi

Chociaż poniższy kod wspomina, że ​​pin 18 złącza GPIO jest używany jako pin Enable, jest to wymagane tylko w przypadku korzystania z L293D.

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

John La Rooy
źródło
Skomentowałem enable_pin i użyłem innego silnika, wszystko bezskutecznie. Próbuję dziś podejścia mutimetru - dziękuję za pomoc
Steve French
Sprawdziłem opór - bez różnicy w oporze - bardzo zakłopotany.
Steve French
Jaki byłby dobry sposób testowania 5v na czerwonym przewodzie? Próbowałem po prostu umieścić tam multimetr bezpośrednio, ale wydaje się, że puls nie trwa wystarczająco długo, aby cokolwiek się zarejestrować.
Steve French,
0

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)?

SF.
źródło
Mogę zmusić silnik krokowy do bezpośredniego ruchu - próbuję teraz innej metody.
Steve French,
Właśnie wypróbowałem metodę vcc - ten sam wynik. Może z jakiegoś powodu nie można używać tych tablic z pi.
Steve French,
Jeśli diody LED zaświecą się prawidłowo, oznacza to, że płyta działa prawidłowo. Albo silnik jest uszkodzony, albo nie pobiera wystarczającej ilości prądu (lub raczej mało prawdopodobne, że okablowanie / złącza po stronie silnika są uszkodzone). Czy próbowałeś, jeśli silnik porusza się bez użycia płyty, tylko podłączając zasilanie bezpośrednio do jej styków?
SF.
0

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:

# Define simple sequence
StepCount1 = 4
Seq1 = []
Seq1 = range(0, StepCount1)
Seq1[0] = [1,0,1,0]
Seq1[1] = [0,1,1,0]
Seq1[2] = [0,1,0,1]
Seq1[3] = [1,0,0,1]
PiBorg
źródło
Musiałem skopiować, że przez pomyłkę rzeczywista sekwencja programu jest sekwencją, którą masz.
Steve French
0

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.

obrabować
źródło