Parma
Online
Edison Member
Karma: 10
Posts: 2104
|
 |
« on: August 01, 2012, 03:45:10 am » |
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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #1 on: August 02, 2012, 05:17:17 pm » |
a scuola avevo un prof del ***** e il controllo PID non l'ho mai imparato bene come usarle praticamente 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 
|
|
|
|
|
Logged
|
|
|
|
|
Parma
Online
Edison Member
Karma: 10
Posts: 2104
|
 |
« Reply #2 on: August 02, 2012, 05:23:43 pm » |
Ciao, i motori sono da 3V brushed, ho già realizzato un driver con L298 http://www.electroit.tk/index.php/topic,201.0.html  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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #3 on: August 02, 2012, 05:34:47 pm » |
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? 
|
|
|
|
|
Logged
|
|
|
|
|
Parma
Online
Edison Member
Karma: 10
Posts: 2104
|
 |
« Reply #4 on: August 02, 2012, 06:20:56 pm » |
Per capire meglio in teoria: http://www.delucagiovanni.com/public/phpbb3/viewtopic.php?f=3&t=30Più 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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #5 on: August 02, 2012, 06:30:20 pm » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Parma
Online
Edison Member
Karma: 10
Posts: 2104
|
 |
« Reply #6 on: August 02, 2012, 06:38:39 pm » |
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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #7 on: August 02, 2012, 07:08:20 pm » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Parma
Online
Edison Member
Karma: 10
Posts: 2104
|
 |
« Reply #8 on: August 03, 2012, 01:57:17 am » |
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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #9 on: August 03, 2012, 04:24:30 am » |
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... 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? 
|
|
|
|
|
Logged
|
|
|
|
|
Parma
Online
Edison Member
Karma: 10
Posts: 2104
|
 |
« Reply #10 on: August 03, 2012, 05:09:43 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #11 on: August 03, 2012, 05:30:29 am » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
rome
Offline
Sr. Member
Karma: 13
Posts: 340
|
 |
« Reply #12 on: August 03, 2012, 10:02:41 am » |
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/PIDLibrarySembra molto semplice da usare. Bisogna fare un po di pratica...
|
|
|
|
|
Logged
|
|
|
|
|
rome
Offline
Sr. Member
Karma: 13
Posts: 340
|
 |
« Reply #13 on: August 03, 2012, 10:14:04 am » |
Se ti serve invece una libreria che (tenta) di fare anche l'autotuning guarda http://arduino.cc/playground/Code/PIDAutotuneLibraryDeriva 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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #14 on: August 03, 2012, 06:15:01 pm » |
interessante, quando avrò tempo la proverò 
|
|
|
|
|
Logged
|
|
|
|
|
|