|
Il pid non è niente di trascendentale, una volta capito il sistema non è poi così difficile tararlo.
Ci sono dei metodi matematici che sfruttano dei modelli e si basano su rilevamento di dati e calcoli, ma io non li conosco e poi a me piaciono le cose pratiche, quindi utilizzo il metodo "sperimetale"!
Provo a descriverlo , in maniera semplice, basandomi su informazioni raccolte durante lo sviluppo del drive e integrate con quelle derivate mie esperienze.
Cerco di non riempire il post di formule anche perchè non lo saprei fare !!!
Le formule che descrivo sono semplificate ma utili a capire il procedimento.
Magari leggendo questo post non avrete le idee chiare, ma passando qualche ora a fare prove pratiche la cosa diventa abbastanza intuitiva.
Il pid lavora eseguendo campionamenti e correzioni ogni tot tempo, che nel mio drive è di 300nS.
Quindi ogni 300nS analizza la situazione corrente e calcola la correzione da apportare.
Le variabili utilizzate sono:
PosizioneComandata = posizione che viene comandata all'azionamento
Posizione = posizione reale del motore
Errore= Errore instantaneo
dt = tempo di campionamento
Kp = Guadagno proporzionale
Ki = Guadagno Integrale
Kd = Guadagno Derivata
Per prima cosa viene calcolato l'errore instantaneo
Errore= PosizioneComandata - Posizione
Una volta calcolato l'errore procede a calcolare le 3 azioni di correzione:
Proporzionale:
P= Errore x Kp
E' la componente che corregge maggiormente l'errore, l'azione è instantanea, possiamo dire che è la prima operazione di "sgrossatura".
Un Kp basso porta una risposta inadeguata, se troppo alto porta il sistema in pendolazione.
Integrale:
I= I + Errore x dt
Lo dice la parola, lavora per integrazione, infatti è una correzione che tiene conto degli errori precedenti.
L'integrale è utile a correggere l'errore a regime, è poco influente su cambiamenti repentini e tende a rendere più "morbido" e "pastoso" il sistema, rallentadolo un pò.
Un valore basso non permette mai di portarsi a errore prossimo allo 0 durante il funzionamento a regime, ad esempio durante uno spostamento a velocità costante.
Un valore troppo alto produce una elongazione del comando, che all'atto pratico è ben visibile se durante la rotazione a velocità costante andiamo a fermare il motore, noteremo che avrà tendenza a oltrepassare la quota desiderata per poi tornare lentamente indietro, questo perchè l'integrale rimane "carico", facendo un confronto poco adatto, si comporta in maniera simile ad un condensatore.
Derivata:
D=Errore - Errore (CampionamentoPrecedente) x dt
La derivata lavora sulle differenze di errore, quindi si fa sentire quando ci sono grosse variazione.
Un valore basso non porta controindicazioni ma tende a rendere il sistema meno pronto, specialmente in presenza di un forte fattore integrale.
Un valore troppo alto può rendere instabile il sistema durante il funzionamento a regime.
In molti sistemi la derivata non viene utilizzata, a mio parere non gusta.
Al termine le correzioni vengono sommate per determinare l'uscita:
Out= P + I + D
Questo è il pid nudo e crudo poi ci possono essere altre funzioni aggiuntive tipo il bias, il feedforward di primo e secondo ordine, la banda morta, le limitazioni per l'anti windup, etc... ma questi sono parametri spesso non settabili dall'utent.e
La taratura del pid si esegue in linea di massima in questo modo, o per lo meno è quello che faccio io:
-Si porta Ki e Kd a 0
-Facendo prove di movimento si alza Kp fino a portare il sistema in pendolazione
-Un volta "pendolante" si abbassa Kp del 20-30%
-Si inizia ad alzare il Ki fino a che non si notano le elongazioni dopo lo stop della rotazione
-Si ritocca un pò Kp rialzandolo ed eventualmente si riabbassa leggermente Ki per eliminare le elongazioni
-Si alza Kd fino a quando il motore girando a regime non tente a "impuntare"
-Si riabbassa Kd di un 30%
Una volta fatto questo primo setting poi si inizia a fare delle prove con movimenti più o meno veloci e impostando rampe più o meno ripide, osservando il comportamento e apportando correzioni ai guadagni tenendo conto di come ogni fattore va ad influire.
Durante questo processo è importante, secondo me, avere uno strumento che visualizza le curve con le azioni e l'errore in modo da capire come la modifica di un valore va ad influire il comportamento del motore.
Ecco perchè ho voluto curare abbastanza anche questa parte di software.
Una volta presa un pò di pratica, se il carico applicato è abbastanza stabile, si riesce a tarare il pid in 10 minuti.
Spero di non aver annoiato nessuno e di non aver confuso le idee ancora di più...
Ultima modifica di marcosinatti : 18 agosto 10 alle ore 22:42 |