Go Down

Topic: Problema gestione dei motori di un robot (Read 2002 times) previous topic - next topic

sempre93

Jul 10, 2013, 05:46 pm Last Edit: Jul 10, 2013, 11:12 pm by leo72 Reason: 1
Salve  tutti.
Mi scuso in anticipo se ho sbagliato sezione, ma sono nuovo del forum e del mondo arduino.
Scrivo perchè da poco ho iniziato un progetto  che riguarda la modifica di un piccolo ragno giocattolo, il quale utilizza due motorini elettrici, uno per muovere le zampe di destra e uno per quelle di sinistra,ogni motore era alimentato da una pila a 1.5Vla mia idea  era quella di utialzare un sensore  di prossimità per fare cambiare direzione al robot quando incontra un ostacolo tutto controllato con arduino.
Per questo ho utilizzato un sensore Sharp 2D120XF e un L293D per la gestione dei motori.
Il problema è che ora i due motori alimentati attraverso il L293D non riesco più ad avere la forza necessaria per muovere le zampe del robot (cosa a mio avviso strana inquanto prima erano alimentati a 1.5v mentre adesso sono alimentati a 5v) allego le foto del modello del giocattolo e i miei collegamenti per essere più preciso . Mi potreste gentilmente dire dove ho sbagliato ho che allora soluzione potrei adottare grazie in anticipo.

cyberhs

Ad occhio I tuoi motorini assorbono circa 100mA ciascuno ed in fase di spunto almeno due volte tanto.

Ma tutto questo con una tensione di 1.5V: triplicandola hai anche triplicato questo assorbimento.

Arduino può erogare al massimo 500mA @ 5V e 50mA @ 3.3V

Ti conviene usare un regolatore di tensione switching tarato a 1.5V anche per evitare che i motori si brucino.

Ricordati anche di inserire i diodi di protezione!


sciorty

in sostanza devi fornire un'alimentazione esterna ai motori e potresti anche farlo sfruttando in questo modo il pacco di batterie del robot stesso

sempre93

