Pages: [1]   Go Down
Author Topic: Regolare la Velocità Doppio Motore con Doppio Ponte H  (Read 309 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
//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);
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20193
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: September 14, 2013, 04:00:30 pm by uwefed » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Grazie.
Logged

Pages: [1]   Go Up
Jump to: