Documentos de Académico
Documentos de Profesional
Documentos de Cultura
U1.2 - Motores
U1.2 - Motores
Motores CC
Una de las cosas más comunes cuando alguien empieza con Arduino, después de
conseguir encender un LED, es intentar mover un motor DC. Estos son los motores
que podemos encontrar en todos los tamaños y dispositivos: desde juguetes, taladros,
sierras, impresoras viejas… Si queremos reciclar estos motores de corriente
continua con Arduino, es muy sencillo y aquí vamos a ver las opciones que tenemos
para controlar motores DC con Arduino.
Para probar si un motor funciona lo más fácil que podéis hacer es conectar
directamente sus polos a una fuente de voltaje de, generalmente, 5V o 12V. Estos
motores no tienen polaridad, simplemente giran en un sentido u otro en función de
la polaridad. El problema es que, conectándolo solo a una pila, no tiene mucha
funcionalidad, así que lo ideal sería poder controlar cómo y cuándo se mueve. Para
ello vamos a usar un Arduino y veremos diferentes formas de controlar nuestro motor
de corriente continua.
L298N y Puente H
Básicamente un L298N consiste en dos puentes-H, uno para la salida A y otro para la
salida B.
Un puente-H es un componente ampliamente utilizado en electrónica para alimentar
una carga de forma que podemos invertir el sentido de la corriente que le atraviesa.
Internamente un puente-H es una formación de 4 transistores, conectados entre Vcc y
GND, con la carga a alimentar entre ellos. Dibujado en esquema el conjunto tiene
forma de "H", de la que recibe su nombre su nombre.
Dos de estos pines, IN1 y IN2 (IN3 y IN4 para la salida B), controlan el encendido de
los transistores de cada una de las dos ramas, encendiendo el ramal superior o inferior
de la misma.
El tercer pin (IEA/IEB) desactiva simultáneamente todos los transistores del puente-H,
desconectando la carga por completo.
Montaje
La placa de conexión del L298N incorpora una entrada de voltaje, una serie de
jumpers para configurar el módulo, dos salidas A y B, y los pines de entrada que
regulan la velocidad y el sentido de giro.
La entrada de tensión proporciona el voltaje que alimentará a los motores. El rango de
entrada admisible es de 3V a 35V y se suministra mediante los 2 terminales izquierdos
de la bornera de conexión entrante.
El tercer terminal de la bornera de conexión, Vlógico, está conectado con la electrónica
del L298N y es necesario que tenga un valor entre 4.5 y 5.5V para que la placa
funcione correctamente.
Para ello el módulo incorpora un regulador de voltaje que suministra la tensión
necesaria en Vlógico. Este regulador puede desactivarse quitando el jumper de la
placa. Desactivaremos el regulador cuando la tensión de alimentación sea inferior a 5V
o superior a 15V.
Por tanto:
Si el regulador está activado (jumper cerrado) Vlógico es una salida de 5V que
podemos emplear para alimentar otros dispositivos.
Si el regulador está desactivado (jumper abierto), Vlógico es una entrada a la que
tendremos que proporcionar un voltaje de 4.5 a 5.5V.
No debemos introducir corriente en Vlógico con el regulador activado (jumper
conectado) o podemos dañar el módulo.
Por otro lado, tenemos las dos borneras de conexión A y B que suministran la salida a
los motores.
Por último, tenemos los pines de entrada que controlan la dirección y velocidad de
giro.
Los pines IEA, IN1 e IN2 controlan la salida A.
Los pines IEB, IN3 e IN4 controlan la salida B.
Los pines IN1, IN2, y IN3 e IN4, controlan la dirección de giro, respectivamente, de la
salida A y B.
Los pines IEA y IEB desactivan la salida. Podemos conectarlos permanentemente
mediante el uso de un jumper, o conectar una señal PWM para controlar la velocidad
de giro.
En el caso de querer usar ambas fases, y poder elegir tanto el sentido de giro como la
velocidad, y alimentar desde una fuente de 12V, el esquema de conexión a Arduino
sería el siguiente.
Mientras que la conexión, vista desde el lado de Arduino, sería la siguiente.
Esta tabla se puede ampliar para situaciones no típicas. Si sólo hay una entrada en el
nivel H y la otra está en nivel L, el motor gira. Pero si ambas entradas están en H, o
ambas entradas están en L, las salidas están en un tercer estado, o “flotante” (ningún
voltaje), y no ambas en 0 volt, o “L”, como se muestra en la tabla.
Las salidas están conectadas internamente a diodos que protegen al circuito de los
pulsos de contracorriente.
El L9110 gestiona dinámicamente frecuencias de hasta 40 kHz, mientras que el tiempo
de conmutación más breve para la regulación por ancho de pulso (PWM) es de
alrededor de 15us.
Diagrama de conexiones
Servomotor
Un servo es un tipo de accionador ampliamente empleado en electrónica. A diferencia
de otros tipos de motores en los que controlamos la velocidad de giro, en un servo
indicamos directamente el ángulo deseado y el servo se encarga de posicionares en
este ángulo.
Típicamente los servos disponen de un rango de movimiento de entre 0 a 180º. Es
decir, no son capaces de dar la vuelta por completo (de hecho, disponen de topes
internos que limitan el rango de movimiento)
Internamente un servo frecuentemente consta de un mecanismo reductor. Por
tanto, proporcionan un alto par y un alto grado de precisión (incluso décimas de
grado). Por contra, las velocidades de giro son pequeñas frente a los motores de
corriente continua.
Los servos se admiten una tensión de alimentación entre 4,8V a 7,2V, siendo el valor
más adecuado es 6V. Con tensiones inferiores el motor tiene menos fuerza y
velocidad. Con tensiones superiores a 6,5V los servos empiezan a oscilar demasiado,
lo cual los hace poco útiles.
Los servos son cómodos de emplear, ya que ellos mismos realizan el control de
posición, que con otro tipo de motores debe hacerse de forma externa. Por estos
motivos son ampliamente empleados en proyectos de robótica, como brazos robóticos,
robots con patas, controlar el giro de torretas, u orientar sensores como de
ultrasonidos o temperatura a distancia.
SG90
Es el servo de tamaño "pequeño" estándar dentro de los proyectos de electrónica. Es
un servo pequeño, ligero, y barato, que dispone de engranajes de plástico. Muchos
dispositivos, como torretas y partes de robots, están diseñados para instalar servos de
este tamaño.
Torque: 1.4 kg·cm
Velocidad: 0.1 seg/60º (4.8V) y 0.08 seg/60º (6V)
Dimensiones: 21.5 x 11.8 x 22.7mm
Peso: 9g
MG90S
El MG90S es similar al SG90 pero dispone de engranajes y el acoplamiento metálicos.
A cambio pesa un poco más y es más caro. Físicamente es compatible con los
accesorios del SG90.
Usaremos este servo como sustituto del SG90 cuando tengamos una aplicación en la
que realmente necesitemos ejercer fuerza, y las partes de plástico podrían ceder y
quedarse "redondas".
Peso: 13.4g
MG996R
Este es el servo de tamaño "grande" que usaremos frecuentemente. Este tipo de
servos es ampliamente utilizado en proyectos de robótica. Igual que con el SG90,
muchos dispositivos y kits como brazos robóticos, hexápodos, están diseñados para
instalar este tamaño de servo.
Dimensiones: 40 x 19 x 43mm
Peso: 56g
Funcionamiento
Internamente un servo está constituido por un motor de corriente continua, acoplado a
un reductor para reducir la velocidad de giro, junto con la electrónica necesaria para
controlar su posición.
La relación entre el ancho del pulso y el ángulo depende del modelo del motor. Por
ejemplo, algunos modelos responden con 0º a un pulso de 500 ms, y otros a un pulso
de 1000 ms
Esquema de montaje
Conectar un servo al Arduino es sencillo. El servo dispone de tres cables, dos de
alimentación (GND y Vcc) y uno de señal (Sig).
Por un lado, alimentamos el servo mediante el terminal GND (Marrón / Negro) y Vcc
(Rojo).
Por otro lado, finalmente, para el control conectamos el cable de señal (naranja /
blanco) a cualquier pin digital de Arduino. Al usar varias fuentes de tensión
recordar poner siempre en común todos los GND. De lo contrario podríais dañar algún
componente.
Código Ejemplo
Los motores paso a paso son motores de CC que se mueven en pasos discretos.
Tienen múltiples bobinas que se organizan en grupos llamados “fases”. Al energizar
cada fase en secuencia, el motor rotará, un paso a la vez.
Los pasos del motor son controlados por una computadora o un microcontrolador,
pudiendo lograr un posicionamiento muy preciso y/o controlar de velocidad del motor
paso a paso. Por esta razón, los mismos, son elegido para muchas aplicaciones de
control de movimiento de precisión.
Los motores bipolares necesitan los circuitos de puente H porque es necesario invertir
el flujo de corriente a través de las fases. Al energizar las fases alternando la
polaridad, todas las bobinas pueden ponerse a trabajar girando el motor.
Movimiento del Motor paso a Paso con Microcontrolador
Para conseguir el movimiento de un motor paso a paso con Arduino o cualquier otro
microcontrolador, necesariamente vamos a tener que recurrir a la ayuda de un circuito
externo, debido a que un sistema no cuenta con la corriente suficiente para mover este
dispositivo con carga.
En el mercado existen varios drivers diseñados para este fin, tales como el ULN2003,
L298, L296 entre otros, o también podríamos pensar en controlar un motor paso a
paso con Arduino sin Driver a través de 4 transistores (unipolar) para activar cada
bobina o 8 transistores (bipolar) para hacer una configuración de 2 Puente H que
direccione la corriente dentro del motor.
Entonces, para poder controlar un motor paso a paso con Arduino podemos emplear
alguna de las siguientes 3 secuencias de pasos descritas a continuación:
Secuencia a 1 Fase
Encendemos únicamente una bobina por vez siguiendo la siguiente tabla de verdad.
1 ON ON OFF OFF
2 OFF ON ON OFF
3 OFF OFF ON ON
4 ON OFF OFF ON
2 ON ON OFF OFF
4 OFF ON ON OFF
6 OFF OFF ON ON
8 ON OFF OFF ON
Invertir giro motor paso a paso
La inversión de giro de un motor paso a paso es sumamente sencilla, para ello solo
basta con enviar los pasos mostrados en las tablas anteriores en la dirección contraria,
o sea, debemos mirar la tabla de abajo hacia arriba. Si se respeta ese orden en la
programación del motor paso a paso con Arduino, conseguiremos invertir el cambio de
sentido del motor pap sin ninguna complicación.
Por ejemplo, para la secuencia a 1 fase, debemos enviar primero el paso 4, luego el
paso 3, luego el paso 2 y finalmente el paso 1.
Además, el motor posee una reducción de 1/64. (En realidad es 1 / 63.68395 pero a
hacer un redondeo para 1/64 que es una buena aproximación)
Esto significa que en realidad hay que dar 64 * 63.68395 pasos por revolución =
4,075.7728 ~ 4076 pasos por vuelta.
int IN1 = 8;
int IN2 = 9;
int IN3 = 10;
int IN4 = 11;
int demora = 20;
void setup() {
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
}
Código Ejemplo Secuencia a Medio Paso
int IN1 = 8;
int IN2 = 9;
int IN3 = 10;
int IN4 = 11;
int demora = 20; // demora entre pasos, no debe ser menor a 10
ms.
// medio paso
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}
};
void setup() {
pinMode(IN1, OUTPUT); // todos los pines como salida
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
}
Motor paso a paso con L293D y L298 Unipolar
Ser implementar con drivers comerciales como el L293D y el Driver L298, que
internamente poseen configuraciones en Puente H.
También puede implementarse el control del motor paso a paso con arduino sin driver
utilizando para ello un arreglo de 4 transistores que activen cada una de las bobinas
del motor UNIPOLAR.
#include <Stepper.h>
void setup()
{
myStepper.setSpeed(60); // establece la velocidad en 60rpm
}
void loop()
{
myStepper.step(stepsPerRevolution); // gira una vuelta en una dirección
delay(500);
A diferencia del motor paso a paso unipolar, el motor paso a paso bipolar tiene dos
conductores por fase, ninguno de los cuales es común.
Sin embargo, usando los Drivers que poseen puente H internos como el caso del
L293D o el L298, es sumamente fácil poner a trabajar nuestros motores BIPOLARES,
es más, puede emplearse EXACTAMENTE EL MISMO programa hecho para el motor
UNIPOLAR, haciendo las conexiones correctas.