Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Regolatore Di Posizione Pid - ...dubbi sul feedforward di velocità


Messaggi consigliati

Inserito:

Salve a tutti,

mi capita spesso di realizzare dei regolatori di posizione ad anello chiuso, sviluppati su microcontrollori o plc. Adotto il normale algoritmo pid, processato a tempo di ciclo costante, e fin qui nulla di nuovo. Ho però alcuni dubbi sul corretto sistema per generare un buon riferimento feedforward di velocità.

Il riferimento di posizione sarà ad esempio generato da un'altro blocco di programma, che lo ricaverà da una funzione del tempo o di una altro riferimento master (ad esempio un encoder di riferimento). Questo blocco genera il riferimento già scalato correttamente per essere confrontato in rapporto 1:1 con il trasduttore dell'asse controllato.

Il mio blocco PID ha quindi in ingresso il riferimento di posizione, generato ad ogni ciclo.

Per realizzare il voluto feedforward di velocità viene da sè di effettuare la differenza tra il riferimento attuale e il riferimento precedente, per ricavarsi la velocità, e poi moltiplicarlo per la dovuta costante di feedforward.

Spesso però succede che la differenza così calcolata dà valori molto modesti, e soggetti quindi a variazioni abbastanza marcate. In altre parole, se nel tempo di ciclo il riferimento varia di poche unità, il valore del feedforward di velocità assumerà valori bassi, e che per di più varieranno continuamente da un ciclo all'altro.

Ora, visto che mi sembra abbastanza normale che nel tempo di ciclo del regolatore il riferimento non possa cambiare troppo (altrimenti la precisione va a farsi benedire), questo principio impedisce di ottenere un riferimento feedforward "pulito". Esso varia molto (in percentuale) da ciclo a ciclo, e rende l'uscita del regolatore molto "sporca".

Faccio un esempio per spiegarmi meglio:

- asse elettrico lineare, con encoder con risoluzione 0.01 mm

- tempo di ciclo regolatore pid 1 ms

- velocità massima asse 100 mm/s

Alla massima velocità il mio generatore di riferimento dovrà produrre 10000 impulsi al secondo, che corrispondono a 10 impulsi per ogni periodo del ciclo del regolatore. Ora suppongo che il valore sia buono per la parte di regolazione pid, ma il feedforward ottenuto è molto basso (in questo caso 10). Il basso valore in sè per sè non sarebbe un problema (la costante di feedforward sistemerà il tutto), ma è abbastanza chiaro che ad un ciclo il valore del feedforward di velocità potrà essere 10, come 9 o 11, essendo il riferimento non sincronizzato con il tempo di ciclo. Questa variazione rende molto sporco il comportamento del regolatore.

Come fare? Aumentando il tempo di ciclo si avrebbe maggior definizione sulla generazione del feedforward, ma si perde in rapidità di risposta del regolatore. Mi sembra una coperta corta, se ci si copre la testa ci si scopre i piedi.

Quali soluzioni si possono adottare per migliorarne il comportamento?


Inserita:

Non esiste una soluzione generalizzata, bisogna analizzare caso per caso.

Esistono tecniche che permettono di evitare il jitter di feed forward. Bisogna sempre considerare che il feed forward non è "regolazione" ma è un aiuto per ridurre l'errore da correggere, pertanto è meglio avere un errore leggermente più grande ma stabile. ;)

Inserita:

Si, beh, chiaro che il feed forward non mi dovrà dare tutta la compensazione, ma buona parte si (diciamo un 80 %). Se questa parte è afflitta da jitter abbastanza pronunciato me lo ritroverò comunque sull'uscita, e anche se il regolatore funziona (il jitter ha frequenza troppo alta per influirmi sulla precisione) rendono il funzionamento sporco (e rumoroso).

Facciamo un paio di casi, per capire quali possono essere le possibili soluzioni (teniamo come parametri generali quelli dell'esempio che ho postato):

- Riferimento esterno mediante encoder master, rapporto asse elettrico 1:1 (la risoluzione degli encoder è data).

- Riferimento interno funzione del tempo. E' data funzione da fare e ho la necessaria potenza di calcolo (resta fissata la risoluzione dell'encoder slave). I calcoli del riferimento li faccio ad ogni ciclo.

Come procedo nei due casi per ridurre il jitter del feed forward?

Inserita: (modificato)
..essendo il riferimento non sincronizzato con il tempo di ciclo.

Questa è una cosa da evitarsi nelmodo più assoluto. Già questo è, per sua natura, fonte di jitter. E' una delle prime avvertenze che si da agli apprendisti stregoni :rolleyes:

C'era una bellissima analisi nel testo del Gardner sui sistemi di controllo a fase bloccata (PLL); son ricordi di gioventù ma son sempre validi.

