MOVER MOTORES PASO A PASO CON ARDUINO
(28/12/13)
En este tutorial veremos que es un motor paso a paso, las diferentes maneras de conectarlos y como controlarlos con Arduino.
Material
-Arduino Uno Rev 3
-Motor paso a paso unipolar
-Motor paso a paso bipolar
-L293D
-ULN2803
-2 Transistores NPN
-Pulsadores
-4 Resistencias 10K y 2 resistencias 1K
-Potenciómetro
-Fuente alimentación
Motor paso a paso
Un motor paso a paso (también llamado stepper) es un dispositivo electromagnético que convierte impulsos eléctricos en movimientos mecánicos de rotación. La principal característica de estos motores es que se mueven un paso por cada impulso que reciben. Normalmente los pasos pueden ser de 1,8º a 90º por paso, dependiendo del motor. Por ejemplo: un motor paso a paso que se mueve 2º cada paso, quiere decir que para completar una vuelta (360º) tendrá que dar (360º/2ºpor paso) 180 pasos.
Son motores con mucha precisión, que permiten quedar fijos en una posición (como un servomotor) y también son capaces de girar libremente en un sentido u otro (como un motor DC).
Hay tres tipos de motores paso a paso:
-Motor paso a paso de imán permanente (los que usaremos en este tutorial).
-Motor paso a paso de reluctancia variable.
-Motor paso a paso hibrido.
Los Motores paso a paso están formados por dos partes:
-El estator es la parte fija del motor donde sus cavidades van depositadas las bobinas.
-El rotor es la parte móvil del motor construido por un imán permanente.
Estas dos partes van montadas sobre un eje.
Funcionamiento
Cuando circula corriente por una o más bobinas del estator se crea un campo magnético creando los polos Norte-Sur. Luego el rotor se equilibrará magnéticamente orientando sus polos Norte-Sur hacia los polos Sur-Norte del estator. Cuando el estator vuelva a cambiar la orientación de sus polos a través de un nuevo impulso recibido hacia sus bobinas, el rotor volverá a moverse para equilibrarse magnéticamente. Si se mantiene esta situación, obtendremos un movimiento giratorio permanente del eje. El ángulo de paso depende de la relación entre el nombre de polos magnéticos del estator y el nombre de polos magnéticos del rotor.
Hay dos tipos de motores paso a paso: los unipolares y los bipolares.
Los bipolares se componen de 2 bobinas y los unipolares de 4 bobinas. Para diferenciarlos físicamente basta con observar el número de terminales de cada motor. Los bipolares siempre tienen 4 terminales, dos para cada bobina, y los unipolares normalmente tienen 6 terminales, dos para cada bobina y los otro dos son los comunes de estas. Hay motores unipolares con 5 terminales en que los dos comunes están unidos internamente.
La diferencia entre los dos es que un motor paso a paso unipolar se activa una bobina a la vez mientras que un motor bipolar se activa más de una bobina a la vez. Esto hace que un motor bipolar tenga más torque que un motor unipolar. Por contra, un motor bipolar es más complejo de controlar que un unipolar.
Secuencia para controlar motores paso a paso Bipolares
Un motor paso a paso bipolar necesita invertir la corriente que circula por sus bobinas en una secuencia determinada para provocar el movimiento del eje.
Paso |
Bobina 1A |
Bobina 1B |
Bobina 2A |
Bobina 2B |
Paso 1 |
1 |
0 |
1 |
0 |
Paso 2 |
1 |
0 |
0 |
1 |
Paso 3 |
0 |
1 |
0 |
1 |
Paso 4 |
0 |
1 |
1 |
0 |
Secuencia para controlar motores paso a paso Unipolares
Hay tres secuencias para controlar los motores paso a paso unipolares
Simple o wave drive: Es una secuencia donde se activa una bobina a la vez. Esto hace que el motor tenga un paso más suave pero por el contrario tenga menos torque y menos retención.
Paso |
Bobina A |
Bobina B |
Bobina C |
Bobina D |
Paso 1 |
1 |
0 |
0 |
0 |
Paso 2 |
0 |
1 |
0 |
0 |
Paso 3 |
0 |
0 |
1 |
0 |
Paso 4 |
0 |
0 |
0 |
1 |
Normal: Es la secuencia más usada y la que recomiendan los fabricantes. Con esta secuencia el motor avanza un paso por vez y siempre hay dos bobinas activadas. Con esto se obtiene un mayor torque y retención.
Paso |
Bobina A |
Bobina B |
Bobina C |
Bobina D |
Paso 1 |
1 |
1 |
0 |
0 |
Paso 2 |
0 |
1 |
1 |
0 |
Paso 3 |
0 |
0 |
1 |
1 |
Paso 4 |
1 |
0 |
0 |
1 |
Medio paso: Se activan primero dos bobinas y después solo una y así sucesivamente. Esto provoca que el motor avance la mitad del paso real. Esto se traduce en un giro más suave y preciso.
Paso |
Bobina A |
Bobina B |
Bobina C |
Bobina D |
Paso 1 |
1 |
0 |
0 |
0 |
Paso 2 |
1 |
1 |
0 |
0 |
Paso 3 |
0 |
1 |
0 |
0 |
Paso 4 |
0 |
1 |
1 |
0 |
Paso 5 |
0 |
0 |
1 |
0 |
Paso 6 |
0 |
0 |
1 |
1 |
Paso 7 |
0 |
0 |
0 |
1 |
Paso 8 |
1 |
0 |
0 |
1 |
Controlar motor paso a paso Bipolar con Arduino
Como hemos explicado antes, los motores bipolares son más complejos de controlar ya que el flujo de corriente tiene que cambiar de dirección a través de las bobinas con una secuencia determinada. Para esto debemos conectar cada una de las dos bobinas en un puente en H (H-Bridge). Para esto, utilizaremos el integrado L293 que contiene dos H-Bridge (datasheet).
Para controlar motores paso a paso con Arduino, utilizaremos la librería <Stepper.h> que viene con el software de este.
/* www.diymakers.es by A.García Mover motores paso a paso con Arduino Tutorial en: http://diymakers.es/mover-motores-paso-paso-con-arduino/ */ #include <Stepper.h> //Importamos la librería para controlar motores paso a paso #define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta. 200 en nuestro caso // Ponemos nombre al motor, el número de pasos y los pins de control Stepper stepper(STEPS, 8, 9, 10, 11); //Stepper nombre motor (número de pasos por vuelta, pins de control) void setup() { // Velocidad del motor en RPM stepper.setSpeed(100); } void loop() { //Girar una vuelta entera en un sentido stepper.step(200); delay(500); //Pequeña pausa //Girar una vuelta entera en sentido contrario stepper.step(-200); delay(500); //Pequeña pausa }
Utilizando esta conexión tenemos un pequeño problema, y es que usamos cuatro pins del Arduino para controlar el motor, y eso son muchos. Si queremos controlar más de un motor paso a paso y usar otros pins para otras conexiones, nos quedaremos cortos de pins. Esto se puede solucionar con una conexión diferente que solo utiliza dos pins de control del Arduino.
Conexión dos pins
Para entender esta conexión, primero hay que fijarse en la secuencia del motor paso a paso bipolar que hemos visto antes. Si nos fijamos bien, veremos que los extremos de cada bobina están invertidos entre sí.
De esta manera solo tenemos que usar dos pins de control e invertirlos. Para invertirlos usaremos dos transistores NPN (BC547,BD139, etc…) polarizados en emisor común y que trabajen en modo saturación-corte. Así el transistor trabaja como un inversor de señal.
De este modo, usaremos solo dos pins del Arduino y con los dos NPN en modo de inversor obtendremos los cuatro pins de control necesarios para atacar el L293.
El programa es el mismo que antes, con la diferencia que cambiaremos los pins de control:
En vez de usar:
Stepper stepper(STEPS, 8, 9,10,11);
Cambiamos por:
Stepper stepper(STEPS, 8, 9);
/* www.diymakers.es by A.García Mover motores paso a paso con Arduino Tutorial en: http://diymakers.es/mover-motores-paso-paso-con-arduino/ */ #include <Stepper.h> //Importamos la librería para controlar motores paso a paso #define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta. 200 en nuestro caso // Ponemos nombre al motor, el número de pasos y los pins de control Stepper stepper(STEPS, 8, 9); //Stepper nombre motor (número de pasos por vuelta, pins de control) void setup() { // Velocidad del motor en RPM stepper.setSpeed(100); } void loop() { //Girar una vuelta entera en un sentido stepper.step(200); delay(500); //Pequeña pausa //Girar una vuelta entera en sentido contrario stepper.step(-200); delay(500); //Pequeña pausa }
Controlar motor paso a paso Unipolar con Arduino
Un motor paso a paso unipolar es más sencillo que controlar. Utilizaremos el integrado ULN2803 que es un array de 8 transistores tipo Darlington capaz de soportar cargas de hasta 500mA (datasheet). Conectaremos los cuatro pins del Arduino a las entradas del ULN2803 y las salidas de este a las bobinas. Los comunes a 12V.
El programa es el mismo que hemos usado antes con el motor bipolar de 4 pins:
/* www.diymakers.es by A.García Mover motores paso a paso con Arduino Tutorial en: http://diymakers.es/mover-motores-paso-paso-con-arduino/ */ #include <Stepper.h> //Importamos la librería para controlar motores paso a paso #define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta. 200 en nuestro caso // Ponemos nombre al motor, el número de pasos y los pins de control Stepper stepper(STEPS, 8, 9, 10, 11); //Stepper nombre motor (número de pasos por vuelta, pins de control) void setup() { // Velocidad del motor en RPM stepper.setSpeed(100); } void loop() { //Girar una vuelta entera en un sentido stepper.step(200); delay(500); //Pequeña pausa //Girar una vuelta entera en sentido contrario stepper.step(-200); delay(500); //Pequeña pausa }
Controlar velocidad y sentido de un motor paso a paso Bipolar con Arduino
Ahora que ya sabemos las diferentes maneras y conexiones de controlar los motores paso a paso, vamos a hacer un pequeño proyecto con un motor bipolar. Con un potenciómetro regularemos la velocidad de este, y con dos pulsaremos seleccionaremos el sentido de giro.
-Ajuntar las masas del Arduino y de la fuente de alimentación.
-Los dos pulsadores conectados en modo Pull-Down.
-Para detectar las bobinas, basta con conectar el tester en continuidad en dos terminales, cuando marque continuidad o una baja carga ohmica quiere decir que entre esos dos terminales hay una bobina.
-Un consejo: mejor no alimentar el Arduino solo con el cable USB, sino con la fuente de alimentación a través del pin Vin o del conector jack. Esto es para que no haya errores, sobre todo a la hora de controlar motores. El cable USB solo conectarlo cuando se use la comunicación serie con el PC. Si no es así, desconectarlo.
Programa
/* www.diymakers.es by A.García Mover motores paso a paso con Arduino Tutorial en: http://diymakers.es/mover-motores-paso-paso-con-arduino/ */ #include <Stepper.h> //Importamos la librería para controlar motores paso a paso #define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta. 200 en nuestro caso // Ponemos nombre al motor, el número de pasos y los pins de control Stepper stepper(STEPS, 8, 9); //Stepper nombre motor (número de pasos por vuelta, pins de control) int pot; //Variable lectura potenciómetro int derecha=3; //Pulsador derecha int izquierda=2; //Pulsador izquierda int direccion; //Variable para indicar la direccón void setup() { pinMode(derecha,INPUT); pinMode(izquierda,INPUT); } void loop() { pot=analogRead(A0); //Lectura potenciómetro pot = map(pot, 0, 1023, 30, 150); //Establecemos la velocidad entre 30 y 150 rpm stepper.setSpeed(pot); //Indicamos la velocidad al motor stepper.step(direccion); //Indicamos la dirección al motor if(digitalRead(izquierda)==HIGH) { direccion=200; //Si pulsamos el pulsador izquierdo, el motor gira a la izquierda } if(digitalRead(derecha)==HIGH) { direccion=-200; //Si pulsamos el pulsador derecho, el motor gira a la derech } }