Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
problema con el modulo L298
#1
Hola,
me pasa una cosa muy rara y no se que puede ser.
cargo el sketch a la placa arduino (es para controlar dos motores, utilizo un modulo con un L298).
conecto el monitor serial y me da unos valores correctos, miro la salidas que van conectadas al Enable del modulo L298 y con el osciloscópio y dan un pwm correcto. Miro las salidas que van conectadas a In1, In2, In3, In4, y parece que cambian correctamente para cambiar de sentido de giro.

hasta aquí todo parece correcto, ahora viene lo raro, desconecto el usb y conecto una fuente de alimentación a 9V para alimentar arduino y el modulo L298, se encienden las luces del arduino (on, L y la del driver que controla los motores)y no hace nada, miro con el osciloscopio y no tengo señal de pwm a la salida del arduino ni señal en los pines de dirección.
Alguien sabe que puede estar pasando?
Código:
/* codigo del blog de roboblogs, lectura de la IMU con el filtro complementario
   falta incorporar el control PID i salida de los motores */

#include <Wire.h>

//Direccion I2C de la IMU
#define MPU 0x68

//Ratios de conversion
#define A_R 16384.0
#define G_R 131.0

//Conversion de radianes a grados 180/PI
#define RAD_A_DEG = 57.295779

//MPU-6050 da los valores en enteros de 16 bits
//Valores sin refinar
int16_t AcX, AcY, AcZ, GyX, GyY, GyZ;

//Angulos
float Acc[2];
float Gy[2];
float Angle[2];
int llanta_I= 10;
int llanta_D= 11;


void setup()
// Se inicia la comunicación por I2C con el dispositivo MPU, y se “activa” enviando el comando 0.
// También se inicia el puerto de série para ver los resultados.
{
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(9600);

pinMode (llanta_I, OUTPUT);
pinMode (llanta_D, OUTPUT);
}

void loop()
{
   //Leer los valores del Acelerometro de la IMU
   Wire.beginTransmission(MPU);
   Wire.write(0x3B); //Pedir el registro 0x3B - corresponde al AcX
   Wire.endTransmission(false);
   Wire.requestFrom(MPU,6,true); //A partir del 0x3B, se piden 6 registros
   AcX=Wire.read()<<8|Wire.read(); //Cada valor ocupa 2 registros
   AcY=Wire.read()<<8|Wire.read();
   AcZ=Wire.read()<<8|Wire.read();

    //Se calculan los angulos Y, X respectivamente.
   Acc[1] = atan(-1*(AcX/A_R)/sqrt(pow((AcY/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;
   Acc[0] = atan((AcY/A_R)/sqrt(pow((AcX/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;

   //Leer los valores del Giroscopio
   Wire.beginTransmission(MPU);
   Wire.write(0x43);
   Wire.endTransmission(false);
   Wire.requestFrom(MPU,4,true); //A diferencia del Acelerometro, solo se piden 4 registros
   GyX=Wire.read()<<8|Wire.read();
   GyY=Wire.read()<<8|Wire.read();

   //Calculo del angulo del Giroscopio
   Gy[0] = GyX/G_R;
   Gy[1] = GyY/G_R;

   //Aplicar el Filtro Complementario
   Angle[0] = 0.98 *(Angle[0]+Gy[0]*0.010) + 0.02*Acc[0];  //filtro angulo X
   Angle[1] = 0.98 *(Angle[1]+Gy[1]*0.010) + 0.02*Acc[1];  //filtro angulo Y

   //Mostrar los valores por consola
   //Serial.print("Angle X: "); Serial.print(Angle[0]); Serial.print("\n");
   //Serial.print("Angle Y: "); Serial.print(Angle[1]); Serial.print("\n---------\n");

    delay(10); //Nuestra dt sera, pues, 0.010, que es el intervalo de tiempo en cada medida
  
  
   /* ____________________________
         control de los motores
      ____________________________
    */
    int atras=0;
    int adelante=0;
    
    int ab= floor (3*(float (Angle[1]))); // convierto el angulo Y a un valor que va de 257 a -257 y lo guardo en la variable (ab)
  
    // Serial.print(ab); Serial.print("\n---------\n");
    
   ab= (ab*3);   /* se multipica por 3 para que el valor ab (que es el pwm de los motores) llege a los 255 o -255 más rapidamente,
                 aproximadamente a los 30 grados
                 */  
  
    if (ab < -255)
        {
        ab=-255;
        }
        if (ab > 255)
        {
        ab=255;
        }
        


if (ab>0){
   atras=  ab;       // PWM de los motores atras  (las dos ruedas funcionan al tiempo)
}
if (ab<=0){
   adelante=(-1*ab);      // PWM los motores van hacia adelante
}
    Serial.println(atras);
    Serial.println("\n-------------/n");
    Serial.println(adelante);
    
    // Sentido de giro de los motores
  if (adelante != 0){   // no se permite que se envie el comando hacia adelante y hacia atras al tiempo
     if (atras == 0){  
       analogWrite(llanta_I,adelante);
       digitalWrite(6,LOW);
       digitalWrite(7,HIGH);
    
       analogWrite(llanta_D,adelante);
       digitalWrite(4,LOW);
       digitalWrite(5,HIGH);
     }
  }
  
  
  if (atras != 0){         // no se permite que se envie el comando hacia adelante y hacia atras al tiempo
     if (adelante == 0){
       analogWrite(llanta_I,atras);
       digitalWrite(6,HIGH);
       digitalWrite(7,LOW);
    
       analogWrite(llanta_D,atras);
       digitalWrite(4,HIGH);
       digitalWrite(5,LOW);
    }
  }
        
    
  
     // Serial.print(ab); Serial.print("\n---------\n");
  
}
Citar
#2
solucionado!!

una vez cargado el sketch al arduino, desconecto el usb del arduino y conecto la alimentación y no funciona, le doy al reset del arduino y funciona correctamente.
ahora solo falta pulir el código.
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  CONSULTA ayuda con modulo bluetooth f-6188 kcho26 0 312 25-02-2018, 07:29 PM
Último mensaje: kcho26
  DUDA Duda con conexion modulo de reles polarode 4 988 29-12-2017, 12:37 PM
Último mensaje: Jasobrino
  Nuevo módulo ESP8285, el sustituto del ESP8266 grafisoft 12 4,999 29-01-2017, 08:06 PM
Último mensaje: davidpedr0
  Cómo configurar una placa Freaduino y un módulo HC-05 Bluetooth ernestot87 4 1,159 27-11-2016, 01:39 PM
Último mensaje: Iván
  [TUTORIAL] AppInventor. Android + Módulo Bluetooth + Arduino cna 19 32,643 27-11-2015, 07:15 PM
Último mensaje: vcode