Calibrando un motor paso a paso

Hola a todos.

En un nuevo proyecto que estoy realizando tengo que usar motores paso a paso, obviamente los conozco y más o menos sé como funcionan, pero nunca los había tenido que usar antes, lo que me lleva a tener dudas.

El motor paso a paso que estoy usando es un motor NEMA17 KS42STH40-1204 de 1.2A y 200 pasos y el driver que he escogido es el típico A4988.

Así que lo primero que he hecho ha sido ver como se conecta el motor, como funciona el driver y he visto también en varios tutoriales como se ha de calibrar el driver.

Y manos a la obra...

Lo primero he realizado este montaje en protoboard:

Como fuente de alimentación he usado la fuente de laboratorio graduada a 24voltios. He usado sendos condensadores de desacople de 100uF y 100nF. He alimentado un extremo de la protoboard a los 5 voltios que da arduino y alimentado el driver del motor. En el otro extremo he colocado los 24 voltios y he unido ambos GND. También he unido el pin RESET del driver con el
pin SLEEP. Tanto los micropasos como el ENABLE los he dejado al aire.

He subido el siguiente sketch al arduino:

#define pinD 4
#define pinS 3
#define t 2

void setup() {
  pinMode(pinD, OUTPUT);
  pinMode(pinS, OUTPUT);  
  digitalWrite(pinS, LOW);
}

void loop() {
  digitalWrite(pinS, HIGH);
  delay(t);
  digitalWrite(pinS, LOW);
  delay(t);
 
}

Y he seguido el siguiente proceso:

  • Antes de montar nada, he comprobado la resistencia de shunt del driver: 0.1 ohms.
  • He calculado la tensión de referencia usando la fórmula Vref = Imax * 8 * RS, siendo RS la resistencia que obtuve en el paso anterior. La tensión de referencia que da para la corriente de 1.2A es de unos 0.9 voltios. Como no voy a usar micropasos, según he visto, hay que calcular un 70% de la corriente por lo que la tensión resultante a medir es de 0.672 voltios.
  • Monto el disipador en el driver, lo pongo en la protoboard y quito el motor.
  • Doy tensión al conjunto (sin motor).
  • Con el polímetro mido la tensión en el potenciometro con GND. He probado dos drivers, en ambos estaba bien la tensión ajustada.
  • Quito la tensión, conecto el motor y vuelvo a dar tensión.

Y aquí empiezan los problemas...

He probado dos drivers. En el primero el motor gira, pero observo que la corriente que suministra la fuente es de tan solo 30mA. La fuerza del motor es nula, obviamente le falta corriente y soy capaz de detenerlo con la mano. Cogo el destornillador y despacio muevo el potenciometro para ver si la corriente aumenta. Para nada. La corriente sigue en 30mA por mucho que mueva el potenciometro.

En el segundo, la corriente es de 100mA, el motor tiene más fuerza, y cuando muevo el potenciometro la fuente llega a entregar 300mA.

Deduzco que en el primer caso el driver está muerto, el potenciometro parece ser que funciona, ya que si soy capaz de ver que la tensión en el si cambia, no así la corriente.

En el segundo, ya dudo. Se supone que deberia tener una corriente cercana al amperio, y no solo 300mA.

¿Donde me estoy equivocando?

I don't know if it matters but the circuit diagrams I have seen don't connect the grounds.

Also, I've read plenty of warnings saying that you should only adjust the pot with power off or you risk blowing the driver.

You don't see the black wire at image bottom? GND are ok (arduino and power supply).

How to read the potentiometer voltage if no voltage applied? It's is necesary.

You have connected the grounds. I'm saying that the diagram I'm looking at doesn't. I don't think there is optoisolation there, so it probably doesn't matter, but it is a difference.

Try the Pololu web site. someone posted a link a few days ago to a video there that explains how to set the pot safely.

Tuve un problema similar y la solución fue una fuente sobrada de amperes (recuperada de una vieja impresora). Necesitas dos o mas amperes.

Hola Peter, la fuente da 5A sobrados. Es una fuente buena de laboratorio

Internally of module the a4988 have GND connected.

This is the schematic of polulu driver:

I think my module is distint for polulu, a chinesse clon. Similar but not equal.

All tutorials and images that I've seen make GND common.

