Go Down

Topic: Regolare la Velocità Doppio Motore con Doppio Ponte H (Read 510 times) previous topic - next topic

Ciao a Tutti Ragazzi.
Vediamo se riuscite ad aiutarmi con il mio problema, perchè non so più come fare.

Utilizzo un Motor Driver "MR001-004.1" per pilotare un "TAMIYA 70097" ovvero un doppio motore completo di motoriduttore che condivide lo stesso asse.
Essendo i motori Gemelli, li piloto indipendentemente dai due canali (per massimizzare la corrente per ciascuno) e li piloto con gli stessi valori.

il programma che ho usato è il seguente.

Non capisco però perchè il motore ha un comportamento molto strano: Intorno al 150 (valore Analogico) parte alla stessa velocità di tutti i valori successivi fino a 255, come se fosse un semplice interruttore.

Qualcuno sa dirmi cosa sbaglio, che non fa funzionare un semplice cambio di velocità del motore?

Utilizzo un normale alimentatore DC 6V da 320mA

Grazie.


Code: [Select]

//Includo le librerie per l'utilizzo del DISPLAY
#include "Wire.h"
#include "LiquidCrystal_I2C.h"

//Istanzio l'oggetto DISPLAY che si chiama LCD
LiquidCrystal_I2C lcd(0x27,20,4); 



//Definisco i PIN che guidano il motore
const int EnableM1 = 46;      //Attivazione Motore 1
const int EnableM2 = 48;     //Attivazione Motore 2

const int DirezioneAM1 = 30;  //DirezioneA Motore 1
const int DirezioneBM1 = 32;  //DirezioneB Motore 1

const int DirezioneAM2 = 26;  //DirezioneA Motore 2
const int DirezioneBM2 = 28;  //DirezioneB Motore 2

const int Potenziometro = 0;  //Potenziometro


//VARIABILI
int Velocita = 0;    //Velocita Motore


void setup()
{
  //Settaggio dei PIN di OUT
  pinMode(EnableM1, OUTPUT);
  pinMode(EnableM2, OUTPUT);
  pinMode(DirezioneAM1, OUTPUT);
  pinMode(DirezioneBM1, OUTPUT);
  pinMode(DirezioneAM2, OUTPUT);
  pinMode(DirezioneBM2, OUTPUT); 
 
 
  //Inizializzo il Display 4x40
  lcd.init();         // initialize the lcd
  lcd.backlight();    //Backlight ON if under program control
  lcd.home();
}


void loop()
{
  //Leggo il valore del POTENZIOMETRO
  Velocita = analogRead(Potenziometro);
 
  //Stampo il Valore
  lcd.setCursor(0,0);
  lcd.print(Velocita); 
 
  //Mappatura Valore
  Velocita = map(Velocita, 0, 1023, 0, 255);
 
  lcd.setCursor(0,2);
  lcd.print(Velocita);   


  //ATTIVO ENTRAMBI I MOTORI 
  if (Velocita > 100)
  {
    digitalWrite(EnableM2, HIGH);
    digitalWrite(EnableM1, HIGH);
  }
  else
  {
    digitalWrite(EnableM2, LOW);
    digitalWrite(EnableM1, LOW);   
  }
 
  //VELOCITA NELLA DIREZIONE A
  analogWrite(DirezioneAM1, Velocita);
  analogWrite(DirezioneAM2, Velocita);
 
  //VELOCITA NELLA DIREZIONE B
  analogWrite(DirezioneBM1, 0); 
  analogWrite(DirezioneBM2, 0);
}

ho appena provato a collegare un alimentatore da 12V 600mA, un motore da 12V con motoriduttore, e il comportamento con lo stesso script è assolutamente lo stesso: a PWM 140 parte alla stessa velocità di tutti i valori superiori. Si comporta come se fosse un interruttore.
Non so come risolverlo.

uwefed

#2
Sep 14, 2013, 10:55 pm Last Edit: Sep 14, 2013, 11:00 pm by uwefed Reason: 1
Non Ti funziona perché i pin
DirezioneAM1, DirezioneBM1,
DirezioneAM2, DirezioneBM2
devi metterli H o L a secondo la direzione, freno o in folle che vuoi e EnableM1, EnableM2
con PWM per la velocitá.

La descrizione della schedina definsce la tensione di alimentazione minima a 7V. Non funziona con 6V. Se guardi il datsheet del L298 montato sulla schedina dice la stessa cosa.

Ciao Uwe

Grazie.
non avevo capito allora le indicazioni del datasheet, provo subito a correggere il programma e ritento.

Grazie.

Go Up