#3
Jul 11, 2013, 03:02 pm Last Edit: Jul 11, 2013, 04:54 pm by sempre93 Reason: 1
grazie per le vostre risposte.
volevo anche chiedere perche se collego i motori direttamnte ai 5V (non utilizzando il L293D ) questi funzionano alla perfezzione ??
sciorty mi potresti disegnare i collegamenti che devo fare per alimentare esternamente tutti e due i motori(con ogni motore alimentato da una singola pila a 1.5V) e quali sono le uscite per il rispettivo controllo di entrambi i motori ?
perché non riesco proprio a capire come funziona la logica del L293D :(


sciorty

L'293D è un doppio ponte h, il che significa che al suo interno dispone di due circuiti che saranno più o meno così. Lo si usa perchè non puoi collegare i motori direttamente ai pin di arduino per varie ragioni (troppo assorbimento, induttanze e robe varie..), quindi c'è la necessità di alimentare i motori da un altra fonte e di usare l'arduino per aprire e chiudere questa fonte e quindi anche direzionare le polarità per i sensi di rotazione. Quello che deve fare l'arduino quindi non è altro che dare un segnale che apra o chiuda i transistor. Se sono tutti accesi o tutti spenti non ci sarà differenza di potenziale ai capi del motore e risulterà quindi spento.

L'integrato si aspetta l'ingresso dell'alimentazione esterna sul piedino 8. Capirai quindi che l'alimentazione che l'integrato in questione fornisce ai due motori è la stessa, considerandoli collegati in parallelo (correggetemi se sbaglio)

cyberhs

Piccola correzione a quanto detto precedentemente.

La differenza sostanziale tra 293 e 293D è che nel secondo sono già presenti i diodi di clamp il che semplifica notevolmente il cablaggio: se stai usando questo ultimo integrato, i diodi che ti ho raccomandato non sono necessari.

La seconda differenza è la piedinatura: nel primo ci sono 4 (2 per parte) piedini di ground, mentre le secondo i pin sono 6 (3 per parte).

Non sono solamente riferimenti elettrici, ma servono anche a dissipare il calore collegati ad una aletta di raffreddamento oppure allo stesso piano di massa del PCB.

sempre93

#6
Jul 11, 2013, 08:55 pm Last Edit: Jul 11, 2013, 09:13 pm by sempre93 Reason: 1
Sto facendo delle prove per cercare di capire megli ma sopratutto per cercare di farlo funzionare,Ho provato a fare i  collegamenti per alimentare i motori esternamente attraverso le due stilo come si vede nello schema di sciorty ma anche in questo modo l'unico motore collegato per la prova non da segno di volersi muovere.
Arrivato a  questo punto mi viene da pensare che forse sbaglio anche il programma. Ho scritto un minuscolo programma giusto per vedere se il motore era in grado di ruotare ma niente potreste gentilmente dare un occhio anche a quello che ho scritto ??
Code: [Select]
int M2o=4;
int M2a=2;
int M=9;

void setup() {
pinMode(M2o,OUTPUT);
pinMode(M2a,OUTPUT);
pinMode(M,OUTPUT);
}

void loop() {
   digitalWrite(M,HIGH);
    digitalWrite(M2a,LOW);
    digitalWrite(M2o,HIGH);
}

tornando ai componenti il motor drive di cui dispongo è questo http://www.robot-italy.net/downloads/ST-L293D.pdf.

sciorty

Se hai fatto come nello schema, a parte 5v e massa assieme nella pista in alto, dovrebbe funzionare.. ammesso che il motore funzioni e che la tensione che gli dai sia sufficiente.
Hai provato giusto per curiosità a collegare motore ed il pacco di batterie che usi per vedere cosa succede?

sempre93

Si,si collegando i motori direttamente al pacco batterie o direttamente ad Arduino funziona perfettamente.
Non so più cosa fare mi esistono magari altre soluzioni per gestire il funzionamento e il senso do rotazione di due motori contemporaneamente???

sciorty

Magari avrai semplicemente bruciato il driver, se ne hai la possibilità provane un altro!

sempre93

Oggi se riesco Ne compro uno nuovo. Cosa non devo assolutamente fare per bruciate un nuovo driver??

sciorty

Sicuramente non collegarci motori che assorbano più della corrente nominale.. poi fare attenzione alle polarità dell'alimentazione!

sempre93

#12
Jul 12, 2013, 04:50 pm Last Edit: Jul 12, 2013, 07:24 pm by sempre93 Reason: 1
Se il motor driver fosse bruciato non andrebbe proprio verro?
Perché  quando faccio i collegamenti come nell'immagine del primo post che ho pubblicato i motori girano ma non hanno la forza di spostare niente.
A parte la poca forza dei motori sto provando a scrivere il programma. Ho un altro dubbio riguardo all’ utilizzo del sensore di prossimità  http://www.sparkfun.com/datasheets/Sensors/Infrared/GP2D120XJ00F_SS.pdf  questo è il programma che sto scrivendo
Code: [Select]
int M1a=11; // motore di sinistra movimento zampe  avanti
int M1i=10; // motore di sinistra movimento zampe indietro
int M2a=5; // motore di sinistra movimento zampe  avanti
int M2i=6; // motore di sinistra movimento zampe indietro
int distanza  =0;

void setup() {
pinMode(M1i,OUTPUT);
pinMode(M1a,OUTPUT);
pinMode(M2i,OUTPUT);
pinMode(M2a,OUTPUT);
}

void loop() {
distanza= analogRead(A0);
digitalWrite(M1i,LOW);
digitalWrite(M2i,LOW);
digitalWrite(M1a,HIGH); // avanzamento del robot
digitalWrite(M2a,HIGH); 
if( distanza  >=900){
digitalWrite(M1i,LOW);
digitalWrite(M2a,LOW);
digitalWrite(M2i,HIGH);
digitalWrite(M1a,HIGH); //rotazione di 90°
delay(2000);
distanza= analogRead(A0); }
}

il mio problema è che il programma entra nel ciclo if quando il sensore arriva a 5cm da un oggetto mentre a me servirebbe che entrasse nel ciclo if quando si trova ad una distanza di 10cm ho provato ha modificare il valore della condizione del if ma l'unica condizione che funzione è 900(già abbastanza strana ) per qualsiasi altro numero che scrivo entra nel ciclo if indipendentemente dalla distanza del sensore dall'oggetto. Cosa sbaglio??


sciorty


Se il motor driver fosse bruciato non andrebbe proprio verro?
Perché  quando faccio i collegamenti come nell'immagine del primo post che ho pubblicato i motori girano ma non hanno la forza di spostare niente.


Questo è strano! Allora il problema sta nella tua alimentazione esterna.. Se hai le specifiche dei motori, almeno Vmax, puoi provare con un'altro pacco di batterie, magari la stessa con cui alimenti arduino.

Comunque per misurare la distanza in cm non basta un semplice analogRead, quindi spiega meglio come proporzioni il dato "crudo" dell'analogRead alla distanza in cm :)

Brunello

come dice sciorty, non basta un semplice analogread.

se guardi il datasheet vedrai che il segnale di uscita non e' lineare
dai un'occhiata a questo link
http://www.gioblu.com/tutorials/sensori/122-il-sensore-sharp-gp2d12-per-la-misura-della-distanza

Go Up