Tengo muchos años de experiencia con circuitos de accionamiento de motores paso a paso y no hay nada básicamente malo en el esquema que has proporcionado. Coincide con los requisitos de la hoja de datos. El hecho de que el motor zumbe también indica que tienes alimentación para el driver, tienes señales lógicas conectadas al driver y el driver conectado al motor.
Para encontrar el fallo de este circuito necesitarás un multímetro, un par de pequeños LEDs y un par de resistencias (de 330R a 680R).
En primer lugar, comprueba las fuentes de alimentación:
-
Comprueba que todas las conexiones Gnd están conectadas entre sí: el Gnd de tu Arduino, el Gnd de la alimentación de +5V del driver y el Gnd de la alimentación de +12V del motor. Si no es así, nada se va a comportar como esperas.
-
Con todo conectado y alimentado, utiliza el multímetro para comprobar que tienes entre 4,5V y 5,5V entre el pin 16 y Gnd, y entre 10V y 15V entre el pin 8 y Gnd. Si no es así, tienes que corregir esto primero.
Conecta cada LED en serie con una de las resistencias. Luego conecta una combinación LED-resistencia entre +5V y el pin 7, y la otra entre +5V y el pin 10. (Puedes comprobar que el LED está en el sentido correcto conectando tu alimentación de 5V y conectando la resistencia LED entre +5V y Gnd). Tus transistores NPN inversores encenderán estos LEDs al mismo tiempo que tiran de los pines del driver invertido hacia abajo, así que puedes ver con precisión lo que está pasando con tus señales de accionamiento.
Ahora, modifica el código de tu Arduino para que funcione a una velocidad de paso lenta, algo así como 1 paso por segundo será perfecto, y observa los LEDs. Si tu código es correcto, y el Arduino está correctamente conectado al circuito, deberías observar lo siguiente:
-
Cada LED debe encenderse y apagarse cada 2 segundos, (4 pasos para que cada LED complete su ciclo). Si alguno de los LEDs no parpadea, compruebe que los LEDs están correctamente conectados y que el Arduino está correctamente conectado al circuito.
-
Cada LED debe estar encendido la mitad del tiempo, 2 pasos de encendido y dos pasos de apagado. Si este no es el caso, revise su código Arduino.
-
Sólo un LED debe cambiar de estado en cada paso. Si ambos cambian a la vez, o uno encendido y el otro apagado al mismo tiempo, entonces el motor no tiene información de dirección y no girará. Se moverá alternativamente de la posición de retención a la posición de energía, (menos de medio paso) y de vuelta. Si este es el caso, vuelve a mirar el código de tu Arduino, tienes un problema de software, no de circuito.
-
Si los LEDs parpadean en ciclos de 4 estados, según lo anterior, entonces las señales de accionamiento son correctas. Ahora debes centrarte en el enlace conductor-motor.
-
Desconecte las conexiones del motor a los pines 3 y 6 y mida la resistencia del bobinado del motor con un multímetro. Debe ser un valor entre 25 y 50 ohmios. Si no es así, no tienes el motor que crees que tienes, o si la resistencia es muy alta (o circuito abierto), entonces a pesar de tu comprobación el motor no está cableado correctamente. En este caso, desconecta los otros dos cables y busca un par que sí midan la resistencia correcta entre ellos y conéctalos a los pines 3 y 6, y los otros dos a los 10 y 15.
-
Si los cables del motor a los pines 3 y 6 tienen la resistencia correcta, vuelva a conectarlos y compruebe lo mismo con los cables entre los pines 10 y 15. Si un par es correcto, pero el otro no, entonces tienes un motor defectuoso y no girará bajo control.
Si todo lo anterior está bien, pero el circuito sigue sin funcionar, entonces has agotado mi imaginación. Por favor, hágame saber lo que usted encuentra y voy a hacer mi mejor esfuerzo para ayudar más.
Al final, cuando todo funcione, quita las combinaciones de LEDs y resistencias, sólo eran ayudas para el diagnóstico. Hay algunas pequeñas mejoras en el circuito que yo haría:
-
Disminuir las resistencias de pullup de salida del inversor a algo así como 2k7, (ya que con la máxima corriente de entrada especificada, podrías estar dejando caer un voltio allí); y
-
Añade unos buenos condensadores de desacoplamiento al IC del driver, (100nF de cerámica entre los pines 16 y Gnd, y algo más de 100uF a no menos de 50V entre el pin 8 y Gnd.
Esto mantendrá las cosas bonitas y ordenadas, y más resistentes a las interferencias y a los cambios de temperatura, pero no hacerlo NO es tu problema.
Por último, no hagas funcionar este circuito con una alimentación de motor superior a 18V. Los diseños originales de silicio de esta familia de controladores eran propensos a fallar si se pensaba en el voltaje del motor por encima de su máximo de 36V. Y mucha gente se ha quedado sin poder hacerlo cuando se manejan cargas inerciales que hacen que los motores regeneren energía en la alimentación del motor, elevando momentáneamente la tensión de alimentación y haciendo explotar el driver. La tensión máxima regenerada es igual a la tensión de alimentación, así que manténgala por debajo de los 18V y no podrá matar al driver por la regeneración.
Mucha suerte.