Regolazione motori

Salve ragazzi è parecchio che non scrivo sul forum, sono stato malato (febbre ç_ç).
Durante questo periodo ho ordinato da futurashop il telaio della serie 7300 (Chassis, Ruote e motoriduttore).
Montato tutto correttamente e con il motoriduttore con rapporto 38.2:1, ho quindi realizzato un piccolo robottino: Xfox's Robot - Anteprima - YouTube
L'arduino viene alimentato con una batteria da 9V mentre i motori vengono alimentati da 4 pile ricaricabili da 1.2V ciascuna (uso un ponte H per controllare i motori, precisamente l'L293D).

Il problema è il seguente:
Il robot viene controllato via wifi con il modulo xBee dal pc su cui gira processing, con due slider controllo il valore PWM (0-255) delle due uscite (collegate all'L293D per regolare la velocità), ma di questo poco importa, quando mantengo stabile un valore qualsiasi, il robottino non va dritto ma tende a girare a sinistra (quindi il motore di destra gira più velocemente) a cosa è dovuto questo? E come risolvere il problema?

Prova a postare il codice, secondo me basta calare un pochino il PWM di quel motore.

ottimo robot...leggo che usi L293D...scusa quanto assorbe ciascun motore

Xfox:
Il problema è il seguente:
Il robot viene controllato via wifi con il modulo xBee dal pc su cui gira processing, con due slider controllo il valore PWM (0-255) delle due uscite (collegate all'L293D per regolare la velocità), ma di questo poco importa, quando mantengo stabile un valore qualsiasi, il robottino non va dritto ma tende a girare a sinistra (quindi il motore di destra gira più velocemente) a cosa è dovuto questo? E come risolvere il problema?

È fisiologico. Alcune piccole tolleranze sul motore e sul elettronica.
Ciao Uwe

Ricordo che, quando usavo la orbai obsoleta BasicStamp 2, mi toccava calibrare i servi per tentativi, proprio per questo motivo. Devi farlo e basta; come ha detto uwe, e' fisiologico :slight_smile:

Guglio:
Prova a postare il codice, secondo me basta calare un pochino il PWM di quel motore.

Ecco il codice, è solo la parte Arduino (non credo serva la parte processing):

/* Macchinina by Xfox */

//Pin uscita PWM
const int motore_dx = 3;
const int motore_sx = 5;

//Pin di controllo senso di rotazione
const int pin_dx = 6;
const int pin_sx = 7;

//Pin uscita per il clacson
const int beep = 4;

int on_off = 0;
//Velocità motori
int valore_dx = 0;
int valore_sx = 0;

//Senso di rotazione
int dir_dx = 0; //0 Avanti, 1 Indietro
int dir_sx = 0;

int clacson = 0;

void setup(){
  Serial.begin(9600);
  pinMode(motore_dx, OUTPUT);
  pinMode(motore_sx, OUTPUT);
  pinMode(pin_dx, OUTPUT);
  pinMode(pin_sx, OUTPUT);
  pinMode(beep, OUTPUT);
  stabiliscicontatto();
  delay(100);
}

void loop(){
  Serial.print('A');
  for (int ok = 0; ok <= 0;){
    if (Serial.available() > 0){
      on_off = Serial.read();
      valore_sx = Serial.read();
      valore_dx = Serial.read();
      
      dir_dx = Serial.read();
      dir_sx = Serial.read();
      
      
      clacson = Serial.read();
      ok = 1;
    }
  }
  if (on_off == 1){
    motori();
  }

  else if (on_off == 0){
    analogWrite(motore_sx, 0);
    analogWrite(motore_dx, 0);
  }

  if(clacson == 1){
    digitalWrite(beep, HIGH);
  }
  else {
    digitalWrite(beep, LOW);
  }
  delay(150);

}

//Decodifica e scrivi valore sui motori
void motori(){
  //"Scrivo" i dati
  digitalWrite(pin_sx, dir_sx);
  digitalWrite(pin_dx, dir_dx);
  analogWrite(motore_sx, valore_sx);
  analogWrite(motore_dx, valore_dx);
}

//Funzione di inizializzazione comunicazione
void stabiliscicontatto(){
  while (Serial.available() <= 0) {
    Serial.print('A', BYTE);   // send a capital A
    delay(300);
  }
}

Quindi dite che basta che sistemo a mano i valori di pwm per far si che il robottino vada dritto?

nikel:
ottimo robot...leggo che usi L293D...scusa quanto assorbe ciascun motore

Non ho misurato ma comunque l'L293D può erogare fino ad 1A per canale.

Xfox:
...
Non ho misurato ma comunque l'L293D può erogare fino ad 1A per canale.

No, supporta fino a 0,6A continui e 1,2 di picco per 100 ms non ripetitivi.
http://www.st.com/stonline/books/pdf/docs/1330.pdf
Ciao Uwe

Quindi dite che basta che sistemo a mano i valori di pwm per far si che il robottino vada dritto?

Si'. Riguarda comunque la meccanica, magari c'e' un qualche attrito di cui non ti sei accorto, ma immagino tu abbia gia' controllato a fondo :wink:

superkulak:

Quindi dite che basta che sistemo a mano i valori di pwm per far si che il robottino vada dritto?

Si'. Riguarda comunque la meccanica, magari c'e' un qualche attrito di cui non ti sei accorto, ma immagino tu abbia gia' controllato a fondo :wink:

D'accordo :slight_smile: Allora farò in modo di risolvere questi problemi!
Grazie per le risposte!
A progetto finito posterò il link al mio blog con il video e il codice :slight_smile:

uwefed:

Xfox:
...
Non ho misurato ma comunque l'L293D può erogare fino ad 1A per canale.

No, supporta fino a 0,6A continui e 1,2 di picco per 100 ms non ripetitivi.
http://www.st.com/stonline/books/pdf/docs/1330.pdf
Ciao Uwe

si appunto 600mA chiedevo quanto assorbono i motori perchè volevo sapere se a te scalda L293D
io lo uso con uno steppere 12 V 430mA e L293D si scalda abbastanza ora gli ho attaccato un dissipatore
e va meglio...nel video ho visto che non usi dissipatori sul L293D
ciao

Prendono circa 250 mA ciascuno, comunque non si riscalda.
Il mio professore di TDP (tecnologia disegno e progettazione) mi aveva posto la stessa domanda, dicendomi che ad alcuni alunni suoi il componente scaldava talmente tanto da danneggiarsi.

uhh non mi ero mai reso conto di quanto fossero piccoli gli xbee :smiley:
e c'è anche il clacson, bello, bello, mi piace :slight_smile:

nikel:
io lo uso con uno steppere 12 V 430mA e L293D si scalda abbastanza ora gli ho attaccato un dissipatore
e va meglio...nel video ho visto che non usi dissipatori sul L293D
ciao

Riscaldare é relativo visto che gli integrati sopportano temperature per le quali un dito umano cambia giá colore in direzione rosso e segnala al cervello che si sta bruciando.
Il chip di silicio interno puó raggiungere 150 gradi centigradi. La superfice sará piú fredda ma comunque puó essere abbastanza calda per scottarsi.
Ciao Uwe

lesto:
uhh non mi ero mai reso conto di quanto fossero piccoli gli xbee :smiley:
e c'è anche il clacson, bello, bello, mi piace :slight_smile:

Già! Quando sono arrivati sono rimasto pure io stupefatto di quanto sono piccoli!

Comunque il clacson inizialmente doveva essere un cicalino, successivamente ho commutato in un semplice speaker sotto un comando tone().

:slight_smile: