bclose

Mas sobre motores paso a paso

Controlando un motor unipolar como si fuera bipolar

Objetivos

 

 

    • Seguimos jugando con los motores paso a paso.
    • Diferencias entre motores unipolares y bipolares.
    • Convirtiendo un motor unipolar en bipolar.
    • Gobernando un motor bipolar con L293D H-Bridge
 
 

Material requerido.

Imagen de Arduino UNOArduino UNO o equivalente.
ProtoboardUna Protoboard.
conexionesCables Dupont Macho/ Macho
DetalleUn pequeño motor  28BYJ
L293DUn integrado L293D

 

Motores unipolares y bipolares

 

En las dos últimas sesiones empezamos a hablar de motores pasos a paso y de la jerga que los rodea. Vimos que había motores unipolares y motores bipolares y además dijimos que según el fabricante nos puede entregar 4, 5, 6, u 8 hilos de control.

Revisando un poco lo dicho hasta ahora, si alguien que no había visto nunca un motor paso a paso, ha entendido algo será un milagro. Y francamente, viendo lo mucho que se escribe por i

Internet del tema, y el barullo semi interesado que pueden montarte, acabaras convenciéndote de que esto no es lo tuyo, pero no señor.

Los motores paso a paso, son una cosa sencilla, pero son muy versátiles y conviene ir pasito a pasito, porque si haces caso a todo lo que lees la cosa se puede complicar mucho, así que vamos a dedicar esta sesión recapitular un poco y demostrarte que no es para tanto.

Recuerda que un motor paso a paso se diseña para que solo se mueva un paso cada vez que excitamos una de sus bobinas (O varias según el caso) y por eso, el circuito de control, o sea nuestro Arduino, tiene que ir excitando en secuencia las bobinas del motor, y por eso tenemos que volver a las configuraciones de las bobinas porque son las que definen como puedo excitar el motor.

Pero tienes que saber algo importante, casi son todos parecidos, (solo casi). Fíjate en estas imágenes de configuraciones:

Al final vamos a tener al menos 4 bobinas, enfrentadas dos a dos (Porque si no va a costar que el motor gire), pero la cuestión es cómo saca el fabricante los hilos de las bobinas al exterior, para que podamos controlar el motor.

En el caso del de 5 hilos, primero excitamos un lado de la bobina del primer grupo y luego la media bobina del otro grupo, después vuelta  a la primera bobina, pero del otro lado y al final la que falta. Pero fíjate que el caso del motor de 5 hilos es igual que el de 6, solo que en el primero el fabricante une los dos hilos centrales.

Y el caso de 8 hilos, es casi lo mismo pero, el fabricante te entrega 8 hilos para que los gobiernes como quieras. ¿Pero… para motores y bobinas similares hay alguna diferencia en esto? Pues poco menos que no (Algo hay pero ahora pasamos de ello).

 
  • No te preocupes por ahora de esto, ya tendrás tiempo más delante de entender las pequeñas diferencias, que tienen que ver con el consumo, el par o la velocidad de giro, por ahora olvídate de todo esto.  

En la práctica eres tu quien configura la excitación de las bobinas porque parece que cuantos más opciones te ofrece el fabricante, más sofisticado es el motor (Y el precio claro, no te olvides de la pasta), pero es bien fácil convertir un motor unipolar de 8 hilos en uno 6 o de 5 y uno de 6 en uno de 5.

Vale, más o menos los motores paso a paso unipolares son poco más o menos equivalentes, pero en cambio los bipolares son muy distintos ¿No?

Vale, pues tampoco. Fíjate en el esquema que parece muy diferente:

DIferencias de configuracion

Tienes marcado en rojo el hilo que une los comunes de las dos bobinas en el motor unipolar. ¿Qué pasa si simplemente los dejas al aire sin conectar? Pues querido amigo, que acabas de conseguir un precioso motor bipolar.

Así que al final, en todo este asunto hay mucho teatro, por parte de unos que esperan cobrarte más por el Show, y porque algunos que no han entendido nada, esperan convencerte de que te dejes aconsejar por ellos que son los que más saben de esto.