Il feed forward è sempre un qualche cosa di teorico, di stimato, di modellizzato. Sta nell'algoritmo scelto ed implementato evitare che sia affetto da jitter. Anzi uno dei punti fermi di un algoritmo di feed forward è proprio la miglior approssimazione esente da jitter. Ripeto meglio un errore che una continua correzione. Nel caso d'esempio citato nel primo post piuttosto che dare un rifermiento con variazioni di +/- 1 bit per ridurre l'errore, meglio dare un riferimento senza variazione ma costante. l'errore è un poco più grande ma è statico.

Modificato: da Livio Orsini
Inserita:

Come può il riferimento essere sincronizzato con il tempo di ciclo se proviene da un sistema esterno? Ad esempio un encoder montato su un asse master... In un ciclo possono arrivarmi 10 impulsi, nel successivo me ne arriva 9, poi 11, ecc.. Questo non vuol dire che l'asse master abbia veramente variato la sua velocità di così tanto, però la risoluzione è poca e l'approssimazione è quindi tanta.

Come faccio a generarmi in questo caso (esempio dell'encoder master esterno) un feedforward pulito? Posso filtrare, ma perdo in velocità di risposta...

Inserita:

Basta che il campionamento sia sincrono con il regolatore.

Se campioni ed esegui la funzione PID ad 1 ms anche il campionamento dell'encoder di riferimento deve avvenire all'interno della funzione.

Ora devi scegliere se considerare le variazioni di riferimento in tempo reale o considerarle disturbo ignorabile.

Cis ono algorutmi un poco complessi per ridurre gli errori di quantizzazione, però introducono comunque un ritardo, ritardo che può essere ininfluente o meno.

Questa è una valutazione che puoi fare solo tu.

Questo argomento è una delle spine dei controlli discreti. Tanto che è la causa principale degli errori quando si analizzano i sistemi discreti con i metodi dei dei sistemi continui. Ancora 30 anni fa il Katz definiva "apprendisti stregoni" coloro i quali approcciavano l'analisi con queste modalità.

Inserita:

Beh, si. E' chiaro che il campionamento avverrà in maniera sincrona al regolatore.

Dove posso trovare informazioni su questi algoritmi per limitare il jitter del feed forward?

Inserita:

Sono informazioni che si ricavano e deducono dai vari testi e pubblicazioni sulle tecniche di regolazione quantizzata.

Ricordo una pubblicazione del prof. DeCarli proprio sulle tecniche di minimizzazione degli errori dovuti alla limitiazione del quantizzazione, però risalgono oramai ad un 25 anni addietro.

E' un argomento non semplice e difficile da trattare nelle poche righe di un messaggio. :(

  • 2 weeks later...
Inserita:

Puoi segnalarmi questi testi? Si trovano? Si possono acquistare?

Livio Orsini
Inserita:
Puoi segnalarmi questi testi?

in genere questo argomento è trattato "al volo" su testi classici di regolazione, oppure è argomento di "papers" specifici; ancora lo trovi svolto su dispense e pubblicazioni in rete.

Devi armarti di pazienza e ricercalo. Non esiste un testo specifico; in genere diventa una "summa" di esperienze e conoscenze del progettista.

Inserita:

Ho cercato molto in rete, il problema è che si trova troppo materiale. Molto è materiale didattico, che spiega le basi dei sistemi, altro è materiale prettamente matematico, interessante ma difficilmente applicabile a sistemi reali. Ci vorrebbe qualcosa con esempi pratici...

Livio Orsini
Inserita:
Ci vorrebbe qualcosa con esempi pratici...

E' praticamente impossibile perchè:

in genere diventa una "summa" di esperienze e conoscenze del progettista.

Le trattazioni teoriche son tipiche dei professori e ricercatori, che son poi sempre coloro che scrivono testi e "papers".

Da queste trattazioni un progettista può ricavarsi le basi teroriche, poi usando il metodo galileiano della sperimentazione euristica riesce ad integrare teoria e pratica.

Mentre la teoria è facilmente traducibile in scritti, la pratica è praticamente impossibile da trasmettere; c'è anche da considerare che non ci sono regole generali, o almeno son difficili da enunciare, ma adattamenti a casi aprticolari. E' un poco simile a quelle "porcate" che si fanno sui regolatori per ottimizzarli in funzione di processi particolari.

Inserita:
in genere questo argomento è trattato "al volo" su testi classici di regolazione

Ok, partiamo dai testi classici. Quali sono? Mi servirebbe almeno un riferimento a quelli più comprensibili, in rete se ne trovano troppi... :senzasperanza:

Livio Orsini
Inserita:
Mi servirebbe almeno un riferimento a quelli più comprensibili, ..

Io posseggo il vecchio Katz e ho consultato spesso il Quo (non ricordo se la grafia è corretta); quelli "buoni" son tutti o quasi in inglese e in quanto a comprensibilità....son tutti più o meno simili.

Livio Orsini
Inserita:

Paul Katz "Digital Control Using Microprocessor" Prentice/Hall International

E' vecchiotto, la mia edizione è del 1982, però i fondamentali non son cambiati.

Consulta anche "Embedded Control Manual" della Microchip e altri della Motorola.

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...