Вы находитесь на странице: 1из 10

.

Control de dos motores de continua


con cambio de velocidad.
Control izquierda-derecha de dos motores de contínua, con cambio de
velocidad.

Vamos a controlar dos motores de contínua, cada uno podrá girar a la


izquierda o a la derecha.

Además mediante PWM vamos a controlar sus velocidades de giro.

- Conexiones.
- Conectamos un motor a las salidas OUT1 y OUT2. Conectamos el otro
motor a las salidas OUT3 y OUT4.

- Es posible que las entradas ENA y ENB traigan un puente de fábrica...


quitamos los puentes de las entradas ENA y ENB

- Realizamos las siguientes conexiones...

Módulo ENA In1 In2 In3 In4 ENB

Arduino 10 9 8 7 6 5

Mediante un portapilas y 6 pilas de 1,5 V, alimentamos con 9 V al


módulo, conectándolo a Vcc y Gnd.
(También se podría alimentar con 4 pilas, es decir con 6 V)

- Conectamos la salida de 5 V y el Gnd del módulo a los 5 V y Gnd del


Arduino, como vemos en la imagen. Es muy importante no olvidar
conectar el cable del Gnd al Arduino.

Al conectarlo de esta manera, la salida de 5 V del módulo alimentará


al Arduino, y no necesitaremos alimentar al Arduino con ninguna
otra alimentación. Es decir, el módulo alimenta al Arduino.
- Comentario de las conexiones.
INA, In1, In2: controlan al motor A (OUT1 y OUT2)

INB, In3, In4: controlan al motor B (OUT3 y OUT4)

------------------------------------

A las entradas INA y INB se les puede suministrar un pulso PWM para
modificar la velocidad del motor.

Cuanto mayor sea la anchura de pulso, mayor será la velocidad del


motor.
A la anchura de pulso le podemos suministrar un valor comprendido
entre 0 y 255, con esto conseguimos un Duty Cycle entre 0 y 100%.

Si ponemos:

analogWrite(enA, 200);
Estamos estableciendo un PWM de 200, esto sería como el 78,4 de
ancho de pulso (Duty Cycle). El motor girará a cierta velocidad.

Si ponemos:

analogWrite(enA, 100);

Estamos estableciendo un PWM de 100, esto sería como el 39,2 de


ancho de pulso (Duty Cycle). El motor girará a mitad de velocidad que
antes.

----------------------

Mediante In1 y In2 controlamos el sentido de giro del motor.

Según pongamos estan estradas en HIGH y LOW o al contrario LOW y


HIGH, el motor girará en un sentido o en el otro.

Si ponemos:

digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);

El motor girará en sentido horario.

-------------------

Si ponemos:

digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);

El motor girará en sentido anti horario.

------------------

Si ponemos:

digitalWrite(in1, LOW);
digitalWrite(in2, LOW);

El motor se parará.
------------------

____________________________
- Código.
Mediente este código de prueba observaremos que los motores girarán
automáticamente en un sentido, en el otro, se pararán, acelerarán y
desacelerarán, todo se hará automáticamente, de esta manera podemos
observar cómo trabaja el módulo del controlador.

Programa para el Arduino.

// Conexiones del Motor A

int enA = 10;


int in1 = 9;
int in2 = 8;

// Conexiones del Motor B


int enB = 5;
int in3 = 7;
int in4 = 6;

void setup()
{
// Terminales de salida en el Arduino
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}

void cambiodegiro()
{

// Motor A gira a izquierda


digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);

// Velocidad del Motor A (puede cambiar de 0 a 255)


analogWrite(enA, 200);

// Motor B gira a izquierda


digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);

// Velocidad del Motor B (puede cambiar de 0 a 255)


analogWrite(enB, 200);
delay(2000);

// Los dos Motores cambian su dirección

digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);

// Parada de los dos Motores.


digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}

void acelera_desacelera()
{
// Giro a derecha de los dos motores

digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);

// Aceleracion

// Cambio de velocidad de 0 a 255, acelerando


for (int i = 0; i < 256; i++)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}

// Desaceleracion
// Cambio de velocidad de 255 a 0, Desacelerando

for (int i = 255; i >= 0; --i)


{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}

// Parada de los dos Motores.


digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}

void loop()
{
cambiodegiro();
delay(1000);
acelera_desacelera();
delay(1000);
}

Características:
L298N
Alta potencia de trabajo 46 v, corriente puede llegar a 3A Max y continuar actual
es 2a, poder de 25 w.
Puede conducir un motor paso a paso 2-fase, un fases del motor de pasos o dos
motores de corriente continua.
78M05 incorporado, obtener energía de la unidad, sin embargo, cuando over12V
alimentación de la unidad, por favor, utilice la energía externa 5 V como fuente
de alimentación.
Gran capacidad de filtro de capacitancia, diodo de protección flujo posterior, más
estable y fiable.

Especificación:
Accionamiento doble puente H
Chip: L298N (st new)
Lógica voltaje: 5 V
Tensión drive: 5 V-35 V
Lógico actual: 0mA-36mA
Corriente de impulsión: 2A (puente Max individual)
Potencia máxima: 25 W
Tamaño: 43x43x26mm
Peso neto: 25g

Nota:
Este módulo tiene incorporado a 5 V fuente de alimentación, cuando el voltaje de
activación es 7 V-35 v, este suministro es adecuado para la fuente de
alimentación
No Voltaje de entrada a + 5 V alimentación interfaz, sin embargo ledding cabo 5
V para uso externo está disponible.
Cuando ENA habilitar control IN1 IN2 OUT2 OUT1
Cuando ENB habilitar el control IN4 IN3 OUT4 OUT3
movil_a_arduin
o.ino

// Juan Antonio
Villalpando
//
juana1991@yahoo.com
// kio4.com

char val;
int ledPin12 = 12;
int ledPin13 = 13;

void setup() {
Serial.begin(9600);
// Aqui establecemos
la velocidad
pinMode(ledPin12,
OUTPUT);
pinMode(ledPin13,
OUTPUT);
}

void loop() {
if(
Serial.available() )
val = Serial.read();

if( val == '0' )


{
digitalWrite(ledPin12
, LOW);
}

if( val == '1' ) - Tarjeta: establece Arduino UNO


{ - Puerto Serial: marca el que corresponda al
digitalWrite(ledPin12 USB de tu Arduino.
, HIGH);
}
if( val == '2' )
{
digitalWrite(ledPin13
, LOW);
}

if( val == '3' )


{
digitalWrite(ledPin13
, HIGH);
}
}

Вам также может понравиться