Discussione:Controllo PID: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Ensahequ (discussione | contributi)
 
(19 versioni intermedie di 4 utenti non mostrate)
Riga 62:
Saluti.—[[:en:User:InternetArchiveBot|'''<span style="color:darkgrey;font-family:monospace">InternetArchiveBot</span>''']] <span style="color:green;font-family:Rockwell">([[:en:User talk:InternetArchiveBot|Segnala un errore]])</span> 03:57, 14 mar 2019 (CET)
 
== Codice ==
-----------------------------
 
-----------------------------
 
Mi scuso se ho sbagliato il punto di intervento, non sono un esperto di questa enciclopedia. Eventualmente correggete il mio messaggio...
 
La prima parte in pseudo-codice è chiarissima, concisa e esente da errori.
 
Invece il codice presentato come esempio fa solo confusione. Questo codice si riferisce a una implementazione particolare, che risente pesantemente del contesto per cui è stata scritta. La misura della derivata viene fatta tra il campione attuale e tre campioni indietro nel tempo e questo è un trucco per diminuire il rumore di quantizzazione. Un trucco valido solo nel contesto del processore per cui è stato scritto il firmware e legato alla tempistica della particolare implementazione per cui è stato pensato.
 
Per me il codice presentato come esempio sarebbe da eliminare. Bisognerebbe piuttosto aggiungereampliare qualchela accennosezione aisui metodi di calcolo per i coefficienti Kp, Ki e Kd, che è il vero punto critico di questi algoritmi.
 
Se volete controllare le mie conoscenze, sono Livio, il creatore del Theremino System.
Riga 78 ⟶ 73:
Saluti a tutti.
Livio
 
Mi scuso se ho sbagliato il punto di intervento, non sono un esperto di questa enciclopedia. Eventualmente correggete il mio messaggio...{{unsigned|‎87.8.213.160}}
:Per quanto riguarda lo pseudocodice, a tempo discreto quale è e deve essere, dt non dovrebbe essere usato nelle operazioni di calcolo.
:Circa l'implementazione per quel PIC un'implementazione reale non mi dispiace, però dovrebbero essere esplicitati i trucchetti, altrimenti passa l'idea che siano operazioni generiche. Se non ricordo male la velocità dell'ADC della 16F penso che il ritardo per approssimare la derivata sia pure troppo. --[[Utente:Vituzzu|Vito]] ([[Discussioni utente:Vituzzu|msg]]) 12:04, 2 giu 2019 (CEST)
 
Concordo appieno con Vituzzu e anche secondo me il ritardo per approssimare la derivata è troppo.
 
Inoltre c'è un grosso errore nei coefficienti del Metodo Ziegler–Nichols.
 
- Nella colonna Ki il valore della seconda riga "1,2 * Kp / Pu" dovrebbe invece essere "Kp * Pu / 1.2"
 
- E il valore della terza riga "2 * Kp / Pu" dovrebbe invece essere "Kp * Pu / 2"
 
Controllare in questa pagina : https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
 
Se non si fanno queste correzioni si calcola un valore di Ki notevolmente maggiore, che porta sicuramente il sistema in oscillazione.
 
Saluti
Livio{{unsigned|87.8.213.160}}
:Non sono nemmeno entusiasta sul fatto che molte operazioni si potrebbero semplificare, vabbè che a 200hz ci stiamo larghi, però un esempio didattico dovrebbe puntare a diffondere buone pratiche utili per ottenere bande passanti maggiori. Per i coefficienti il primo libro che ho sottomano è il Basso, Chisci, Falugi prendo i valori da lì usando la notazione tradizionale in termini di Ti e Tc, penso che gli errori nascano proprio dal tentativo di abbandonarla. --[[Utente:Vituzzu|Vito]] ([[Discussioni utente:Vituzzu|msg]]) 12:54, 2 giu 2019 (CEST)
 
-----------
 
Forse anche la mia correzione è sbagliata. In effetti semplificare la notazione Ti e Tc non è facile e per arrivare a formule certe mi ci vorrà del tempo. Però sono sicuro che le due formule scritte in questa pagina per Ki sono sbagliate. Facciamo un caso pratico (che è abbastanza significativo e che conosco bene perché ci lavoro da mesi):
 
- Oscillation frequency = 4.7 Hz
 
