Nothing Special   »   [go: up one dir, main page]

Control de Motores DC Con ARDUINO PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 13

Control de Motores DC

con ARDUINO

Por: Héctor Mojica


Este módulo basado en el chip L298N te permite controlar dos motores de
corriente continua o un motor paso a paso bipolar de hasta 2 amperios.
El módulo cuenta con todos los componentes necesarios para funcionar sin
necesidad de elementos adicionales, entre ellos diodos de protección y un
regulador LM7805 que suministra 5V a la parte lógica del integrado L298N.
Cuenta con jumpers de selección para habilitar cada una de las salidas del
módulo (A y B). La salida A esta conformada por OUT1 y OUT2 y la salida B por
OUT3 y OUT4. Los pines de habilitación son ENA y ENB respectivamente.

En la parte inferior se encuentran los pines de control del módulo, marcados


como IN1, IN2, IN3 e IN4.
Conexión de alimentación
Este módulo se puede alimentar de 2 maneras gracias al regulador integrado
LM7805.
Cuando el jumper de selección de 5V se encuentra activo, el módulo permite una
alimentación de entre 6V a 12V DC. Como el regulador se encuentra activo, el
pin marcado como +5V tendrá un voltaje de 5V DC. Este voltaje se puede usar
para alimentar la parte de control del módulo ya sea un microcontrolador o un
Arduino, pero recomendamos que el consumo no sea mayor a 500 mA.
Cuando el jumper de selección de 5V se encuentra inactivo, el módulo permite
una alimentación de entre 12V a 35V DC. Como el regulador no esta
funcionando, tendremos que conectar el pin de +5V a una tensión de 5V para
alimentar la parte lógica del L298N. Usualmente esta tensión es la misma de la
parte de control, ya sea un microcontrolador o Arduino.
Recomendamos nunca conectar una tensión de entrada al pin de +5V, cuando
el jumper de selección de 5V se encuentre activado. Esto provocaría un corto y
podría dañar permanentemente el módulo.
Control de un motor DC
Como demostración, vamos a controlar un motor DC a través de la salida B del
módulo. El pin ENB se conectará con el jumper a +5V.
El ejemplo esta desarrollado en Arduino UNO, pero el código es compatible con
cualquier Arduino o pinguino.
Esquema de conexión
Código en Arduino
El programa básicamente activa el motor en un sentido por 4 segundos, luego
detiene el motor por 0.5 segundos, después activa el motor en sentido inverso
por 4 segundos y por último detiene el motor por 5 segundos. Luego repite la
acción indefinidamente.

/*

El programa activa el motor en un sentido por 4 segundos,


para el motor por 500 ms, activa el motor en sentido inverso por 4 segundos
y se detiene por 5 segundos. Luego repite la acción indefinidamente.

*/

int IN3 = 5;
int IN4 = 4;

void setup()
{
pinMode (IN4, OUTPUT); // Input4 conectada al pin 4
pinMode (IN3, OUTPUT); // Input3 conectada al pin 5
}
void loop()
{
// Motor gira en un sentido
digitalWrite (IN4, HIGH);
digitalWrite (IN3, LOW);
delay(4000);
// Motor no gira
digitalWrite (IN4, LOW);
delay(500);
// Motor gira en sentido inverso
digitalWrite (IN3, HIGH);
delay(4000);
// Motor no gira
digitalWrite (IN3, LOW);
delay(5000);
}

Control de un motor DC variando su velocidad


Si queremos controlar la velocidad del motor, tenemos que hacer uso de PWM.
Este PWM será aplicado a los pines de activación de cada salida o pines ENA y
ENB respectivamente, por tanto los jumper de selección no serán usados.
Esquema de conexión

