sábado, 1 de febrero de 2014

Pruebas con motores paso a paso (II)

Seguimos batallando con el arduino y los motores paso a paso.

Tal y como vemos en la siguiente imagen aparece una estrella de los vientos junto a 4 bobinas. De todos es sabido y experimentado en nuestra infancia el efecto electroimán : cuando hacemos pasar una corriente por un bobinado (en nuestro caso el estator del motor) se ejerce un campo magnético y este es capaz de hacer mover elementos conductores (en nuestro caso el rotor del motor).

Logicamente si queremos que este movimiento se convierta en circular , necesitaremos como mínimo dos bobinados y eso es lo que realmente tenemos en nuestros motores paso a paso.

En la siguiente imagen nos aparecen 4 bobinados y creo que es una de las maneras fácil de entender un poco como funciona.

En la realidad los bobinados A y C están unidos al igual que B y D. Y también en un motor de 200 pasos deberia haber un total de 200 bobinas unidas en dos grupos de 100 + 100 distribuidas alternativamente .

Tal y como dijimos el Arduino envia una serie de impulsos hacia el driver. Y este driver es el que convierte los impulsos en "potencia".

En principio la libreria Stepper de arduino convierte nuestra instrucción de movimiento del motor en impulsos. Es decir cuando nosotros escribimos myStepper.step(numero_de_impulsos); lo que en realidad le estamos diciendo es que realice el numero_de_impulsos y los distribuye en 4 movimientos o ciclos repetitivos y luego activando las salidas correspondientes.

Imaginemos que decimos myStepper.step(1); al tratarse del primer movimiento se genera un pulso y empieza a contar desde la tabla la primera columna, es decir estamos en el movimiento 1. Se activan las bobinas A (roja) y la Bobina C(verde). Nuestro rotor se debería posicionar entre A y C es decir rumbo Norte.

Si a continuación escribo myStepper.step(2); generaria dos impulsos por lo que se me ejecutaria el movimiento 2 y luego el 3 (nuestro arduino sabe en que posición de movimiento se quedó la última vez) . Primero activariamos las bobinas C y B y a continuación la B y D. (giro hacia el Este y luego hacia el Sur)

Si acto seguido ejecutamos la instrucción myStepper.step(3); quiere decir que queremos dar 3 impulsos más . Ahora aqui el "arduino" sabe en que punto estamos de nuestro orden y ejecutará el movimiento 4 y luego saltará al 1 y al 2, pues se repiten los ordenes ciclícamente. (movimiento hacia el oeste, norte y este)

Si todo esto lo traspasamos a los 200 "bobinados" obtenemos un movimiento bastante controlado.

Si queremos mover en el otro sentido, sólo hay que interponer el signo negativo antes del número de pulsos y lo que hará el arduino invertir el orden de pulsos . Imaginamos que estamos en el movimiento 3, pues saltaria al movimiento 2 y luego al 1. La instrucción seria myStepper.step(-200); para dar una vuelta entera.

Ahora que sabemos un poco más de como se mueven los motores es hora de testear si estos pulsos de nuestro arduino se "pierden" por el camino y no llegan a las bobinas de nuestro motor.

Para ello nos fijaremos en el siguiente esquema:


Una vez tengamos cableado igual nuestro circuito, cargaremos en nuestro arduino el siguiente sketch:

#include <Stepper.h>           // incluimos la Stepper library
#define motorStepsX 200     // Pasos motor  360º/1.8º
Stepper myStepperX(motorStepsX, 8, 9, 10, 11); 
void setup() {
myStepperX.setSpeed(20);  
}
void loop(){
myStepperX.step(1); 
delay(30000);
}

Este sketch va generando impulsos hacia el motor cada 30 segundos , por lo que deberemos ir a la idea, pues continuamente irá cambiando del movimiento 1 , al 2, luego 3, i finalmente el 4. Seguidamente volverá a iniciar el ciclo y asi sucesivamente. Por cierto a mi haciendo todas las pruebas siempre me ha arrancado con el movimiento 2.

