Está en la página 1de 21

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.

Actuando sobre los 4 transistores, activando los transistores opuestos en diagonal de


cada rama, podemos variar el sentido en el que la corriente atraviesa la carga

Conectando simultáneamente los transistores superiores o inferiores, podemos poner


la carga Vcc o Gnd respectivamente, configuración que usaremos como freno.
Por último, nunca debemos encender ambos transistores de un mismo ramal
(izquierda o derecha), ya que estaremos provocando un cortocircuito entre Vcc y
GND.
La placa L298N incorpora electrónica que simplifica la conexión al puente
H, agrupando las conexiones en 3 pines accesibles (por cada salida) y eliminando la
posibilidad de generar un cortorcuito.

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.

La alimentación de Arduino en este caso podría realizarse desde la fuente de 12V al


pin Vin de Arduino (usando el regulador de voltaje de Arduino), o desde el pin Vlogico
del L298N al pin 5V de Arduino (usando el regulador del L298N).
Siempre que uséis más de una fuente de tensión recordar poner en común todos los
GND incluido el de Arduino. De lo contrario podéis dañar un componente.

Código Ejemplo con Puente H

Actividad 1 – Ejercicios Complementarios U1


L9110S
La placa L9110S está diseñada para que los microcontroladores o circuitos lógicos
puedan controlar con sencillez motores de corriente continua.

El circuito está diseñado en base al chip controlador L9110, fabricado en la clásica


cápsula DIP8 o en un diseño SOP8 SMD y basado en transistores MOSFET.

La tensión de alimentación para los motores puede variar de 2,5 a 12 V.

Como se observa en el siguiente diagrama, el control con el cableado típico no


requiere componentes adicionales.
Las entradas se pueden conectar directamente al microcontrolador. Si se conectan a
un circuito que tiene salidas OC (Open Colector, o Colector Abierto) se requiere una
resistencia pull-up conectada a la alimentación de 5V. Si bien en la hoja de datos del
chip indica que el valor adecuado es 1k, el módulo en sí incluye en su circuito
resistores de 10 k conectados al voltaje de alimentación de la lógica, o Vcc.
El circuito tiene dos entradas: una que puesta en ALTO hará que el motor avance, y
otra que puesta en ALTO hará que retroceda. Si se desea que el motor esté detenido,
ambas entradas deben estar en el mismo valor: las dos en estado BAJO (LOW), o
ambas en estado alto (HIGH). La placa tiene dos salidas, con bornera, que se
conectan directamente al motor.
Las entradas que no se conectan a un circuito son tomadas como nivel BAJO (L, o
Low) sin que ingrese ruido. Con un nivel ALTO (H, o HIGH), la corriente en esa
entrada será de alrededor de 1mA. El nivel de tensión para que el chip detecte la
entrada en estado lógico BAJO o L es como máximo de 0,7 V.
Típicamente, para el nivel ALTO o H, la tensión en el pin de entrada debe ser de
alrededor de la mitad del valor de alimentación o más (hasta, como máximo, el valor
de la tensión de alimentación).
La corriente del motor se puede mantener constantemente desde 0,75 hasta 0,8A (750
a 800 mA), y el circuito soporta picos de 1,5 a 2 A.
La hoja de datos ofrece una lista de los valores lógicos de las entradas y salidas.

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".

Torque: 1.8 Kg·cm

Velocidad: 0.1 seg/60º (4.8V) y 0.08 seg/60º (6V)

Dimensiones: 22.8 x 12.2 x 28.5mm

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.

Torque: 13kg·cm (4.8V) a 15kg·cm (6V)

Velocidad: 0.17 seg/60º (4.8V) y 0.13 seg/60º (6V)

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.

Frecuentemente dispone de un potenciómetro unido al eje del servo, que permite al


mismo, conocer la posición del eje. Esta información es tratada por un controlador
integrado que se encarga de ajustar y actuar sobre el motor, para alcanzar la posición
deseada.

La comunicación de la posición deseada se realiza mediante la transmisión de una


señal pulsada con periodos de 20ms. El ancho del pulso determina la posición del
servo.

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

En general, en todos los modelos:


• Un pulso entre 500-1000us corresponde con 0º

• Un pulso de 1500 ms corresponde con 90º (punto neutro)

• Un pulso entre 2000-2500us corresponde con 180º

Por tanto, variando la señal en microsegundos podemos disponer de una precisión


teórica de 0.18-0.36°, siempre que la mecánica del servo acompañe.

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).

El color de estos cables suele tener dos combinaciones:

- Marrón (GND), Rojo (Vcc) y Naranja (Sig)

- Negro (GND), Rojo (Vcc) y Blanco (Sig)

Por un lado, alimentamos el servo mediante el terminal GND (Marrón / Negro) y Vcc
(Rojo).

En general, la alimentación a los servos se realizará desde una fuente de tensión


externa (una batería o fuente de alimentación) a una tensión de 5V-6.5V, siendo 6V la
tensión idónea.

Arduino puede llegar a proporcionar corriente suficiente para encender un servo


pequeño (SG90), suficiente para hacer unos cuantos proyectos de prueba.

Sin embargo, no dispone de corriente suficiente para actuar un servo grande


(MG996R). Incluso varios servos pequeños, o hacer excesiva fuerza con ellos puede
exceder la capacidad de corriente de Arduino, provocando su reinicio.

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

Actividad 2 y 3 – Ejercicios Complementarios U1


