Vai al contenuto
PLC Forum


Implementazione Pid


Messaggi consigliati

Inserito:

Qualche anno fa ho implementato un PI , proporzionale e integrale , per regolare la temperatura di alcun saldatori su film plastici .

L'algoritmo e' abbastanza robusto , implementa un duty-cycle regolabile e molti altri parametri per ingegnerizzarlo a seconda della piattaforma plc .

Prevede quindi uscita PWM per alimentare un rele' statico e un'uscita analogica , regolabile nella scala , per piltoare una valvola proporzionale o un qualsiasi dispositivo che accetti un riferimento in tensione o corrente .

L'accuratezza del algoritmo e dei parametri , dopo aver studiato le inerzie del sistema e i tempi di risposta , portano a regolazioni abbastnza veloci di temperature con un errore massimo di 0.1 °C .

Ora , in vista dei corsi di teoria dei sistemi e controlli automatici ma anche di alcuni progetti che vorrei realizzare con Arduino , voglio implementare la componente derivativa .

Il PID e' un valore la cui somma vede le tre componenti P + I + D

Il P proporzionale e' l'errore tra un campionamento ed il successivo moltiplicato per un Kp impostabile.

L'integrale I e' la sommatoria I=I + KiErr .

Siccome non si puo' conoscere analiticamente la funzione f(x) che rappresenta l'andamento della temperatura regolata , si cerca di integrare con metodi numerici , in questo caso direi una quadratura semplice .Per quanto rigurda la derivata , non conoscendo analiticamente la forma della funzione , cerco di approssimarla come rapporto incrementale tra due istanti di campionamento e la differenza tra et point e valore attuale , che e' poi l'errore ,

La derivata dovrebbe correggere portando alla deriva la forma "D'onda" che si vuole regolare .Questa e' positiva o negativa ed aiuta a recuperare anche quello che l'integrale no npuo' fare per eccesso o per difetto della quadratura .Per cui non posso avere una derivata nel senso della propria definizione come limite che analiticamente mi da la tangente al grafico perche il tempo di campionamento seppure piccolo non e' mai cosi piccolo da tendere a zero ,Pero come rapporto incrementale e quindi coefficiente angolare della retta tangente lo posso calcolare tranquillamente

Quindi a livello proprio di scrittura del codice , per quanto riguarda la derivata cosa mi serve ?

1) la variazione sull'asse x lo conosco , e' il tempo di campionamento , tempo che regolarmente su interrupt richiama l'algoritmo , ed e' costante

2) la variazione sull'asse y la conosco , e' l'errore .Questo a seconda che la teperatura attuale sia maggiore o minore del setpoint mi dara' una derivata negativa o positiva per cui una correzione appropriata .

A questo punto il coefficiente angolare o meglio dire la derivata prima della temperatura regolata rispetto a quella desiderata ce' l'ho .

Pero ora mi manca qualcosa, devo calcolare il valore della derivata nel punto ...quale? come lo considero il punto ...e' qui che mi manca di capire qualcosa ...

Livio cosa mi dici?


Inserita:

Se vuoi correggere in base alla derivata dell'errore (ma non è detto che si agisca sempre così), in un regoaltore quantizzato corrisponde alla differenza tra due campini consecutivi, ovvero tra il campione attuale ed il suo predecessore. Questo valore poi lo moltiplichi per un coefficiente e lo usi.

In un sistema continuo, invece, effettui una vera derivata della funzione tramite.....un derivatore.

Inserita:

cioe' ......sia Kd il coefficiente della derivata , che si introduce da pannello per esempio , cosi come si introducono Kp e Ki che sono gli altri due coefficienti .

Lo devo moltiplicare per (Valore attuale della temperatura - Valore precedente della temperatura ) rispetto al tempo , dico bene?

Inserita: (modificato)

Si esatto, moltiplichi la differenza tra i due campioni ed il risultato lo sommi alle altre due componenti.

Questo è il modo più grezzo di inserire una componente derivativa.

Il primo miglioramento, semplicissimo, consiste nel derivare non l'errore, ma la reazione, ovvero la varaibile controllata.

Il vantaggio è grande in alcuni casi; perchè l'anticipo di reazione, al contrario del derivativo sull'errore, è insensibile alle variazioni di riferimento 8più correttamente: non è direttamente sensibile), cosa molto apprezzabile su alcuni processi.

Modificato: da Livio Orsini
Inserita:

ok grazie .In sostanza e' il valore della derivata valutata nel punto attuale che in questo caso e' la differenza tra i due campioni.

Mah mi chiedevo se fosse possibile regolare pressioni o flussi idraulici piuttosto che idrodinamici ....per le temperature ok , se il sistema ha un tempo di risposta di almeno 10-15 secondi va bene anche il PI con duty cycle circa di 15 sec.

Per regolazioni piu veloci bisognerebbe provarlo

Inserita:

Io ho fatto regolatori PID con tempo di campionamento di 1 ms e anche 500µs con i dsPic.

Inserita:

per posizionatori o controllo pressioni ?

Inserita:

Per interpolazioni.

Inserita:

lineari o di quale grado?

Quale tecnica hai implementato ? Newton , Lagrange ...?

Inserita:

Lineari, spline; tecnica Orsini.

Inserita:

spline cubiche ....tecnica Orsini ...

Interessante

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...