Hay un tema básico en que si se diferencian los motores unipolares y bipolares, y es que con un unipolar puedes usar un par de transistores Darlington para excitar una u otra mitad de cada bobina, como hacíamos en la sesión anterior y la costumbre es usar un integrado del tipo del ULN2003A.

En cambio un motor bipolar no puede ser gobernado de ese modo, porque hay que revertir el sentido de circulación de la corriente según en qué fase estés y para eso necesitamos un viejo conocido nuestro: Un H-bridge.

 
  • Recordad que un H-Bridge es capaz de invertir la dirección de circulación de la corriente en su salida.  

Y como no queremos que nadie se quede con dudas, en esta sesión vamos a mover el motorcito que hemos visto, el 28BYJ-48, unipolar, mediante un sencillo H-bridge, el  LS293D  manejándolo como si fuera bipolar (Hoy tengo ganas de guerra, que queréis que os diga) y montaremos  un pequeño circuito para gobernarlo.

En la sesión anterior controlamos el giro y  la secuencia de fases del motor directamente, pero en esta ocasión aprovecharemos para ver que Arduino dispone de una librería para gobernar motores paso a paso, a un mayor nivel de abstracción desentendiéndonos de tan agotador trabajo.

 

Esquema del circuito

 

Coma ya vimos el H-Bridge L293D en una sesión previa, no vamos a insistir con el y os remito a la sesión correspondiente.  Recordemos que este chip tenía dos puentes H-Bridge y que en aquella sesión solo usamos uno de ellos porque era mas que suficiente para gobernar un motor de corriente continua.

La diferencia es que ahora tenemos que manejar los dos H-bridges, porque vamos a tener dos juegos de bobinas, y por ello poned un poco de cuidado con el cableado, porque vamos a conectar unos cuantos cables a la protoboard, y como ya es costumbre con uno mal puesto probablemente dejará de funcionar.

Recordad, también, que para manejar nuestro motor 28BYJ-48 unipolar, como bipolar basta con que nos olvidemos casualmente, de usar el hilo común de las bobinas que en el conector viene de color rojo y listo.

 
  • En Internet he visto varios artículos que recomendaban desmontar el motor y cortar la pista interna que da al cable rojo, o bien cortar el cable rojo.
  • Jesús, que agresivos. Yo prefiero dejar sin conectar el cable correspondiente y no estropear un motorcito que nos puede dar mucho juego manejándolo de un modo u otro según nos convenga.   

Vamos con el esquema:

Esquema electrico

Y para la protoboard, tenemos:

Esquema de Protoboard
 
  • A riesgo de ponerme pesado, fijaros en que el cable rojo está sin conectar, para forzar a que usemos este motor como bipolar.  

 

El programa de control

 

 

Lo primero que vamos a hacer es desentendernos de los detalles de bajo nivel y vamos a usar una librería llamada stepper.h que viene de serie con el IDE moderno de Arduino, por lo que no hace falta que la instales, basta con invocarla: Prog_99_1

#include <Stepper.h>

Para crear una instancia del motor paso a paso, tenemos que definir que pines usamos para gobernar las entradas del motor. Si habéis usado las conexiones que os hemos marcado en el esquema:

const int in1Pin = 12;
const int in2Pin = 11;
const int in3Pin = 10;
const int in4Pin = 9;

Ahora tenemos que definir el número de pasos que nuestro motor tiene por vuelta y crear una instancia de la clase Stepper, pasándole los pines de control definidos:

#define STEPS 512  // Define el numero de pasos del motor. 512 para 28BYJ-48
Stepper motor(STEPS, in1Pin, in2Pin, in3Pin, in4Pin);

El resto es gimnasia:

void setup()
   { pinMode(in1Pin, OUTPUT);
     pinMode(in2Pin, OUTPUT);
     pinMode(in3Pin, OUTPUT);
     pinMode(in4Pin, OUTPUT);

     Serial.begin(115200);
     motor.setSpeed(25);     // Fijar la velocidad en rpms
   }