Hay una inconsistencia entre el código y el esquema . Defines al pin 3 como step, pero en el gráfico esta conectado al pin de dirección.

Lo sé. Lo hice a proposito por no cruzar los cables en el esquema. El la vida real lo tengo montado segun el código.
:rofl::rofl::rofl::rofl:

No veo que Enable este conectado a un pin y por defecto esta en HIGH y debe estar en LOW para funcionar.
Agrega un pin del Arduino y ponlo a LOW y seguramente todo funcionará de nuevo.

En teoría, los pines ENABLE, MS0, MS1 y MS2 tienen una resistencia interna PULL-DOWN.

  • En el caso de ENABLE el chip siempre está habilitado.
  • En el caso de MSx, siempre está puesto a FULL STEP.

El caso de SLEEP es diferente. Como es activa bajo, tiene una resistencia de PULL-UP con lo que al aire el chip no "duerme". En cambio la patilla RESET que es activa baja no lleva resistencia de ningún tipo, por eso suele unirse con SLEEP, para dejarla en alto.

En casi todos los tutoriales que he visto la conexión es la misma:

a4988

De hecho el motor gira. El problema es que pese a que graduo teoricamente el VREF con el potenciometro la corriente que consume el motor dista de ser la que en teoria tiene que consumir.

El motor es de 1.2A. Yo ajusté el potenciometro a 1A.

En el primer driver obtuve una corriente de tan solo 30mA, y cuando cambiaba el potenciometro la tensión en él variaba pero la corriente seguía estando en 30mA. El motor giraba, pero con una parsimonia increible.

El segundo driver la corriente que obtuve con el ajuste fue de 100mA. En este caso girando el
potenciometro el consumo de corriente aumentaba a los 300mA. Pero aún muy lejos de lo que
el motor debería consumir, aun así el motor tiene fuerza, aunque vibra.

El ajuste del potenciometro lo hice con el motor quitado.

Tenía un DRV8825 e hice pruebas. En este el problema es que aunque moviera el potenciometro no me daba tensión en él (cero voltios) para poder ajustar. Aún así cuando conecté la tensión y el motor se comía la corriente necesaria, pero la protección de cortocircuitos de la fuente detectaba un corto y es mas sensible que el driver, por lo que cortaba antes que el driver y el motor se movia de forma errática.

Tendré que pedir otros drivers a4988, quizás el problema es que sean chinosos de dudosa procedencia y tengan algún fallo de construcción.

¿ A que velocidad estas intentando girar los motores? Las bobinas del motor no se energizan instantáneamente, de hecho no es muy grande la velocidad de cambio de pasos. Si cambias rápidamente de pasos, pierdes potencia. Has la prueba de comprobar el consumo con el motor detenido.

Creo que he encontrado el problema el siguiente video de pololu:

Setting the Current Limit on Pololu Stepper Motor Driver Carriers

En el explica el procedimiento correcto para graduar la corriente usando el potenciometro. En vez de mirar la corriente en la fuente se debe mirar en la bobina:

medida correcta corriente

Colocando un amperimetro comprobaremos la corriente real que circula en la bobina. Si todo está bien esta será aproximadamente el valor ajustado por la formula. Mientras que en nuestra fuente realmente nos dará menos corriente.

Explicación: La energia ni se crea ni se destruye, solo se transforma.

Si medimos la tensión en los extremos de la bobina, veremos que la tensión real será muy pequeña comparada con la fuente de alimentación. Pongamos 4 voltios y que por la bobina circula 1 A. La potencia que consume la bobina será 4W. Si la tensión de alimentación es de 24 voltios la potencia que entregará la fuente será de 4W, así que aplicando la fórmula de la potencia obtendremos que la corriente debe ser de de 0.16A, es decir unos 160 mA. En realidad esos valores no serán exactos ya que siempre se pierde algo de potencia en forma de calor.

En mi caso, el primer driver si estaba fuera de si. El segundo estaba funcionando correctamente y esa corriente que suministraba la fuente era la que debía ser.

He encargado unos drivers nuevos, que espero no tarden mucho en llegar. Así que probaré y mostraré imagenes de ello.

Por cierto, como añadido. Si os pasa como a mi que en un driver drv8825 no podia medir la tensión de referencia en el potenciometro, debeis saber que hay un agujero en la placa para poder hacer la medición en la placa:

donde medir