Motor Paso a Paso
Un motor paso a paso o también conocidos como “stepper motor” es un dispositivo
electrónico que permite efectuar un movimiento muy preciso en ángulos pequeños y
por pasos en ambas direcciones, por lo tanto, este dispositivo es usado en infinidad de
procesos de precisión como CNC, impresoras 3D, robots, fotocopiadoras, cortadoras
láser entre otros.

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 paso a paso vienen en diferentes tamaños, estilos y características


eléctricas.

Básicamente un motor paso a paso puede ser representado por:

Tipos de Motores Paso a Paso


En el mercado existen dos tipos de motores paso a paso, los unipolares y los
bipolares, los cuales explicaremos en esta sección.

Bobinas del motor paso a paso


A continuación, podemos ver un esquema que muestra la configuración de las
diferentes bobinas dentro de un motor paso a paso unipolar y bipolar.
Motor Paso a Paso Unipolar
Este es el motor de paso más común, el cual posee dos bobinas en cada uno de los
estatores, donde cada una de esas bobinas posee un punto común, por lo tanto, este
motor típicamente posee 5 o 6 cables.

Los motores unipolares, siempre energizan sus fases de la misma forma. La


derivación “común”, siempre será negativa o positiva según nuestro criterio. La otra
punta de la derivación contendrá la polarización contraria. Los motores unipolares se
pueden implementar con un simple circuito de transistor. La desventaja es que hay
menos torque disponible porque solo la mitad de las bobinas se pueden energizar a la
vez.

Motor Paso a Paso Bipolar


También posee dos bobinas, con la diferencia que no tienen un punto intermedio
común, por lo tanto, es fácil intuir que posee 4 cables. Sin embargo, para conseguir el
control de este motor bipolar será necesario efectuar una configuración de 2 puente H
usando 8 transistores, o bien usando algún driver o integrado especial para poder
mandar la secuencia de pasos.

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.

A través de estos dispositivos mandaremos la secuencia en orden para poder mover el


motor paso a paso.

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.

Paso In1 In2 In3 In4

1 ON OFF OFF OFF

2 OFF ON OFF OFF

3 OFF OFF ON OFF

4 OFF OFF OFF ON


Secuencia a 2 pasos
En esta secuencia encendemos de a 2 bobinas para aumentar el Par del motor

Paso In1 In2 In3 In4

1 ON ON OFF OFF

2 OFF ON ON OFF

3 OFF OFF ON ON

4 ON OFF OFF ON

Secuencia a Medio Paso


Es una combinación de las dos secuencias anteriores donde se enciende 1 bobina
intercalada con la activación de 2 bobinas, por lo tanto, puede ser aplicado en
aplicaciones que requieran de una mayor precisión.

Paso In1 In2 In3 In4

1 ON OFF OFF OFF

2 ON ON OFF OFF

3 OFF ON OFF OFF

4 OFF ON ON OFF

5 OFF OFF ON OFF

6 OFF OFF ON ON

7 OFF OFF OFF 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.

Usando un Motor Paso a Paso 28BYJ-48 con ULN2003 y


Arduino
En la siguiente imagen se muestra el motor 28BYJ-48 (datasheet) con el driver
ULN2003

El motor 28BYJ-48 es un motor paso a paso Unipolar, por lo tanto no necesita de un


complejo sistema de driver para ser controlado por eso haremos uso del ULN2003 el
cual es una agrupación de 7 darlingtons que sirven para proporcionarle la corriente
necesaria al motor para moverse.
Según el datasheet, cuando el motor 28BYJ-48 funciona con una secuencia a medio
paso, cada medio paso corresponde a una rotación de 5.625°. Eso significa que
hay 64 impulsos por revolución (360° / 5.625° = 64).

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.

El motor 28BYJ-48 es más un motor de precisión que de velocidad. La velocidad


máxima para un motor paso a paso 28BYJ-48 es aproximadamente 10-15 rpm a 5V.

Vamos a realizar un ejemplo con el siguiente conexionado


Código Ejemplo Secuencia de a 1 Fase

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() {

for (int i = 0; i < 512; i++) // 4 pasos * 8 ciclos * 64 (reduccion)


= 2048 pasos
{
digitalWrite(IN1, HIGH); // paso 1
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(demora);

digitalWrite(IN1, LOW); // paso 2


digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(demora);

digitalWrite(IN1, LOW); // paso 3


digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(demora);

digitalWrite(IN1, LOW); // paso 4


digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(demora);
}

digitalWrite(IN1, LOW); // detiene por 5 seg.


digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(5000);

}
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() {

for (int i = 0; i < 512; i++) // 512*8 = 4096 pasos


{
for (int i = 0; i < 8; i++)
{
digitalWrite(IN1, paso[i][0]); // a IN1, IN2, IN3 e IN4
digitalWrite(IN2, paso[i][1]);
digitalWrite(IN3, paso[i][2]);
digitalWrite(IN4, paso[i][3]);
delay(demora);
}
}

digitalWrite(IN1, LOW); // detiene por 5 seg.


digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(5000);

}
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>

const int stepsPerRevolution = 48; //depende del número de pasos de su motor

// inicializa la libreria 'stepper' en los pines 8 a 11


Stepper myStepper(stepsPerRevolution, 8,9,10,11);

void setup()
{
myStepper.setSpeed(60); // establece la velocidad en 60rpm
}

void loop()
{
myStepper.step(stepsPerRevolution); // gira una vuelta en una dirección
delay(500);

myStepper.step(-stepsPerRevolution);// gira otra vuelta en la otra dirección


delay(500);
}

Motor Paso a Paso Bipolar con Arduino


El control de este tipo de motor puede resultar un poco más complejo, en el caso que
se quiera implementar con un arreglo de 8 transistores para hacer 2 puente H.

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.

También podría gustarte