Pages: [1] 2   Go Down
Author Topic: Algoritmo controllo motori  (Read 1709 times)
0 Members and 1 Guest are viewing this topic.
Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2388
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley

ecco, se qualcuno mi spiega come si potrebbe usare un PID ne sarei grato smiley-wink
Logged

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

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2388
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao, i motori sono da 3V brushed, ho già realizzato un driver con L298 http://www.electroit.tk/index.php/topic,201.0.html  smiley-grin
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
Logged

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ecco allora sei a posto smiley-wink

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
Logged

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

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2388
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: August 02, 2012, 06:23:04 pm by flz47655 » Logged

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ahn ok tu lo fai via software, più o meno quello ho capito come usarlo smiley-wink è quello analogico con i 3 operazionali che ho dei problemi a immaginarmelo in funzione  smiley-sweat
Logged

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

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2388
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

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

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2388
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink ma non ho capito cosa fa dopo che a rillevato l'errore, devo comunque elaborare il dato con un micro, no? smiley-confuse
Logged

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

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2388
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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 smiley

Ciao
Logged

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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 smiley

Ciao
concordo smiley
Logged

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

rome
Offline Offline
Sr. Member
****
Karma: 17
Posts: 483
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

rome
Offline Offline
Sr. Member
****
Karma: 17
Posts: 483
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

interessante, quando avrò tempo la proverò smiley-wink
Logged

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

Pages: [1] 2   Go Up
Jump to: