Solución de problemas del motor paso a paso con el controlador Pololu DRV8825

Recuperé un motor paso a paso bipolar (QH4-4242) y una fuente de alimentación de una impresora vieja con la que me gustaría jugar antes de escalar a motores más grandes. Con el conocimiento limitado sobre el paso a paso (como la clasificación actual), pero sabiendo que el adaptador de corriente tiene un suministro de 24 V/0,55 A y 5 V/0,2 A, supongo que el paso a paso debe tener una clasificación igual o inferior a 0,55 A. . Encontré pares de cables de bobina al medir la resistencia (que resultó ser ~ 8.5 ohmios).

Usando una placa Pololu construida alrededor del DRV8825, he seguido las instrucciones en su sitio web conectando los pines correctos A1, A2, B1, B2 a los pares de bobinas correspondientes. Le suministré al motor la salida de 24 V/0,55 A y ajusté el potenciómetro de ajuste de limitación de corriente mientras medía los amperios en una sola fase mientras el pin de paso estaba alto, de modo que la corriente era de 0,29 A (ya que las fases solo obtienen el 70 % de la corriente a paso completo). Y configuré el sueño y lo restablecí en alto según las instrucciones.

Usando un FEZ Panda II como microcontrolador, escribí un código simple que activa el pin de paso y el pin de suspensión durante 1 s, luego baja durante 1 s. El motor paso a paso hace un ruido de tono alto (como he leído, es bastante normal para un controlador de helicóptero) y el eje se vuelve difícil de girar, sin embargo, no gira. Mientras que los pasadores están bajos, si muevo ligeramente el eje de la ubicación 'dentada', cuando los pasadores vuelven a estar altos, el eje gira ligeramente como para volver a colocarse en su lugar. Sin embargo, no girará ni pisará por sí solo.

Apreciaría mucho cualquier aporte o sugerencia para depurar este problema.


Actualizar:

Perdón por la confusión de los que respondieron, pensé una cosa y escribí otra anoche. Mi alto y bajo para avanzar es 1000ms o 1 segundo.

El pseudocódigo se vería así:

while(true)
{
   step(true)
   sleep(1000)
   step(false)
   sleep(1000)
}

Actualización 2:

Según la sugerencia de Richman, he agregado LED consecutivos para monitorear el cambio de polaridad cuando se envía un pulso de paso, esto parece [juego de palabras] arrojar algo de luz [/juego de palabras] sobre el problema. Y de hecho encontró el problema. La polaridad no cambiaba cuando se enviaba la señal de paso. Esto se debió a que, además de enviar un pulso al pin de paso, también alternaba el pin de reposo que activa/desactiva la alimentación del motor. Leí que esto se hizo para minimizar cualquier ruido agudo, pero creo que no entendí bien y que la habilitación/deshabilitación se realiza después de realizar TODOS los pasos. Eso está resuelto ahora. Perdón por los que respondieron por la confusión con el tiempo, les daría la respuesta correcta ya que lo expliqué mal si pudiera.

Una consecuencia desconocida es que el paso a paso camina por sí solo cuando el pin de paso se deja bajo. Tengo curiosidad si esto se debe al ruido en la señal que quizás esté causando que el pin de paso cambie de alto a bajo a pesar de que mi lógica no lo indica. O tal vez hay un problema de conexión a tierra/blindaje porque si toco la carcasa del motor, el cableado, o simplemente pongo mi mano cerca, comienza a moverse más y más rápido y eventualmente se vuelve errático.

¿Alguna idea sobre este nuevo enigma?

Con 1000 ms te refieres a 1 segundo, ¿verdad?

Respuestas (3)

Creo que estás conduciendo el motor paso a paso demasiado rápido.

Con un máximo de 1000uSec y un mínimo de 1000uSec, está produciendo una onda cuadrada de 500 Hz. Como tal, estás tratando de dar un paso 500 veces por segundo.

Intente ralentizar las cosas a quizás 50 pasos/segundo (haga que su baja duración sea de 20 mS o 20,000 uSec).

Ver edición (1 s en lugar de 1 ms).
con esa edición, ¿qué está haciendo el sonido agudo? :-) Estoy seguro de que quiso decir 1 ms...

Los motores paso a paso deben aumentar a la velocidad máxima y disminuir para un rendimiento óptimo. Comience despacio y aumente las duraciones en un factor de 10x y luego experimente con un perfil de rampa_ _/--- \ _ para el control de velocidad.

Si no tiene suficientes canales de alcance, use LED para monitorear el voltaje de fase y use dos LED uno al lado del otro con una resistencia de 1K para ~ 20mA Use verde azul o cualquier color diferente para facilitar la lectura y reduzca la velocidad de su programa a 1 segundo por paso Asegúrese de que cada fase esté siendo impulsada correctamente. No es necesario aumentar el tiempo de sueño, creo que depende más del factor de carga.

Generalmente hay dos interfaces de diseño. Cuenta de dirección y pulsos Como disquetes y HDD ST506 antiguos y Pulse Fwd/Rev. En la interfaz del motor hay pasos completos, medios pasos y micropasos. El tiempo muerto es un factor crítico en los motores grandes, por ejemplo, 1 ~ 10 us, ya que la latencia y los efectos de disparo de la carga pueden freír fácilmente los controladores tanto de conducción alta como baja con una carga inductiva. Todos los CMOS funcionan sin tiempo muerto, pero no recomiendan que maneje motores con ellos.

Ver edición (1 s en lugar de 1 ms).
Lo tengo... Supongo que los voltajes de fase están controlados incorrectamente... en 1 segundo debería poder confirmar los voltajes en cada uno y la corriente para garantizar que no se queme el devanado. 8 vatios por devanado se calentarán.

Un poco demasiado rápido. Pruébelo 5 veces más lento. Si aún no se ejecuta, observe cómo está secuenciando los pasos; ¿están en la secuencia correcta y la polaridad correcta?

Si tienes alguna duda al respecto, secuencia unos pasos a mano con dos hilos de la fuente de alimentación, y comprueba que el driver está generando la misma secuencia.

Ver edición (1 s en lugar de 1 ms).