Go Down

Topic: Sto maledetto L293D.......... (Read 636 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy