El motor paso a paso de 12 V no funciona: vibra pero no gira

Estoy trabajando en un proyecto y, lamentablemente, mi motor de corriente continua no funciona. Lo conecté así , estoy usando un motor nuevo (SP BN2A en este documento, lo saqué de un bidé que tenía en casa), alimentando todo el sistema con una fuente de alimentación de CC para poder controlar el voltaje exactamente, usando Raspberry Pi como controlador y usando el siguiente código:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

enable_pin = 5
coil_A_1_pin = 26
coil_A_2_pin = 19
coil_B_1_pin = 6
coil_B_2_pin = 13

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

El motor vibra y se calienta cuando enciendo el sistema y ejecuto el código, pero no gira. ¿Qué parte de mi sistema está mal? ¿Es el hardware del motor, el cableado, el código, la fuente de alimentación o algo más?

Gracias, toda ayuda es apreciada.

Gráficos de placa de prueba .... realmente ... no voy allí
¿Cómo prefieres que lo formatee? No es gran cosa, puedo rehacerlo en 5 minutos... Soy nuevo en esto de EE, así que no estoy seguro acerca de los estándares y cosas por el estilo.
@NeonCop Agregar un diagrama de circuito a su pregunta sería lo mejor: nos ha mostrado un diagrama de cableado, que no es lo mismo.
@AndrewMorton ¿Hay algún software que recomendaría? Además, ¿cómo colocaría una Raspberry Pi o un sensor de movimiento en el diagrama del circuito? No es tan fácil como un motor o una batería.
Hay un botón en el editor de preguntas que le permitirá crear un diagrama de circuito. Para un RPi, solo necesita indicar las conexiones hacia/desde él. O puede usar lápiz y papel y agregar una foto a su pregunta, pero ese no es el método preferido.
Podría ser esto: electronics.stackexchange.com/questions/108686/… y tenga en cuenta que ejecutar con una batería de 9 voltios (como se muestra en su caricatura) tampoco funcionará.
No soy un tipo de Raspberry, pero noto que sus funciones hacia adelante y hacia atrás tienen int para argumentos. ¿Significa esto que su retraso se trunca a cero?
@Andyaka Esa es una idea inteligente, pero en realidad creo que el L293D está diseñado para manejar específicamente el voltaje de mi motor (12 V), por lo que no creo que sea un problema que el voltaje sea demasiado bajo. Además, mi batería es en realidad de 12 V. Estoy usando una fuente de alimentación de CC.
@JohnBirckhead tiene razón, la entrada que solicita es en ms, y dado que generalmente uso entre 1 y 5, podría configurarlo en 0. ¿No haría eso que el motor girara continuamente?
Para un motor paso a paso, recuerde que la masa del rotor tiene inercia. Debe acelerar la masa aplicando un par suficiente para superar la inercia y hacer que el motor se mueva y luego debe haber suficiente tiempo para llevarlo a la siguiente posición. Si da un paso demasiado rápido, se moverá solo ligeramente, cayendo hacia atrás, a la posición original, lo que le daría el síntoma descrito. En su código, si ingresa un valor superior a 1000, tendrá un tiempo de paso de un segundo y el motor se moverá (aunque lentamente) si este es su problema.

Respuestas (1)

¡Finalmente lo descubrí! Cambié el motor unipolar por uno bipolar, ¡y todo el sistema funcionó perfectamente como está! Para usar el motor unipolar, es necesario usar un IC de control de motor específicamente para el motor unipolar, y el L293D no cumple la tarea.