Buenas noches.
Mi segundo post en el foro, espero hacerlo bien (el primero no fue así).
Tengo una placa Arduino uno R3, y estoy intentando realizar un control de un motor DC con un puente L293D con un velocidad variable girando a derechas y a izquierdas, mediante el uso de un potenciómetro variable de 10k: (Extremo izquierdo = giro a izquierdas, centro = banda neutra, Extremo derecho = giro a derechas). Ploteando los valores de la resistencia variable observo que su funcionamiento, entre 0 y 1023, es correcto, por tanto y salvo que me digáis lo contrario descarto que sea esta parte del hardware y del software.
El problema lo tengo en que solo gira en un sentido (en el que marca MC1), el sentido que debería. proporcionar MC2 es nulo.
He realizado la prueba de conectar el MC1 donde esta el MC2 y el motor gira correctamente en sentido inverso.
Podéis echarme una mano.
Muchas gracias.
//CONTROL DE VELOCIDAD PARA MOTOR DE CC CON INTEGRADO L293DNE "PUENTE EN H"
const int EN = 9; //Enable medium bridge (1 - right of 2 - left)
const int MC1 = 2; //Motor control Nº1
const int MC2 = 3; //Motor control Nº2
const int POT = 0; //Reading variable resistor at ANALOG PIN A0
//<----------- 462--512--562---------->
//+ to - REAR |....STOP....| AHEAD - to +
int val = 0; // Storage value of variable resistor
int VELOCIDAD = 0; //Storage velocity (from 0 to 255)
void setup()
{
Serial.begin(9600);
pinMode (EN,OUTPUT);
pinMode (MC1,OUTPUT);
pinMode (MC2,OUTPUT);
brake (); //Reset devide with stopped engine
}
void loop()
{
val = analogRead (POT);
Serial.println(val);
delay (100);
//Working AHEAD
if(val > 562)
{
VELOCIDAD = map(val, 563, 1023, 0, 255);
G_right(VELOCIDAD);
}
//Working REAR
if(val < 462)
{
VELOCIDAD = map(val, 461, 0 , 0, 255);
G_left(VELOCIDAD);
}
//BRAKE
else
{
brake();
}
}
// Function AHEAD: Engine goes forward with a variable speed from 0 to 255
void G_right (int rate)
{
digitalWrite (EN, LOW);
digitalWrite (MC1, HIGH);
digitalWrite (MC2, LOW);
analogWrite (EN, rate);
}
// Funtion REAR: Engine goes reverse with a variable speed from 0 to 255
void G_left (int rate)
{
digitalWrite (EN, LOW);
digitalWrite (MC1, LOW);
digitalWrite (MC2, HIGH);
analogWrite (EN, rate);
}
// Function STOP: Engine break
void brake()
{
digitalWrite (EN, LOW);
digitalWrite (MC1, LOW);
digitalWrite (MC2, LOW);
analogWrite (EN, HIGH);
}