.
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
[Link]
// Juan Antonio
Villalpando
//
juana1991@[Link]
// [Link]
char val;
int ledPin12 = 12;
int ledPin13 = 13;
void setup() {
[Link](9600);
// Aqui establecemos
la velocidad
pinMode(ledPin12,
OUTPUT);
pinMode(ledPin13,
OUTPUT);
}
void loop() {
if(
[Link]() )
val = [Link]();
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);
}
}