Go Down

Topic: Sto maledetto L293D.......... (Read 614 times) previous topic - next topic

cece99

Tanto per giocare un po' ho comprato una macchinina radiocomandata e ho deciso di metterci il bluetooth e dei sensori ad ultrasuoni.
Per comandare i motori uso un l293d, ma come lo uso sto integrato?
Io nello sketch (perso :() ho fatto una cosa tipo così:
metto ad HIGH il piedino enable1,
metto ad HIGH uno dei due motor A
metto a LOW uno dei due motorA.
Per invertire il senso di rotazione inverto i piedini a HIGH e LOW, ma non funziona nulla.... sto sbagliando qualcosa?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

sciorty

Beh riscrivi il codice che hai perso, per sicurezza controlli se funziona e in caso di esito negativo lo posti qui..
In ogni caso puoi seguire questo tutorial.

Ma ha mai funzionato lo sketch che hai scritto? L'integrato è nuovo? Perchè altrimenti non sarebbero da escludere dei problemi riguardo lo stesso L293D.

cece99


Beh riscrivi il codice che hai perso, per sicurezza controlli se funziona e in caso di esito negativo lo posti qui..
In ogni caso puoi seguire questo tutorial.

Ma ha mai funzionato lo sketch che hai scritto? L'integrato è nuovo? Perchè altrimenti non sarebbero da escludere dei problemi riguardo lo stesso L293D.

L'integrato è appena uscito dal tubo :)
questo è lo sketch birichino: non mi inverte la direzione del motore:
Code: [Select]


int motor1Pin1 = 3;    // pin 2 on L293D
int motor1Pin2 = 2;    // pin 7 on L293D
int enablePin = 11;    // pin 1 on L293D

void setup() {
  // set the switch as an input:


  // set all the other pins you're using as outputs:
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(enablePin, OUTPUT);

  // set enablePin high so that motor can turn on:
  digitalWrite(enablePin, HIGH);
}

void loop() {
    digitalWrite(motor1Pin1, LOW);   // set pin 2 on L293D low
    digitalWrite(motor1Pin2, HIGH);  // set pin 7 on L293D high
     
    delay(10000);
    digitalWrite(motor1Pin1, HIGH);  // set pin 2 on L293D high
    digitalWrite(motor1Pin2, LOW);   // set pin 7 on L293D low
 
}
[code]
[/code]
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

cece99

#3
Dec 06, 2012, 03:27 pm Last Edit: Dec 06, 2012, 03:29 pm by cece99 Reason: 1
Credo di aver trovato il problema...... stay tuned ;)

RISOLTO
Mancava un delay ;)
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

uwefed

#4
Dec 07, 2012, 08:25 pm Last Edit: Dec 07, 2012, 08:31 pm by uwefed Reason: 1

Credo di aver trovato il problema...... stay tuned ;)

RISOLTO
Mancava un delay ;)

Non é facile aiutarTi se Ti autorispondi e autorisolvi i problemi.  ;) ;) ;)

Fai girare il motore per 10 secondi in un verso ma per qualce µsecondo nell altro verso.
dopo
Code: [Select]
delay(10000);
    digitalWrite(motor1Pin1, HIGH);  // set pin 2 on L293D high
    digitalWrite(motor1Pin2, LOW);   // set pin 7 on L293D low

ci va un altro delay();.

Non é una cattiva idea fare una pausa tra il pilotaggio in un senso e il pilotaggio nel altro senso perché cosí la macchinetta frena e hai una corrente di spunto del motore minore. Basta mettere Enable per qualche secondo a LOW poi cambi il pilotaggio dei pin 2 e 3 e metti Enable di nuovo a H.

Se vuoi frenare piú veloce se metti i pin 2 e 3 tutti due a H oppure a L. Cosí cortocircuiti il motore e quello frena velocemente perché usato come generatore messo in corto. Con enable si ferma a causa dell'atrito meccanico.

Ciao Uwe

Go Up