Lo único digno de mención es la última línea, donde fijamos la velocidad del motor en revoluciones por minuto.

 
  • Yo sé que vais a intentar acelerar un poco el motor, porque es lento que da asco, pero tenéis que entender que la excitación de las bobinas supone la creación de los campos magnéticos que inducen la fuerza electromotriz y eso lleva un cierto tiempo.
  • Dicho de otro modo: Si fijáis una velocidad superior a la que vuestro motor puede excitarse, sencillamente quedará inmóvil (Lo sé la vida es dura)
  • Estos motorcitos tienen un buen par motor, porque tienen una reductora 64: 1, lo que significa que es 64 veces más lento que el motor a pelo.  

Para no aburrirnos, vamos a seguir la costumbre de Internet, para este ejemplo, de recibir por la puerta serie un número entero y usarlo como un número de pasos que el motor debe avanzar si es positivo o retroceder si es negativo:

void loop()
   {  
      if (Serial.available())
         {    int steps = Serial.parseInt();
              Serial.println(steps);
              motor.step(steps);
         }
   }

Pues eso es todo. Para probarlo basta con que después de volcar el programa al Arduino, abráis el terminal serie y marquéis algún numero como 1024 o -2048 y el motor girará lentamente el número de pasos que le especifiquéis.

Aquí os dejo el mini video correspondiente para que veáis el resultado

 

 

Resumen de la sesión

 

 

    • Vimos que no hay tantas diferencias entre un motor paso a paso unipolar y bipolar.
    • Nos dimos cuenta de lo sencillo que es, usar un bipolar como si fuera unipolar.
    • Montamos un pequeño circuito con un H-Bridge para manejar el motor.

 

 

 

 

 

