INDICE
Lezione 1 (pagina 2)
Lezione 2 (pagina 35)
Lezione 3 (pagina 69)
Lezione 4 (pagina 113)
Lezione 5 (pagina 147)
Lezione 6 (pagina 214)
Lezione 7 (pagina 260)
Lezione 8 (pagina 303) 1
Lezione 1
In questa lezione vedremo Matlab dopo aver fatto una piccola ricapitolazione delle lezioni precedenti.
Per sistema intendiamo qualsiasi entità fisica caratterizzata da parti che interagiscono con l’ambiente e con
tutto quello che ci sta attorno. Esistono due varietà di sistemi
- Tempo Continuo ->
- Tempo Discreto ->
Dato un sistema l’obiettivo è farne l’analisi.
Il controllo consiste nel dire noto il sistema, nota la sua dinamica come posso influenzare il sistema per
fargli assumere un comportamento desiderato?
Abbiamo due tipi di schemi di controllo
1) Schema in Feed Forward detto anche in catena aperta; dato il processo P l’uscita controllata
sarà y(t) ed in ingresso abbiamo l’ingresso manipolabile che uscirà da un controllore C che
conterrà al suo interno un algoritmo che farà in modo che la variabile controllata y(t) raggiunga
effettivamente l’uscita desiderata y (t). In questo senso il controllore è detto proprio in
d
feed-forward o in catena aperta, proprio perché non c’è nessuna chiusura tra quello che ho
effettivamente, la y(t) e la y . Questo tipo di controllo non è molto efficiente perché in questo
d
caso il controllore non ha istante per istante delle misure della variabile controllata. Per tale
ragione questa azione di controllo viene ad essere definita cieca nel senso che non riusciamo
mai a sapere se la variabile controllata ha raggiunto o meno il desiderio.
2) Controllo di tipo Feed-Back anche detto a catena chiusa dove abbiamo una retroazione di
uscita; il controllo in questo caso va a pesare la differenza tra quello che effettivamente ho y e
la mia y che rappresenta il desiderio e quindi è possibile regolare il controllo di conseguenza
d
per avvicinare la y alla y.
d
Nel caso invece di una retroazione di stato, in ingresso al controllo non avremo tutta l’uscita y
ma retroazioneremo lo stato x(t). Questo significa che si ha una serie di sensori che permette le
2
misurazioni istante per istante delle variabili di stato che quindi risulta possibile portare in
retroazione al controllo tutte le misure di tutte le variabili di stato.
Questo secondo schema di controllo è sicuramente più efficiente ma è anche il più costoso.
Se y = costante parleremo di problema di regolazione
d
Se y è tempo variante e quindi abbiamo una y (t) si parla di un problema di tracking.
d d
Quando abbiamo un problema di controllo, essenzialmente dobbiamo soddisfare delle specifiche; le
specifiche di controllo che si possono presentare possono essere in primo luogo delle specifiche di regime;
dire questo significa dire che a regime voglio arrivare al mio desiderio.
considerando t -> ∞ significa dire che il desiderio siamo consci che verrà raggiunto in un tempo minimo pari
a 5 τ che rappresenta il tempo di assestamento e dove τ rappresenta proprio la costante di tempo. Se
invece il sistema risulta essere in principio instabile però attraverso un’opportuna progettazione di una
legge di controllo riusciamo a stabilizzarlo allora riusciamo a dire che riusciremo a raggiungere
effettivamente la y .
d
In questo caso possiamo ad esempio avere un sistema che è di per sé stabile però ad esempio vogliamo che
stabilizzi in un tempo più veloce e quindi ad esempio vogliamo sovrapporre alla dinamica originale del
sistema che comunque è una dinamica stabile, perché ad esempio gli autovalori del sistema di partenza
sono comunque a parte reale minore di zero, stiamo ragionando a TC, però magari abbiamo una dinamica
troppo lenta e quindi vogliamo velocizzarla. Un altro caso che si può presentare è quello di un sistema che a
ciclo aperto presenta delle oscillazioni e si vogliono cancellare queste oscillazioni e quindi per fare questo si
vuole che il sistema non abbia poli che siano complessi e coniugati ma vogliamo che siano solo a parte
reale.
Si può anche volere soddisfare delle
cioè imposto che possiamo raggiungere il nostro desiderio e che quindi che a regime raggiungiamo x ,
d
vogliamo anche che a questo desiderio ci possiamo permanere, cioè non vogliamo che l’azione di un
disturbo che può presentarsi, ma anche delle incertezze parametriche perché quando andiamo a modellare
3
un sistema si commettono degli errori di approssimazione nell’andare a scrivere delle equazioni che
rappresentano la dinamica del sistema, possano farci scostare da questa posizione raggiunta. Per specifiche
di robustezza quindi si intendono quelle specifiche che nonostante si commettano degli errori di
approssimazione, nonostante ci siano degli ingressi esogeni di disturbo, oppure delle incertezze
parametriche, non solo riusciamo a raggiungere le condizioni di regime ma anche permanerci.
Il controllo in Feedback di per sé risulta essere robusto al disturbo. In catena aperta abbiamo visto infatti
che un buon Tuning di K che ci consente di raggiungere il regime non riesce a reiettare il disturbo mentre
un controllo in feedback permette di soddisfare sia la specifica di regime che reiettare il disturbo.
In questi ragionamenti che stiamo facendo stiamo sempre considerando che lo stato risulti essere sempre
completamente raggiungibile e che quindi abbiamo sempre la possibilità di misurare tutte le variabili di
stato.
Tutte le specifiche che vogliamo soddisfare si traducono in termini di autovalori del sistema a ciclo chiuso
nel piano complesso e quindi della matrice che abbiamo chiamato Â; tale matrice permette di
rappresentare la dinamica del sistema controllato a ciclo chiuso e agendo su tale matrice si può fare in
modo che questa matrice abbia tutte le caratteristiche imposte dalle specifiche. In sostanza quello che
facciamo con l’azione di controllo è sovrapporre alla dinamica di partenza del sistema, una nuova matrice
dinamica, una nuova dinamica in termini di  che cancella la dinamica originaria del sistema,
sovrapponendo una dinamica desiderata che faccia in modo di soddisfare tutte le specifiche.
Oggi vedremo la tecnica del Pole Placement in matlab.
Il Pole Placement come detto nelle scorse lezioni è una legge in retroazione di stato che permette di
portare gli autovalori nella zona desiderata del piano.
Quanto detto fa sì che il nostro sistema a ciclo chiuso (c.c) diventi un sistema autonomo.
Questo tipo di azione fa sì che posso scegliere opportunamente questo vettore, perché stiamo ragionando
in termini di sistema di ordine superiore al primo. Quello che stiamo dicendo è che vanno scelti in maniera
opportuna i valori da dare a K per fare in modo che a c.c, quindi quando otteniamo questo sistema
autonomo, la matrice  effettivamente sia in grado di soddisfare tutte le specifiche desiderate.
L’assunzione che stiamo facendo è che il sistema sia controllabile, tuttavia non è detto che tutti i processi
siano controllabili, cioè non è sempre detto che riusciamo a trovare un’azione di controllo che permetta a
tutti i sistemi a ciclo chiuso di fare quanto richiesto. Abbiamo dato la definizione di controllabilità che è una
proprietà strutturale del sistema e l’abbiamo data secondo Kalman per il quale abbiamo che dato un 4
sistema LTI si dirà completamente controllabile se per ogni x esiste un’azione di controllo u(t) o u a
0 k
seconda che stia nel TC o nel TD tale per cui a partire dalle condizioni iniziali x possiamo raggiungere uno
0
stato desiderato x .
d
quindi sono sempre in grado di trovare un controllo che permette di raggiungere da qualsiasi punto iniziale
il valore desiderato. Questa è una definizione di controllabilità completa nella misura in cui vale per ogni x .
0
Questa definizione di controllabilità si traduce in termini controllabilità per verificare se il sistema è
effettivamente controllabile e questo ci consente di andare a costruire la matrice di controllabilità C che è
del tipo
questo criterio di controllabilità ci dice che il sistema è controllabile se e sole se questa matrice ha rango
pieno. Quindi se il sistema è di ordine n questo vorrà dire che il rango di C sarà uguale a n.
Fatto questo preambolo vediamo come operare in matlab.
La Command window permette di fare qualsiasi operazione e restituisce il risultato ma non permette di
salvare quanto facciamo
Nell’Editor invece è possibile creare un foglio di lavoro e salvarlo e per questo tenderemo a lavorare qui.
Nel Workspace si vanno a salvare tutte le variabili che abbiamo definito. 5
In Current Folder invece possiamo impostare la nostra cartella di lavoro, cioè dove verranno ad essere
salvati i nostri lavori
Una panoramica dello spazio di lavoro è la seguente
Quando gli schemi diventeranno troppo complessi andremo ad usare matlab solo per la definizione delle
variabili ed andremmo a rappresentare il nostro schema a blocchi all’interno di Simulink.
Per aprire Simulink basta cliccare su HOME in modo che compaia l’icona di Simulink e poi cliccarci sopra
Se apriamo Simulink e clicchiamo su blank model possiamo creare un progetto.
La finestra che si apre ci permette di modellare il nostro sistema in modo semplice attraverso l’uso di
diagrammi a blocchi. 6
Supponiamo ora di considerare il seguente sistema e vediamo come risolverlo usando simulink
Ciò che vogliamo trovare sono i guadagni K da assegnare al sistema per risolverlo.
Per l’uscita possiamo immaginare che lo stato sia completamente accessibile e che quindi
Dove D pesa il contributo diretto dell’ingresso sulla variabile di uscita. D deve avere tante righe quante
sono le variabili di uscita e tante colonne quante sono gli ingressi.
L’obiettivo in questo esempio è progettare una retroazione di stato tale da portare i poli del sistema a ciclo
chiuso in -2 ± j. In qualche modo questi quindi rappresentano
dove λ*rappresenta la λ di desiderio.
Prima cosa che si fa è andare in matlab a rappresentare il nostro sistema e poi lo si modella in Simulink.
Con - clear puliamo il workspace
- clc pulisce la command window,
è sempre buona norma cominciare gli script con questi comandi per pulire lo spazio di lavoro
Per salvare lo script andare su EDITOR e cliccare su Save
Definiamo ora tutte le matrici che definiscono il sistema.
La matrice tipicamente si scrive per righe ed i termini della stessa riga vanno semplicemente separati con
uno spazio, mentre gli elementi di righe diverse con il “ ; ” . 7
- eye(dimensione) crea una matrice identità; ad esempio con C = eye (2), crea una matrice identità di
dimensione 2x2.
- zeros (righe, colonne) costruisce una matrice di zeri e all’interno delle parentesi vengono indicate
le righe e le colonne.
Mettere il “ ; ” dopo un comando significa non voler vedere il risultato dell’operazione a video nella
Command Window, le matrici create vengono visualizzate nel Workspace.
La specifica del problema ci chiede di andare a mettere gli autovalori del sistema a c.c in - 2±j
Posso verificare se la mia specifica è soddisfatta andando a valutare tutti gli autovalori della matrice A
Il comando che si adopera è eig.
Quindi con
- eig (matrice_degli_autovalori) posso andare a valutare gli autovalori della matrice in esame
- help comando_matlab nella Command Window permette di avere una descrizione generale del
comando sul quale stiamo richiamando l’help. Con help eig ad esempio abbiamo una descrizione
dettagliata del comando eig
Controlliamo allora gli autovalori 8
Se al comando eig diamo due ingressi esso ci restituisce non solo gli autovalori ma anche gli autovettori.
La matrice L è una matrice che per colonne avrà gli autovettori mentre la matrice T sarà una matrice
diagonale che mi dà gli autovalori che si troveranno appunto posizionati lungo la diagonale principale.
Prima di poter progettare la specifica di controllo chiediamoci se il sistema è controllabile.
N.B Matlab è case sensitve.
Il comando ctrb (A, B) dategli in pasto le matrici A e B ci restituisce la matrice di controllabilità
Il comando rank(matrice) ci dà il rango della matrice che gli si dà in pasto 9
Il risultato ottenuto ci dice che la matrice di controllabilità ha rango pieno e quindi il sistema è controllabile.
Facciamo ora un’analisi a ciclo aperto in Simulink; tale tipo di analisi in realtà l’abbiamo già fatta quando
abbiamo visto che il sistema non soddisfaceva le specifiche e quindi quando abbiamo fatto
quindi quando siamo andati a calcolare gli autovalori di A e quando abbiamo visto che questi non
coincidevano con quelli dettati dalla specifica.
Andiamo ora a fare un’analisi a ciclo aperto in Simulink, andiamo quindi a modellare il sistema assegnato ed
andiamo a valutarne la sua risposta indiciale, cioè la risposta al gradino, questo prima di andare a
progettare il controllore.
In Simulink possiamo rappresentare il sistema a tempo continuo.
Se apriamo la library possiamo selezionare i diversi blocchetti, che possono essere ottenuti anche facendo
click sul foglio bianco e scrivendo il nome del blocco. 10
La libreria di blocchi più usati è la Commonly Used Blocks.
In Continuous possiamo trovare tutti i blocchi che sono usati nel TC.
In Discrete troviamo invece tutti i blocchi necessari a modellare il TD.
In Math Operations troviamo tutte le operazioni matematiche che possiamo adoperare; abbiamo ad
esempio il gain
tale blocco ci consente di fare un prodotto, inserendo un numero all’interno di questo triangolino permette
di moltiplicare quanto diamo in ingresso al gain per un guadagno (appunto gain da dove discende il nome)
In Sinks troviamo ad esempio il blocco scope che permette di vedere a video il valore assunto da un
determinato segnale collegato a questo blocco
In Sources troviamo tutti i segnali che possiamo generare come ad esempio dalla rampa ad un segnale
sinusoidale ecc. 11
In Sources possiamo trovare tutti i segnali che possiamo generare 12
Se andiamo in Continuous possiamo selezionare il blocco State-Space che ci serve per la nostra soluzione
Trascinatoci il blocco State-Space cliccando sopra possiamo aprire il blocco che permette di configurarlo, se
abbiamo definito le varie variabili in codice matlab questi valori appariranno automaticamente nel
Workspace e verranno definiti in base al codice, altrimenti andranno definiti singolarmente. 13
Ad esempio nel codice ci siamo dimenticati le condizioni iniziali che possiamo quindi definire qui nel box; le
condizioni iniziali saranno un vettore colonna 2x1 e supponiamo di considerare [0;0]
Per vedere ora quanto esce andiamo a collegare a questo blocco lo Scope che sta in Sinks 14
In run otterrò allora due uscite dal sistema perché abbiamo considerato che C è una matrice identità e
quindi l’uscita del sistema y sarà uguale a x e quindi vedremo sia x che x Per semplicità di notazione e per
1 2.
ricordarci che cosa ci viene fuori da un collegamento andando a fare doppio click sulla freccetta possiamo
dare un nome al collegamento che può ad esempio essere un nome esemplificativo per il collegamento.
Mettiamo ora in ingresso un segnale come ad esempio un gradino (step), settiamo la durata
dell’esperimento che nel nostro caso sarà 10 secondi e facciamo click su run
Otteniamo allora la risposta del sistema 15
Se clicchiamo su View -> Legend possiamo mettere una piccola legenda in modo da capire bene il grafico.
vediamo allora che il tratto giallo rappresenta la x mentre quello blu la x .
1 2
Se clicchiamo sullo step possiamo andare a settare diversi parametri 16
Step Time che in questo caso è settato ad 1 ci dice il tempo al quale parte il gradino, possiamo poi andare a
settare il valore iniziale e finale che desideriamo imporre al segnale.
Se vogliamo vedere il segnale in ingresso al sistema basterà mettere un altro Scope in ingresso
Così facendo possiamo osservare il valore del segnale che nel nostro caso sarà quindi 17
La rappresentazione a blocchi sopra è una rappresentazione che può essere fatta solo per i sistemi lineari.
Questo stesso schema può essere rappresentato in modo equivalente attraverso il blocco integratore
(integretor); tale modo di rappresentare il sistema sarà l’unico modo che abbiamo per rappresentare
sistemi non lineari. Per questo tipo di rappresentazione abbiamo bisogno di tanti integratori quanti sono le
variabili di stato; la initial condition per questi blocchi integratori dovrà essere zero perché abbiamo settato
che le condizioni iniziali siano [0;0]
collego ora un secondo integratore che mi dà x al primo, questo lo ricaviamo dà
2
che ci dice che la derivata di x è proprio uguale a x .
1 2
Inserisco due blocchi Scope che mi permettono di osservare x e x .
1 2
In ingresso al secondo integratore che ci dà x andando a leggere l’equazione dinamica riportata nel
2
sistema sopra possiamo osservare che gli dobbiamo dare - 2 x +u(t) dove abbiamo immaginato che questa
2
u(t) sia uno step unitario. Per poter rappresentare questa operazione possiamo usare come blocchi un gain
ed una sum; con sum possiamo sommare due segnali, con gain moltiplichiamo i blocchi in input per un
valore costante e possiamo andando ad indagare il blocco scegliere se effettuare una moltiplicazione per
uno scalare (element wise gain) che effettuerà una moltiplicazione elemento per elemento oppure per una
matrice (matrix wise gain), noi abbiamo bisogno di uno scalare pari a 2 e quindi selezioneremmo
ora dobbiamo sottrarre 2 x allo step quindi consideriamo un blocco sum e facendo doppio click possiamo
2
andare a selezionare i segni di questo blocco sommatore e la forma; possiamo ad esempio settarlo in
questo modo con forma rettangolare e segni + e - 18
un blocco pu&ogr
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti Controlli Automatici (Parte Teorica)
-
Appunti Controlli automatici 1
-
Appunti Controlli Automatici
-
Appunti Controlli automatici 2