Cojeremos nuestro múltimetro y lo pondremos para medir tensión VDC. El borne negativo del tester lo colocaremos al GND del arduino durante todo momento.

Mediante el otro terminal del multimetro podemos probar si se cumple el orden de la tabla anterior (es posible que cuando empecemos con nuestras mediciones ya estemos en el paso 1)

Pondremos la punta del tester en el PIN8 del arduino i verificaremos que hay 5 voltios. Luego  verificaremos que exista también en IN1 del driver (5v),  i finalmente en OUT 1 deberia existir aproximadamente la mitad de voltaje aplicado a VCC (alimentación del motor, imaginemos que lo alimentamos a 12v) al que deberiamos restar la caida de tensión de los diodos (puede ser hasta 0,7v), por lo que deberiamos encontrar como máximo 6V, pero tranquilamente podrian ser 5.3 voltios. Si miramos en OUT2 deberiamos encontrar la misma tensión pero en negativo, es decir entre -6v i -5.3v . Luego la tensión entre OUT1 y OUT2 será VCC menos dos caidas de tensión del diodo.

Si estuvieramos en el movimiento 1 nos pasaria lo mismo en el PIN10 (5v) , IN3(5v) i en OUT3 (6v / 5.3v) , mientras que en OUT4 (-5.3v / -6v) 

El resto de PINs (9 y 11) , IN2 e IN4 deberian marcar 0 v.

Todo esto con suficiente nervio pues en 30 segundos cambia al siguinete movimiento:

En el movimiento 2, que deberiamos tener lo siguiente:
PIN9 y PIN10 = 5v
PIN8 y PIN11 = 0v
IN2 y IN3 = 5v
IN1 y IN4 = 0v
OUT 2 y OUT 3 = Vcc-diodo (5.3-6v)
OUT 1 y OUT 4 = -Vcc+diodo (-5.3 -6v)

En el movimiento 3, que deberiamos tener lo siguiente:
PIN9 y PIN11 = 5v
PIN8 y PIN10 = 0v
IN2 y IN4 = 5v
IN1 y IN3 = 0v
OUT 2 y OUT 4 = Vcc-diodo (5.3-6v)
OUT 1 y OUT 3 = -Vcc+diodo (-5.3 -6v)

En el movimiento 4, que deberiamos tener lo siguiente:
PIN8 y PIN11 = 5v
PIN9 y PIN10 = 0v
IN1 y IN4 = 5v
IN2 y IN3 = 0v
OUT 1 y OUT 4 = Vcc-diodo (5.3-6v)
OUT 2 y OUT 3 = -Vcc+diodo (-5.3 -6v)

Os dejo un video a ver si se entiende mejor...




Si todo la secuencia es correcta, el motor deberia funcionar siempre y cuando la tensión de alimentación VCC  y la posible potencia demandada a nuestra fuente de alimentación sea suficiente.

Si la secuencia no es correcta hay que verificar las señales entre Arduino y el driver que posiblemente esten mal, o bién el driver está en mal estado.

Finalmente me gustaria comentar que modificando ligeramente la libreria Stepper podemos conseguir más resolución en nuestros motores, consiguiendo por ejemplo medios pasos con lo que luego nuestro motor deberia dar 400 pasos para generar una vuelta entera, y seria capaz de parar en sitios intermedios (NE, SE, SO, y NO) pero en su contra perderiamos torque .

Si alguien le interesa la libreria modificada para medios pasos me la puede pedir.

También comentar que hay la opción de hacer 1/4 de paso, 1/8 y hasta 1/16 de paso , estos son llamados micropasos. Si quisieramos utilizar estas resoluciones en este tipo de driver deberiamos usar salidas PWM en nuestro arduino y la libreria se empieza a complicar y por mi experiencia es que con el Arduino le falta "velocidad" de procesador para lograr un  movimiento suave y uniforme. Hay otros drivers que ya vienen preparados y con unos simples puentes  se puede cambiar la resolución. 


No hay comentarios:

Publicar un comentario