Cuando nosotros trabajamos con un microcontrolador como Arduino, una de las principales ventajas que queremos aprovechar es su amplia aplicación en los motores, por eso hemos querido hacer una práctica sobre el control de motores paso a paso, como es el caso del motor unipolar 28byj-48. Lo primero que hay que saber, es que es un motor adherido a un adaptador, basado en una puerta inversora ULN 2003 A. Este adaptador es controlable con 5 o 12 V, lo que, para un primer ensayo con nuestro Arduino Uno es perfecto, pues nos permite utilizar la alimentación del Arduino Vcc.

Como ya decimos, el 28 byj-48 es un motor unipolar, ¿qué quiere decir unipolar? Quiere decir que todas las bobinas están conectadas por un común, como se representa en la figura.

PINEADO | ||||
ADAPTADOR | IN1 | IN2 | IN3 | IN4 |
ARDUINO | 12 | 11 | 10 | 9 |

Una vez que tenemos conectado el motor, debemos pensar en cómo lo pondremos en marcha. Debemos considerar que tenemos un motor de 4 fases, y que para que el eje del motor gire debemos activarlas secuencialmente.
Los gráficos anteriores únicamente muestran dos maneras de conectar el motor, de fase en fase, o de dos fases en dos fases. La primera conexión tendrá un menor par de desplazamiento pero también un menor consumo, la segunda opción nos proporciona un mayor par pero a su vez un mayor consumo.
Nosotros vamos a aplicar un modelo intermedio, alternando el uso de una y dos fases, estableciendo un ciclo de 8 pasos. Por lo tanto, con este criterio, definimos el código que cargamos en el Arduino IDE.
Código Arduino
/*Control de un motor paso a paso 28 byj-48. * * Este motor unipolar es conectado mediante una puerta inversora ULN 2003 y conectado al Arduino. * Este ejemplo nos servirá para ver como funciona un motor paso a paso, y darnos una primera idea * Este programa va encendiendo las fases del motor, primero una, luego esa misma y la siguiente, después la siguiente. * Con este parámetro, se consigue un motor equilibrado, que no consuma excesiva potencia y sin perder demasiado par. */ #define VELOCIDAD 1000 //Tiempo en microsegundos que tarda el motor en dar un paso #define IN1 12 //Definimos las entradas que componen nuestras bobinas. #define IN2 11 #define IN3 10 #define IN4 9 //Esta es la variable paso. Como vemos, es una matriz que incluye cada una de las cuatro fases durante un compendio de 8 ciclos, en los que vamos alternando la activación de uno o dos fases. int Paso [ 8 ][ 4 ] = { {1, 0, 0, 0}, {1, 1, 0, 0}, {0, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 0, 1}, {1, 0, 0, 1} }; int steps_left=2048; // Variable que define el número de vueltas que va a dar el motor, en este valor da media vuelta. Con 4096 daría una vuelta completa. boolean Direction = true; //Define el sentido del motor. int Steps = 0; // Define el paso actual de la secuencia void setup() { pinMode(IN1, OUTPUT); //Declaramos como salidas las fases del motor pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); } void loop() { while(steps_left>0) { stepper() ; // Avanza un paso steps_left-- ; // Un paso menos delayMicroseconds(VELOCIDAD); } delay(300); Direction =! Direction; // Invertimos la direceccion de giro steps_left = 2048; } void stepper() //Avanza un paso { digitalWrite( IN1, Paso[Steps][ 0] ); digitalWrite( IN2, Paso[Steps][ 1] ); digitalWrite( IN3, Paso[Steps][ 2] ); digitalWrite( IN4, Paso[Steps][ 3] ); /* * En funcion de la posición en la que estemos de la matriz se activan una fase u otra. * Luego con setDirection avanzamos una posición o la retrocedemos. */ SetDirection(); } void SetDirection() { if(Direction) Steps++; else Steps--; Steps = ( Steps + 8 ) % 8 ; }
Vídeo explicativo
Guardar
I like the helpful information you provide inn your articles.
I’ll bookmark your weblog and check again here frequently.
I’m quite certaain I’ll learn lots of new stuff right here!
Best of luck for thhe next!
Great article, just what I was looking for.