Come collegare un motore passo-passo?


10

Di recente ho acquistato una di queste schede motore e driver stepper - e non riesco a trovare alcuna documentazione su come collegarla a Raspberry Pi - Sto tentando di utilizzare il tutorial di AdaFruit e mentre ho ottenuto tutte le connessioni effettuate correttamente pin gpio collegati (i led sulla scheda del driver si accendono correttamente, il motore non fa nulla).

Qualcuno sa dove potrei cercare ulteriori informazioni su come collegare il Raspberry Pi a un motore passo-passo?

Aggiornamento: 15 novembre 2013 Il mio codice di programma è questo

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

La mia breadboard è così inserisci qui la descrizione dell'immagine

La mia scheda driver è simile a questa inserisci qui la descrizione dell'immagine

io ho

IN1 => GPIO 4

IN2 => GPIO 17

IN3 => GPIO 23

IN4 => GPIO 24


I LED si accendono nella sequenza corretta, con il ritardo di 0,5 sec?
John La Rooy,

Vorrei poter votare più volte.
Loko,

Si accendono nella giusta sequenza con il ritardo.
Steve French,

Risposte:


6

Sono necessari driver bus da 3,3 volt a 5 volt. Il kit motore che hai acquistato era per Arduino che utilizza 5 volt gpio, l'RPI utilizza 3,3 volt, quanto basta per far scattare i led, ma non funziona. potresti anche ottenere un controller motore che accetta linee di controllo da 3,3 volt.

Ricorda sempre di controllare i tuoi volt volt !!


[Smacks head] Non ci avevo pensato - c'è un modo per far funzionare il controller del motore a cui puoi pensare - Mi rendo conto che sto chiedendo qualcosa di miracoloso qui, o sono solo sfortunato?
Steve French,

@SteveFrench è per questo che realizzano driver per bus a doppia tensione che bufferano tra le tensioni, ne ho acquistate alcune su ebay mesi fa, ma non ricordo il numero. sono comuni e prontamente disponibili
hildred

Ma il rosso nella foto è collegato al pin 5V, non al 3.3. Non dovrebbe andare bene ?? Non l'ho usato da solo, ma penso che ci siano alcuni avvertimenti ..
Riccioli d'oro

1
@goldilocks dipende dal chip del controller, ma probabilmente no. Non ho cercato il foglio dati per il chip del controller, ma la maggior parte dei chip a doppia tensione usa 3,3 v io quando vcc è collegato a 3,3 v. ma prima di provare a fare shure è un chip a doppia tensione, la maggior parte sono a singola tensione. ci sono anche chip a voltaggio ampio, ma la linea di fondo è controllare la scheda tecnica del chip.
Hildred

0

L'articolo di adafruit dice

Sebbene il codice riportato di seguito menzioni il pin 18 del connettore GPIO utilizzato come pin di abilitazione, questo è necessario solo quando si utilizza L293D.

Se i LED si accendono e hai ricontrollato di avere 5 V sul filo rosso, è tempo di sospettare che il motore sia difettoso.

Con il motore scollegato, utilizzare un multimetro per verificare la resistenza tra ciascun filo e il filo rosso. Dovrebbero essere tutti uguali


Ho commentato il parametro enable_pin e ho usato un motore diverso, il tutto inutilmente. Oggi sto provando l'approccio del mutimetro - grazie per il tuo aiuto
Steve French,

Ho controllato la resistenza - nessuna differenza nella resistenza - molto sconcertante.
Steve French,

Quale sarebbe un buon modo per testare 5v sul filo rosso? Ho provato a mettere il multimetro direttamente lì, ma l'impulso non sembra durare abbastanza a lungo da consentire la registrazione di qualcosa.
Steve French,

0

Innanzitutto, quale alimentatore stai usando? Nella configurazione che vedo, lo stesso Vcc viene utilizzato per pilotare l'RPi, il motore e la scheda (jumper in corto). Sono sorpreso che non ripristini il Raspberry (attingendo troppo da + 5V tende a farlo) ma davvero non conosco le caratteristiche del motore - quindi, forse?

Riesci a far muovere lo stepper (minimamente, singoli passi) collegando + 5V dall'alimentazione a Red dal motore e GND ai restanti 4 terminali in sequenza?

Se i LED si accendono e il motore non si muove, sembra che non stia ricevendo abbastanza corrente. In tal caso, procurarsi un alimentatore più potente o (consigliato) aggiungere un alimentatore separato per alimentare il motore - rimuovere il ponticello e al suo posto collegare Vcc al pin più esterno e collegare GND alla stessa linea sulla breadboard di il filo "-" (terra comune, non scollegare quello che è già lì.)

(C'è una piccola possibilità che ci sia qualcosa che non va anche nella scheda. Potresti fornire una buona foto del retro della scheda? (lato saldatura)?


Posso far muovere direttamente il motore passo-passo - sto provando l'altro metodo adesso.
Steve French,

Ho appena provato il metodo vcc - stesso risultato. Forse queste schede non possono essere usate con il pi per qualche motivo.
Steve French,

Se i LED si accendono correttamente, la scheda funziona correttamente. O il motore è difettoso o non riceve abbastanza corrente (o, piuttosto improbabile, i cavi / i connettori sul lato motore sono danneggiati). Hai provato se il motore si muove senza usare la scheda, semplicemente collegando l'alimentazione direttamente ai suoi contatti?
SF.

0

Guardando il codice AdaFruit e il tuo, sembrerebbe che la sequenza dei passi sia sbagliata, in particolare sembra che tu debba guidare due pin contemporaneamente non solo uno.

Penso che la seguente sequenza dovrebbe funzionare in base al codice 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]

Devo aver copiato che per errore la sequenza effettiva del programma è la sequenza che hai.
Steve French,

0

Ho seguito la guida qui http://www.raspberrypi-spy.co.uk/2012/07/stepper-motor-control-in-python/ , bel raggruppamento dei pin GPIO, ma sono finito su stackexchange perché il il motore non stava facendo nulla. Tranne che lo era. Quando raccolto, ho potuto sentire un piccolo "battito cardiaco" ogni volta che il LED è cambiato, ho cambiato il parametro WaitTime da 0,5 a valori sempre più piccoli fino a quando 0,001 ha permesso una rotazione completa in 8,5 secondi.

Ma ho cambiato il tipo di sequenza in 2 (produttori) poiché il tipo 1 sembrava arrestare occasionalmente il motore anche con un "battito cardiaco" funzionante.

Ho modificato il codice in modo da poter verificare il numero di passaggi necessari per una rotazione completa e ho creato un interruttore della riga di comando per ruotare in senso orario o antiorario.

Con WaitTime a 0,001 in esecuzione un test CW e quindi utilizzando lo stesso numero di passaggi CCW ha prodotto una piccola quantità di errore, cioè non si è allineato da dove era iniziato.

L'impostazione di WaitTime su 0,01 mi ha permesso di mostrare l'esecuzione ripetuta di 4100 passi in senso orario o antiorario sempre finiti nello stesso punto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.