- Period = 0.213 sec
 
- Ki (secondo la formula di questa pagina 2 * Kp / Tu) = 2 * 0.6 = 5.6
 
E un valore oltre il 5 è assolutamente esagerato, ho anche provato a usarlo ma il tutto auto-oscilla solo a guardarlo. Il valore giusto è intorno a 0.06.
 
Saluti
Livio
 
----------------
 
Ho fatto e rifatto i calcoli e sono certo che le formule di questa pagina sono sbagliate.
 
Nel caso completo del PID e partendo dalle formule della pagina : https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
i coefficienti Ki e Kd (per il guadagno) vengono così:
 
Ti = Tu / 2
 
Ki = Kp / Ti
 
Ki = Kp * 2 / Tu
 
Ki(Gain) = 1 / Ki
 
Quindi Ki(Gain) = 1 / Kp * Tu / 2
 
 
Td = Tu / 8
 
Kd = Kp * Td
 
Kd = Kp * 8 / Tu
 
Kd(Gain) = 1 / Kd
 
Quindi Kd(Gain) = 1 / Kp * Tu / 8
 
Sarebbe quindi bene far controllare i miei ragionamenti da un matematico e poi correggere le formule.
 
Saluti
Livio
 
:A parte le correzioni, che vanno fatte e controllate comunque, secondo me le due sezioni con il codice esempio e lo pseudocodice sono troppo specifiche per questa voce che parla in generale del controllo PID (come è stato fatto notare), per cui andrebbero spostate da un'altra parte (Wikibooks o forse meglio Wikiversità). --[[Utente:Daniele Pugliesi|Daniele Pugliesi]] ([[Discussioni utente:Daniele Pugliesi|msg]]) 18:36, 2 giu 2019 (CEST)
 
-----------------
 
Lascerei lo pseudo-codice, è conciso e ben scritto. In poche righe mostra la semplicità del metodo PID. Senza quel codice si potrebbe pensare al PID come ad un algoritmo complesso. Ma il PID è estremamente semplice sia da capire che da codificare e quel pezzetto di codice lo dimostra più di mille parole.
 
:Ok. Ho tolto dalla voce il codice di esempio. Se qualcuno volesse trasferirlo ad altro progetto (verificando che funzioni ed eventualmente correggendolo), si trova [https://it.wikipedia.org/w/index.php?title=Controllo_PID&oldid=105021700 qui].
:Riguardo allo pseudocodice, si tratta comunque di un testo senza fonti, per cui probabilmente in futuro verrà eliminato anche questo dalla voce. --[[Utente:Daniele Pugliesi|Daniele Pugliesi]] ([[Discussioni utente:Daniele Pugliesi|msg]]) 09:52, 3 giu 2019 (CEST)
 
------
 
Ecco una buona fonte per lo pseudo-codice: http://www.concordia.sk/programming/machine-learning-robotics/193-pid-regulator
Nella pagina del link lo pseudo-codice è indentato meglio che qui.
- E' contornato da buone spiegazioni
- C'è anche una immagine che schematizza il PID meglio di quella attuale.
- Ci sono link a un codice completo e alle simulazioni.
Per piacere aggiungete voi il link, non vorrei fare dei pasticci.
 
Riguardo alle formule sono definitivamente sbagliate, la seconda riga deve essere Ki = Pu / 1.2 e la terza Ki = Pu / 2
potete controllare a pagina 13 di questo PDF http://luigiglielmo.eu/wp-content/uploads/2014/12/PID.pdf
 
Ecco un altro link che conferma che la formula per l'integrale è sbagliata: http://pages.mtu.edu/~tbco/cm416/zn.html
 
Ecco un altro link che conferma che la formula per l'integrale è sbagliata: http://www.cumacini.altervista.org/Sistemi/Ziegler_Nichols.pdf
 
--------------------
 
Visto che nessuno lo faceva ho corretto io la tabella del metodo Ziegler/Nichols.
Se qualcuno ha dei dubbi controlli i link che ho fornito qui sopra.
 
:Grazie. --[[Utente:Daniele Pugliesi|Daniele Pugliesi]] ([[Discussioni utente:Daniele Pugliesi|msg]]) 15:41, 29 giu 2019 (CEST)
Ritorna alla pagina "Controllo PID".