Ragazzi ciao
Qualcuno mi puo' dire per favore se un controllo pid (come quello che sto implementando nel mio selfbalancing robot) restituisce valore 0 quando il robottino e' perfettamente in equilibrio?io penso di si altrimenti i motori si muovono continuamente! Giudto?
Scusate la domanda banale...ma nella mia implementazione purtroppo non capisco il perche' ma quando l'errore calcolato (tra l'angolo attuale e il desiderato) e' zero il controllo pid mi restituisce un valore negativo!!mmh...secondo me e'sbagliato. Vero?
Grazie mille a tutti e ciao,
Lorenzo
io non so aiutarti ma ti suggerisco di postare il codice...
eccolo hai ragione!
LLastangle=Lastangle;
Lastangle=Aangle;
Aangle=ypr[1]*180/M_PI;
// error is the Desired angle - actual angle
error=Dangle-Aangle;
// PID controller at 50 HZ
COcommand=COcommand-Kp*(Aangle-Lastangle)+Ki/50*error-Kd*50*(Aangle-2*Lastangle+LLastangle);
Non conosco i PID, però c'è un bell'articolo che li spiega bene:
http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/
Ottimo grazie mille molto gentile!
ciao,Lorenzo
manda-rino:
Qualcuno mi puo' dire per favore se un controllo pid (come quello che sto implementando nel mio selfbalancing robot) restituisce valore 0 quando il robottino e' perfettamente in equilibrio?
Il pid da valore zero solo se l'errore rimane a zero per un certo tempo, in realtà questo è impossibile perché l'errore tende sempre ad oscillare leggermente e di conseguenza anche il pid continua ad oscillare attorno allo zero, l'importante è che l'oscillazione sia una smorzata sia in ampiezza che in frequenza, questo dipende molto dai parametri K, altrimenti si rischia di entrare in condizione di instabilità e/o risonanza.
Tieni presente che se l'implementazione PID è completa, puoi anche avere PID solo PD, la parte integrale ci mette del tempo prima di arrivare a zero, tanto più grande è il valore dell'integrale e tanto più tempo serve per scaricarlo.
Ti rammento che è di vitale importanza eseguire il PID ad intervalli regolari molto precisi con il jitter minore possibile e che il periodo del pid deve essere almeno 10 volte minore della costante di tempo del sistema che devi controllare, p..e se il sistema ha una costante di tempo di 0.01 secondi il pid deve essere come minimo a 0.001 secondi, ovvero deve girare a 1 kHz.
Spero che ti sia chiaro che il PID non fornisce il valore del controllo, fornisce il valore da sommare algebricamente al controllo.
Ti consiglio di leggere il manuale sul PID di Livio Orsini, è quanto di più semplice puoi trovare sull'argomento ed è uno dei migliori in assoluto.
Bellissimo testo!
Applicazione "pratica" (e pure divertente) del sistema PD (senza la I) che ho trovato cercando informazioni sull'algoritmo ... OT, ma simpatico, il "minicoso elettronico" ![]()
Carino ![]()