Código en Arduino
El programa controla la velocidad de un motor DC aplicando PWM al pin ENB
del módulo L298N.
int IN3 = 5; // Input3 conectada al pin 5
int IN4 = 4; // Input4 conectada al pin 4
int ENB = 3; // ENB conectada al pin 3 de Arduino
void setup()
{
pinMode (ENB, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
}
void loop()
{
//Preparamos la salida para que el motor gire en un sentido
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 2 seg aumenta la velocidad
analogWrite(ENB,55);
delay(2000);
analogWrite(ENB,105);
delay(2000);
analogWrite(ENB,255);
delay(2000);
// Apagamos el motor y esperamos 5 seg
analogWrite(ENB,0);
delay(5000);
}
Control de un motor paso a paso bipolar
Los motores paso a paso pueden ser bipolares o unipolares. En este ejemplo
trabajamos con un motor paso a paso bipolar, sin embargo este driver es capaz
de controlar un motor paso a paso unipolar si se conecta en configuración
bipolar, obviando los cables del tab central de las bobinas del motor. El máximo
consumo permitido es de 2 amperios.
Esquema de conexión

El esquema de conexión muestra la conexión utilizada entre el modulo L298N y


el motor paso a paso. Cada una de las bobinas del motor esta conectada a una
salida del módulo. Para identificar las bobinas de un motor paso a paso
utilizamos un multímetro en modo de continuidad. Los cables que dan
continuidad son los extremos de cada bobina.
En este caso, como el motor paso a paso es de 12 VDC, utilizamos el jumper de
selección de +5V, para activar el regulador interno del módulo y solo hacer uso
de una fuente de 12 VDC para alimentar el motor.
Los jumper de activación ENA y ENB los hemos activado de igual manera.
Código de Arduino
El código de Arduino hace girar el motor paso a paso una vuelta en un sentido y
luego ejecuta otra vuelta en sentido opuesto. Este código hace uso de la librería
‘Stepper.h‘, que se instala por defecto en las ultimas versiones del IDE de
Arduino.
El valor de la variable stepsPerRevolution depende del número de pasos del
motor paso a paso. Este valor se encuentra en las especificaciones de la hoja de
datos del motor. En nuestro caso el motor paso a paso utilizado es de 48
pasos/vuelta.

/*
Stepper Motor Control - one revolution
Este programa impulsa un motor paso a paso unipolar o bipolar.
El motor está conectado a los pines digitales 8 - 11 de la Arduino.
El motor debe girar una vuelta en una dirección, a continuación,
una revolución en la otra dirección.
*/
#include <Stepper.h>
const int stepsPerRevolution = 48; // cambie este valor por el numero de pasos de su motor

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


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

void setup() {
// establece la velocidad en 60rpm
myStepper.setSpeed(60);
// inicializa el puerto serial
Serial.begin(9600);
}

void loop() {
// gira una vuelta en una direccion
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(500);

// gira otra vuelta en la otra direccion


Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(500);
}
Descripción
Tutorial para el controlador de motor Arduino Mini DC El módulo de control H-
Bridge PWM dual es ideal para su uso en autos inteligentes, autos de juguete y
robots alimentados con baterías. El voltaje de alimentación 2V ~ 10V, puede
conducir dos motores de CC o motores paso a paso de 2 fases y 4 cables, puede
lograr rotación hacia adelante o rotación inversa, es posible ajustar la velocidad
de rotación. Cada uno puede proporcionar una corriente continua de 1.5 A,
corriente máxima de hasta 2.5 A, protección térmica y puede restaurarse
automáticamente. El uso del chip original importado, el interruptor MOS
integrado de baja resistencia, calor mínimo, sin disipador de calor, tamaño
pequeño, bajo consumo de energía, es ideal para funcionar con baterías.
Especificación
 Voltaje de suministro del módulo: 2V-10V
 Voltaje de entrada de señal: 1.8-7V
 Corriente de trabajo simple: 1.5A
 Corriente máxima hasta 2.5 A
 Corriente de espera baja (menos de 0.1uA)
 Circuito de conducción común incorporado, la terminal de entrada vacía,
el motor no funciona mal
 Tamaño: 24.7 * 21 * 7 mm
 Diámetro del orificio de montaje: 2 mm

 +/- para proporcionar alimentación al módulo y al motor


 IN1 IN2 para controlar el motor A
 IN3 IN4 para controlar el motor B
 Motor A para ser conectado al motor de CC 1
 El motor B debe conectarse al motor de CC 2
Programa de prueba
Después de haberlo cargado con éxito en su placa Arduino Uno. Vaya a
Herramientas> Monitor en serie y verá como se muestra en la imagen superior
impresa en su monitor serie. Opción de número de llave (1, 2 o 3) para iniciar la
operación.
 cuando el usuario ingrese el número '1', ambos motores de CC
comenzarán a girar hacia adelante y el monitor en serie imprimirá "Motor
1 hacia adelante, Motor 2 hacia adelante".
 cuando el usuario ingrese el número '2', ambos motores de CC
comenzarán a retroceder y el monitor serial imprimirá "Motor 1 en reversa,
Motor 2 en reversa"
 cuando el usuario ingrese el número '3', ambos motores de CC se
detendrán y el monitor serial imprimirá "Motor 1 Parada, Motor 2 Parada".
Escribir el siguiente programa

int IN1 = 12;


int IN2 = 11;
int IN3 = 7;
int IN4 = 6;
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(9600);
Serial.println("Enter number for control option:");
Serial.println("1. FORWARD");
Serial.println("2. REVERSE");
Serial.println("3. STOP");
Serial.println();
}
void loop()
{
char user_input;
while(Serial.available())
{
user_input = Serial.read();
digitalWrite(IN1, LOW); //OFF
digitalWrite(IN2, LOW);
if (user_input =='1')
{
Forward();
}
else if(user_input =='2')
{
Reverse();
}
else if(user_input =='3')
{
Stop();
}
else
{
Serial.println("Invalid option entered.");
}
}
}

void Forward()
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
Serial.print("Motor 1 Forward");
Serial.println();
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
Serial.println("Motor 2 Forward");
Serial.println();
}
void Reverse()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
Serial.print("Motor 2 Reverse");
Serial.println();
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
Serial.println("Motor 2 Reverse");
Serial.println();
}
void Stop()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
Serial.print("Motor 1 Stop");
Serial.println();
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
Serial.println("Motor 2 Stop");
Serial.println();
}

También podría gustarte