Analisi e costruzione della risposta in frequenza
I. Diagrammi di Bode [ Margine
di Guadagno e di Fase | Banda passante ]
II. Il diagramma di Nyquist [ Stabilità a ciclo chiuso | Margine di Guadagno | Margine di Fase ]
I comandi matlab usati in questo corso sono bode, nyquist, nyquist1, lnyquist1,
margin, lsim, step,
e cloop
Il metodo della risposta di frequenza è meno intuitivo degli altri metodi studiati, comunque ha vantaggi specialmente nelle situazioni reali.
La risposta in frequenza di un sistema può essere vista in due modi diversi: attraverso il diagramma di Bode o con il diagramma di Nyquist. Entrambi i metodi mostrano le stesse informazioni; la differenza è nel come le informazioni vengono presentate. Studieremo entrambi i metodi.
La risposta in frequenza è una rappresentazione della risposta del sistema ad un ingresso sinusoidale al variare della frequenza. L'uscita di un sistema lineare ad un ingresso sinusoidale è una sinusoide con la stessa frequenza ma con differente ampiezza e fase. La risposta in frequenza è definita come la differenza di modulo e fase tra la sinusoide di ingresso e di uscita. Si vedrà come usare la risposta in frequenza di un sistema a ciclo aperto per prevedere il suo comportamento a ciclo chiuso.
Per graficare la risposta in frequenza, si deve creare un vettore di frequenze (che variano tra 0 e infinito) e calcolare il valore della funzione di trasferimento del processo a quelle frequenze. Se G(s) è la funzione di trasferimento di un sistema a ciclo aperto e w è il vettore delle frequenze, si grafica G(jw) su w. Poiche G(jw) è un numero complesso, si può graficare il modulo e la fase (diagramma di Bode) o la sua posizione nel piano complesso (diagramma di Nyquist). Ulteriori informazioni sono disponibili in Grafico della risposta in frequenza.
Come già detto, il diagramma è la rappresentazione del modulo e della fase di G(jw) (dove il vettore w contiene solo frequenze positive). Per vedere il diagramma di Bode di una funzione di trasferimento si può usare il comando matlab bode. Per esempio,
bode(50,[1 9 30 40])
mostra il diagramma di bode della funzione:
50 ----------------------- s^3 + 9 s^2 + 30 s + 40
Nota gli assi della figura. La frequenza è su una scala logaritmica, la fase è espressa in gradi e il modulo come il guadagno è dato in decibel.
Sono disponibili alcuni semplici esempi di diagrammi di Bode.
Consideriammo il seguente sistema:
dove k è il guadagno e G(s) è il processo in considerazione. Il margine di guadagno è definito come la variazione di guadagno a ciclo aperto richiesta per rendere instabile il sistema. Sistemi con ampi margini di guadagno possono sopportare maggiori variazioni dei parametri prima di diventare instabile a ciclo chiuso.
Si tenga in considerazione che il guadagno unitario in modulo è uguale a zero dB.
Il Margine di Fase è definito come il cambio di fase a ciclo aperto richiesto per rendere un sistema a ciclo chiuso instabile.
Ci si concentri ora sui margini di guadagno e di fase in un diagramma di Bode.
Il margine di fase è definito come la differenza in fase tra la curva della fase e la retta a -180° nel punto corrispondente alla frequenza in cui si ha un guadagno di 0dB (il guadagno incrocia alla frequenza W1). In modo analogo, il margine di guadagno è dato dalla differenza tra la curva del modulo e la retta a 0 dB nel punto in cui la fase vale -180° (W2).
Se si varia il guadagno di un sistema il diagramma di Bode della fase non viene modificato, a differenza del modulo. Per calcolare il nuovo margine di fase è sufficiente individuare la nuova frequenza W1 e leggere il nuovo margine di fase. Per esempio, supponiamo di eseguire il comando bode(50,[1 9 30 40]). Si ottiene il seguente diagramma di Bode:
Come si può vedere, il margine di fase è circa 100°. Supponiamo di aggiungere un guadagno di 100 attraverso il comando bode(100*50,[1 9 30 40]). Si ottiene il seguente diagramma:
Vediamo che il grafico della fase non è variato, mentre il modulo è variato di 40dB (guadagno di 100). Il margine di fase è ora di circa -60°. Lo stesso risultato si ottiene se l'asse y (0dB) del modulo è spostato in basso di 40 dB(effetto dell'aumento del guadagno).
Possiamo trovare i margini di guadagno e fase di un sistema usando direttamente il comando Matlab margin. Questo comando restituisce i margini di fase e di modulo, le frequenze di intersezioni della fase e del modulo e le loro rappresentazioni nei diagrammi di Bode. Inserisci il seguente comando nella finestra del Matlab per ottenere il grafico riportato sotto.
margin(50,[1 9 30 40])
La banda passante è definita come l'intervallo di frequenza in cui l'attenuazione del modulo della risposta a ciclo chiuso è inferiore -3 dB. Tuttavia siamo interessati a predire il comportamento del ciclo chiuso dalla risposta del sistema a ciclo aperto; perciò useremo una approssimazione del secondo ordine del sistema, quindi la banda passate è la frequenza alla quale il modulo a ciclo aperto è compresa tra -6 e -7.5 dB, supponendo la fase compresa tra -135° e 225°.
Mostreremo l'importanza della banda passante e di come l'uscita cambia con il variare delle frequenze d'ingresso. Si troverà quale ingresso sinusoidale con frequenza minore di Bp (banda passante) sono seguite "abbastanza bene" dal sistema. Ingressi sinusoidali con frequenze maggiori di Bp sono attenuate (in modulo) di un fattore 0.707 o maggiore (e sono anche variate in fase).
Supponiamo di avere la seguente funzione di trasferimento a ciclo chiuso:
1 --------------- s^2 + 0.5 s + 1
Inizialmente troviamo la frequenza di Bp analizzando il diagramma di Bode:
bode (1, [1 0.5 1 ])
Dal digramma possiamo vedere che la Bp cercata è approssimativamente 1.4 radianti/s. Dal diagramma si può anche vedere che per una frequenza di 0.3 rad., l'uscita sinusoidale ha modulo quasi unitario e la fase dovrebbe essere variata di alcuni gradi. Per una frequenza di ingresso di 3 rad/sec, il modulo dell'uscita è circa -20dB (o 1/10 dell'ingresso) e la fase circa -180° Possiamo usare il comando lsim per simulare la risposta di un sistema ad un ingresso sinusoidale.
Prima, consideriamo un ingresso sinusoidale con una frequenza minore di Bp. Tieni presente che vogliamo vedere la risposta dello stato, trascorso il transitorio; perciò, modifichiamo gli assi per evidenziare lo stato.
w= 0.3; num = 1; den = [1 0.5 1 ]; t=0:0.1:100; u = sin(w*t); [y,x] = lsim(num,den,u,t); plot(t,y,t,u); axis([50,100,-2,2])
L'uscita (blu) segue abbastanza bene l'ingresso (viola); come attendevamo, essa è in ritardo di qualche grado rispetto all'ingresso.
Se inseriamo una frequenza maggiore della Bp per il sistema, ottieniamo una risposta distorta rispetto all'ingresso:
w = 3; num = 1; den = [1 0.5 1 ]; t=0:0.1:100; u = sin(w*t); [y,x] = lsim(num,den,u,t); plot(t,y,t,u); axis([90, 100, -1, 1])
Nota che,come già detto, il modulo dell'uscita è circa 1/10 rispetto all'ingresso, e la fase è in ritardo di -180°. puoi testare la risposta del sistema per differenti frequenze per vedere se si accordano con il diagramma di Bode.
Usiamo i concetti visti per costruire un controllore per il seguente sistema:
dove Gc(s) è il controllore e G(s) è:
10 ---------- 1.25s + 1
Impostiamo le seguenti condizioni:
Ci sono 2 metodi per risolvere il problema: il metodo grafico e il metodo numerico. Usando il Matlab, l'approccio grafico è il migliore, e quindi è quello che useremo. Per iniziare vediamo il diagramma di Bode. Creiamo un m-file con i seguenti comandi:
num = 10; den = [1.25,1]; bode(num, den)
Ci sono molte caratteristiche del sistema che possono essere lette direttamente dal diagramma. Prima di tutto nota che la banda passante Bp è di circa 10 rad/sec. La Bp è circa uguale alla pulsazione naturale Wn (per un sistema del secondo ordine di questo tipo), il tempo di salita è 1.8/Wn=1.8/10=1.8 secondi. Questa è una stima approssimata, quindi possiamo dire che il tempo di salita è di circa 2 secondi.
Il margine di fase per questo sistema è circa 95 gradi. Questo corrisponde ad un coefficente di smorzamento di 0.95. Inserendo questo valore nell'equazione che lega la sovraelongazione con lo smorzamento si trova che la sovraelongazione è circa del 1%. Il sitema è eccessivamente smorzato.
L'ultimo punto di interesse è l'errore dello stato a regime permanente. Tale errore può essere letto direttamente dal diagramma di Bode. Le costanti (Kp, Kv, o Ka) si trovano nelle intersezioni dell'asintoto a bassa frequenza con la retta a w=1. Il modulo in questi punti è costante. Dal diagramma di Bode di questo sistema l'asintoto è una linea orizontale (pendenza = 0); sappiamo che questo sistema è di tipo 0; perciò l'itersezione è facile da trovare. Il guadagno è 20 dB; questo vuol dire che la costante della funzione errore è 10. Si possono vedere le tabelle con il tipo di sistema e le funzioni errore cliccando qui. L'errore dello stato è 1/(1+Kp)=1/(1+10)=0.091. Se il nostro sistema fosse di tipo 1, la costante per l'errore dello stato si troverebbe in una maniera simile alla seguente
Possiamo controllare quanto detto analizzando il grafico della risposta ad un ingresso costante. Questo può essere fatto aggiungendo le seguenti due linee di comandi nella finestra del Matlab.
[numc,denc] = cloop(num,den,-1); step(numc,denc)
Nota che il sistema ha un tempo di salita di circa 2 secondi, è sovrasmorzato, e ha un errore di stato di circa 9%. Dobbiamo ora costruire un controllore che ci permetta di soddisfare le condizioni di progettazione imposte. Scegliamo un controllore PI perché produce un errore dello stato nullo. Il controllore PI ha uno zero da posizionare. Ciò ci dà una certa flessibilità di progettazione per soddisfare i vincoli imposti. Ricordiamo che un PI è dato da:
K*(s+a) Gc(s) = ------- s
Il primo passo è trovare il coefficiente di smorzamento che corrisponde ad una sovraelongazione del 40%. Inserendo questo valore nell'equazione che lega lo smorzamento alla sovraelongazione, si trova un coefficiente di circa 0.28. Quindi il nostro margine di fase è di circa 30 gradi. Dal grafico di Ts*Wbw sullo smorzamento, si trova che Ts*Wbw ~ 21.dobbiammo avere una frequenza Bp maggiore o uguale a 12 se vogliamo un tempo di salita minore di 1.75 secondi che soddisfa le specifiche di progettazione.
Ora che conosciamo Bp e il margine di fase, possiamo iniziare la costruzione del controllore. Ricorda che stiamo analizzando il diagramma di Bode di un sistema a ciclo aperto; perciò la Bp corrisponde ad un guadagno approssimativamente di -7 dB.
Vediamo come un PI influenza la nostra risposta. variamo il file Matlab come segue (aggiungendo un termine integrale ma non proporzionale):
num = [10]; den = [1.25, 1]; numPI = [1]; denPI = [1 0]; newnum = conv(num,numPI); newden = conv(den,denPI); bode(newnum, newden, logspace(0,2))
Il margine di fase (Mp) e Bp sono troppo piccoli. Dobbiamo aggiungere guadagno e fase con uno zero. Inseriamo lo zero in 1 e vediamo cosa succede. Il file viene così modificato:
num = [10]; den = [1.25, 1]; numPI = [1 1]; denPI = [1 0]; newnum = conv(num,numPI); newden = conv(den,denPI); bode(newnum, newden, logspace(0,2))
Risulta che lo zero in 1 con un guadagno unitario ci dà una risposta soddisfacente. Mp è maggiore di 60 gradi (una sovraelongazione minore di quella attesa) e Bp è circa 11 rad/s, che ci dà una risposta soddisfacente. Anche se soddisfacente, la risposta può essere migliorata. Tentiamo di ottenere una Bp maggiore senza variare molto Mp. Incrementiamo il guadagno di 5 e vediamo cosa accade. Ciò farà spostare il guadagno mentre la fase rimane uguale.
num = [10]; den = [1.25, 1]; numPI = 5*[1 1]; denPI = [1 0]; newnum = conv(num,numPI); newden = conv(den,denPI); bode(newnum, newden, logspace(0,2))
Il risultato che otteniamo è veramente buono. Vediamo la risposta del sistema ad un ingresso costante e verifichiamo i risultati. Aggiungiamo i seguenti comandi al file:
[clnum,clden] =cloop(newnum,newden,-1); step(clnum,clden)
Come puoi vedere, la risposta è migliore di quanto ci si aspettava. Non sempre si è così fortunati e normalmente si deve giocare con il guadagno e con la posizione dei poli o/e zeri fino a soddisfare le condizioni imposte.
Il corso continua con i diagrammi di Nyquist.