Objetivos
Material requerido
Kit inicio UNO | |
Kit Inicio Mega |
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 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:
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:
Y para la protoboard, tenemos:
- 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