(28) Comments

  • Hola amigos del foro y admin, tengo creo un problema y es el siguiente: copio el programa correctamente y realizo las conexiones de igual forma Y me funciona bien con un valor positivo PERO al ingresar un valor negativo el motor no gira en sentido contrario, se queda medio trabado o me gira positivamente …. queria saber que problema tengo en este momento , sera el motor paso a paso que esta malo?
    PD: es la misma referencia que aca se mensiona y el codigo es copiado (esta exactamente igual), me funciona con valores positivos pero cuando ingreso negativos no genera un giro contrario.
    A que se puede deber este problema?
    Gracias

    • Hola Juan Luis,

      Pues no se que decirte porque ya ves que el ejemplo es de lo mas sencillo, hay un hilo que controla la direccion del motor. Yo lo revisaria por si acaso

  • Hola Amigos del foro.
    Quería contarles que hice un gran avance (me parece) en cuanto a mi proyecto, “Tope Automatico”.
    Lo que logré es que al teclear los mm., estos, se vean en el LCD, luego apretando otra tecla (‘B’), el motor se mueve una determinada cantidad de pasos, desplazando por supuesto al tope hasta la medida indicada.

    Hasta aqui todo barbaro.
    Ahora pido ayuda…..

    El problema es que no se como hacer, para que una vez que el motor llegó a su destino se quede como en Pausa. Ya que si sigo apretando la tecla (‘B’) el ciclo se vuelve a repetir infinitas veces .

    Ademas apretando otra tecla (‘C’) logro borrar la pantalla, pero, al volver a cargar otra medida, me vuelve a aparecer el numero anterior más este.

    No se que hacer para que mi programa “se olvide” del dato anterior y pueda comenzar de nuevo…

    Ojalá alguien me pueda echar una mano, porque estoy estancado con esto…
    Gracias
    Saludos, Beto.

  • Hola buenas tardes tengo un motor NEMA 23 y al momento de probarlo con este programa lo único que hace es vibrar y no gira para ninguno de los lados, la alimentación del motor es de 12v con una fuente ATX, su consumo es de 2A, anteriormente lo probé con otro motor NMB PM55L-048-HPG9 que es de 48 pasos y todo resultó perfecto, también lo alimenté con 12V pero su consumo es más bajo de 800mA y el NEMA 23 es de 200 pasos, probé variando los pasos del motor en el programa y la velocidad aun así no para de vibrar, me podrías decir que estoy haciendo mal por favor

    Mil gracias!!
    Saludos

    • No sabria que decirte Demian, porque aparentemente y por lo que he visto en internet es similar al Nema 17 que hemos utilizado en algun otro tuto, pero yo probaria a bajarle la velocidad a ver que pasa ¿Vale?

  • Hola Ivan
    Gracias por tu aporte, todo me ayuda…
    Saludos, Beto.

  • Hola admin…. gracias por responder.
    Veras, a la parte mecanica, no le tengo miedo, lo que no estoy logrando es la electronica. Por el momento logro ingresar el valor en el lcd mediante el teclado, pero no logro que a determinado valor, el motor gire x vueltas.
    Otra cosa que estoy analizando es lo de las operaciones aritméticas (suma y resta), para que cuando se encuentre en una posicion y se le ingrese una nueva medida, pueda restar o sumar y se mueva desde ahí (ojalá me entiendas), en vez de tener que resetear y arrancar desde cero todas las veces.
    Si tenés algun dato o consejo… desde ya muchas gracias…
    Beto.

    • Hola Beto, no estoy seguro de entender bien, pero si lo que quieres es que cuando el metas un valor por el puerto serie el motor avance un cierto número de pasaos hacia uno u otro lado, sólo tendrías que poner un par de condicionales if y si se cumple la condición usar la instrucción motor.step(steps); donde steps sea el número de pasos que quieras que se mueva.

      Un saludote!

    • Roberto

    Hola … ante todo felicitarte por este tutorial, me parece magnífico. Estoy leyendo todo lo que encuentro.
    Quería hacerte una consulta a ver si me puedes orientar.
    Estoy en un proyecto para mover un tope corredizo, es para una sierra de corte de perfiles de aluminio. La idea es que al introducir una medida determinada mediante un teclado, el carro ( tope) se desplaze hasta ese punto y seria bueno además poderle poner un LCD que indique la medida.
    Tengo para eso una placa arduino 1, un teclado matricial 4×4, un LCD de 16 x 2 y un motor pap con su driver. Pero se me complica para armar todo y no encuentro ningún proyecto parecido.
    Ojala me puedas echar una mano.
    Desde ya muchas gracias.
    Saludos… Beto Porporato’ Córdoba’ Argentina.

    • Hola Roberto, como todo en la vida la complicacion esta en los detalles, pero si dispones del motor paso a paso, basta con controlar su avance o retorceso con por ejemplo un tornillo de un modo similar a como se mueven las impresoras 3d. Pero antes tienes que montar la parte mecanica y luego calcular cuantas vueltas de tu motor son x cm, el resto sera bastante sencillo

  • Hola soy nuevo en esto pero tengo una duda, Estoy por empezar un plotter que maneja viromes, lapices, etc. Pero aun no puedo solucionar el problema de los motores en total usara 3 pero no se que componente comprar son unipolares osea tienen 4 cables. ¿Como me recomiendas iniciar?
    Muy buena pagina siempre vuelvo a esto para este tema pero ya es hora de iniciar y aun no se que hacer.

    • Que proyecto mas guapo Briam, me encanta, llevo años queriendo hacerlo yo mismo pero siempre voy joido de tiempo y ….
      Bueno entiendo que vas a necesitar dos motores paso a paso, te recomendaria un tipo NEMA 17 que son los que parece que todo el mundo usa para el movimineto XY y luego probablemente un servo sencillo para levantar y baja el lapiz como el http://www.prometec.net/producto/servo-mg90s-180o/

  • Perdona. Me refería al Ramps 1.4. Gracias anticipadas

    • Vale, claro que puedes utilizar una Ramps para controlar motores paso a paso, esta diseñad apara eso y tiene capacidad para hasta 5 motores de una cierta potencia, pero naturalmente tambien tiene que servir con pequeños motores.
      En cuanto a la consulta que me haces sobre el unir o separar los cables de los motores, depende un poco de cada motor y de la sequencia que uses en la excitacion de als bobinas. No tiene porque disminuir el par aunque separes las bobinas y las manejes independientemente… a condicion de que actives el mismo numero de bobinas en cada step ¿Vale?

  • Hola:
    Antes de nada enhorabuena por la página y gracias por tu esfuerzo.
    He realizado el montaje y funciona correctamente. ¿Seria posible utilizar este motor con Ramos 1.4?. ¿Disminuye el par con respecto a cuándo se destruye el puente entre bobinados del cable rojo?.
    Gracias anticipadas por tu atención.
    Un saludo!

    • Hola Jose Manuel, no se que es Ramos 1.4

    • David

    Hola buenas tardes, tengo un motor de 8 hilos, heredado de mi padre y ahora lo quiero hacer mover con arduino, esta nuevo pero la referencia ya no se encuentra por internet, es un motor japonés de la fuji electrochemical co. ref smr58-4801-a 2239376-0001 de 5v 5ohms. Mi padre lo hacía mover con unos TIP122 para mejorar su potencia. Quisiera me ayudaras para moverlo con el arduino, saber cómo puedo hacerlo.

    • Hola David, es seguramente un motor paso a paso de 8 bobinas que puedes convertir facilmente en uno de 5 hilos. Para ello tienes que buscar las dos bobinas en oposicon y unir sus hilos centrales de ese modo tendras 6 hilos y si a su vez unes los dos centrales a masa tendras un precioso motor paso a paso de 4 hile + comun o masa

      Tendras que haer pruebas para acertar cual es cual si no viene marcado de algun modo explicito

  • Hola!!!
    Como haces para ingresarle los datos al arduino??

    • Hola Demian, ¿a que te refieres?

    • Hola Demian.
      Abre el monitor Serial y lo haces a traves del teclado
      Saludos.

  • hola.. como hago para hacer andar 2 motores secuenciales. estoy haciendo una cinta transportadora y al final mueve un elevador. y no se como hacer q luego q termine de hacer un trabajo el motor comience el otro. muchas gracias y espero su respuesta

    • Hola Martín,

      No estoy seguro de comprender bien tu pregunta, pero me imagino que te refieres a como hacer que al pasar de la cinta al elevador esta arranque y pare la cinta transportadora. SI es así la solución fácil es arrancar los dos a la vez y olvidarte de las complicaciones. si por lo que sea no conviene, tienes que detectar el paso de lo que estas moviendo por el final de la cinta .

      Para eso puedes usar un final de carrera con una pértiga, o bien mas limpio, un sensor óptico que detecte el paquete

      Ya me dirás si te puede servir

    • A_Bug Bot

    Lo mejor que he encontrado en la red sobre tutoriales de ARduino en castellano. Gracias

    • Carlos espinosa

    Hola, si quiero probar con un motor pap de 12V, como sería la conexión. Gracias

    • Hola Carlos, pues exactamente igual, pero poniendo 12V en lugar de 5. Tanto el motor shield shield V1 como el L293D te soportan motores de 12V, pero si usas el shield asegurate de aislar el jumper de alimentacion del control de la alimentacion de los motores o haras parrillada

    • Jose

    Hola buenas tardes, quería hacerte una pregunta, soy nuevo en esto y no me aclaro mucho, pero veo una discrepancia entre el circuito y la protoboard
    Concretamente en las conexiones a tierra de las patas 4, 5 ,12 y 13 del H-Bridge que según el esquema tienen que conectar a tierra y están conectadas al positivo.
    Quiero probarlo pero me parece que podría haber un error, por favor si tienes un momento míralo y me dices algo.

    Muchas gracias

    • Hola Jose, tienes toda la razon. HAbia una serie de errores en la protoboard que creo ya estan corregidos, compruebalo y dime si ves cualquier otro problema. Muchas gracias por indicarmelo

Give a Reply

WordPress Anti-Spam by WP-SpamShield