¿Cómo cablear un motor paso a paso?


10

Recientemente compré una de estas placas de motor y controlador paso a paso , y no puedo encontrar ninguna documentación sobre cómo conectarla a la Raspberry Pi, estoy tratando de usar el tutorial de AdaFruit y mientras tengo todas las conexiones realizadas correctamente pines gpio conectados (los leds de la placa del controlador se iluminan correctamente, el motor no hace nada).

¿Alguien sabe dónde podría buscar más información sobre cómo conectar la frambuesa pi a un motor paso a paso?

Actualización: 15 de noviembre de 2013 Mi código de programa es este

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

Mi tablero se ve así ingrese la descripción de la imagen aquí

Mi tablero de conductor se ve así ingrese la descripción de la imagen aquí

yo tengo

IN1 => GPIO 4

IN2 => GPIO 17

IN3 => GPIO 23

IN4 => GPIO 24


¿Están los LED encendidos en la secuencia correcta, con el retraso de 0.5 segundos?
John La Rooy

Ojalá pudiera votar varias veces.
Loko

Se iluminan en la secuencia correcta con el retraso.
Steve French el

Respuestas:


6

Necesita conductores de bus de 3,3 voltios a 5 voltios. El kit de motor que compró fue para Arduino que usa 5 voltios gpio, el rpi usa 3.3 voltios, lo suficiente para disparar los leds, pero no funciona. También puede obtener un controlador de motor que acepte líneas de control de 3.3 voltios.

Recuerde siempre verifique sus clasificaciones de voltios !!


[Golpea la cabeza] No pensé en eso, ¿hay alguna manera de hacer que funcione el controlador del motor que se te ocurra? Me doy cuenta de que estoy pidiendo algo milagroso aquí, ¿o simplemente no tengo suerte?
Steve French el

@SteveFrench es por eso que hacen controladores de bus de doble voltaje que amortiguan entre voltajes, compré algunos en eBay hace meses, pero no puedo recordar la parte no. son comunes y fácilmente disponibles
hildred

Pero el rojo en la foto está conectado al pin de 5V, no al 3.3. ¿No debería estar bien? No lo he usado yo mismo, pero creo que hay algunas advertencias ..
Ricitos de Oro

1
@goldilocks depende del chip del controlador, pero probablemente no. No busqué la hoja de datos del chip controlador, pero la mayoría de los chips de doble voltaje usan 3.3v io cuando vcc está conectado a 3.3v. pero antes de intentar que tengas que asegurar que es un chip de doble voltaje, la mayoría son de un solo voltaje. También hay chips de voltaje amplio, pero la conclusión es verificar la hoja de datos de su chip.
hildred

0

El artículo de adafruit dice

Aunque el siguiente código menciona el pin 18 del conector GPIO que se usa como un pin de habilitación, esto solo es necesario cuando se usa el L293D.

Si los LED están encendidos y ha verificado que tiene 5V en el cable rojo, es hora de sospechar que el motor está defectuoso.

Con el motor desconectado, use un multímetro para verificar la resistencia entre cada cable y el cable rojo. Todos deberían ser casi iguales


He comentado el enable_pin y he usado un motor diferente, todo en vano. Estoy probando el enfoque del mutímetro hoy - gracias por su ayuda
Steve French

Verifiqué la resistencia, sin diferencia en la resistencia, muy desconcertante.
Steve French

¿Cuál sería una buena forma de probar 5v en el cable rojo? Intenté simplemente poner el multímetro allí directamente, pero el pulso no parece durar lo suficiente como para que algo se registre.
Steve French el

0

Primero, ¿qué fuente de alimentación estás usando? En la configuración que veo, se usa el mismo Vcc para conducir el RPi, el motor y la placa (puente en corto). Me sorprende que no restablezca la Raspberry (el consumo excesivo de + 5V tiende a hacer eso) pero realmente no conozco las características del motor, ¿entonces quizás?

¿Puede hacer que el paso a paso se mueva (mínimamente, pasos individuales) conectando + 5V de la fuente de alimentación a Red desde el motor y GND a los 4 terminales restantes en secuencia?

Si los LED se iluminan y el motor no se mueve, realmente parece que no está recibiendo suficiente corriente. Si este es el caso, obtenga una fuente de alimentación más fuerte o (recomendado) agregue una fuente de alimentación separada para alimentar el motor: retire el puente y, en su lugar, conecte Vcc al pin más externo y conecte GND a la misma línea en el tablero como el cable "-" (tierra común, no desconecte el que ya está allí).

(existe una pequeña posibilidad de que haya algo mal con la placa también. ¿Podría proporcionar una buena foto del reverso de la placa? (lado de la soldadura)?


Puedo hacer que el motor paso a paso se mueva directamente. Estoy probando el otro método ahora.
Steve French

Acabo de probar el método vcc: el mismo resultado. Tal vez estas placas simplemente no se pueden usar con el pi por alguna razón.
Steve French el

Si los LED se iluminan correctamente, la placa funciona correctamente. O el motor está defectuoso o no recibe suficiente corriente (o, lo que es poco probable, los cables / conectores en el lado del motor están dañados). ¿Ha intentado si el motor se mueve sin usar la placa, simplemente conectando la alimentación directamente a sus contactos?
SF.

0

Mirando el código AdaFruit y el suyo, parecería que la secuencia de pasos es incorrecta, en particular parece que necesita manejar dos pines al mismo tiempo, no solo uno.

Creo que la siguiente secuencia debería funcionar según el código 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]

Debo haber copiado que, por error, la secuencia real del programa es la secuencia que tienes.
Steve French el

0

He estado siguiendo la guía aquí http://www.raspberrypi-spy.co.uk/2012/07/stepper-motor-control-in-python/ , buena agrupación de los pines GPIO, pero terminé en stackexchange porque el El motor no estaba haciendo nada. Excepto que lo fue. Cuando lo recogí, pude sentir un pequeño "latido" cada vez que cambiaba el LED, cambié el parámetro WaitTime de 0.5 a valores cada vez más pequeños hasta que 0.001 permitió una rotación completa en 8.5 segundos.

Pero sí cambié el tipo de secuencia a 2 (fabricantes) ya que el tipo 1 parecía detener ocasionalmente el motor incluso con un "latido" que funcionaba.

Modifiqué el código para poder probar la cantidad de pasos que tomó una rotación completa y construí un interruptor de línea de comando para rotar en sentido horario o antihorario.

Con WaitTime a 0.001 ejecutando un CW de prueba y luego usando el mismo número de pasos, CCW produjo una pequeña cantidad de error, es decir, no se alineó donde había comenzado.

Establecer WaitTime en 0.01 me permitió mostrar la ejecución repetida de 4100 pasos, ya sea CW o CCW siempre terminaba en el mismo punto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.