Los motores paso a paso son ideales para la construcción de mecanismos en donde se requieren movimientos muy precisos.
La característica principal de estos motores es el hecho de poder moverlos un paso a la vez por cada pulso que se le aplique. Este paso puede variar desde 90° hasta pequeños movimientos de tan solo 1.8°, es decir, que se necesitarán 4 pasos en el primer caso (90°) y 200 pasos para el segundo caso (1.8°), para completar un giro completo de 360°.
Estos motores poseen la habilidad de poder quedar enclavados en una posición o bien totalmente libres. Si una o más de sus bobinas están energizadas, el motor estará enclavado en la posición correspondiente y por el contrario quedará completamente libre si no circula corriente por ninguna de sus bobinas.
A continuación se muestra como realizar la conexión física de un motor a pasos en conjunto con un microcontrolador Arduino Uno y un circuito integrado ULN2003A para llevar a cabo el funcionamiento del motor en 4 posiciones distintas, cada una de ellas de 90 grados.
Material:
- Microcontrolador Arduino UNO (Puede ser tambien Arduino MEGA)
- Circuito integrado ULN2003A
- Motor a Pasos Unipolar de 5 o 6 hilos
- Protoboard
- Cable para conectar componentes
- Fuente de Alimentación
Diagrama de conexión para funcionamiento de motor a pasos:
En este diagrama se muestra la forma de conectar el circuito con cada uno de los componentes necesarios. Cabe señalar que la conexión puede variar dependiendo del modelo de cada motor para lo cual basta con identificar sus cables comunes y conectarlos a la línea de alimentación del circuito.
Diagrama interno del circuito integrado ULN2003A
Este diagrama muestra los pines de entradas, salidas del integrado que nos permite incrementar el voltaje que se le suministra al motor. Para mayor información acerca de este integrado se recomienda revisar su datasheet en la siguiente liga. http://www.ti.com/lit/ds/symlink/uln2003a.pdf
Código de control
Recuerden guardar el código con la extensión .ino para que pueda funcionar correctamente el Sketch en el IDE de Arduino.
/Control de MOTOR a Pasos en Secuencia Normal (2 bobinas activadas por cada paso) para 4 estaciones
int motorPin1 = 8; // Pines del Motor
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 3000; // DelayTime determina la espera entre uno y otro paso
int delayTime1 = 100; // DelayTime1 determina la velocidad de giro entre uno y otro paso
int count = 0;
void setup()
{
pinMode(motorPin1, OUTPUT); // Configuración de los Pines como salida digital
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
//Control de MOTOR a Pasos en Secuencia Normal (2 bobinas activadas por cada paso) para 4 estaciones
int motorPin1 = 8; // Pines del Motor
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 3000; // DelayTime determina la espera entre uno y otro paso
int delayTime1 = 100; // DelayTime1 determina la velocidad de giro entre uno y otro paso
int count = 0;
void setup()
{
pinMode(motorPin1, OUTPUT); // Configuración de los Pines como salida digital
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
{
for (count = 0; count < 3; count++) // Aqui en el for es donde se manipulan los grados que se desean asignar al motor
{
// Los pines se activan en secuencia de las manecillas del reloj // Punto A (Primero) digitalWrite(motorPin1, HIGH); //cafe – A digitalWrite(motorPin2, LOW); //negro – B digitalWrite(motorPin3, LOW); //morado – C digitalWrite(motorPin4, HIGH); //naranja – D delay(delayTime1); // Un micro segundo de espera // Punto B (Segundo) digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime1);
// Punto C (Tercero) digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(delayTime1); // Punto D (Cuarto) digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, HIGH); delay(delayTime1); } //End For delay(delayTime); // Se espera 3 segundos despues de cada paso y al iniciar la secuencia }//End Loop


hola. Puedo utilizar un Modelo: ULN2803A en lugar de el que pusiste? gracias
Hola, si puedes usarlo. La diferencia entre el ULN2003 y el ULN2803 es que el primero trae 7 entradas y salidas, en cambio el segundo trae 8.
Saludos
Excelente blog
BUEN DIA:
PEDÍ UN ARDUINO UNO CON CNC SHIELD SIN EMBARGO SOY NUEVO EN EL TEMA, NO SE COMO CONFIGURAR LAS SALIDAS EN LA PC. ESTOY HACIENDO UNA FRESADORA CNC Y LA VOY A CONTROLAR CON ARDUINO UNO ( QUE COMO DIJE TIENE INCLUIDA UNA TARJETA QUE DICE CNC SHIELD).
ESTOY ESTUDIANDO EL PROGRAMA DE MACH3 Y ARTCAM QUE SON PARA GENERAR EL CODIGO G Y EL DISEÑO QUE QUIERA.
ESPERO HABERME DADO A ENTENDER Y AGRADECERIA SI ME DICEN DE ALGUN TUTORIAL PASO A PASO DIGAMOS QUE DESDE QUE LO RECIBO. DISCULPEN MI IGNORANCIA PERO LAS GANAS DE SALIR ADELANTE NO SE ME QUITAN. DEJO MI MAIL borisavila001@gmail.com
http://www.proyectosolaf.blogspot.com.ar
Estimado Boris:
Un saludo a otra persona que esta experimentando con esto.
A mi me dio resultado trabajar con drive TB6560 con hasta 3 amp cosa que se puede manejar buenos PAP y tiene un amplio margen de swicheo ,podes regular los amp al pap y el tipo de paso ,aparte de tener los tres comandos Enable,Dir,Pulso.
Yo lo aplique directamente en el puerto paralelo y salio andando de primera.
Como soy un hobista y no tengo ganas de pagar una licencia con el Mach3 estoy usando LinuxCNC con el EMC2 (AXIS) y no tengo problemas.
Recicle una vieja PC ya que LINUX pesa muy poco.
Si quieres pasa a ver mi blog y cualquier cosa te paso informacion.
att Olaf
Chingon gracias bro!!
Una pregunta con motores bipolares funcionara?
Hola, muchas gracias por la información, tengo una duda ¿puedo alimentar con un voltaje externo al que otorga Arudino la potencia del Motor? quisiera alimentar el motor con 12volts. De ante mano gracias.
Disculpe es el mismo procedimiento para un motor bipolar??
Mmm una preg cm puedo aser q mi motor gire en 360 grados