Go Down

Topic: Algoritmo controllo motori (Read 1 time) previous topic - next topic

flz47655

Ciao a tutti
Ho realizzato con successo un paio di encoder con infrarossi per due motori che mi danno una risoluzione di 1/8 di giro (la ruota è divisa in 8 e tramite gli infrarossi leggo in quale area mi trovo).
Adesso devo passare all'algoritmo che mi permette di mantenere la stessa velocità su entrambi i motori che per forza di cosa, seppur identici, non hanno identicamente le stesse prestazioni.
Pensavo ad un PID (che non ho mai implementato realmente) ma forse è possibile ottenere buoni risultati con qualcosa di più semplice del tipo:
Controllo le velocità -> Se sono uguali non faccio nulla
                           -> Se un motore è più veloce dell'altro
                                  ->Se l'altro è al massimo, abbasso la velocità del troppo veloce
                                  ->Se l'altro non è al massimo aumento la sua velocità

Che sarebbe più semplice da implementare anche se per l'inerzia dei motori probabilmente il controllo non deve avvenire troppo spesso per evitare oscillazioni
Cosa ne pensate? E' forse meglio un PID?

Ciao a tutti

?R

a scuola avevo un prof del ***** e il controllo PID non l'ho mai imparato bene come usarle praticamente :smiley-yell:
comunque io sceglierei la seconda opzione che mi sembra quella attuabile più facilmente...
i motori che stai usando sono dei motori DC brusched, no? ti servono bidirezionali? se si, ti basta usare 2 ponti ad h con L298 (o L6205 se hai bisogno di più di qualche amperè) e poi controlli la velocità di rotazione tramite 2 segnali pwm e la verso di rotazione tramite un pin digitale ciascuno, se no, ti basta controllarli con un transistor e un segnale pwm per ciascuno dei due :)

ecco, se qualcuno mi spiega come si potrebbe usare un PID ne sarei grato ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

flz47655

Ciao, i motori sono da 3V brushed, ho già realizzato un driver con L298 http://www.electroit.tk/index.php/topic,201.0.html  :D
Il L6205 purtroppo ha come tensione minima per i motori 8 volt... troppo elevata! Altrimenti sarebbe stato migliore.
Per il PWM con il L298 bisogna usare il PWM LAP per non avere una perdita di rendimento del 30% (percentuale conservativa) e quindi bisogna impostare una frequenza maggiore (es. 20 KHz) per far funzionare bene le cose (l'ho letto su diversi forum).

Per il PID.. prova a cercare online, se c'è qualcosa che non hai capito di specifico chiedi pure. Online trovi anche esempi di implementazione

Ciao

?R

ecco allora sei a posto ;)

del PID a scuola ho fatto male la teoria e niente di pratica (anche se ho fatto un ITIS)... non ho capito come poterlo usare fisicamente, per esempio, come avevi intenzione di fare tu? :smiley-roll-sweat:
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

flz47655

#4
Aug 03, 2012, 01:20 am Last Edit: Aug 03, 2012, 01:23 am by flz47655 Reason: 1
Per capire meglio in teoria: http://www.delucagiovanni.com/public/phpbb3/viewtopic.php?f=3&t=30

Più in pratica, dato che siamo su un microcontrollore digitale, l'algoritmo va discretizzato, l'integrale diventa una somma (o una moltiplicazione per l'intervallo di tempo) mentre la derivata è più critica e diventa una variazione diviso un intervallo di tempo (non nullo).

I parametri del PID vanno regolati un pò a tentativi per ottenere una risposta soddisfacente, se leggi il link spiega ogni parametro a cosa serve, prova a vedere anche http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/ che mostra un esempio concreto di come calcolare il PID

Ciao

?R

ahn ok tu lo fai via software, più o meno quello ho capito come usarlo ;) è quello analogico con i 3 operazionali che ho dei problemi a immaginarmelo in funzione  :smiley-sweat:
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

flz47655

Alla fine gli operazionali si chiamano così perché possono fare con facilità operazioni matematiche, quindi alla fine si riesce ad implementare la formula del PID, se analizzi separatamente i tre stadi vedrai che non sono poi così difficili

Ciao

?R

si ma io non sto dicendo che è difficile, è che non mi è chiaro come inserire in un sistema il controllo PID "analogico"...
va beh dai, spero che adesso che vado all'università mi insegnino qualcosa ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

flz47655

Quote
spero che adesso che vado all'università mi insegnino qualcosa


Qui sbagli in pieno se pensi di imparare il PID in pratica..

Il PID ha in ingresso due dati, il segnale errore (lo scostamento dal set-point) e il set-point ovvero il valore che vuoi raggiungere.
Nel mio caso l'errore sarebbe il dato che ricavo dall'encoder di un motore, il set-point il valore letto dall'altro che deve essere raggiunto.

Ciao

?R


Quote
spero che adesso che vado all'università mi insegnino qualcosa


Qui sbagli in pieno se pensi di imparare il PID in pratica..

la speranza è l'ultima a morire, più che altro spero di imparare qualcosa in modo serio...


Quote

Il PID ha in ingresso due dati, il segnale errore (lo scostamento dal set-point) e il set-point ovvero il valore che vuoi raggiungere.
Nel mio caso l'errore sarebbe il dato che ricavo dall'encoder di un motore, il set-point il valore letto dall'altro che deve essere raggiunto.

si so come funziona ;) ma non ho capito cosa fa dopo che a rillevato l'errore, devo comunque elaborare il dato con un micro, no? :~
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

flz47655

Code: [Select]
si so come funziona  ma non ho capito cosa fa dopo che a rillevato l'errore, devo comunque elaborare il dato con un micro, no?

Beh, dopo che ha calcolato applica il risultato (convertito in una tensione con PWM ad esempio) al motore per regolarne la velocità, si potrebbe fare anche senza micro andando di elettronica analogica ma trovo la soluzione digitale più flessibile :)

Ciao

?R


Code: [Select]
si so come funziona  ma non ho capito cosa fa dopo che a rillevato l'errore, devo comunque elaborare il dato con un micro, no?

Beh, dopo che ha calcolato applica il risultato (convertito in una tensione con PWM ad esempio) al motore per regolarne la velocità, si potrebbe fare anche senza micro andando di elettronica analogica ma trovo la soluzione digitale più flessibile :)

Ciao

concordo :)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

brunialti

Ammetto di non averla mai usata, ma qulache tempo fa mi sono documentato e ho trovato una libreria pid per arduino.

http://arduino.cc/playground/Code/PIDLibrary

Sembra molto semplice da usare. Bisogna fare un po di pratica...

brunialti

Se ti serve invece una libreria che (tenta) di fare anche l'autotuning guarda

http://arduino.cc/playground/Code/PIDAutotuneLibrary

Deriva da una libreria abbastanza conosciuta (nata non in ambiente Arduino) fatta da Spinelli.
Ovviamente l'autotuning è comodo ma meno preciso di un tuning fatto da un umano ben competente.
Ma se manca almeno inizialmente la competenza... si può usare.

?R

interessante, quando avrò tempo la proverò ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Go Up