Problemi tipici dell'ingegneria aerospaziale risolti con Matlab ...

157
Universit` a degli Studi di Napoli “Federico II” FACOLT ` A DI INGEGNERIA Corso di Laurea in Ingegneria Aerospaziale Classe delle Lauree in Ingegneria Industriale - n. 10 Tesi di Laurea Problemi tipici dell’ingegneria aerospaziale risolti con Matlab e Simulink Candidato: Marco Lanzetta Matricola 517/949 Relatore: Ch.mo prof. A. De Marco Anno Accademico 2007/2008

Transcript of Problemi tipici dell'ingegneria aerospaziale risolti con Matlab ...

Universita degli Studi di Napoli “Federico II”

FACOLTA DI INGEGNERIA

Corso di Laurea in Ingegneria Aerospaziale

Classe delle Lauree in Ingegneria Industriale - n. 10

Tesi di Laurea

Problemi tipici dell’ingegneria aerospazialerisolti con Matlab e Simulink

Candidato:Marco LanzettaMatricola 517/949

Relatore:Ch.mo prof. A. De Marco

Anno Accademico 2007/2008

Ringaziamenti

Ringrazio in primo luogo il prof. Agostino De Marco, che mi ha seguito costantemente in tutto ilperiodo di tirocinio e tesi.

Ringrazio poi tutti gli amici (non solo colleghi), in particolare il gruppo J-Z, non si potevatrovare compagnia migliore per trascorrere questi ultimi tre anni.

i

Indice

I Risoluzione di problemi ingegneristici tramite Matlab 1

1 Elementi di Matlab 21.1 Vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Grafici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4 Polinomi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.5 Matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.6 M-File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Creazione del modello di un sistema 72.1 Creazione del modello di un sistema e sistema treno . . . . . . . . . . . . . . . . . 7

2.1.1 Diagramma del corpo libero e leggi di Newton . . . . . . . . . . . . . . . . 72.1.2 Variabili di stato e equazioni di output . . . . . . . . . . . . . . . . . . . . . 72.1.3 Rappresentazione in Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.1.4 Come continuare la risoluzione del problema . . . . . . . . . . . . . . . . . 92.1.5 Conversione Funzione di trasferimento/Spazio degli stati . . . . . . . . . . . 9

2.2 Modello di un controllore beccheggio . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.1 Modello fisico e sistema di equazioni . . . . . . . . . . . . . . . . . . . . . . 92.2.2 Criteri di progetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2.3 Funzione di trasferimento e spazio degli stati . . . . . . . . . . . . . . . . . 112.2.4 Rappresentazione in Matlab e risposta open loop . . . . . . . . . . . . . . . 12

3 Controllo PID 133.1 Introduzione al controllo PID e sistema massa molla e smorzatore . . . . . . . . . . 13

3.1.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.1.2 Il controllore a tre termini . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.1.3 Le caratteristiche dei controllori P,I e D . . . . . . . . . . . . . . . . . . . . 143.1.4 Esempio: massa, molla e smorzatore . . . . . . . . . . . . . . . . . . . . . . 143.1.5 Risposta open loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.1.6 Controllo proporzionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.1.7 Controllo proporzionale-differenziale . . . . . . . . . . . . . . . . . . . . . . 163.1.8 Controllore proporzionale-integrale . . . . . . . . . . . . . . . . . . . . . . . 163.1.9 Controllo proporzionale-integrale-differenziale . . . . . . . . . . . . . . . . . 183.1.10 Consigli generali per il progetto di un controllore PID . . . . . . . . . . . . 18

3.2 Soluzione PID per il controllore di beccheggio . . . . . . . . . . . . . . . . . . . . . 193.2.1 Controllo proporzionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.2.2 Controllo PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2.3 Controllo PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4 Metodo del root locus 224.1 Introduzione al metodo del root locus . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.1.1 Poli closed loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.1.2 Grafico del root locus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.1.3 Scelta di un valore del guadagno dal root locus . . . . . . . . . . . . . . . . 234.1.4 Risposta closed loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.2 Reti di compensazione e filtri elimina banda . . . . . . . . . . . . . . . . . . . . . . 254.2.1 Reti di compensazione e metodo del root locus . . . . . . . . . . . . . . . . 254.2.2 Filtro elimina banda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.3 Soluzione tramite root locus del controllo di beccheggio . . . . . . . . . . . . . . . . 284.3.1 Root locus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

ii

INDICE iii

4.3.2 Rete anticipatrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

5 Risposta in frequenza 325.1 Errore steady state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5.1.1 Calcolo dell’errore steady state . . . . . . . . . . . . . . . . . . . . . . . . . 325.1.2 Tipi di sistema ed errore steady state . . . . . . . . . . . . . . . . . . . . . . 34

5.2 Diagrammi di Bode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345.2.1 Margine di guadagno e margine di fase . . . . . . . . . . . . . . . . . . . . . 355.2.2 Frequenza di cut off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.2.3 Comportamento closed loop . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

5.3 Diagramma di Nyquist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.3.1 Il criterio di Cauchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445.3.2 Stabilità closed loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445.3.3 Guadagno di margine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.3.4 Margine di fase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

5.4 Definizione delle reti di compensazione usando la risposta in frequenza . . . . . . . 475.4.1 Rete anticipatrice o anticipatore di fase . . . . . . . . . . . . . . . . . . . . 495.4.2 Rete ritardatrice o ritardatore di fase . . . . . . . . . . . . . . . . . . . . . 49

5.5 Soluzione tramite risposta in frequenza del controllo di beccheggio . . . . . . . . . 505.5.1 Risposta senza controllo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.5.2 Aggiunta di un controllo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

6 Spazio degli stati 546.1 Equazioni in forma di spazio degli stati . . . . . . . . . . . . . . . . . . . . . . . . . 54

6.1.1 Progetto di un controllore utilizzando il posizionamento dei poli . . . . . . 556.1.2 Input di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566.1.3 Progetto di un osservatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

6.2 Risoluzione tramite analisi SS del controllore di beccheggio . . . . . . . . . . . . . 616.2.1 Controllabilità e osservabilità . . . . . . . . . . . . . . . . . . . . . . . . . . 616.2.2 Progetto del controllore mediante posizionamento dei poli . . . . . . . . . . 62

7 Dati discreti 657.1 Introduzione ai controllori a dati discreti . . . . . . . . . . . . . . . . . . . . . . . . 65

7.1.1 Zero order hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657.1.2 Conversione dei dati utilizzando c2d . . . . . . . . . . . . . . . . . . . . . . 677.1.3 Stabilità e risposta nel transitorio . . . . . . . . . . . . . . . . . . . . . . . . 687.1.4 Root locus discreto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

7.2 Risoluzione del controllo di beccheggio nel caso discreto . . . . . . . . . . . . . . . 697.2.1 Spazio degli stati discreto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717.2.2 Controllabilità e osservabilità . . . . . . . . . . . . . . . . . . . . . . . . . . 717.2.3 Progetto del controllo mediante posizionamento dei poli . . . . . . . . . . . 72

8 Simulink 748.1 Elementi di Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

8.1.1 Elementi di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748.1.2 Esempio di modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758.1.3 Esempio del modello di un sistema . . . . . . . . . . . . . . . . . . . . . . . 808.1.4 Importare valori da Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

8.2 Creazione di un modello fisico con Simulink . . . . . . . . . . . . . . . . . . . . . . 838.2.1 Sistema treno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838.2.2 Costruire il modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838.2.3 Avviare la simulazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878.2.4 Modello Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

8.3 Risoluzione del controllore di beccheggio con Simulink . . . . . . . . . . . . . . . . 908.3.1 Creazione del modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908.3.2 Risposta open loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928.3.3 Inserimento di un controllore full-state . . . . . . . . . . . . . . . . . . . . . 93

INDICE iv

II Modello di un velivolo tramite Simulink 97

9 Creazione del modello 989.1 Blocchi di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

9.1.1 Modello aerodinamico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989.1.2 Sistemi di riferimento e angoli di eulero . . . . . . . . . . . . . . . . . . . . 1009.1.3 Equazioni del moto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

9.2 Sviluppo del modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029.2.1 Input del modello aerodinamico . . . . . . . . . . . . . . . . . . . . . . . . . 1029.2.2 Calcolo delle forze e dei momenti . . . . . . . . . . . . . . . . . . . . . . . . 1049.2.3 Completamento del modello e definizione dei parametri . . . . . . . . . . . 1069.2.4 Immissione dei parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089.2.5 Simulazione a comandi bloccati . . . . . . . . . . . . . . . . . . . . . . . . . 110

10 Animazione e controllo 11110.1 Animazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

10.1.1 Animazione tramite Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . 11110.1.2 Animazione tramite FlightGear . . . . . . . . . . . . . . . . . . . . . . . . . 115

10.2 Controllo e Trim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11810.2.1 Controllo di beccheggio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11810.2.2 Controllo di quota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12010.2.3 Trim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

10.3 Perturbazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

11 Altri modelli di velivoli 13711.1 Il modello Beaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

11.1.1 Funzioni del toolbox FDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13911.2 AirLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

A Modello aerodinamico 141

Elenco delle figure

1.1 Rappresentazione della funzione sin(t) . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.1 Modello del sistema treno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.2 Risposta open loop del sistema treno . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3 Sistemi di riferimento e forze agenti su un aereo . . . . . . . . . . . . . . . . . . . . 102.4 Risposta open loop del controllore di pitch . . . . . . . . . . . . . . . . . . . . . . . 12

3.1 Sistema con feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2 Sistema massa molla smorzatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.3 Risposta open loop del sistema massa molla smorzatore . . . . . . . . . . . . . . . 153.4 Risposta closed loop del sistema massa molla smorzatore con controllo P . . . . . . 163.5 Risposta closed loop del sistema massa molla smorzatore con controllo PD . . . . . 173.6 Risposta closed loop del sistema massa molla smorzatore con controllo PI . . . . . 173.7 Risposta closed loop del sistema massa molla smorzatore con controllo PID . . . . 183.8 Confronto delle quattro risposte ottenute. . . . . . . . . . . . . . . . . . . . . . . . 193.9 Controllore di beccheggio, risposta con controllo P (KP = 2) . . . . . . . . . . . . 203.10 Controllore di beccheggio, risposta con controllo PD (KP = 9,KD = 4) . . . . . . . 213.11 Controllore di beccheggio, risposta con controllo PID (KP = 5,KD = 7,KI = 5) . . 21

4.1 Rappresentazione di un sistema closed loop con feedback . . . . . . . . . . . . . . . 224.2 Root locus del sistema d’esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.3 Root locus del sistema d’esempio con curve a ζ e ωn costanti . . . . . . . . . . . . . 244.4 Posizione del polo selezionato e dei poli corrispondenti . . . . . . . . . . . . . . . . 254.5 Risposta closed loop del sistema d’esempio . . . . . . . . . . . . . . . . . . . . . . . 264.6 Root locus del sistema d’esempio per il filtro notch . . . . . . . . . . . . . . . . . . 274.7 Risposta closed loop del sistema d’esempio per il filtro notch (K = 4) . . . . . . . . 284.8 Root locus del sistema d’esempio con filtro notch applicato . . . . . . . . . . . . . . 294.9 Risposta closed loop del sistema d’esempio con filtro notch applicato (K = 77) . . 294.10 Root locus del sistema di controllo di beccheggio. . . . . . . . . . . . . . . . . . . . 304.11 Root locus del sistema di controllo di beccheggio con lead compensator. . . . . . . . 314.12 Risposta closed loop del controllore di beccheggio ottenuta col metodo del Root locus. 31

5.1 Sistema closed loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.2 Sistema closed loop trasformato in open loop . . . . . . . . . . . . . . . . . . . . . . 335.3 Sistema closed loop con azione di disturbo . . . . . . . . . . . . . . . . . . . . . . . 335.4 Sistema closed loop con feedback non unitario . . . . . . . . . . . . . . . . . . . . . 345.5 Sistema con feedback non unitario trasformato in sistema con feedback unitario . . 345.6 Sistema closed loop con feedback unitario con integratori . . . . . . . . . . . . . . . 355.7 Diagrammi di Bode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355.8 Generico sistema closed loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.9 Margini di fase e di guadagno sui diagrammi di Bode . . . . . . . . . . . . . . . . . 365.10 Margini di fase e di guadagno trovati da Matlab sui diagrammi di Bode . . . . . . 375.11 Diagrammi di Bode del sistema d’esempio . . . . . . . . . . . . . . . . . . . . . . . 385.12 Risposta di un sistema con frequenza minore della frequenza di cut off . . . . . . . 385.13 Risposta di un sistema con frequenza maggiore della frequenza di cut off . . . . . . 395.14 Diagrammi di Bode del sistema senza controllo . . . . . . . . . . . . . . . . . . . . 405.15 Risposta open loop del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.16 Diagrammi di Bode del sistema con controllo (con solo integratore) . . . . . . . . . 425.17 Diagrammi di Bode del sistema controllato (con integratore e guadagno unitario) . 425.18 Diagrammi di Bode del sistema controllato (con integratore e guadagno pari a 5) . 43

v

ELENCO DELLE FIGURE vi

5.19 Risposta closed loop del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435.20 Sistema closed loop con feedback non unitario . . . . . . . . . . . . . . . . . . . . . 445.21 Diagramma di Nyquist con guadagno unitario . . . . . . . . . . . . . . . . . . . . . 455.22 Diagramma di Nyquist con guadagno pari a 20 . . . . . . . . . . . . . . . . . . . . 465.23 Diagramma di Nyquist con guadagno pari a 0,5 . . . . . . . . . . . . . . . . . . . . 465.24 Diagramma di Nyquist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.25 Margine di fase sul diagramma di Nyquist . . . . . . . . . . . . . . . . . . . . . . . 485.26 Diagramme di Bode di un anticipatore di fase . . . . . . . . . . . . . . . . . . . . . 495.27 Diagramma di Bode di un ritardatore di fase . . . . . . . . . . . . . . . . . . . . . 505.28 Diagramma di Nyquist con funzione modificata del controllore di beccheggio . . . . 515.29 Risposta closed loop del controllo di beccheggio . . . . . . . . . . . . . . . . . . . . 515.30 Risposta closed loop del controllo di beccheggio con l’aggiunta di uno zero . . . . . 525.31 Risposta closed loop del controllo di beccheggio con l’aggiunta di due zeri . . . . . 53

6.1 Modello di pallina sospesa con un campo magnetico . . . . . . . . . . . . . . . . . 556.2 Risposta open loop del sistema pallina e campo magnetico . . . . . . . . . . . . . . 566.3 Diagramma a blocchi del sistema pallina e campo magnetico . . . . . . . . . . . . . 576.4 Simulazione lineare closed loop del sistema pallina e campo magnetico . . . . . . . 576.5 Simulazione lineare closed loop del sistema con poli allontanati . . . . . . . . . . . 586.6 Simulazione lineare closed loop con input a gradino del sistema . . . . . . . . . . . 596.7 Simulazione lineare closed loop con input a gradino del sistema (scalato) . . . . . . 596.8 Diagramma a blocchi del sistema più l’osservatore . . . . . . . . . . . . . . . . . . 606.9 Simulazione lineare closed loop dell’osservatore con input a gradino . . . . . . . . . 616.10 Simulazione lineare closed loop del sistema di controllo di beccheggio . . . . . . . . 636.11 Simulazione lineare closed loop del sistema di controllo di beccheggio (scalato) . . . 64

7.1 Diagramma a blocchi di un sistema con controllo digitale . . . . . . . . . . . . . . 657.2 Funzione Hzoh(z) nel diagramma a blocchi di un sistema con controllo digitale . . 667.3 Esempio di zero order hold. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667.4 Linee a coefficente di smorzamento e frequenza naturale costante nello z-plane . . . 697.5 Mappa poli-zeri della funzione discreta d’esempio . . . . . . . . . . . . . . . . . . . 707.6 Risposta al gradino della funzione discreta . . . . . . . . . . . . . . . . . . . . . . . 707.7 Risposta a dati discreti del controllore di beccheggio . . . . . . . . . . . . . . . . . 727.8 Risposta a dati discreti del controllore di beccheggio con fattore di scala . . . . . . 73

8.1 Posizione del tasto Simulink in Matlab . . . . . . . . . . . . . . . . . . . . . . . . . 748.2 Libreria di Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758.3 Modello di esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768.4 Finestra di dialogo del blocco Transfer Fcn . . . . . . . . . . . . . . . . . . . . . . 768.5 Modello modificato con la nuova funzione di trasferimento . . . . . . . . . . . . . . 778.6 Finestra di dialogo del blocco Step . . . . . . . . . . . . . . . . . . . . . . . . . . . 778.7 Finestra di dialogo del blocco Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 788.8 Posizione del comando Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788.9 Risposta del modello d’esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798.10 Risposta del modello d’esempio con autoscale . . . . . . . . . . . . . . . . . . . . . 798.11 Risposta del modello d’esempio con funzione di trasferimento modificata ([1 20 400]) 808.12 Tempo di inizio e fine simulazione nella finestra di configurazione di simulazione . . 808.13 Risposta del sistema con tempo di simulazione modificato (0, 8 < t < 2) . . . . . . 808.14 Blocchi inseriti nel modello di un sistema . . . . . . . . . . . . . . . . . . . . . . . 818.15 Blocchi modificati nel modello di un sistema . . . . . . . . . . . . . . . . . . . . . . 828.16 Collegamento dei blocchi del modello di un sistema . . . . . . . . . . . . . . . . . . 828.17 Risposta del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838.18 Modello del sistema treno, passo 1: blocchi Sum . . . . . . . . . . . . . . . . . . . 848.19 Modello del sistema treno, passo 2: blocchi Gain . . . . . . . . . . . . . . . . . . . 848.20 Modello del sistema treno, passo 3: blocchi Integrator . . . . . . . . . . . . . . . . 858.21 Modello del sistema treno, passo 4: blocchi Scope . . . . . . . . . . . . . . . . . . . 858.22 Modello del sistema treno, passo 5: modifica dei blocchi Sum . . . . . . . . . . . . 868.23 Modello del sistema treno, passo 6: blocco Signal generator . . . . . . . . . . . . . 868.24 Modello del sistema treno, passo 7: forza d’attrito . . . . . . . . . . . . . . . . . . 878.25 Modello del sistema treno, passo 8: azione della molla . . . . . . . . . . . . . . . . 888.26 Modello del sistema treno, passo 9: blocco Scope per l’output della velocità . . . . 888.27 Risposta del modello del treno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

ELENCO DELLE FIGURE vii

8.28 Estrapolazione del modello in Matlab tramite blocco Out . . . . . . . . . . . . . . 898.29 Modello di controllo di beccheggio, passo 1: blocco Integrator . . . . . . . . . . . . 908.30 Modello di controllo di beccheggio, passo 2: prima equazione di stato . . . . . . . . 918.31 Modello di controllo di beccheggio, passo 3: equazione di output . . . . . . . . . . 928.32 Modello di controllo di beccheggio, passo 4: blocchi In e Out . . . . . . . . . . . . 928.33 Modello di controllo di beccheggio, passo 5: blocco Subsystem . . . . . . . . . . . . 938.34 Modello di controllo di beccheggio, passo 6: blocchi Step e Scope . . . . . . . . . . 948.35 Modello di controllo di beccheggio, risposta open loop . . . . . . . . . . . . . . . . 948.36 Modello di controllo di beccheggio, passo 7: inserimento di un controllore . . . . . 958.37 Modello di controllo di beccheggio, risposta closed loop . . . . . . . . . . . . . . . . 96

9.1 F-4 Phantom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989.2 Inserimento del blocco S-function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009.3 Finestra di dialogo del blocco S-function . . . . . . . . . . . . . . . . . . . . . . . . 1009.4 Inserimento del blocco 6DoF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019.5 Finestra di dialogo con parametri modificati del blocco 6DoF . . . . . . . . . . . . 1019.6 Aggiunta dei blocchi Reshape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029.7 Inserimento dei blocchi Constant nel modello . . . . . . . . . . . . . . . . . . . . . 1039.8 Inserimento delle velocità angolari nel vettore di input . . . . . . . . . . . . . . . . 1039.9 Inserimento della velocità e degli angoli di incidenza nel vettore di input . . . . . . 1049.10 Inserimento del blocco COESA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059.11 Inserimento del blocco Dynamic Pressure . . . . . . . . . . . . . . . . . . . . . . . 1059.12 Calcolo delle forze aerodinamiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069.13 Inserimento del blocco Turbofan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1079.14 Inserimento del vettore forza peso in assi Body . . . . . . . . . . . . . . . . . . . . 1079.15 Immissione delle forze e dei momenti nel blocco 6DoF . . . . . . . . . . . . . . . . 1089.16 Modello completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099.17 Andamento della quota a comandi bloccati . . . . . . . . . . . . . . . . . . . . . . 1109.18 Andamento degli angoli di eulero a comandi bloccati . . . . . . . . . . . . . . . . . 110

10.1 Blocchi In e Out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11210.2 Blocco Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11310.3 Modello equivalente con il blocco Subsystem . . . . . . . . . . . . . . . . . . . . . . 11310.4 Inserimento del blocco 6DoF Animation . . . . . . . . . . . . . . . . . . . . . . . . 11410.5 Finestra di dialogo del blocco 6DoF Animation . . . . . . . . . . . . . . . . . . . . 11410.6 Animazione tramite il blocco 6DoF Animation . . . . . . . . . . . . . . . . . . . . 11510.7 Inserimento del blocco FlightGear Preconfigured 6DoF Animation . . . . . . . . . . 11610.8 Cambio di coordinate nel blocco Flat Earth to LLA . . . . . . . . . . . . . . . . . . 11710.9 Modifiche del blocco Generate Run Script . . . . . . . . . . . . . . . . . . . . . . . 11710.10Screenshot dell’animazione in Flight Gear . . . . . . . . . . . . . . . . . . . . . . . 11810.11Modello del sistema con controllo di beccheggio . . . . . . . . . . . . . . . . . . . . 11910.12Andamento dell’angolo di beccheggio nel sistema controllato . . . . . . . . . . . . . 11910.13Modello del sistema con controllo quota . . . . . . . . . . . . . . . . . . . . . . . . 12010.14Andamento della quota nel sistema con controllo di quota . . . . . . . . . . . . . . 12110.15Andamento dell’angolo di deflessione degli equilibratori nel sistema controllato . . 12110.16Schermata iniziale del Control ed estimation tools Manager . . . . . . . . . . . . . 12210.17Finestra ottenuta con Sync with the model . . . . . . . . . . . . . . . . . . . . . . . 12210.18Tag States modificata (volo livellato) . . . . . . . . . . . . . . . . . . . . . . . . . . 12310.19Tag States dell’Operating Point (volo livellato) . . . . . . . . . . . . . . . . . . . . 12310.20Tag Inputs dell’Operating Point (volo livellato) . . . . . . . . . . . . . . . . . . . . 12410.21Opzione Export to workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12510.22Andamento della quota del velivolo in condizione di equilibrio . . . . . . . . . . . . 12510.23Andamento degli angoli di eulero del velivolo in condizione di equilibrio . . . . . . 12610.24Andamento della velocità (assi Earth) del velivolo in condizione di equilibrio . . . . 12610.25Aggiunta dell’output V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12710.26Andamento degli angoli di eulero nella nuova condizione di trim . . . . . . . . . . . 12710.27Andamento di θ e δE al variare di velocità e quota . . . . . . . . . . . . . . . . . . 12810.28Aggiunta dell’output omega_e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12810.29Aggiunta dell’output n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12910.30Blocco raggio di virata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13010.31Configurazione del modello con i nuovi output (virata) . . . . . . . . . . . . . . . . 13010.32Tag States dell’Operating Point (virata) . . . . . . . . . . . . . . . . . . . . . . . . 131

ELENCO DELLE FIGURE viii

10.33Tag Outputs dell’Operating Point (virata) . . . . . . . . . . . . . . . . . . . . . . . 13110.34Traiettorie di virate corrette a diverse velocità di virata . . . . . . . . . . . . . . . 13210.35Creazione dell’input Vw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13210.36Aggiunta del Signal Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13310.37Blocco Signal builder modificato per la raffica verticale . . . . . . . . . . . . . . . . 13310.38Andamento dell’angolo d’attaco nel caso di raffica verticale . . . . . . . . . . . . . 13410.39Andamento della quota nel caso di raffica verticale . . . . . . . . . . . . . . . . . . 13410.40Blocco Signal builder modificato per la raffica laterale . . . . . . . . . . . . . . . . 13510.41Andamento dell’angolo di imbardata nel caso di raffica laterale . . . . . . . . . . . 13510.42Andamento della quota nel caso di raffica laterale . . . . . . . . . . . . . . . . . . . 13610.43Confronto delle traiettorie di virata con e senza raffica . . . . . . . . . . . . . . . . 136

11.1 Modello Beaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13711.2 Modello aerodinamico del Beaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13811.3 Modello propulsivo del Beaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13811.4 Risoluzione delle equazioni del moto nel modello Beaver . . . . . . . . . . . . . . . 13911.5 Schermata di selezione dei modelli in Airlib . . . . . . . . . . . . . . . . . . . . . . 140

A.1 Alcuni grafici del coefficiente aerodinamico CZ . . . . . . . . . . . . . . . . . . . . 143A.2 Alcuni grafici del coefficiente aerodinamico CX . . . . . . . . . . . . . . . . . . . . 144A.3 Alcuni grafici del coefficiente aerodinamico Cm . . . . . . . . . . . . . . . . . . . . 145A.4 Alcuni grafici del coefficiente aerodinamico Cl . . . . . . . . . . . . . . . . . . . . . 146

Premessa

L’elaborato mostra vari utilizzi possibili di Matlab e Simulink nel campo ingegneristico, sopratuttoper quanto riguarda la creazione di modelli di sistemi fisici e la creazione di controlli per questimodelli. L’elaborato è diviso in due parti, nella prima sono mostrati i vari metodi utilizzabili percreare il modello e implementare il controllo, la seconda mostra come creare un modello non linearedi un velivolo (un F4 McDonnel-Douglas), e come utlizzare questo modello sia per quanto riguardal’animazione 3D, sia per quanto riguarda l’implementazione di controlli o la ricerca di punti diequilibrio.

Va detto che quest’elaborato è pensato per essere utilizzato anche per scopi didattici. Quinditutti gli argomenti trattati nella prima parte saranno accompagnati da un esempio dell’applicazionedell’argomento, e dalla descrizione passo-passo di come svolgere questi esempi. Stesso discorso valeper la seconda parte, la creazione del modello e il suo utilizzo sono descritti in modo da poteressere ripetuti dal lettore.

ix

Parte I

Risoluzione di problemiingegneristici tramite Matlab

1

Capitolo 1

Elementi di Matlab

In questo capitolo saranno utilizzati questi comandi chiave: plot, polyval, roots, conv, deconv, inv,eig, poly.

Matlab è un programma interattivo per la computazione numerica e la visualizzazione di datied è usato in maniera estensiva dagli ingegneri di controllo per l’analisi e il progetto. Esistonomolti toolbox in rete, alcuni open source e gratuiti, che estendono le funzioni base di Matlab indifferenti aree di applicazione. Matlab è supportato da ambienti Unix, Macintosh e Windows. Permaggiori informazioni su Matlab, si rimanda al sito http://www.mathworks.com/.

Per l’utilizzo a scopo didattico di questa prima parte si consiglia di seguire l’elaborato conMatlab in funzione, così da essere in grado di riprodurre tutti i calcoli e le figure ricopiando il testodall’elaborato nella Command Window o in un m-file.

1.1 VettoriIniziamo creando qualcosa di semplice, come un vettore. Questo può essere ottenuto inserendo ognielemento del vettore (separato da uno spazio) all’interno di parentesi quadre, e ponendo il tuttouguale ad una variabile. Ad esempio, per creare il vettore a, inseriamo nella Command Windowdi matlab:

>> a = [1 2 3 4 5 6 9 8 7]

MatLab dovrebbe rispondere:

a = 1 2 3 4 5 6 9 8 7

Ipotizziamo ora di voler creare un vettore di elementi compresi tra 0 e 20 (compreso), spaziati daincrementi di 2 (questo metodo è frequentemente usato per creare un vettore di tempo):

>>t = 0:2:20t = 0 2 4 6 8 10 12 14 16 18 20

Manipolare vettori è facile quasi quanto crearli. Per prima cosa, proviamo ad aggiungere 2 adogni elemento del vettore a. Il comando sarà:

>>b = a + 2b =3 4 5 6 7 8 11 10 9

Ora Ipotizziamo di voler sommare 2 vettori tra loro. Se i due vettori hanno la stessa lunghezza èabbastanza facile, basta usare il seguente comando:

>> c = a + bc = 4 6 8 10 12 14 20 18 16

Le sottrazioni tra vettori della stessa lunghezza funzionano allo stesso modo.

1.2 FunzioniMatlab include molte funzioni standard. Ogni funzione è un blocco di codice che porta a termineun compito specifico. Matlab contiene tutte le funzioni standard come sin, cos, exp, sqrt e lecostanti più comuni come π, e i o j per la radice quadrata di -1 (unità immaginaria). Per cui:

2

CAPITOLO 1. ELEMENTI DI MATLAB 3

>> sin(pi/4)ans = 0.7071

Per capire l’uso di qualsiasi funzione, basta digitare help [nome funzione]. Matlab consente discrivere le proprie funzioni col comando Function.

1.3 GraficiIpotizziamo di voler disegnare il grafico di un’onda sinusoidale in funzione del tempo. Per primacosa si crea un vettore tempo e poi si calcola il valore del seno ad ogni istante di tempo (si usa ilpunto e virgola alla fine di un istruzione per non far visualizzare la risposta a Matlab):

>> t=0:0.25:7;>> y = sin (t);>> plot (t,y)

0 1 2 3 4 5 6 7−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Figura 1.1 Rappresentazione della funzione sin(t)

Il grafico contiene approssimativamente un periodo di un’onda sinusoidale. Il plot di base èmolto semplice in Matlab, e il comando plot è altamente personalizzabile, come vedremo via vianell’elaborato.

1.4 PolinomiIn Matlab un polinomio è rappresentato da un vettore. Per creare un polinomio in Matlab, bastainserire tutti i coefficienti di questo in un vettore in ordine decrescente. Ad esempio, ipotizziamodi avere il polinomio:

s4 + 3s3 − 15s2 − 2s+ 9

Per inserirlo in Matlab, basta inserire questo vettore:

>> x = [1 3 -15 -2 9];

Matlab interpreta un vettore di lunghezza n + 1 come un polinomio di ordine n. Quindi, se nelpolinomio mancano dei coefficienti, dovremo inserire degli 0 nelle posizioni appropriate del vettore.Ad esempio:

s4 + 1

va rappresentato in Matlab come:

>> y = [1 0 0 0 1]

CAPITOLO 1. ELEMENTI DI MATLAB 4

Possiamo trovare il valore del polinomio usando la funzione polyval. Ad esempio, per trovareil valore di quest’ultimo polinomio ad s = 2 andremo a scrivere:

>> z = polyval([ 1 0 0 0 1], 2)z = 17

Possiamo anche estrarre le radici di un polinomio, utile quando si hanno polinomi di ordinealto come:

s4 + 3s3 − 15s2 − 2s+ 9

Per trovare le radici si usa il comando roots:

>> roots([1 3 -15 -2 9])ans =

-5.57452.5836-0.79510.7860

Ipotizziamo di volere moltiplicare 2 polinomi tra loro. Possiamo trovare il risultato utilizzandola convoluzione dei loro coefficienti. La funzione in Matlab che fa questo è conv. Per cui, dati ipolinomi:

s+ 2s2 + 4s+ 8

Si procederà così:

>> x = [1 2];>> y = [1 4 8];>> z = conv(x,y)z = 1 6 16 16

Che equivale a:s3 + 6s2 + 16s+ 16 (1.1)

Dividere due polinomi è ugualmente semplice. La funzione deconv restituisce il risultato ed ilresto. Dividamo quindi z per y e vediamo il risultato:

>> [xx, R] = deconv(z,y)

xx = 1 2R = 0 0 0 0

Notiamo che questo è proprio il polinomio/vettore x già definito. Se y non fosse entrato perfetta-mente in z, il vettore resto sarebbe stato non nullo.

1.5 MatriciInserire le matrici in Matlab è simile all’inserire vettori, con la differenza che ogni riga è separatada un punto e virgola o da un Return:

>> B = [1 2 3 4; 5 6 7 8; 9 10 11 12]B =

1 2 3 45 6 7 89 10 11 12

>> B = [1 2 3 45 6 7 89 10 11 12]

B =1 2 3 45 6 7 89 10 11 12

Le matrici in Matlab possono essere manipolate in molti modi. Per prima cosa, possiamotrovare la trasposta di una matrice usando l’apostrofo:

CAPITOLO 1. ELEMENTI DI MATLAB 5

>> C = B’C =1 5 92 6 103 7 114 8 12

Notiamo che se C fosse stata complessa, l’apostrofo avrebbe restituito la complessa coniugatatrasposta. In quel caso per ottenere la trasposta si deve usare .’ (i due comandi hanno lo stessoeffetto se la matrice non è complessa).

Ora possiamo moltiplicare le 2 matrici B e C (Nel prodotto matriciale riga per colonna l’ordinedelle matrici è importante):

>> D = B * CD =

30 70 11070 174 278110 278 446

>> D = C * BD =

107 122 137 152122 140 158 176137 158 179 200152 176 200 224

Un altra opzione di manipolazione di matrici è il prodotto elemento per elemento con .* (lematrici devono avere le stesse dimensioni):

>> E = [1 2;3 4]>> F = [2 3;4 5]>> G = E .* F

G =2 612 20

Una matrice quadrata, come la E, può essere moltiplicata più volte per se stessa elevandola aduna potenza:

>> E.3ans =

37 5481 118

Se invece vogliamo elevare al cubo i singoli membri della matrice, dovremmo fare un elevazioneelemento per elemento col .^:

>> E.^3ans =

1 827 64

Possiamo trovare anche l’inversa di una matrice:

>> X = inv(E)I =

-2.0000 1.00001.5000 -0.5000

O i suoi autovalori:

>> eig(E)ans =

-0.3723 5.3723

Esiste anche una funzione per trovare il polinomio caratteristico di una matrice. La funzionepoly crea un vettore che include i coefficienti del polinomio caratteristico:

CAPITOLO 1. ELEMENTI DI MATLAB 6

>> p = poly(E)p =

1.0000 -5.0000 -2.0000

Si ricorda che gli autovalori di una matrice sono uguali alle radici del polinomio caratteristico,quindi:

>> roots(p)ans =

5.3723-0.3723

1.6 M-FileUsando Matlab in Windows, è incluso un built-in editor per m-file. Negli m-file può essere scrittauna successione di comandi che verranno riprodotti in serie semplicemente lanciando lo m-file, opuò essere creata una funzione da utilizzare successivamente.

Capitolo 2

Creazione del modello di unsistema

In questo capitolo verranno usati questi comandi chiave: tf, ss, step, impulse, ss2tf, ssdata.Matlab può essere usato per rappresentare un sistema fisico o un modello. In questo capitolo

vedremo come inserire un modello con equazioni differenziali in Matlab.

2.1 Creazione del modello di un sistema e sistema trenoIn questo esempio considereremo un treno giocattolo composto da una motrice e un vagone. Assu-mendo che il treno viaggi in una sola direzione, vogliamo applicargli un controllo in modo da averepartenze e fermate dolci, insieme ad un velocità di crociera costante.

Le massa della motrice e del vagone sono rappresentate rispettivamente con M1 e M2. Questesono unite insieme da una molla di coefficente elastico k. La forza applicata dalla motrice saràrappresentata con F , il coefficente di attrito volvente con µ.

2.1.1 Diagramma del corpo libero e leggi di NewtonIl sistema può essere rappresentato come nella figura 2.1. Dalla legge di Newton sappiamo chela somma delle forze agenti su un corpo è uguale al prodotto della massa per l’accelerazione. Inquesto caso, le forze agenti su M1 sono la reazione della molla, la forza di attrito e la forza dovutaal motore, mentre le forze agenti su M2 sono la reazione della molla e la forza di attrito. Lungo ladirezione verticale, la forza di gravità è cancellata dalla forza normale applicata dal suolo, quindinon ci sarà accelerazione lungo la verticale. Le equazioni del moto in direzione orizzontale sono leseguenti:

M1x1 = F − k(x1 − x2)−M1gx1µ (2.1a)M2x2 = k(x1 − x2)−M2gx2µ (2.1b)

2.1.2 Variabili di stato e equazioni di outputQueste equazioni possono essere manipolate nella forma delle variabili di stato. Le variabili distato sono le posizioni, x1 e x2, e le velocità, v1 e v2; la variabile di input è F . Le equazioni distato risultano:

x1 = v1 (2.2a)

v1 = − k

M2x1 − gv1µ+ k

M1x2 + F

M1(2.2b)

x2 = v2 (2.2c)

v2 = k

M2x1 −

k

M2x2 − gv2µ (2.2d)

Ponendo infine come output del sistema la velocità della motrice, l’equazione di output sarà:

y = v1 (2.3)

7

CAPITOLO 2. CREAZIONE DEL MODELLO DI UN SISTEMA 8

x1 x2

M1 M2

M1gx1µM2gx2µ

k(x1 − x2)

k(x1 − x2)

F

1

Figura 2.1 Modello del sistema treno

Funzione di trasferimento

Per trovare la funzione di trasferimento, per prima cosa applichiamo la trasformata di Laplace alleequazioni differenziali (per trovare la funzione di trasferimento si assume lo stato iniziale nullo).

M1s2X1(s) = F (s)− k(X1(s)−X2(s))−M1gsX1(s)µ (2.4a)

M2s2X2(s) = k(X1(s)−X2(s))−M2gsX2(s)µ (2.4b)

L’equazione di output diventa:Y (s) = V1(s) = sX1(s) (2.5)

La variabile X1 deve essere eliminata algebricamente per lasciare un espressione in Y (s)/F (s). Lafunzione assume quindi questa forma:

Y (s)F (s) = M2s

2 +M2gsµ+ k

M1M2s3 + (2M1M2gµ)s2 + (M1k +M1M2(gµ)2 +M2k)s+ kgµ(M1M2) (2.6)

Spazio degli stati

Oltre all’utilizzo della funzione di trasferimento, esiste un altro metodo per inserire creare il modellomatematico del sistema, mediante l’utilizzo dello spazio degli stati. Il comportamento del sistemaè caratterizzato da 4 matrici (A,B,C e D) che saranno usate per risolvere il problema. Lo spaziodegli stati si trova a partire dalle variabili di stato:

x1v1x2v2

=

0 1 0 0

−k/M1 −gµ k/M1 00 0 0 1

k/M2 0 −k/M2 −gµ

x1v1x2v2

+

0

1/M100

[F ] (2.7)

Mentre il vettore di output sarà:

y =[

0 1 0 0]

x1v1x2v2

+ [0][F ] (2.8)

2.1.3 Rappresentazione in MatlabOra vedremo come inserire le equazioni appena trovate in Matlab. Poichè non è lo scopo di questoelaborato utilizzare Matlab per manipolare variabili simboliche assegneremo dei valori numerici.

• M1 =1,0 kg

• M2 =0,5 kg

• k =1,0 N/m

• F =1,0 N

CAPITOLO 2. CREAZIONE DEL MODELLO DI UN SISTEMA 9

• u =0,002 s/m

• g=9,8 m/s2

Creiamo un nuovo m-File ed inseriamo questi comandi:

M1=1;M2=0.5;k=1;F=1;u=0.002;g=9.8;

Ora possiamo seguire due strade:Usare la funzione di trasferimento o usare lo spazio degli statiper risolvere il problema. Se scegliamo di usare la funzione di trasferimento dovremo aggiungerequesti comandi all’m-file:

num=[M2 M2*u*g k];den=[M1*M2 2*M1*M2*u*g M1*k+M1*M2*u*u*g*g+M2*k M1*k*u*g+M2*k*u*g];train=tf(num,den)

Se invece scegliamo di usare lo spazio degli stati dovremo inserire questi comandi:

A=[ 0 1 0 0;-k/M1 -u*g k/M1 0;

0 0 0 1;k/M2 0 -k/M2 -u*g];

B=[ 0; 1/M1; 0; 0];C=[0 1 0 0];D=[0];train=ss(A,B,C,D)

2.1.4 Come continuare la risoluzione del problemaUna volta inserite in Matlab le equazioni differenziali che rappresentano il problema, in forma difunzione di trasferimento o spazio degli stati, il comportamento open loop e closed loop può esserstudiato. Per ottenere la risposta open loop del sistema si deve aggiungere il comando:

step(F*train)

Lanciando l’m-file si ottiene il grafico dell’ampiezza della risposta (nel nostro caso v) in funzionedel tempo (Fig 2.2).

2.1.5 Conversione Funzione di trasferimento/Spazio degli statiSebbene gran parte delle operazioni possono essere effettuate usando sia la funzione di trasferimento(da ora TF) che lo spazio degli stati (da ora SS), è semplice passare tra le due rappresentazioni senecessario.

Per passare da spazio degli stati a funzione di trasferimento si utilizza il comando:

>>[num,den]=ss2tf(A,B,C,D,iu)

Dove iu è l’iu-esimo input per cui si vuole la TF. Nel caso di singolo input, il parametro iu vaomesso.

Per passare da TF a SS, posta G la nostra TF si usa il comando:

[A,B,C,D]=ssdata(G)

2.2 Modello di un controllore beccheggio2.2.1 Modello fisico e sistema di equazioniLe equazioni che governano il moto di un aereo sono un sistema molto complicato di 6 equazionidifferenziali non lineari accoppiate. In ogni caso, sotto certe ipotesi, possono essere disaccoppiate elinearizzate nei piani longitudinale e laterale. Il controllo di beccheggio è un problema longitudinale,

CAPITOLO 2. CREAZIONE DEL MODELLO DI UN SISTEMA 10

0 50 100 150 200 250 3000

5

10

15

20

25

30

35Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 2.2 Risposta open loop del sistema treno

L (Portanza)

D (Resistenza)

X

Z

X’

Z’, W (Peso)

CG

θV

α

γ δ

1

Figura 2.3 Sistemi di riferimento e forze agenti su un aereo

CAPITOLO 2. CREAZIONE DEL MODELLO DI UN SISTEMA 11

e in questo esempio progetteremo un autopilota che controlla il beccheggio di un aereo. Nella figura2.3 vengono mostrati i sistemi di riferimento e le forze agenti sull’aereo.

Ipotizziamo che l’aereo sia in volo rettilineo a velocità e altitudine costante, quindi la spintae la resistenza si cancellano a vicenda e la portanza si bilancia col peso. Inoltre assumiamo cheuna variazione dell’angolo di beccheggio non provoca cambiamenti sulla velocità dell’aereo (irrea-le ma semplificherà un pò il problema). Con queste ipotesi, le equazioni linearizzate del motolongitudinale dell’aereo possono essere così scritte:

α = Fα(α, q, δe) (2.9a)q = Fq(α, q, δe) (2.9b)θ = Fθ(q) (2.9c)

In questo sistema l’input è l’angolo dell’equilibratore, l’output l’angolo di pitch.

2.2.2 Criteri di progettoDefiniamo ora qualche criterio di progetto:

• Overshoot inferiore al 10%

• Rise time inferiore ai 2 secondi

• Settling time minore di 10 secondi

• Errore steady-state minore al 2%

Ad esempio, se l’input è di 0,2 rad (11 gradi), l’angolo di pitch non dovrà superare gli 0,22 rad, deveraggiungere 0.2 rad in 2 secondi, stabilizzarsi al 2% dello steady-state entro 10 secondi e rimaneretra 0,196 e 0,204 rad.

2.2.3 Funzione di trasferimento e spazio degli statiPrima di trovare i due modelli inseriamo dei valori numerici nelle equazioni, riferiti ad un Boeing.

α = −0.313α+ 56.7q + 0.232δe (2.10a)q = −0.0139α− 0.426q + 0.0203δe (2.10b)θ = 56.7q (2.10c)

Funzione di trasferimento

Trasformiamo secondo Laplace le nostre equazioni:

sα(s) = −0.313α(s) + 56.7q(s) + 0.232δe(s) (2.11a)sq(s) = −0.0139α(s)− 0.426q(s) + 0.0203δe (2.11b)sθ(s) = 56.7q(s) (2.11c)

Dopo qualche sostituzione otteniamo questa TF:

θ(s)δ2(s) = 1.151s+ 0.1774

s3 + 0.739s2 + 0.921s (2.12)

Spazio degli stati

Poichè le equazioni sono già nella forma stato-variabile, possiamo subito scrivere il modello SS: αq

θ

=

−0.313 56.7 0−0.0139 −0.426 0

0 56.7 0

αqθ

+

0.2320.0203

0

[δe] (2.13)

E considerando che il nostro output è l’angolo di beccheggio:

y =[

0 0 1] α

+ [0][δe] (2.14)

CAPITOLO 2. CREAZIONE DEL MODELLO DI UN SISTEMA 12

0 5 10 150

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 2.4 Risposta open loop del controllore di pitch

2.2.4 Rappresentazione in Matlab e risposta open loopOra siamo pronti per osservare le caratteristiche del sistema usando Matlab. Per prima cosa, simu-leremo un sistema open loop sottoposto a gradino unitario e determineremo quali caratteristichedel sistema necessitano di esser migliorate. Ipotizziamo un input (δe) di 0,2 rad. Creiamo un nuovom-file e inseriamo questi comandi:

de=0.2;num=[1.151 0.1774];den=[1 0.739 0.921 0];pitch=tf(num,den);step(de*pitch)axis([0 15 0 0.8])

Lanciando questo m-file dovremmo ottenere il grafico nella figura2.4. Dal grafico osserviamoche la risposta open loop non soddisfa per niente i requisiti di progetto (va detto che per θ alti lalinearizzazione non ha più senso, quindi il grafico è significativo solo per bassi valori di θ).

Per usare il modello SS, inseriamo invece questi comandi nell’m-file:

de=0.2;A=[-0.313 56.7 0; -0.0139 -0.426 0; 0 56.7 0];B=[0.232; 0.0203; 0];C=[0 0 1];D=[0];pitch=ss(A,B,C,D);step(de*pitch)axis([0 15 0 0.8])

Lanciano questo m-file dovremmo avere lo stesso grafico di prima.

Capitolo 3

Controllo PID

In questo capitolo sarà utilizzato il comando chiave feedback.

3.1 Introduzione al controllo PID e sistema massa molla esmorzatore

3.1.1 IntroduzioneIn questo capitolo mostreremo le caratteristiche dei controlli proporzionale P, integrale I, e diffe-renziale D, e come usarli per ottenere la risposta desiderata. Considereremo il sistema con feedbackmostrato nella figura 3.1, dove il sistema è ciò a cui va applicata l’azione di controllo (in questoesempio sarà un sistema massa molla e smorzatore) e il controllore è ciò che modifica la rispostadel sistema in modo da ottenere il comportamento desiderato.

3.1.2 Il controllore a tre terminiLa funzione di trasferimento di un controller PID può essere così scritta:

KP + KI

s+KDs = KDs

2 +KP s+KI

s(3.1)

• KP=Guadagno proporzionale

• KI=Guadagno integrale

• KD=Guadagno differenziale

Per prima cosa osserviamo come lavora il controllore PID nel sistema mostrato nella figura3.1. La variabile e rappresenta l’errore, cioè la differenza tra l’output desiderato R e l’outputeffettivo Y . Il segnalle errore e viene mandato al controllore PID, che calcola sia la derivata chel’integrale del segnale. Il segnale u in uscita dal controllore sarà uguale al guadagno proporzionalemoltiplicato l’errore, più il guadagno integrale moltiplicato l’integrale dell’errore più il guadagnodifferenziale moltiplicato la derivata dell’errore, quindi:

u = Kpe+KI

∫edt+KP

de

dt(3.2)

Controllore SistemaInput

+

−u

YR

Output

e

1

Figura 3.1 Sistema con feedback

13

CAPITOLO 3. CONTROLLO PID 14

x

k

M

bx

F

1

Figura 3.2 Sistema massa molla smorzatore

Il segnale u verrà quindi inviato all’impianto così da ottenere un nuovo output Y . Questo outputviene mandato indietro al comparatore per trovare un nuovo errore e. Il controllore prende il nuovoerrore e calcola la sua derivata ed il suo integrale, e il processo va avanti ciclicamente.

3.1.3 Le caratteristiche dei controllori P,I e DUn controllore proporzionale (KP ) ha l’effetto di diminuire il rise time e ridurre, ma mai eliminare,l’errore steady state. Il controllore integrale (KI) ha l’effetto di eliminare l’errore steady state mapeggiorare la risposta nel transitorio. Il controllore differenziale (KD) ha l’effetto di aumentare lastabilita del sistema, riducendo l’overshoot, e migliorare la risposta nel transitorio. Gli effetti deitre controllori in un sistema closed loop sono sintetizzati in questa tabella:

Tabella 3.1 Dati del controllore PID

Tipo di controllo Rise time Overshoot Settling time Errore ss

KP Diminuzione Aumento Leggero cambiamento DiminuzioneKI Diminuzione Aumento Aumento EliminazioneKD Leggero cambiamento Diminuzione Diminuzione Leggero cambiamento

Notiamo che questi legami non sono accuratissimi poiché i tre controllori interagiscono tra diloro. Quindi questa tabella è accurata solo se si sta determinando il comportamento di un singolocontrollore, mentre nel caso di più controlli può fornire un idea ma non la risposta esatta.

3.1.4 Esempio: massa, molla e smorzatoreSupponiamo di avere un semplice problema massa, molla e smorzatore(fig 3.2). L’equazione chemodella il sistema è:

Mx+ bx+ kx = F (3.3)

Trasformando secondo Laplace la 3.3 otteniamo:

Ms2X(s) + bsX(s) + kX(s) = F (S) (3.4)

La funzione di trasferimento tra l’input F (s) e l’output X(s) diventa:

X(s)F (s) = 1

Ms2 + bs+ k(3.5)

Assumiamo questi valori:

• M =1,0 kg

• b =10Ns/m

• k =20N/m

CAPITOLO 3. CONTROLLO PID 15

0 0.5 1 1.5 2 2.50

0.005

0.01

0.015

0.02

0.025

0.03

0.035

0.04

0.045

0.05Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 3.3 Risposta open loop del sistema massa molla smorzatore

• F =1 N

Inserendoli nella funzione di trasferimento otteniamo:X(s)F (s) = 1

s2 + 10s+ 20 (3.6)

L’obbiettivo del nostro problema è utilizzare i controllori KP , KI e KD per soddisfare questirequisiti:

• Breve rise time

• Minimo overshoot

• Errore steady state assente

3.1.5 Risposta open loopOsserviamo prima la risposta open loop del sistema. Creiamo un nuovo m-file ed inseriamo questocodice:num=1;den=[1 10 20];plant=tf(num,den);step(plant)

Lanciando questo m-file otteniamo il grafico nella figura 3.3. Il guadagno del sistema open loop èdi 1/20, quindi ad un input unitario corrisponde un output di 0,05. Sta a dire che abbiamo unerrore steady state di 0.95, troppo grande. Inoltre il rise time è di circa 1 secondo, e il settling timedi circa 1.5 secondi. Ora progetteremo un controllo che ridurra il rise time e il settling time, edeliminerà l’errore steady state.

3.1.6 Controllo proporzionaleDalla tabella sugli effetti dei controlli possiamo vedere che un controllore proporzionale (KP ) riduceil rise time, aumenta l’overshoot e riduce l’errore steady state. La funzione di trasferimento closedloop del nostro sistema con un controllore proporzionale è:

X(s)F (s) = KP

s2 + 10s+ (20 +KP ) (3.7)

Poniamo il guadagno proporzionale pari a 300 e cambiamo il nostro m-file aggiungendo questeistruzioni:

CAPITOLO 3. CONTROLLO PID 16

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 3.4 Risposta closed loop del sistema massa molla smorzatore con controllo P

Kp=300;contrp=Kp;sys_clp=feedback(contrp*plant,1);t=0:0.01:2;step(sys_clp,t)

Lanciando questo m-file dovremmo avere il grafico nella figura 3.4. Da questo grafico osserviamoche il controllore P ha diminuito sia il rise time che l’errore steady state, ha aumentato l’overshoot(che prima era assente) e ha diminuito di poco il settling time.

Nota: La funzione feedback è usata per ottenere la funzione di trasferimento closed loop apartire dall’open loop senza doverla calcolare manualmente.

3.1.7 Controllo proporzionale-differenzialeOsserviamo ora il comportamento di un controllore PD. Dalla tabella sugli effetti dei controlli os-serviamo che un controllore differenziale diminuisce sia l’overshoot che il settling time. La funzionedi trasferimento del sistema con controllore PD è:

X(s)F (s) = KDs+KP

s2 + (10 +KD)s+ (20 +KP ) (3.8)

Assumiamo KP uguale a 300 e KD uguale a 10. Inseriamo queste istruzioni nel nostro m-file:

Kd=10;contrpd=tf([Kd Kp],1);sys_clpd=feedback(contrpd*plant,1);step(sys_clpd,t)

Lanciandolo dovremmo ottenere il grafico nella figura 3.5 Questo grafico mostra come il controlloredifferenziale diminuisce sia l’overshoot che il settling time, mentre ha poco effetto sia sul rise timeche sull’errore steady state.

3.1.8 Controllore proporzionale-integralePrima di utilizzare un controllo PID, osserviamo il comportamento di un PI. Dalla tabella su-gli effetti dei controlli leggiamo che il controllore integrale diminuisce il rise time, aumenta sial’overshoot che il settling time e elimina l’errore steady state. La funzione di trasferimento con un

CAPITOLO 3. CONTROLLO PID 17

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 3.5 Risposta closed loop del sistema massa molla smorzatore con controllo PD

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 3.6 Risposta closed loop del sistema massa molla smorzatore con controllo PI

controllo PI è:X(s)F (s) = KI +KP s

s3 + 10s2 + (20 +KP )s+KI(3.9)

Riduciamo KP a 40, e poniamo KI uguale a 70. Nell’m-file aggiungiamo questi comandi:

Kp2=30;Ki=70;contrpi=tf([Kp2 Ki],[1 0]);sys_clpi=feedback(contrpi*plant,1);step(sys_clpi,t)

Lanciando questo m-file otterremo il grafico nella figura 3.6 Abbiamo ridotto il guadagno propor-zionale perchè il controllore integrale riduce il rise time e aumenta l’overshoot come il proporzionale(doppio effetto). Vediamo dal grafico che il controllore I ha ridotto l’errore steady state.

CAPITOLO 3. CONTROLLO PID 18

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.80

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 3.7 Risposta closed loop del sistema massa molla smorzatore con controllo PID

3.1.9 Controllo proporzionale-integrale-differenzialeOsserviamo finalmente il controllore PID. La funzione di trasferimento closed loop del sistema concontrollo PID è:

X(s)F (s) = KDs

2 +KP s+KI

s3 + (10 +KD)s2 + (20 +KP )s+KI(3.10)

Dopo vari tentativi si troveranno i guadagni che danno la risposta desiderata. Nel nostro caso sonoKP = 350, KI = 300 e KD = 50. Per avere la conferma, inseriamo queste istruzioni in un nuovom-file.

Kp=350;Ki=300;Kd=50;contr=tf([Kd Kp Ki],[1 0]);sys_cl=feedback(contr*plant,1);t=0:0.01:2;step(sys_cl,t)

Otterremo il grafico nella figura 3.7, in cui possiamo osservare che il sistema closed loop ora nonha overshoot, ha un rise time molto breve e non ha errore steady state. Possiamo confrontare levarie risposte eseguendo questa istruzione:

>> t=(0:001:2) %aumentiamo la precisione delle curve>> plot(t,step(sys_clp,t),’r’,t,step(sys_clpd,t),’g’,t,step(sys_clpi,t),’b’,t,step(

sys_clpid,t),’k’)

Così da ottenere il grafico nella figura 3.8.

3.1.10 Consigli generali per il progetto di un controllore PIDQuando si progetta un controllore PID è consigliabile seguire questi passi:

1. Ottenere la risposta open loop del sistema e determinare cosa deve essere migliorato

2. Aggiungere un controllo P per migliorare il rise time

3. Aggiungere un controllo D per migliorare l’overshoot

4. Aggiungere un controllo I per eliminare l’errore steady state

5. Modificare i valori dei vari guadagni per ottenere la risposta desiderata

CAPITOLO 3. CONTROLLO PID 19

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4

Tempo

Am

piez

za d

ella

ris

post

a

Risposta al gradino

Figura 3.8 Confronto delle quattro risposte ottenute.

E’ importante tenere a mente che non c’è bisogno di implementare tutti e 3 i controlli, a volte èsoddisfacente anche un controllo PI. L’importante è avere un controllore il più semplice (e quindieconomico) possibile.

3.2 Soluzione PID per il controllore di beccheggioNel paragrafo 2.2 abbiamo trovato la funzione di trasferimento di un aereo assumendo come inputl’angolo dell’equilibratore δe e come output l’angolo di beccheggio θ. La TF risultava essere:

θ(s)δes

= 1, 151s+ 0, 1774s3 + 0, 739s2 + 0, 921s (3.11)

Abbiamo anche assunto un input di 0,2 rad e stabilito i seguenti criteri di progetto:

• Overshoot minore del 10%

• Rise time inferiore ai 2 secondi

• Settling time inferiore ai 10 secondi

• Errore steady state minore del 2%

Per inserire il modello open loop del sistema, creiamo un nuovo m-file ed inseriamo questicomandi:

num=[1.151 0.1774];den=[1 0.739 0.921 0];pitch=tf(num,den);de=0.2;

3.2.1 Controllo proporzionaleCome primo approccio al problema, proviamo ad inserire un controllo proporzionale nel sistema.Per il primo tentativo poniamo KP uguale a 1. Per inserire il controllo ed ottenere la funzione ditrasferimento closed loop aggiungiamo queste istruzioni al nostro m-file:

Kp=2;sys_cl=feedback(Kp*pitch,1);

Per simulare la risposta ad una sollecitazione a gradino, completiamo l’m-file con queste righe:

CAPITOLO 3. CONTROLLO PID 20

0 5 10 15 20 25 300

0.05

0.1

0.15

0.2

0.25Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 3.9 Controllore di beccheggio, risposta con controllo P (KP = 2)

t=0:0.01:30;step(de*sys_cl,t)

Lanciando l’m-file otterremo il grafico nella figura 3.9, in cui notiamo che pur avendo risolto iproblemi di errore steady state rispetto al sistema open loop, sia l’overshoot che il settling time nonsoddisfano i nostri criteri di progetto.

3.2.2 Controllo PDPer porre rimedio all’overshoot e al settling time troppo alti inseriamo un controllore PD. Do-po qualche esperimento, troveremo che i valori KD = 9 e KP = 4 soddisfano i nostri criteri.Modifichiamo al solito modo l’m-file inserendo queste righe:

Kp=9;Kd=4;contr=tf([Kd Kp],1);sys_cl=feedback(contr*pitch,1);t=0:0.01:10;step(de*sys_cl,t)

Lanciandolo otterremo il grafico nella figura 3.10. Come si può vedere questa risposta è del tuttosoddisfacente, ed è stata ottenuta senza l’inserimento di un controllo integrale.

3.2.3 Controllo PIDAnche se il controllo PD soddisfa i nostri criteri di progetto, possiamo migliorare la rispostaeliminando il picco iniziale inserendo un controllo integrale. Dopo vari tentativi, i guadagni KD =5,KP = 7 e KI = 5 risultano dare una risposta soddisfacente, visibile nel grafico nella figura 3.11.

CAPITOLO 3. CONTROLLO PID 21

0 1 2 3 4 5 6 7 8 9 100

0.05

0.1

0.15

0.2

0.25Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 3.10 Controllore di beccheggio, risposta con controllo PD (KP = 9,KD = 4)

0 1 2 3 4 5 6 7 8 9 100

0.05

0.1

0.15

0.2

0.25Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 3.11 Controllore di beccheggio, risposta con controllo PID (KP = 5,KD = 7,KI = 5)

Capitolo 4

Metodo del root locus

4.1 Introduzione al metodo del root locusIn questo capitolo verranno usati questi comandi chiave: rlocfind, rlocus, sgrid.

4.1.1 Poli closed loopIl root locus di una funzione di trasferimento open loop H(s) è la posizione (locus) di tutti i possibilipoli della funzione di trasferimento closed loop, al variare di un singolo parametro che assumeremoessere il guadagno di un controllo proporzionale, nel piano reale-immaginario. Lo schema closedloop è rappresentato nella figura 4.1. La funzione di trasferimento closed loop si presenta così:

Y (s)R(s) = KH(s)

1 +KH(s) (4.1)

I poli della funzione closed loop sono tutti i valori di s che risolvono l’equazione:

1 +KH(s) = 0 (4.2)

Se poniamo H(s) = b(s)/a(s) possiamo scrivere l’equazione nella forma:

a(s) +Kb(s) = 0⇔ a(s)K

+ b(s) = 0 (4.3)

Indichiamo con n l’ordine di a(s) e con m l’ordine di b(s). Consideriamo poi tutti i valori positividi K. Per K tendente a 0, i poli della funzione closed loop sono le soluzioni di a(s) = 0 o i poli diH(s). Per K tendente a ∞ i poli della funzione closed loop sono le soluzioni di b(s) = 0 o gli zeridi H(s).

Indifferentemente dal valore di K il sistema closed loop deve avere n poli, dove n è il numerodi poli di H(s). Il root locus deve avere n rami. Ogni ramo parte da un polo di H(s) e finisce inuno zero. Se H(s) ha più poli che zeri, come spesso accade, diremo che ha degli zero all’infinito.Il numero degli zeri all’infinito e quindi il numero dei rami che tende all’infinito è n −m, cioè ilnumero dei poli meno il numero degli zeri.

Poichè il root locus è la posizione di tutti i possibili poli, possiamo selezionare il guadagno chefaccia si che il nostro sistema closed loop si comporti nel modo desiderato. Se uno qualsiasi deipoli selezionati si trova nel semipiano destro, il sistema closed loop sarà instabile. I poli più viciniall’asse immaginario sono quelli che avranno influenza maggiore nella risposta closed loop, quindi

K H(s)Input

+

−u

Yr

Output

e

1

Figura 4.1 Rappresentazione di un sistema closed loop con feedback

22

CAPITOLO 4. METODO DEL ROOT LOCUS 23

anche se il sistema ha 3 o 4 poli, può comportarsi come un sistema del secondo o del primo ordinea seconda di come sono disposti i poli.

Prima di procedere all’utilizzo del metodo del root locus, diamo qualche altra nozione. Sul pianoR−I il coefficente di smorzamento (ζ o zeta) corrisponde ad una retta passante per l’origine, mentrela frequenza naturale (ωn) corrisponde ad una circonferenza con centro nell’origine. Nei sistemidel secondo ordine il rise time, l’overshoot e il settling time sono legati da queste relazioni a ζ eωn:

ζ ≥√

(logn(Moπ ))2

1 + logn(Moπ ))2 (4.4a)

ωn ≥1− 0, 4167ζ + 2, 917ζ2

Tr(4.4b)

σ ≥ 4Ts

(4.4c)

In cui:

• Tr indica il rise time

• Ts indica il settling time

• Mo indica il massimo overshoot

• σ indica la componente reale

Di queste tre relazioni l’unica esatta analiticamente è quella riguardante l’overshoot. Le altredue sono relazioni approssimate, quindi i risultati che ne deriveranno serviranno per dare un ideasu quale regione del root locus soddisfa i nostri criteri di progetto ma non saranno vincolanti.Per trovare la posizione del polo che risolve il problema si ricorrerà sempre ad un processo trialand error, cioè di prove ed errori, fino ad ottenere il risultato desiderato. In questo processo èimportante tenere a mente che più lontano è il polo dall’asse immaginario, minore sarà il settlingtime, e che più lontano è il polo dall’origine minore sarà il rise time.

4.1.2 Grafico del root locusConsideriamo un sistema open loop che ha come funzione di trasferimento:

H(s) = Y (s)U(s) = s+ 7

s(s+ 5)(s+ 15)(s+ 20) (4.5)

E proviamo a progettare un controllore feedback per questo sistema usando il metodo del rootlocus. Ipotizziamo che i nostri criteri di progetto siano:

• Overshoot inferiore al 5%

• Rise time minore di 1 secondo

Creiamo quindi un m-file, inseriamo la funzione di trasferimento e con il comando rlocus creiamoil grafico del root locus. I comandi da inserire sono:num=[1 7];den=conv(conv([1 0],[1 5]),conv([1 15],[1 20]));sys=tf(num,den);rlocus(sys)axis([-22 3 -15 15])

Lanciando l’m-file otterremo il grafico nella figura 4.2

4.1.3 Scelta di un valore del guadagno dal root locusIl grafico nella figura 4.2 rappresenta tutti le possibili posizioni dei poli per un controllore propor-zionale. Ovviamente non tutti i poli soddisferanno i nostri criteri di progetto. Per determinarequali sono accettabili, useremo il comando sgrid(Zeta,Wn) che disegna le linee a coefficiente dismorzamento e a frequenza naturale costante. I due argomenti della funzione sono la costante dismorzamento e la frequenza naturale, e possono essere vettori se vogliamo visualizzare un rangedi valori accettabili. Usando le equazioni 4.4 troviamo che ad un overshoot del 5% corrispondeuna ζ maggiore di 0, 7 , ed ad un rise time di 1 secondo corrisponde una ωn di 1,8. Nell’m-fileaggiungiamo queste righe e lanciamolo:

CAPITOLO 4. METODO DEL ROOT LOCUS 24

−25 −20 −15 −10 −5 0−15

−10

−5

0

5

10

15Root Locus

Asse reale

Ass

e im

mag

inar

io

Figura 4.2 Root locus del sistema d’esempio

−25 −20 −15 −10 −5 0−15

−10

−5

0

5

10

150.7

0.7

2.14

Root Locus

Asse reale

Ass

e im

mag

inar

io

Figura 4.3 Root locus del sistema d’esempio con curve a ζ e ωn costanti

zeta=0.7;Wn=1.8;sgrid(zeta, Wn)

Nel grafico nella figura 4.3 le due linee a circa 45 gradi indicano le posizioni dei poli per ζ = 0, 7(ζ sarà maggiore di 0.7 a sinistra delle linee). La semiellisse rappresenta i punti per cui ωn = 1, 8(ωn sarà maggiore di 1,8 all’esterno della semiellisse). Tornando al nostro problema, per far si chel’overshoot sia minore del 5% il polo deve trovarsi tra le due linee, e per far si che il rise time siaminore di 1 secondo, il polo dovra trovarsi all’esterno della semiellisse. Poichè Tutto il root locusgiace nel semipiano sinistro, quindi la risposta closed loop sarà stabile. Poichè dal grafico vediamoche una porzione del root locus si trova nella zona accettabile, basterà un controllore proporzionaleper risolvere il problema. Lanciamo quindi il comando [k,pole]=rlocusfind(sys) dalla command

CAPITOLO 4. METODO DEL ROOT LOCUS 25

−25 −20 −15 −10 −5 0−15

−10

−5

0

5

10

150.7

0.7

2.14

Root Locus

Asse reale

Ass

e im

mag

inar

io

Figura 4.4 Posizione del polo selezionato e dei poli corrispondenti

window così da poter selezionare manualmente sul grafico i poli che riteniamo più soddisfacenti, eMatlab calcolerà la posizione di questi poli e il guadagno proporzionale (K) necessario per ottenerli.Quando si seleziona un polo con un click Matlab segnera con una croce rossa le posizioni degli altripoli corrispondenti, come si può vedere nella figura 4.4.

4.1.4 Risposta closed loopUtilizziamo ora il guadagno trovato con metodo del root locus per visualizzare la risposta del siste-ma. Per creare la funzione di trasferimento closed loop con controllo proporzionale con guadagnoK inseriamo nella command window il comando:

>> sys_cl= feedback(k*sys,1)

E per visualizzare la risposta eseguiamo il comando:

step(sys_cl)

Otterremo così il grafico nella figura 4.5 in cui osserviamo che la risposta soddisfa tutti i requisitidi progetto.

4.2 Reti di compensazione e filtri elimina bandaNei prossimi paragrafi saranno usate reti di compensazione e filtri elimina banda. Esponiamoquindi brevemente cosa sono e a cosa servono.

4.2.1 Reti di compensazione e metodo del root locusLe reti anticipatrici e ritardatrici (lead e lag compensators) sono usate estensivamente nell’analisidei sistemi. Una rete anticipatrice (lead compensator) può migliorare la stabilità o la velocitàdi risposta di un sistema, mentre una rete ritardatrice (lag compensator) può ridurre (ma noneliminare) l’errore steady-state. A seconda dell’effetto desiderato, una o piu reti compensatricipossono essere utilizzate in varie combinazioni. Le reti compensatrici sono in genere descritte informa di funzione di trasferimento, ma con Matlab possono essere facilmente trasformate in formadi spazio degli stati.

CAPITOLO 4. METODO DEL ROOT LOCUS 26

Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

0 0.5 1 1.5 2 2.50

0.2

0.4

0.6

0.8

1

1.2

1.4

Figura 4.5 Risposta closed loop del sistema d’esempio

Reti anticipatrici

Una rete anticipatrice di primo ordine può essere progettata utilizzando il root locus. Nella formadel root locus una rete anticipatrice è data dall’equazione:

G(s) = KC(s− ZO)s− PO

(4.6)

In cui ZO è in valore assoluto inferiore a PO ed entrambi sono negativi. Una rete anticipatricetende a traslare il root locus verso il semipiano sinistro. Questo si traduce in un miglioramento dellastabilità del sistema e della velocità di risposta. Per capire meglio questo fenomeno, ricordiamoche la relazione che permette di trovare l’intersezione degli asintoti dei rami che vanno da uno zeroad infinito e l’asse reale è:

α =∑

(poli)−∑(zeri)(nřpoli)− (nřzeri) (4.7)

Quando una rete anticipatrice è aggiunta al sistema, il denominatore di α non cambia (si aggiungeinfatti un polo e uno zero) , mentre il numeratore diventa più negativo, perche il polo aggiunto eraun numero negativo più grande rispetto allo zero aggiunto. Quindi l’intersezione dell’asintoto conl’asse reale trasla verso sinistra, e di conseguenza tutto il root locus trasla verso sinistra. Questoporta ad un aumento della stabilita e della velocità di risposta del sistema.

Per immettere una rete anticipatrice in Matlab, si usano questi comandi:

numlead = kc*[1 z];denlead = [1 p];lead = tf(numlead,denlead);

E per inserirla nel sistema basta dare questa istruzione:

sys = lead*plant;

Reti ritardatrici

Una rete ritardatrice (lag compensator) ha la stessa equazione di una rete anticipatrice (eq. 4.6).In questo caso però ZO è in valore assoluto maggiore di PO. Quindi moltiplicando questa funzioneper il sistema il root locus trasla verso destra (vale il discorso inverso fatto per la rete anticipatrice)con conseguente diminuzione di stabilità del sistema. Per evitare questo i valori di ZO e PO vannoscelti molti vicini, in modo da far traslare poco il sistema. Nonostante la rete ritardatrice provocauna traslazione del sistema trascurabile, apporta comunque un cambiamento nella risposta, si

CAPITOLO 4. METODO DEL ROOT LOCUS 27

−20 −15 −10 −5 0 5 10−15

−10

−5

0

5

10

15Root Locus

Asse reale

Ass

e im

mag

inar

io

Figura 4.6 Root locus del sistema d’esempio per il filtro notch

ha infatti un miglioramento dell’errore steady state. Mentre per s tendente a ∞ (e quindi per ttendente a 0) il guadagno della rete ritardatrice è 1, per s tendente a 0 (t tendente a ∞ e quindiallo steady state) il guadagno è ZO/PO, che per come sono stati scelti i termini è maggiore di 1.Questo guadagno andrà così a ridurre l’errore steady state di un fattore ZO/PO.

4.2.2 Filtro elimina bandaIn molti casi la funzione di trasferimento di un sistema presente una o più coppie di poli complessi-coniugati collocati vicini all’asse immaginario. Questo comporta una risposta closed loop instabileo comunque poco smorzata. Ad esempio, consideriamo la funzione di trasferimento:

GP (s) = K

(s+ 3)(s2 + s+ 10) (4.8)

Tracciamo quindi con Matlab il root locus del sistema, inserendo questi comandi nella commandwindow:

num = 1;den = conv([1 3],[1 1 10]);plant = tf(num,den);

rlocus(plant)

Otterremo il grafico nella figura 4.6. Come si vede dal grafico, questo sistema è stabile solo inuna piccola zona del root locus. La porzione stabile sarà inoltre poco smorzata (avrà ζ piccolo).Utilizziamo il comando [Kp, poles]=rlocfind(plant) per trovare il guadagno corrispondente allaporzione di piano stabile, e facciamo tracciare a Matlab la risposta closed loop inserendo questicomandi nella command window:

>> sys_cl=feedback(Kp*plant,1);>> step(sys_cl)

Otterremo il grafico nella figura 4.7 che presenta un overshoot e un settling time troppo grandi.Anche provando a cambiare il guadagno, selezionandolo sempre nella porzione del piano stabile, larisposta non migliorera di molto. Risulta evidente che un controllo proporzionale non è sufficienteper avere una buona risposta.

Un modo per ottenere una risposta soddisfacente è quello di inserire un controllore che abbiadegli zeri vicini ai poli sotto-smorzati del sistema, così da attenuare l’effetto dei poli. Un controlloreche fa questo è detto filtro elimina banda, o notch filter. Prima di entrare nel dettaglio del filtro,ricordiamo che a causa della natura del problema non si può ottenere la cancellazione esatta dei

CAPITOLO 4. METODO DEL ROOT LOCUS 28

0 5 10 150

0.05

0.1

0.15

0.2

0.25Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 4.7 Risposta closed loop del sistema d’esempio per il filtro notch (K = 4)

poli/zeri del sistema, ne questa è necessaria. Una cancellazione approssimata darà infatti unarisposta accettabile.

Per il nostro esempio, proviamo a inserire degli zeri leggermente a sinistra dei poli sotto-smorzati(in genere conviene porre gli zeri a sinistra e non a destra). Proviamo quindi questo controllore:

Gc(s) = s2 + 1.5s+ 10s2 + 20s+ 100 (4.9)

Come possiamo notare, le radici del numeratore del controllore sono quasi uguali ai poli complessidel denominatore del sistema. Implementiamo quindi il controllore nel sistema con questi comandi:>> numnotch = [1 1.5 10];>> dennotch = [1 20 100];>> notch =tf(numnotch,dennotch);>> rlocus(notch*plant);

Otterremo il root locus mostrato nella figura 4.8. Utilizzando di nuovo il comando [Kp, poles]=

rlocfind(notch*plant) possiamo scegliere ora un polo molto più spostato verso sinistra, cioè piùstabile. Dopo aver ottenuto il guadagno utilizzando questi comandi:>> sys_cl = feedback(Kp*notch*plant,1);>> step(sys_cl)

Otterremo la risposta closed loop del sistema (visibile nel grafico nella figura 4.9), che in questocaso (con un guadagno di circa 77 nel nostro esempio) ha una risposta decisamente migliore conun overshoot e un settiling time minori rispetto al caso precedente.

4.3 Soluzione tramite root locus del controllo di beccheggioNel paragrafo 2.2 abbiamo trovato la funzione di trasferimento del problema:

θ(s)δes

= 1, 151s+ 0, 1774s3 + 0, 739s2 + 0, 921s (4.10)

Abbiamo anche assunto un input di 0,2 rad e stabilito i seguenti criteri di progetto:• Overshoot minore del 10%

• Rise time inferiore ai 2 secondi

• Settling time inferiore ai 10 secondi

• Errore steady state minore del 2%

CAPITOLO 4. METODO DEL ROOT LOCUS 29

−35 −30 −25 −20 −15 −10 −5 0 5 10−25

−20

−15

−10

−5

0

5

10

15

20

25Root Locus

Asse reale

Ass

e im

mag

inar

io

Figura 4.8 Root locus del sistema d’esempio con filtro notch applicato

0 1 2 3 4 5 6 7 8 90

0.05

0.1

0.15

0.2

0.25Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 4.9 Risposta closed loop del sistema d’esempio con filtro notch applicato (K = 77)

CAPITOLO 4. METODO DEL ROOT LOCUS 30

−1 −0.9 −0.8 −0.7 −0.6 −0.5 −0.4 −0.3 −0.2 −0.1 0−2.5

−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

2.5

0.52

0.52

0.9

0.9

Root Locus

Asse reale

Ass

e im

mag

inar

io

Figura 4.10 Root locus del sistema di controllo di beccheggio.

4.3.1 Root locusPrima di tracciare il root locus troviamo le curve limite derivanti dai criteri di progetto. Utilizzandole equazioni 4.4 otteniamo che ζ ≥ 0, 52 e ωn ≥ 0, 9. Creiamo quindi un nuovo m-file ed inseriamoquesti comandi:

num=[1.151 0.1774];den=[1 0.739 0.921 0];plant=tf(num,den);Wn=0.9;zeta=0.52;

rlocus (plant)sgrid (zeta,Wn)axis ([-1 0 -2.5 2.5])

Lanciandolo otterremo il root locus mostrato nella figura 4.10. Com’era prevedibile il problemanon ha soluzioni con un semplice controllo proporzionale. Infatti tutti i rami del root locus sonooltre le curve limite.

4.3.2 Rete anticipatricePer risolvere il problema dobbiamo traslare il root locus verso sinistra, cioè dentro i nostri limiti.Per farlo inseriremo una rete anticipatrice. Sappiamo che la funzione di trasferimento di una retecompensatrice è:

G(s) = Kcs− ZOs− PO

(4.11)

Come regola guida per posizionare lo zero e il polo, teniamo a mente che in genere lo zero vaposizionato nei pressi del limite della frequenza naturale, mentre il polo va posizionato a unadistanza grande dalle 3 alle 20 volte quella dello zero. Posizioniamo quindi lo zero a 0,9 e ilpolo a 20. Per trovare il nuovo root locus modificato dal lead controller inseriamo questi comandinell’m-file:

Zo=0.9;Po=20;contr=tf([1 Zo],[1 Po]);rlocus (contr*plant)axis ([-3 0 -2 2])sgrid (zeta,Wn)

CAPITOLO 4. METODO DEL ROOT LOCUS 31

−3 −2.5 −2 −1.5 −1 −0.5 0−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

0.52

0.52

0.9

Root Locus

Asse reale

Ass

e im

mag

inar

io

Figura 4.11 Root locus del sistema di controllo di beccheggio con lead compensator.

0 2 4 6 8 10 12 14 16 180

0.05

0.1

0.15

0.2

0.25Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 4.12 Risposta closed loop del controllore di beccheggio ottenuta col metodo del Root locus.

Lanciandolo otterremo il nuovo root locus visibile nella figura 4.11. Ora possiamo scegliere unguadagno ed ottenere la risposta closed loop del sistema. Aggiungiamo questi comandi all’m-filee selezioniamo i poli manualmente, all’incirca a -1 sull’asse reale in modo da tenere abbastanzalontano dall’asse immaginario il polo sul ramo in blu:

[K, poles]=rlocfind (contr*plant)

de=0.2;sys_cl=feedback (K*contr*plant,1);step(de*sys_cl)

Otterremo così il grafico nella figura 4.12 che soddisfa tutti i criteri di progetto.

Capitolo 5

Risposta in frequenza

In questo capitolo verranno usati questi comandi chiave: bode, nyquist, margin, lsim.Nonostante il modello di risposta in frequenza potrà sembrare meno intuitivo rispetto agli altri

metodi mostrati fin’ora, ha alcuni vantaggi pratici per quanto riguarda la creazione del modellodella funzione di trasferimento di un sistema fisico.

La risposta in frequenza di un sistema può essere visualizzata in due modi: con i diagrammidi Bode o con i diagrammi Nyquist. Entrambi i metodi mostreranno le stesse informazioni, ladifferenza sta nel modo in cui queste saranno presentate. In questo capitolo studieremo entrambii metodi.

La risposta in frequenza è la rappresentazione della risposta di un sistema ad una sollecitazionesinusoidale al variare delle frequenze di quest’ultima. Poichè la risposta di un sistema lineare aduna sollecitazione sinusoidale è sempre sinusoidale, ma con ampiezza e fase differenti, la rispostain frequenza è definita come la differenza di fase e di ampiezza tra la sollecitazione e la risposta. Inquesto capitolo vedremo come potremo utilizzare la risposta in frequenza di un sistema open loopper prevedere il comportamento del sistema closed loop.

Per creare il grafico della risposta in frequenza, utilizzeremo un vettore di frequenze variantida 0 ad infinito e calcoleremo il valore della funzione di trasferimento del sistema per ognuna diqueste frequenze. Se G(s) è la funzione di trasferimento open loop del sistema e w è il vettoredelle frequenze, faremo il grafico di G(jw) in funzione di w. Poiche G(jw) è un numero complesso,possiamo fare il grafico sia della ampiezza e della fase (diagrammi di Bode) sia della sua posizionenel piano complesso (diagrammi Nyquist).

Prima di addentrarci in questi due metodi dovremo però approfondire le nostre conoscenzesull’errore steady state.

5.1 Errore steady stateL’errore steady state è definito come la differenza tra l’input e l’output del sistema all’infinito (cioèquando la risposta è diventata costante). L’errore steady state dipende dal tipo di input (gradino,rampa, etc.) e dal tipo di sistema (0, I o II). Dobbiamo tenere a mente che l’analisi dell’erroresteady state ha senso solo per sistemi stabili, quindi anche se molte delle tecniche che andremo adesporre daranno un risultato anche per un sistema instabile, questo risultato non avrà senso fisico.

5.1.1 Calcolo dell’errore steady statePrima di trovare le relazioni tra l’errore steady state ed il tipo di sistema, vediamo come differiscequesto in base al tipo di input. Quindi iniziamo a calcolare le formule che useremo nell’ analisidell’errore steady state. L’errore può essere calcolato dalla funzione di trasferimento open o closedloop di un sistema con feedback unitario. Ad esempio, consideriamo il sistema nella figura 5.1 cheequivale al sistema nella figura 5.2. Possiamo calcolare l’errore steady state del sistema sia per lafunzione open loop che per quella closed (ricordiamo che questo teorema può essere applicato solose la funzione non ha poli nel semipiano destro, cioè è stabile):

ess = lims→0

sR(s)1 +G(s) (5.1a)

ess = lims→0

sR(s)|1− T (s)| (5.1b)

Ora inseriamo nella trasformata di Laplace i vari input per calcolare l’errore steady state per lafunzione open loop:

32

CAPITOLO 5. RISPOSTA IN FREQUENZA 33

G(s)Input

+

Y (s)R(s)

Output

E(s)

1

Figura 5.1 Sistema closed loop

G(s)

Input

Y (s)R(s)

Output

1

Figura 5.2 Sistema closed loop trasformato in open loop

• Input a gradino (R(s) = 1/s):

ess = 11 + lims→0 G(s) = 1

1 +Kp⇒ Kp = lim

s→0G(s) (5.2)

• Input a rampa(R(s) = 1/s2):

ess = 1lims→0 sG(s) = 1

Kv⇒ Kv = lim

s→0sG(s) (5.3)

• Input parabolico (R(s) = 1/s3):

ess = 1lims→0 s2G(s) = 1

Ka⇒ Ka = lim

s→0s2G(s) (5.4)

Quando progettiamo un controllore in genere vogliamo compensare un disturbo. Consideriamoil sistema nella figura 5.3 e calcoliamo l’errore steady state dovuto ad un disturbo a gradino unitario:

ess = 1lims→0

1G(s) + lims→0 Gc(s)

(5.5)

Come ultimo appunto possiamo dire che se abbiamo un sistema con feedback non unitario comequello in figura 5.4 possiamo trasformarlo facilmente nel sistema 5.5 e applicare i concetti appenaesposti.

G(s)

Input

Y (s)R(s)

Output

1

Figura 5.3 Sistema closed loop con azione di disturbo

CAPITOLO 5. RISPOSTA IN FREQUENZA 34

H(s)

G(s)

+

Y (s)R(s)E(s)

1

Figura 5.4 Sistema closed loop con feedback non unitario

G(s)1+G(s)H(s)−G(s)

+

Y (s)R(s) E(s)

1

Figura 5.5 Sistema con feedback non unitario trasformato in sistema con feedback unitario

5.1.2 Tipi di sistema ed errore steady stateNel calcolo degli errori in base all’input abbiamo definito tre costanti (note come costanti di errorestatico). Le costanti sono costante di posizione (Kp), costante di velocità (Kv) e costante diaccelerazione (Ka). Noto il valore di queste costanti e il tipo del sistema, possiamo prevedere se ilnostro sistema avrà un errore steady state.

I tipi di sistemi sono definiti come il numero dei puri integratori nel sistema, ciò sta a dire cheil tipo di sistema è uguale al valore di n nel caso in cui il sistema è raffigurato come nella figura5.6. Il sistema può quindi essere di tipo 0, tipo 1 etc. In tabella seguono gli errori steady state inrelazione al tipo di sistema:

Tabella 5.1 Errore stady state a seconda del tipo di sistema.

Input a gradino Input a rampa Input parabolico

Formula per errore steady state 1/(1 +Kp) 1/Kv 1/KaSistemi di tipo 0

Costante di errore statico Kp =costante Kv = 0 Ka = 0Errore 1/(1 +Kp) ∞ ∞

Sistemi di tipo 1

Costante di errore statico Kp =∞ Kv =costante Ka = 0Errore 0 1/Kv ∞

Sistemi di tipo 2

Costante di errore statico Kp =∞ Kv =∞ Ka =costanteErrore 0 0 1/Ka

5.2 Diagrammi di BodeIl diagramma di Bode è la rappresentazione dell’ampiezza e della fase di G(jω). Per creare ildiagramma di Bode data una funzione di trasferimento, in Matlab si usa la funzione bode. Adesempio dando questi comandi:

CAPITOLO 5. RISPOSTA IN FREQUENZA 35

K(s+z1)(s+z2)...sn(s+p1)(s+p2)...

+

Y (s)R(s) E(s)

1

Figura 5.6 Sistema closed loop con feedback unitario con integratori

−100

−80

−60

−40

−20

0

20

Am

piez

za (

dB)

10−1

100

101

102

−270

−180

−90

0

Fas

e (d

eg)

Diagrammi di Bode

Frequenza (rad/sec)

Figura 5.7 Diagrammi di Bode

num = 50;den = [1 9 30 40];sys = tf(num,den);bode(sys)

Otterremo i diagrammi di Bode (fig. 5.7) di questa funzione di trasferimento:

50s3 + 9s2 + 30s+ 40

Vale la pena sottolineare che la fase è riportata in gradi, l’ampiezza è in scala logaritmica ed èriportata in decibel, cioè:

dB = 20 log10(|G(jω)|)

5.2.1 Margine di guadagno e margine di faseFacciamo riferimento al classico sistema closed loop mostrato nella figura 5.8, in cui K è un guada-gno e G(s) è la funzione di trasferimento open loop del sistema. Il margine di guadagno è definitocome la variazione del guadagno open loop che fa diventare il sistema closed loop instabile. Sistemicon margine di guadagno più grandi possono sopportare maggiori cambiamenti nei loro parametriprima di diventare instabili in closed loop. Il margine di fase è definito come la variazione dellafase open loop richiesta per far diventare instabile il sistema closed loop. Il margine di fase misuraanche la tolleranza del sistema al ritardo temporale. Se c’è un ritardo maggiore di 180/ωpc (ωpc èla frequenza in cui la fase vale -180 gradi) nel open loop, il sistema diventa instabile nel closed loop.

CAPITOLO 5. RISPOSTA IN FREQUENZA 36

K G(s)Input

+

−u

Yr

Output

e

1

Figura 5.8 Generico sistema closed loop

−100

−80

−60

−40

−20

0

20

Am

piez

za (

dB)

10−1

100

101

102

−270

−180

−90

0

Fas

e (d

eg)

Diagrammi di Bode

Frequenza (rad/sec)

Margine di guadagno

Margine di fase

Wpc

Wgc

Figura 5.9 Margini di fase e di guadagno sui diagrammi di Bode

Possiamo pensare al ritardo temporale come un blocco aggiuntivo messo all’inizio del diagrammache abbia ampiezza unitaria e fase ωtd (espresso in rad/sec).

Per ora non ci preoccuperemo della causa di questi guadagni, ma ci concentreremo sull’indivi-duazione dei margini di fase e di guadagno su un diagramma di Bode.

Il margine di fase è la differenza di fase tra -180 deg e il punto (sulla linea di fase) corrispondentealla frequenza che da un guadagno di 0dB (detta gain cross over frequency o ωgc). Allo stessomodo, il margine di guadagno è la differenza di ampiezza tra la linea a 0db e il punto della curvacorrispondente alla frequenza che da una fase di -180 deg (detta phase cross over frequency o ωpc).I due margini sono visibili nella figura 5.9. In Matlab i due margini possono essere trovati con ilcomando margin. Proviamo quindi a lanciare dalla command window questo comando:

>> margin(sys)

Otterremo così i diagrammi di bode del sistema con sopra indicati i margini e le frequenze di crossover (fig. 5.10).

5.2.2 Frequenza di cut offLa frequenza di cut off è definita come la frequenza in cui l’ampiezza della risposta closed loopè uguale a -3 dB. Poichè noi vogliamo prevedere la risposta closed loop a partire da quella openloop faremo una approssimazione e considereremo la frequenza di cut off come la frequenza incui l’ampiezza della risposta open loop è compresa tra -6 e -7.5 dB, assumendo che la fase dellarisposta open loop sia compresa tra -135 deg e -225 deg. Per illustrare l’importanza della frequenzadi cut off andiamo a calcolare i vari output al variare della frequenza dell’input. Troveremo cheun input sinusoidale con frequenza inferiore alla frequenza di cut off (detta bandwidht frequency oωbw) causerà una risposta abbastanza simile all’input, mentre un input sinusoidale con frequenzamaggiore della ωbw causerà una risposta attenuata di un fattore 0,707 o maggiore. Ipotizziamo di

CAPITOLO 5. RISPOSTA IN FREQUENZA 37

−100

−80

−60

−40

−20

0

20

Am

piez

za (

dB)

10−1

100

101

102

−270

−180

−90

0

Fas

e (d

eg)

Diagrammi di BodeGm = 13.3 dB (at 5.48 rad/sec) , Pm = 101 deg (at 1.85 rad/sec)

Frequenza (rad/sec)

Figura 5.10 Margini di fase e di guadagno trovati da Matlab sui diagrammi di Bode

avere questa funzione closed loop che rappresenta il nostro sistema:1

s2 + 0, 5s+ 1

Per prima cosa, troviamo la frequenza di cut off guardando il diagramma di Bode creato con questicomandi:>> num = 1;>> den = [1 0.5 1];>> sys = tf(num,den);>> bode (sys)

Tenendo presente che il sistema è closed loop quindi la frequenza di cut off è quella corrispondentead un’ampiezza di -3dB, dal grafico 5.11 osserviamo che la frequenza di cut off è di circa 1,4 rad/s.Consideriamo quindi un input con frequenza minore di ωbw. Teniamo a mente che ci interessavisualizzare la risposta steady state e non il transitorio, quindi modificheremo gli assi in modo davedere soltanto questa. La risposta ad una sollecitazione sinusoidale la possiamo ottenere con ilcomando lsim. Utilizziamo questi comandi per ottenere la nostra risposta:>> w = 0.3;>> num = 1;>> den = [1 0.5 1];>> sys = tf(num,den);>> t = 0:0.1:100;>> u = sin(w*t);>> [y,t] = lsim(sys,u,t);>> plot(t,y,t,u)>> axis([50,100,-2,2])

Il grafico 5.12 conferma le nostre ipotesi, l’ampiezza della risposta differisce di poco dall’input.Proviamo ora ad utilizzare una frequenza superiore:>> w = 3;>> num = 1;>> den = [1 0.5 1];>> sys = tf(num,den);>> t = 0:0.1:100;>> u = sin(w*t);>> [y,t] = lsim(sys,u,t);>> plot(t,y,t,u)>> axis([90, 100, -1, 1])

CAPITOLO 5. RISPOSTA IN FREQUENZA 38

−80

−60

−40

−20

0

20

Am

piez

za (

dB)

10−2

10−1

100

101

102

−180

−135

−90

−45

0

Fas

e (d

eg)

Diagramma di Bode

Frequenza (rad/sec)

Figura 5.11 Diagrammi di Bode del sistema d’esempio

50 55 60 65 70 75 80 85 90 95 100−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

OutputInput

Figura 5.12 Risposta di un sistema con frequenza minore della frequenza di cut off

Il grafico nella figura 5.13 mostra chiaramente che con questa frequenza la risposta differiscenotevolmente dall’input, con un’ampiezza di circa 1/10 e uno sfasamento quasi completo.

5.2.3 Comportamento closed loopPer dedurre il comportamento closed loop dalla risposta open loop dobbiamo avere chiari alcuniconcetti:

• Il sistema deve essere stabile in open loop se vogliamo studiarlo tramite i diagrammi di Bode

• Se ωgc < ωpc il sistema closed loop sarà stabile

• Per i sistemi del secondo ordine, il coefficiente di smorzamento closed loop è approsimati-vamente uguale al margine di fase diviso 100, se il margine è compreso tra 0 e 60. Questaapprossimazione va usata con cautela se il margine è maggiore di 60

CAPITOLO 5. RISPOSTA IN FREQUENZA 39

90 91 92 93 94 95 96 97 98 99 100−1

−0.5

0

0.5

1

OutputInput

Figura 5.13 Risposta di un sistema con frequenza maggiore della frequenza di cut off

• Per i sistemi di secondo ordine esistono delle relazioni tra coefficiente di smorzamento,frequenza di cut off e settling time riportate in seguito

• Si può fare una stima abbastanza approssimata ponendo la frequenza di cut off uguale allafrequenza naturale

Le relazioni che legano coefficiente di smorzamento, frequenza di cut off e settling time sono:

ωBW = ωn

√(1− 2ζ2) +

√4ζ4 − 4ζ2 + 2 (5.6a)

ωn = 4tsζ

(5.6b)

ωBW = 4tsζ

←−−−−−−−−−−−−−−−−−−−−(1− 2ζ2) +

√4ζ4 − 4ζ2 + 2 (5.6c)

Usiamo questi concetti per progettare un controllore per il sistema mostrato nella figura 5.8,in cui:

G(s) = 101, 25s+ 1 (5.7)

Il sistema dovra soddisfare questi requisiti:

• Errore steady state nullo

• Overshoot inferiore al 40%

• Settling time minore di 2 secondi

Ci sono ora due strade per risolvere il problema, una grafica e una numerica. Usando Matlab lamigliore è quella grafica, e quindi useremo questa.

Come primo passo creiamo i diagrammi di Bode del sistema. Creiamo un nuovo m-file edinseriamo questi comandi:

num = 10;den = [1.25,1];sys = tf(num,den);bode(sys)grid

Dai diagrammi di bode ottenuti (fig. 5.14) possiamo dedurre alcune cose. La frequenza di cutoff è circa 10 rad/s. Poichè abbiamo detto che possiamo approssimare la frequenza naturale allafrequenza di cut off (specialmente nei sistemi del primo ordine), il rise time sarà:

ts = 1, 8/ωn = 1, 8/10 = 0, 18sec

Poichè la relazione è molto approssimata diciamo che il rise time è di 0,2 sec. Il margine di fase è dicirca 95 gradi, ma non potendo più applicare la relazione ζ = pm/100 (che porterebbe ad un sistemacon ζ = 0, 96 e quindi sotto-smorzato), ed essendo il sistema del primo ordine possiamo ritenere

CAPITOLO 5. RISPOSTA IN FREQUENZA 40

−20

−15

−10

−5

0

5

10

15

20

Am

piez

za (

dB)

10−2

10−1

100

101

102

−90

−45

0

Fas

e (d

eg)

Diagrammi di Bode

Frequenza (rad/sec)

Figura 5.14 Diagrammi di Bode del sistema senza controllo

l’overshoot nullo. Rimane da stabilire l’errore steady state che può essere dedotto dai diagrammidi Bode. Infatti le costanti di errore statico (Kp, Kv e Ka) si possono trovare dall’intersezionedell’asintoto di bassa frequenza con la linea a ω = 1, poichè l’ampiezza in quel punto sarà la nostracostante. Il sistema in esame ha un asintoto orizzontale, quindi è di tipo 0. L’intersezione di questoasintoto con la retta a ω = 1 è di facile individuazione, ne consegue che il guadagno deve essere di20dB (cioè di ampiezza 10). Quindi possiamo porre Kp = 10 e ricordando che il sistema è di tipo0, usando la tabella 5.1 ricaviamo che ess = 1/(1 +Kp) = 1/(1 + 10) = 0.91, cioè un errore di circail 9%.

Per verificare se le nostre ipotesi sono fondate, lanciamo questi comandi dalla command window:

sys_cl = feedback(sys,1);step(sys_cl)

Il grafico nella figura 5.15 mostra che tutte le nostre ipotesi erano sensate, non c’è infatti overshoot,il rise time è di circa 0,2 secondi e l’errore steady state è di circa il 9%.

Ora dobbiamo progettare un controllore che soddisfi i nostri criteri di progetto. Useremo uncontrollore PI, sia perché questo annulla l’errore steady state, sia perché ha uno zero facilmentecontrollabile che da maggiore flessibilità in fase di progetto. La funzione di trasferimento di uncontrollore PI può essere scritta così:

Gc(s) = KP (s+ a)s

(5.8)

In cui a = KI/KP .Per prima cosa ci serve sapere il valore del coefficiente di smorzamento corrispondente ad un

overshoot del 40%. Usando le relazioni 4.4 si trova facilmente ζ = 0.28. Quindi il nostro margine difase deve essere almeno di 30 gradi. Dalle equazioni 5.6 noto ζ troviamo che ωBW = 15, 9. Quindivogliamo avere una frequenza di cut off maggiore di 15,9 per avere un settling time minore di 2secondi.

Ora che conosciamo il margine di fase e la frequenza di cut off desiderati, possiamo iniziarea progettare il controllore (vale la pena ricordare che la frequenza di cut off desiderata è quellaper il sistema closed loop, e poichè noi studiamo i diagrammi di Bode open loop il guadagnocorrispondente alla frequenza di banda sarà di circa -7dB). Vediamo che effetto ha l’integratore (ilpolo nell’origine) del controllore PI. Modifichiamo così il nostro m-file:

num = 10;den = [1.25 1];plant = tf(num,den);numPI = 1;

CAPITOLO 5. RISPOSTA IN FREQUENZA 41

0 0.1 0.2 0.3 0.4 0.5 0.6 0.70

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 5.15 Risposta open loop del sistema

denPI = [1 0];contr = tf(numPI,denPI);bode(contr * plant, logspace(0,2))grid

Lanciamolo per ottenere il grafico nella figura 5.16. Sia il margine di fase (circa 15 gradi) che lafrequenza di cut off (circa 4 rad/s) sono troppo bassi. Possiamo aumentare sia la frequenza che ilguadagno inserendo uno zero. Inseriamo quindi uno zero ad 1 modificando così l’m-file:num = 10;den = [1.25 1];plant = tf(num,den);numPI = [1 1];denPI = [1 0];contr = tf(numPI,denPI);bode(contr * plant, logspace(0,2))grid

Otterremo il grafico nella figura 5.17. Questa risposta soddisfa i nostri requisiti, infatti il marginedi fase è di quasi 90 gradi (quindi avremo un overshoot piccolo o nullo) e la frequenza di cut offè di circa 19 rad/s. Anche se rispetta i nostri requisiti, la frequenza di cut off è troppo vicinaa quella limite. Per aumentare la differenza, aumentiamo il guadagno e poniamolo uguale a 5.Questa modifca farà aumentare la frequenza di cut off mantenendo costante il margine di fase.Modifichiamo così l’m-file:num = 10;den = [1.25 1];plant = tf(num,den);numPI = 5*[1 1];denPI = [1 0];contr = tf(numPI,denPI);bode(contr * plant, logspace(0,2))grid

La risposta mostrata nella figura 5.18 mostra una frequenza di cut off decisamente superiore allaprecedente, quindi questa configurazione è del tutto soddisfacente. Vediamo ora la risposta closedloop del sistema così da verificare se abbiamo lavorato bene. Inseriamo questi comandi nellacommand window:sys_cl = feedback(contr * plant,1);step(sys_cl)

CAPITOLO 5. RISPOSTA IN FREQUENZA 42

−80

−60

−40

−20

0

20

Am

piez

za (

dB)

100

101

102

−180

−170

−160

−150

−140

Fas

e (d

eg)

Diagrammi di Bode

Frequenza (rad/sec)

Figura 5.16 Diagrammi di Bode del sistema con controllo (con solo integratore)

−30

−20

−10

0

10

20

Am

piez

za (

dB)

100

101

102

−98

−96

−94

−92

−90

Fas

e (d

eg)

Diagrammi di Bode

Frequenza (rad/sec)

Figura 5.17 Diagrammi di Bode del sistema controllato (con integratore e guadagno unitario)

La risposta mostrata nella figura 5.19 mostra che la risposta è anche migliore di come prevedevamo.Questo non avverrà sempre e spesso si dovranno modificare i parametri per avere una rispostasoddisfacente.

5.3 Diagramma di NyquistIl diagramma di Nyquist permette di prevedere la stabilità e il comportamento closed loop di unsistema a partire dalla sua risposta open loop. Il criterio di Nyquist può essere usato indipendente-mente dalla stabilità open loop. Quindi useremo questo criterio per determinare la stabilità closedloop quando la soluzione mediante i diagrammi di Bode è inapplicabile.

Il diagramma di Nyquist è la rappresentazione di G(jω) nel piano Reale-Immaginario dove G(s)è la funzione di trasferimento open loop e w è il vettore di frequenze che racchiude il semipianodestro. Nel disegnare il diagramma di Nyquist vengono prese in considerazione sia le frequenza

CAPITOLO 5. RISPOSTA IN FREQUENZA 43

−10

0

10

20

30

40

Am

piez

za (

dB)

100

101

102

−98

−96

−94

−92

−90

Fas

e (d

eg)

Diagrammi di Bode

Frequenza (rad/sec)

Figura 5.18 Diagrammi di Bode del sistema controllato (con integratore e guadagno pari a 5)

0 0.05 0.1 0.150

0.2

0.4

0.6

0.8

1

1.2

1.4Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 5.19 Risposta closed loop del sistema

CAPITOLO 5. RISPOSTA IN FREQUENZA 44

H(s)

G(s)

+

Y (s)R(s)E(s)

1

Figura 5.20 Sistema closed loop con feedback non unitario

positive che le negative. Nel lavorare sui diagramma Nyquist si deve porre parecchia attenzioneai poli che appartengono all’asse jω. G(s) non è infatti definita in quei punti, e il diagrammadovrà girarci attorno. La funzione di Matlab nyquist non tiene però conto di questi poli, fornendouna rappresentazione sbagliata. Nel caso sia necessario studiare un sistema con dei poli sull’asseimmaginario è disponibile una funzione che disegna un grafico accurato a questo link: http://www.engin.umich.edu/group/ctm/extras/nyquist1.html.

5.3.1 Il criterio di CauchyIl criterio di Cauchy per l’analisi complessa dice che prendendo una curva chiusa nel piano com-plesso, e mappandola attraverso una funzione complessa G(s), il numero di volte che il grafico diG(s) gira attorno all’origine è uguale al numero di zeri di G(s) racchiusi dalla curva meno il numerodi poli racchiusi dalla curva. I giri attorno all’origine sono contati come positivi se avvengono nellostesso verso della curva, negativi se nel verso opposto.

Quando studiamo un controllo con feedback noi non siamo interessati alla funzione di trasferi-mento del sistema G(s) ma alla funzione di trasferimento closed loop:

G(s)1 +G(s)

Se 1 + G(s) gira intorno all’origine, G(s) racchiuderà il punto -1. Poichè siamo interessati allastabilità closed loop, vogliamo conoscere se ci sono poli closed loop (cioe zeri di 1 + G(s)) nelsemipiano destro.

5.3.2 Stabilità closed loopConsideriamo il sistema mostrato nella figura 5.20. Usando il criterio di Cauchy troviamo cheil numero di volte N che il grafico di G(s)H(s) gira intorno a -1 è uguale al numero di zeri di1 + G(s)H(s) racchiusi nella curva (detta frequenza di contorno) meno il numero di poli P di1 + G(s)H(s) racchiusi nella frequenza di contorno. Guardando attentamente alla funzione ditrasferimento closed e open loop dovremmo convincerci che:

• Gli zeri di 1 +G(s)H(s) sono i poli della funzione di trasferimento closed loop

• I poli di 1 +G(s)H(s) sono i poli della funzione di trasferimento open loop

Il criterio di Nyquist dice che:

• P è il numero di poli open loop instabili di G(s)H(s)

• N è il numero di volte che il diagramma di Nyquist gira attorno a -1 (come convenzionescegliamo che i giri orari contano come positivi, gli antiorari come negativi)

• Z è il numero dei poli del sistema closed loop contenuti nel semipiano positivo

Con questa convenzione, l’equazione che lega queste tre quantita è:

Z = P +N (5.9)

E’ quindi molto importante capire quante volte il diagramma gira attorno al punto -1. Una voltatrovati i poli open loop nel semipiano destro (P ) e il numero di giri che il diagramma fa attorno a

CAPITOLO 5. RISPOSTA IN FREQUENZA 45

−1.5 −1 −0.5 0 0.5 1 1.5 2−1.5

−1

−0.5

0

0.5

1

1.5Diagramma di Nyquist

Asse reale

Ass

e im

mag

inar

io

Figura 5.21 Diagramma di Nyquist con guadagno unitario

-1 (N) possiamo determinare la stabilità del sistema con l’equazione 5.9. Se Z è positivo il sistemaclosed loop sarà instabile. Possiamo anche utilizzare il diagramma Nyquist per trovare l’intervallodi guadagni che rende il sistema stabile. Proviamo a studiare il sistema nella figura 5.8 in cui:

G(s) = s2 + 10s+ 24s2 − 8s+ 15

Il guadagnoK può essere variato in modo da modificare la risposta del sistema closed loop. Vedremoche potremo variare questo guadagno solo entro certi limiti per mantenere la risposta stabile. Quelloche ora andiamo a cercare è l’intervallo di guadagni che mantengono stabile la risposta. Per primacosa cerchiamo il numero di poli positivi usando questo comando nella command window:

roots([1 -8 15])

La risposta di Matlab sarà:

ans =53

I poli della funzione open loop sono entrambi positivi, quindi per rendere stabile il sistema abbiamobisogno di almeno 2 giri antiorari (N = −2) del diagramma di Nyquist in modo da avere stabilità nelsistema closed loop. Se il numero di giri è minore di 2 o non sono antiorari il sistema sarà instabile.Per trovare il diagramma di Nyquist del sistema inseriamo questi comandi nella command window:

sys = tf([ 1 10 24],[ 1 -8 15]);nyquist(sys)

Otterremo il diagramma 5.21. In questo diagramma ci sono 2 giri antiorari intorno a -1, quindi ilsistema è stabile per un guadagno unitario. Proviamo a cambiare guadagno con questa istruzione:

nyquist(20*sys)

Il diagramma 5.22 si è esteso rispetto al precedente, quindi continuano ad esserci 2 giri antiorariattorno a -1. Ciò sta a dire che per qualsiasi guadagno maggiore di 1 il sistema è sempre stabile.Proviamo ora a diminuire il guadagno con questa istruzione:

nyquist(0.5*sys)

Il diagramma 5.23 non compie alcun giro attorno a -1, quindi il sistema è diventato instabile.Attraverso varie prove troviamo che il sistema sarà stabile fino ad un guadagno di 0,8.

CAPITOLO 5. RISPOSTA IN FREQUENZA 46

−40 −30 −20 −10 0 10 20 30 40−30

−20

−10

0

10

20

30Diagramma di Nyquist

Asse reale

Ass

e im

mag

inar

io

Figura 5.22 Diagramma di Nyquist con guadagno pari a 20

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8Diagramma di Nyquist

Asse reale

Ass

e im

mag

inar

io

Figura 5.23 Diagramma di Nyquist con guadagno pari a 0,5

CAPITOLO 5. RISPOSTA IN FREQUENZA 47

5.3.3 Guadagno di margineAbbiamo già definito il margine di guadagno come il guadagno necessario a rendere instabile ilsistema quando lo sfasamento è uguale a 180 gradi. Ipotizziamo di avere un sistema stabile se nonci sono giri del diagramma di Nyquist attorno a -1. Ad esempio consideriamo questo sistema:

G(s) = 50s3 + 9s2 + 30s+ 40

Il sistema non ha poli open loop nel semipiano destro e quindi se non ci sono giri del diagrammadi Nyquist attorno a -1 non avrà poli closed loop instabili. Ora ci chiediamo di quanto possiamovariare il guadagno prima che il sistema diventi instabile in closed loop. Facciamo disegnare aMatlab il diagramma di Nyquist di questo sistema:sys=tf(50,[1 9 30 40])nyquist(sys)

Il sistema nella figura 5.24 diventrà instabile se il guadagno oltrepasserà un certo limite. La partenegativa dell’asse reale compresa tra −1/a (cioè il punto in cui c’è uno sfasamento di 180 gradi, inpratica l’intersezione del diagramma con l’asse reale) e -1. Quindi se il guadagno diventa pari ada il sistema diventerà instabile poiché avremo:

aG(jω) = −1

Quindi il margine di guadagno è proprio a, o meglio, poiche il margine si misura in decibel, ilmargine di guadagno è:

GM = 20 log10(a)Non ci resta che trovare il valore di a, cioè il punto in cui c’è uno sfasamento di esattamente180 gradi. Questo significa che la funzione di trasferimento in quel punto è reale (non ha parteimmaginaria). Poichè il numeratore è già reale, dobbiamo studiare solo il denominatore. Poiches = jω, gli unici termini al denominatore che hanno parte immaginaria sono le potenze dispari dis. Quindi per farsi sì che G(jω) sia reale dobbiamo porre:

−jω3 + 30jω = 0⇒ ω1 = 0, ω2 =√

30

A noi interessa l’intersezione più a sinistra del diagramma, cioè ω =√

30. Troviamo quindi ilvalore di G(jω) inserendo questi comandi:w=sqrt(30);polyval(50,j*w)/polyval([1 9 30 40],j*w)

Ed otterremo:ans =

-0.2174

Poichè il risultato è reale sappiamo che la risposta è corretta. Il punto −0, 2174 + 0j è il punto−1/a. Ora che abbiamo il valore di a possiamo trovare il margine di guadagno:

−1/a = −0, 2174⇒ a = 4, 6⇒ GM = 20 log10(4, 6) = 13, 26dB

5.3.4 Margine di faseAbbiamo già definito il margine di fase come la differenza di fase nella risposta open loop necessariaper rendere instabile il sistema closed loop con un guadagno unitario. Il procedimento per trovareil margine di fase dal diagramm di Nyquist è semplice. Facendo riferimento al sistema appenaanalizzato, basta tracciare una circonferenza di raggio unitario e centro nell’origine, trovare i puntidi intersezione del diagramma di Nyquist con quest’ultima e l’angolo di cui è necessario ruotareil diagramma per portare questo punto a 180 gradi sarà il margine di fase. Nella figura 5.25 ilmargine di fase è l’angolo compreso tra le 2 frecce.

5.4 Definizione delle reti di compensazione usando la rispo-sta in frequenza

Abbiamo già definito le reti di compensazione nel paragrafo 4.2, ora vogliamo solo scriverle nellaforma della risposta in frequenza.

CAPITOLO 5. RISPOSTA IN FREQUENZA 48

−1 −0.5 0 0.5 1 1.5−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1Diagramma di Nyquist

Asse reale

Ass

e im

mag

inar

io

Figura 5.24 Diagramma di Nyquist

Figura 5.25 Margine di fase sul diagramma di Nyquist

CAPITOLO 5. RISPOSTA IN FREQUENZA 49

0

2

4

6

8

10

Am

piez

za (

dB)

Diagrammi di Bode

Frequenza (rad/sec)10−2

10−1

100

101

0

10

20

30

Fas

e (d

eg)

Figura 5.26 Diagramme di Bode di un anticipatore di fase

5.4.1 Rete anticipatrice o anticipatore di faseUna rete anticipatrice o anticipatore di fase nella forma della risposta in frequenza ha questaequazione:

G(s) = 1 + aTs

1 + Ts(5.10)

Con a > 0. Questa forma equivale alla scrittura nel root locus se p = 1/T , z = 1/aT e Kc = a.Una rete anticipatrice aggiunge una differenza di fase positiva che ha il picco tra le frequenze

1/aT e 1/T . Nella figura 5.26 sono mostrati i diagrammi di Bode di una rete anticipatrice. In baseal valore di a, la variazione di fase può arrivare fino a 90 gradi. Se è necessaria una variazione difase maggiore sarà necessario inserire più di una rete. Il valore massimo di fase aggiunta vale:

sinφ = a− 1a+ 1 (5.11)

E si trova alla frequenza:ω = 1

T√a

(5.12)

Per progettare questo controllore si determina a a partire dalla fase voluta, e poi si sceglie Tper posizionare la frequenza di cross over. Oltre ad aumentare il margine di fase di un sistema,e quindi renderlo più stabile, una rete anticipatrice aumenta il guadagno del sistema alle altrefrequenza di un valore pari ad A. Questo si traduce in un aumento della frequenza di cross overche può aiutare a ridurre il rise time ed il settling time del sistema.

5.4.2 Rete ritardatrice o ritardatore di faseNella forma della risposta in frequenza, una rete ritardatrice ha questa equazione:

G(s) = 1a

1 + aTs

1 + Ts(5.13)

In cui a < 1. Il ritardatore di fase lavora in modo simile all’anticipatore, con la differenza cheda una variazione di fase e di guadagno opposta. Nella figura 5.27 sono mostrati i diagrammi diBode di un ritardatore di fase. Il picco di variazione di fase si trova tra 1/T e 1/aT . L’effettoprincipale del ritardatore di fase è aggiungere guadagno alle basse frequenze, così da diminuirel’errore steady state della risposta closed loop di un fattore a. Poichè il guadagno diventa unitarioalle medie e basse frequenze il transitorio non ne risentirà particolarmente. Un effetto collateraledel ritardatore di fase è la diminuzione della differenza di fase che può arrivare fino a 90 gradi.Questa diminuzione può rendere il sistema instabile.

CAPITOLO 5. RISPOSTA IN FREQUENZA 50

0

1

2

3

4

5

6

7

8

Am

piez

za (

dB)

10−2

10−1

100

101

−20

−15

−10

−5

0

Fas

e (d

eg)

Diagrammi di Bode

Frequenza (rad/sec)

Figura 5.27 Diagramma di Bode di un ritardatore di fase

5.5 Soluzione tramite risposta in frequenza del controllo dibeccheggio

Nel paragrafo 2.5 abbiamo trovato la funzione di trasferimento del problema:

θ(s)δes

= 1, 151s+ 0, 1774s3 + 0, 739s2 + 0, 921s (5.14)

Abbiamo anche assunto un input di 0,2 rad e stabilito i seguenti criteri di progetto:

• Overshoot minore del 10%.

• Rise time inferiore ai 2 secondi.

• Settling time inferiore ai 10 secondi.

• Errore steady state minore del 2%.

5.5.1 Risposta senza controlloAbbiamo detto che la progettazione tramite diagrammi di Bode è utilizzabile se il sistema è stabilein open loop. Poichè il nostro sistema è instabile inopen loop dovremo usare i diagrammi di Nyquist.Per prima cosa, inseriamo il modello in Matlab e diamo uno sguardo ai poli e agli zeri della funzionedi trasferimento con questi comandi:

num = [1.151 0.1774];den = [1 0.739 0.921 0];pitch = tf(num,den);roots(num)roots(den)

Lanciandolo otterremo questi i valori dei poli e degli zeri:

ans =-0.1541

ans =0

-0.3695 + 0.8857i-0.3695 - 0.8857i

CAPITOLO 5. RISPOSTA IN FREQUENZA 51

−1 −0.5 0 0.5 1 1.5 2 2.5 3−2.5

−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

2.5

Asse Reale

Ass

e Im

mag

inar

io

Diagramma di Nyquist

Figura 5.28 Diagramma di Nyquist con funzione modificata del controllore di beccheggio

0 10 20 30 40 50 60 700

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

0.18

0.2Risposta al gradino

Tempo (sec)

Am

piez

za

Figura 5.29 Risposta closed loop del controllo di beccheggio

Il sistema non ha quindi nessun polo nel semipiano positivo. Il diagramma Nyquist non dovràcompiere nessun giro attorno a -1 per far si che il sistema rimanga stabile. Notiamo che il sistemaha un polo sull’asse immaginario, quindi non potremo usare il comando nyquist ma dovremmousare la funzione scaricabile al link fornito nel paragrafo 5.3. Disegnamo quindi il diagramma diNyquist sostituendo ai comandi roots questo comando:

nyquist1(pitch)

Otterremo il diagramma 5.28. Poichè il diagramma di Nyquist non compie alcun giro attorno a -1,il sistema dovrebbe essere stabile in closed loop. Verifichiamo sostituendo nyquist1 con:

syscl=feedback(pitch,1);step(0.2*syscl)

Otterremo la risposta 5.29 che come abbiamo previsto è stabile, ma non soddisfa alcun requisitodi progetto.

CAPITOLO 5. RISPOSTA IN FREQUENZA 52

0 1 2 3 4 5 6 7 8 9 100

0.05

0.1

0.15

0.2

0.25

Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 5.30 Risposta closed loop del controllo di beccheggio con l’aggiunta di uno zero

5.5.2 Aggiunta di un controlloPer migliorare la risposta, proviamo ad aggiungere uno zero a -8 modificando così l’m-file:

num = [1.151 0.1774];den = [1 0.739 0.921 0];pitch = tf(num,den);

numc =[1 8];denc = 1;k = 1;contr = k*tf(numc,denc);loop = contr*pitch;nyquist1(pitch)syscl=feedback(loop,1);t=0:0.01:10;step(0.2*syscl,t)

La risposta nella figura 5.30è migliorata, ma è ancora troppo instabile nel transitorio. Aggiungiamoquindi un secondo zero per stabilizzarla. Dopo diverse prove, questi valori danno una rispostasoddisfacente:

numc =conv([1 5],[1 4]);denc = 1;k = 2;

Avremo infatti il grafico nella figura 5.31 che soddisfa i nostri criteri.

CAPITOLO 5. RISPOSTA IN FREQUENZA 53

0 1 2 3 4 5 6 7 8 9 100

0.05

0.1

0.15

0.2

0.25

Risposta al gradino

Tempo (sec)

Am

piez

za d

ella

ris

post

a

Figura 5.31 Risposta closed loop del controllo di beccheggio con l’aggiunta di due zeri

Capitolo 6

Spazio degli stati

In questo capitolo saranno usati questi comandi chiave: acker, lsim, place.

6.1 Equazioni in forma di spazio degli statiCome abbiamo già visto ci sono diversi modi per descrivere un sistema di equazioni lineari. Larappresentazione in forma di spazio degli stati (da ora SS) è data dalle equazioni:

dx

dt= Ax+Bu (6.1a)

y = Cx+Du (6.1b)

Dove x è un vettore di n elementi rappresentante gli stati (che in un sistema meccanico comunesono posizione e velocità), u indica l’input e y è il vettore di output. Le equazioni rappresentanon equazioni differenziali del primo ordine. La rappresentazione SS puo essere utilizzata sia persistemi SISO (single input single output) che per sistemi MIMO (multiple input multiple output).

Per introdurre il metodo dello spazio degli stati considereremo un sistema composto da unapallina sospesa su un campo magnetico (fig 6.1). La corrente che attraversa l’avvolgimento induceun campo magnetico che bilancia la forza di gravita e fa sì che la pallina (che è fatta di materialemagnetico) rimanga sospesa a mezz’aria. Le equazioni che descrivono il sistema sono:

md2h

dt2= mg − Ki2

h(6.2a)

V = Ldi

dt+ iT (6.2b)

In cui h è la posizione verticale della pallina, i la corrente che passa nel circuito, V il voltaggioapplicato, m la massa della pallina, g la costante gravitazionale, R la resistenza, L l’induttanza eK è un coefficiente che determina la forza magnetica esercitata sula pallina. Fissiamo poi questivalori:

• M =0,05 kg

• K = 0, 0001

• L =0,01 H

• R =1Ω

• g =9,81 m/s2

Il sistema è in equilibrio quando h = Ki2/mg (cioè dh/dt = 0). Linearizziamo le equazioniintorno ad h = 0, 01 (che corrisponde ad una corrente nominale di circa 7 ampere) e scriviamo larappresentazione in forma SS, in cui u è il voltaggio in ingresso ∆V , y è ∆h e:

x =

∆h

∆h∆i

(6.3)

Inseriamo il modello in forma SS in Matlab, creiamo quindi un nuovo m-file e inseriamo questeistruzioni:

54

CAPITOLO 6. SPAZIO DEGLI STATI 55

R L

V

+

h

mg

1

Figura 6.1 Modello di pallina sospesa con un campo magnetico

A = [ 0 1 0980 0 -2.80 0 -100];

B = [00100];

C = [1 0 0];D = 0;

Una delle prime informazioni che ci servono dalle equazioni di stato sono i poli del sistema. Questisono le soluzioni di det(sI −A) = 0, che in pratica rappresentano gli autovalori di A, che possonoessere trovati lanciando questa istruzione da command window:

poles = eig(A)

Come risposta otterremo:

poles =31.3050-31.3050-100.0000

Uno dei poli è nel semipiano positivo, quindi il sistema è instabile in open loop. Per controllare larisposta open loop aggiungiamo queste righe all’m-file:

t = 0:0.01:2;u = 0*t;x0 = [0.005 0 0];sys = ss(A,B,C,D);[y,t,x] = lsim(sys,u,t,x0);plot(t,y)

Dove il comando lsim da la risposta del sistema sys nel intervallo di tempo t alla sollecitazione u

e pone la posizione iniziale pari a x0. Lanciando l’m-file otterremo il grafico nella figura 6.2, in cuiè evidente che la risposta è instabile (ovviamente la pallina non va all’infinito ma si ferma quandoincontra il tavolo/pavimento, e in ogni caso dopo una certa distanza la linearizzazione non è piùvalida).

6.1.1 Progetto di un controllore utilizzando il posizionamento dei poliCostruiamo un controllore per questo sistema (il diagramma a blocchi del sistema è visibile nellafigura 6.3). Sappiamo che il polinomio caratteristico di questo sistema closed loop è det(sI − (A−BK)). Poichè le matrici A e BK sono 3x3 ci saranno 3 poli nel sistema. Con l’analisi SS possiamo

CAPITOLO 6. SPAZIO DEGLI STATI 56

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.5

1

1.5

2

2.5

3

3.5

4x 10

24

Tempo

Am

piez

za

Risposta al gradino

Figura 6.2 Risposta open loop del sistema pallina e campo magnetico

porre i poli ovunque vogliamo usando la funzione place che trova la matrice K corrispondente aipoli voluti. Decidiamo prima che risposta closed loop vogliamo. Supponiamo di volere settlingtime minore di 0,5 secondi, overshoot inferiore al 5% e cerchiamo di porre i due poli dominanti a−10±10i (valori trovati utilizzando le formule 4.4 e corrispondenti a ζ = 0, 7 e σ = 10 ≥ 4, 6/0, 5).Il terzo polo possiamo collocarlo a -50 come prima prova, per poi cambiarlo in seguito se la rispostanon ci soddisfa. Eliminiamo il comando lsim dall’m-file e aggiungiamo queste righe:

p1 = -10 + 10i;p2 = -10 - 10i;p3 = -50;

K = place(A,B,[p1 p2 p3]);sys_cl=ss(A-B*K,B,C,D);lsim(sys_cl,u,t,x0);

Lanciandolo otteniamo il grafico nella figura 6.4. L’overshoot è troppo alto e non soddisfa i nostricriteri. Nella formulazione SS si deve tenere in conto che non sono visualizzabili gli zeri dellafunzione di trasferimento, che possono aumentare l’overshoot. Proviamo ad allontanare i poli conquesti valori:

p1 = -25 + 22i;p2 = -22 - 22i;p3 = -110;

La risposta visibile nella figura 6.5 è migliorata per quanto riguarda l’overshoot. In generalepiù lontani sono i poli, maggiore è il compito che deve effettuare il controllore (e quindi la suacomplessità costruttiva o il suo costo).

Sottlineamo che la funzione place non funziona se vogliamo collocare 2 poli nella stessa posi-zione. In quel caso si dovrà usare acker.

6.1.2 Input di riferimentoStudiamo ora la risposta ad una sollecitazione a gradino (sceglieremo un gradino piccolo per nonuscire dall’intervallo di linearizzazione). Sostituiamo t, u e lsim con queste righe:

t = 0:0.01:2;u = 0.001*ones(size(t));sys_cl = ss(A-B*K,B,C,D);lsim(sys_cl,u,t)

CAPITOLO 6. SPAZIO DEGLI STATI 57

K

x = Ax+Byy = Cx

y = Cx

+

Y

X

RE(s)

1

Figura 6.3 Diagramma a blocchi del sistema pallina e campo magnetico

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−1

0

1

2

3

4

5

6

7x 10

−3 Risultato della simulazione lineare

Tempo (sec)

Am

piez

za

Figura 6.4 Simulazione lineare closed loop del sistema pallina e campo magnetico

CAPITOLO 6. SPAZIO DEGLI STATI 58

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−1

0

1

2

3

4

5

6x 10

−3 Risultato della simulazione lineare

Tempo (sec)

Am

piez

za

Figura 6.5 Simulazione lineare closed loop del sistema con poli allontanati

axis([0 2 -0.00001 0])

La risposta del sistema, visibile nella figura 6.6, non rispecchia per niente la realtà: non solol’ampiezza non è unitaria, ma è negativa invece di positiva. Questo si spiega osservando conattenzione il diagramma 6.6. Noi non confrontiamo l’output con l’input di riferimento, ma Kx, enon c’è ragione per cui Kx debba essere uguale all’output. Per eliminare il problema, dobbiamoscalare l’input di riferimento e porlo uguale aKx. Il fattore di scala che fa questo è spesso chiamatoNbar. Possiamo trovare Nbar con Matlab scrivendo questa funzione:function[Nbar]=rscale(a,b,c,d,k)

nargin1 = nargin;if (nargin1==2), % Input come sistema

[A,B,C,D] = ssdata(a);K=b;

elseif (nargin1==5), % A,B,C,D matriciA=a;B=b;C=c;D=d;K=k;

else error(’L"Input deve avere forma (sys,K) o (A,B,C,D,K)’)end;

s = size(A,1);Z = [zeros([1,s]) 1];N = inv([A,B;C,D])*Z’;Nx = N(1:s);Nu = N(1+s);Nbar=Nu + K*Nx;

Salvandola nei nostri m-file come rscale.m potremo richiamarla nei calcoli futuri. Proviamo quindia scalare l’input di riferimento del sistema e a ricalcolare l’output eliminando la riga con lsim edinserendo queste righe:Nbar=rscale(sys,K)lsim(sys_cl,Nbar*u,t)axis([0 2 0 0.002])

Il grafico nella figura 6.7 mostra ora una risposta accettabile.

CAPITOLO 6. SPAZIO DEGLI STATI 59

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−1

−0.9

−0.8

−0.7

−0.6

−0.5

−0.4

−0.3

−0.2

−0.1

0x 10

−5 Risultato della simulazione lineare

Tempo (sec)

Am

piez

za

Figura 6.6 Simulazione lineare closed loop con input a gradino del sistema

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2x 10

−3 Risultato della simulazione lineare

Tempo (sec)

Am

piez

za

Figura 6.7 Simulazione lineare closed loop con input a gradino del sistema (scalato)

CAPITOLO 6. SPAZIO DEGLI STATI 60

C

Cx = Ax+Bu

+

+

x y

x y

KL

R

˙x = Ax +Bu+ L(y − y)

E(s)

1

Figura 6.8 Diagramma a blocchi del sistema più l’osservatore

6.1.3 Progetto di un osservatoreQuando non possiamo misurare tutti gli stati di x (nella maggioranza dei casi), possiamo costruireun osservatore che faccia una stima degli stati mancanti misurando solo l’output. Per l’esempiodella pallina nel campo magnetico possiamo aggiungere 3 stati stimati al sistema (diagramma nellafigura 6.8). L’osservatore non è altro che una copia del sistema, ha lo stesso input e spesso le stesseequazioni dfferenziali. Il termine aggiuntivo serve a comparare l’output realmente misurato conl’output stimato y; questo serve per far convergere lo stato stimato x con l’x reale. La dinamicadell’errore dell’osservatore è data dai poli di (A − LC). Per prima cosa dobbiamo scegliere ilguadagno dell’osservatore L. Poichè vogliamo che la dinamica dell’osservatore sia più rapida delsistema in sè, dobbiamo porre i poli almeno 5 volte più distanti dei poli del sistema. A causa deldualismo tra la controllabilità e l’osservabilità, useremo la stessa tecnica utilizzata per trovare lamatrice di controllo, ma sostituendo C a B e poi usando le trasposte. Per inserire i poli usiamoquindi questi comandi:

op1 = -100;op2 = -101;op3 = -102;L = place(A’,C’,[op1 op2 op3])’;

Le equazioni mostrate nel diagramma nella figura 6.8 sono in funzione di x. In genere si riportanole equazioni combinate del sistema più osservatore usando lo stato originale x più l’errore e = x−x.Con un pò di algebra riusciamo arrivamo a inserire così le matrici:

At = [A - B*K B*Kzeros(size(A)) A - L*C];

Bt = [ B*Nbarzeros(size(B))];

Ct = [ C zeros(size(C))];

Per simulare la risposta a una condizione iniziale non nulla con nessun input di riferimento, ag-giungiamo queste righe all’m-file (in genere assumiamo che l’osservatore abbia condizione inizialenulla, x = 0, così che la condizione iniziale dell’errore è uguale alla condizione iniziale dello stato):

sys=ss(At,Bt,Ct,0);lsim(sys,zeros(size(t)),t,[x0 x0])

Lanciando l’m-file otterremo il grafico dell’errore visibile nella figura 6.9.

CAPITOLO 6. SPAZIO DEGLI STATI 61

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−3

−2

−1

0

1

2

3

4

5

6x 10

−3 Risultato della simulazione lineare

Tempo (sec)

Am

piez

za

Figura 6.9 Simulazione lineare closed loop dell’osservatore con input a gradino

6.2 Risoluzione tramite analisi SS del controllore di bec-cheggio

Nel paragrafo 2.2 abbiamo trovato il modello a spazio degli stati del controllore di beccheggio: αq

θ

=

−0.313 56.7 0−0.0139 −0.426 0

0 56.7 0

+

αqθ

[δe] (6.4)

y =[

0 0 1] α

+ [0][δe] (6.5)

L’input (l’angolo dell’equilibratore δe) è di 0,2 rad e l’output è l’angolo di beccheggio (θ). I criteridi progetto sono:

• Overshoot inferiore al 10%.

• Rise time inferiore ai 5 secondi.

• Settling time inferiore ai 10 secondi.

• Errore steady state inferiore al 2%.

6.2.1 Controllabilità e osservabilitàLa prima cosa da fare nel progettare col metodo SS è verificare la controllabilità e la osservabilitàdel sistema. Per far sì che il sistema sia del tutto controllabile la matrice di controllo deve avererango n:

CT = [BAB . . . An−1B] (6.6)

Allo stesso modo, per far sì che il sistema sia completamente osservabile, la matrice di osservabilitàdeve avere rango n:

OT =

CCA. . .

CAn−1

(6.7)

CAPITOLO 6. SPAZIO DEGLI STATI 62

Poichè le nostre matrici di controllabilità e osservabilità sono 3x3, il rango deve essere 3. Il comandodi Matlab rank fornisce il rango di una matrice. Creiamo un nuovo m-file ed inseriamo queste righe:

A = [-0.313 56.7 0;-0.0139 -0.426 0;0 56.7 0];

B = [0.232;0.0203;0];

C = [0 0 1];

D = [0];

pitch = ss(A,B,C,D);

co = ctrb(pitch);ob = obsv(pitch);

Controllability = rank(co)Observability = rank(ob)

Lanciandolo otterremo:

Controllability =3

Observability =3

Questo dimostra che il nostro sistema è totalmente controllabile e osserbabile.

6.2.2 Progetto del controllore mediante posizionamento dei poliCome già detto, la tecnica del posizionamento dei poli può essere usata per trovare la matrice dicontrollo K. In questo esempio useremo però un altro metodo, detto Linear Quadratic Regulator(LQR). Questo metodo permette di trovare la matrice di controllo ottimale come risultato di unbilanciamento tra gli errori del sistema e il lavoro del controllo. Per usare il metodo LQR dobbiamotrovare 3 parametri: la matrice di indice di performance (R), la matrice di costo di stato (Q) e ilfattore di peso (p). Per semplicità scegliamo la matrice di indice di performance pari a 1 (R = 1),e la matrice di costo di stato pari a C ′ × C. Il fattore di peso p sarà variato in funzione dellarisposta al gradino. Come prima prova poniamo p = 50. Riscriviamo così l’m-file:

t = 0:0.1:10;de = 0.2*ones(size(t));yo = [0 0 0];

A = [-0.313 56.7 0;-0.0139 -0.426 0;0 56.7 0];

B = [0.232;0.0203;0];

C = [0 0 1];

D = [0];

R=1;Q=C’*C;p = 50;

LQR = R*Q*p;

[K] = lqr(A,B,LQR,1);

CAPITOLO 6. SPAZIO DEGLI STATI 63

0 1 2 3 4 5 6 7 8 9 100

0.005

0.01

0.015

0.02

0.025

0.03

0.035

0.04Risultato della simulazione lineare

Tempo (sec)

Am

piez

za

Figura 6.10 Simulazione lineare closed loop del sistema di controllo di beccheggio

sys_cl=ss(A-B*K,B,C,D);lsim(sys_cl,de,t,yo)axis([0 10 0 0.04])

Lanciandolo otterremo la figura 6.10. Il rise time, l’overshoot e il settling time sono soddisfacenti,ma l’errore steady state è troppo alto. Questo problema può essere facilmente risolto inserendoil fattore di scala Nbar. Come abbiamo già detto i sistemi di controllo a spazio degli stati nonconfrontano l’output con l’input di riferimento, ma confrontano tutti gli stati moltiplicati la matricedi controllo (Kx). Usando la funzione rscale definita nel paragrafo precedente possiamo facilmentetrovare il fattore di scala, Nbar, e risolvere il problema. Modifichiamo così le ultime righe dell’m-file:

Nbar = rscale(pitch,K)sys_cl=ss(A-B*K,B*Nbar,C,D);lsim(sys_cl,de,t,yo)

Lanciamolo per ottenere il grafico nella figura 6.11. La risposta ora soddisfa tutti i nostri criteridi progetto.

CAPITOLO 6. SPAZIO DEGLI STATI 64

0 1 2 3 4 5 6 7 8 9 100

0.05

0.1

0.15

0.2

0.25Risultato della simulazione lineare

Tempo (sec)

Am

piez

za

Figura 6.11 Simulazione lineare closed loop del sistema di controllo di beccheggio (scalato)

Capitolo 7

Dati discreti

In questo capitolo saranno usati questi comandi chiave: c2d, pzmap, zgrid.

7.1 Introduzione ai controllori a dati discretiI sistemi di feedback studiati fin’ora lavoravano su dati continui, mentre invece tutti i controllimoderni lavorano su dati discreti. Ciò nonostante, le tecniche studiate fin’ora possono essereapplicate con qualche modifica a dati discreti. Il diagramma di un sistema di controllo digitaleè mostrato nella figura 7.1. Il controllore racchiuso nel rettangolo tratteggiato svolge la stessafunzione di un controllore continuo, la differenza sta che questo controllore lavora su segnali digitali.Nella figura 7.1 vediamo che il controllore lavora sia con segnali discreti che continui.

7.1.1 Zero order holdIl controllore lavora così: il clock connesso ai convertitori D/A e A/D (digitale/analogico e vicever-sa) invia un impulso ogni T secondi e i convertitori mandano segnali solo quando arriva l’impulso.Questo fa sì che la parte di sistema contrassegnata come Hzoh(z) (diagramma nella figura 7.2)lavori solo sui segnali u(z) e produca solo segali discreti y(k), cosi la funzione Hzoh(z) può esse-re realizzata come funzione discreta. Vogliamo quindi trovare una funzione discreta Hzoh(z) chefaccia si che da un input costante nel sistema continuo H(s) ricaviamo un output continuo checorrisponda all’output discreto di Hzoh(z). Supponendo che il segnale u(k) rappresenti il segnale diinput, esistono tecniche che da un segnale di input discreto riescono a ricavare un segnale continuomediante il semplice blocco di quello discreto. Nella figura 7.3 è mostrato un esempio di zero orderhold, i pallini viola rappresentano i dati discreti campionati a frequenza costante (0,5 secondi), lalinea blu il segnale continuo ottenuto. Tramite questa tecnica, la funzione H(s) può lavorare sudati continui, dati che verranno poi digitalizzati dal convertitore A/C. Noi però sostituiremo tuttoil blocco con la funzione Hzoh(z) riducendo così il problema al progetto di una sola funzione ditrasferimento.

r(t)

A/D

A/D D/A+

−Eq. differenziale

u(k) u(t)Sistema

y(t)

y(t)e(k)H(s)

y(k)

Controllore digitale

r(k)

G(z)

Clock

1

Figura 7.1 Diagramma a blocchi di un sistema con controllo digitale

65

CAPITOLO 7. DATI DISCRETI 66

r(t)

A/D

A/D D/A+

−Eq. differenziale

u(k) u(t)Sistema

y(t)

y(t)e(k)H(s)

y(k)

Hzoh(s)

r(k)

G(z)

Clock

1

Figura 7.2 Funzione Hzoh(z) nel diagramma a blocchi di un sistema con controllo digitale

0 1 2 3 4 5 6 7 8 9 10−0.25

−0.2

−0.15

−0.1

−0.05

0

0.05

0.1

0.15Esempio di zero−order Hold

Tempo (sec)

Am

piez

za

Figura 7.3 Esempio di zero order hold.

CAPITOLO 7. DATI DISCRETI 67

7.1.2 Conversione dei dati utilizzando c2d

In Matlab esiste la funzione c2d che converte un sistema continuo (sia in forma di funzione ditrasferimento che di spazio degli stati) in un sistema discreto usando l’operazione di zero orderhold descritta sopra, o operazioni più complesse. Il comando ha questa forma:

sys_d = c2d(sys,Ts,’zoh’)

In cui la frequenza di campionamento Ts deve essere minore di 1/30BW , dove BW è la frequenzadi cut-off.

Funzione di trasferimento

Supponiamo di avere una classica funzione di trasferimento:

X(s)F (s) = 1

Ms2 + bs+ k(7.1)

• M =1 kg.

• b = 1010 N s/m.

• k = 2020 N/m.

• F (s) = 1.

Assumiamo che la frequenza di cut-off closed loop sia maggiore di 1 rad/s, sceglieremo quindiTs = 1/100. Creiamo quindi un nuovo m-file con questi comandi:

M = 1;b = 10;k = 20;

num = 1;den = [M b k];sys = tf(num,den);

Ts = 1/100;sys_d = c2d(sys,Ts,’zoh’)

Lanciandolo otterremo questo risultato:

Transfer function:4.837e-005 z + 4.678e-005-------------------------z^2 - 1.903 z + 0.9048

Sampling time: 0.01

Ora abbiamo la funzione di trasferimento in forma discreta.

Spazio degli stati

Supponiamo di avere questo modello a spazio degli stati:[xv

]=[

0 1−k/M −b/M

] [xv

]+[

01/M

[F ] (7.2)

y = [10][xv

]+ [0][F ] (7.3)

Assumiamo gli stessi valori di prima, creiamo un nuovo m-file ed inseriamo questi comandi:

M = 1;b = 10;k = 20;

A = [0 1;-k/M -b/M];

CAPITOLO 7. DATI DISCRETI 68

B = [ 0;1/M];

C = [1 0];

D = [0];

Ts = 1/100;

sys = ss(A,B,C,D);sys_d = c2d(sys,Ts,’zoh’)

Otterremo questa risposta:

a =x1 x2

x1 0.999 0.009513x2 -0.1903 0.9039

b =u1

x1 4.837e-005x2 0.009513

c =x1 x2

y1 1 0

d =u1

y1 0

Sampling time: 0.01Discrete-time model.

Che rappresenta il nostro modello a spazio degli stati in forma discreta.

7.1.3 Stabilità e risposta nel transitorioNei sistemi continui sappiamo che certi comportamenti dipendono dal posizionamento dei poli nelpiano reale-immaginario. Ad esempio un sistema è instabile se un polo si trova a destra dell’asseimmaginario. Per un sistema discreto, analizziamo il comportamento a seconda della posizione deipoli nel piano detto z-plane. I punti di questo piano sono legati ai punti dei piano reale immaginariodalla relazione:

z = esT (7.4)

In cui:

• T= tempo di campionamento

• s= posizione dei punti nel piano reale immaginario

• z= posizione dei punti nello z-plane

La figura 7.4 mostra le linee a coefficiente di smorzamento costante (ζ) e frequenza naturale costante(ωn) nello z-plane. In questo piano il limite di stabilità è un cerchio di raggio uguale a |z| =1. Per analizzare il comportamento nel transitorio possiamo ancora utilizzare le equazione 4.4.Suppioniamo di avere questa funzione di trasferimento discreta:

Y (z)F (z) = 1

z2 − 0, 3z + 0, 5 (7.5)

Creiamo un nuovo m-file ed inseriamo questi comandi:

numDz = 1;denDz = [1 -0.3 0.5];sys = tf(numDz,denDz,-1); % il -1 indica tempo di campionamento indeterminato

CAPITOLO 7. DATI DISCRETI 69

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

0.90.80.70.60.50.40.30.20.1

π/T

0.9π/T

0.8π/T

0.7π/T

0.6π/T0.5π/T

0.4π/T

0.3π/T

0.2π/T

0.1π/T

π/T

0.9π/T

0.8π/T

0.7π/T

0.6π/T0.5π/T

0.4π/T

0.3π/T

0.2π/T

0.1π/T

Figura 7.4 Linee a coefficente di smorzamento e frequenza naturale costante nello z-plane

pzmap(sys)axis([-1 1 -1 1])zgrid

Lanciandolo otterremo il grafico nella figura 7.5 che mostra i due poli ad una frequenza naturale dicirca 9π/20T e un coefficiente di smorzamento di 0,25. Ipotizziamo di avere un tempo di campio-namento di 1/20 (che comporta ωn = 28) e usando le equazioni sopracitate possiamo determinareche il sistema ha un rise time di circa 0,06 secondi, un settling time di circa 0,65 secondi e unovershoot del 45%. Calcoliamo la risposta al gradino e vediamo se le nostre ipotesi sono corrette.Aggiungiamo queste righe all’m-file:

sys = tf(numDz,denDz,1/20);step(sys,2.5);

La figura 7.6 conferma tutte le nostre ipotesi.

7.1.4 Root locus discretoL’equazione caratteristica per un sistema a feedback unitario discreto è:

1 +KG(z)Hzoh(z) = 0 (7.6)

In cui G(z) è il compensatore implementato nel controllore digitale e Hzoh(z) la funzione ditrasferimento discretaa del sistema. Il root locus può esser disegnato allo stesso modo che nelcaso continuo, con la differenza che ora essendo nel piano z dovremmo usare la funzione zgrid perorientarci nel root locus.

7.2 Risoluzione del controllo di beccheggio nel caso discretoNel paragrafo 2.5 abbiamo trovato il modello a spazio degli stati del controllore di beccheggio: α

q

θ

=

−0.313 56.7 0−0.0139 −0.426 0

0 56.7 0

+

αqθ

[δe] (7.7)

CAPITOLO 7. DATI DISCRETI 70

Mappa poli−zeri

Asse reale

Ass

e im

mag

inar

io

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

0.1π/T

0.2π/T

0.3π/T

0.4π/T0.5π/T

0.6π/T

0.7π/T

0.8π/T

0.9π/T

π/T

0.10.2

0.30.40.50.60.70.80.9

0.1π/T

0.2π/T

0.3π/T

0.4π/T0.5π/T

0.6π/T

0.7π/T

0.8π/T

0.9π/T

π/T

Figura 7.5 Mappa poli-zeri della funzione discreta d’esempio

0 0.5 1 1.5 2 2.50

0.2

0.4

0.6

0.8

1

1.2

1.4Risposta al gradino

Tempo (sec)

Am

piez

za

Figura 7.6 Risposta al gradino della funzione discreta

CAPITOLO 7. DATI DISCRETI 71

y =[

0 0 1] α

+ [0][δe] (7.8)

L’input (l’angolo degli equilibratori δe) è di 0,2 rad e l’output è l’angolo di beccheggio (θ). I criteridi progetto sono:

• Overshoot inferiore al 10%.

• Rise time inferiore ai 5 secondi.

• Settling time inferiore ai 10 secondi.

• Errore steady state inferiore al 2%.

7.2.1 Spazio degli stati discretoPer prima cosa troviamo lo spazio degli stati in forma discreta. Nel paragrafo sulla risposta infrequenza abbiamo visto che la frequenza di cut off del sistema è di circa 2 rad/s, quindi scegliamocome tempo di campionamento 1/100. Creiamo un nuovo m-file ed inseriamo queste righe:

A = [-0.313 56.7 0;-0.0139 -0.426 0;0 56.7 0];

B = [0.232;0.0203;0];

C = [0 0 1];D = [0];

pitch = ss(A,B,C,D);

Ts=1/100;pitch_d = c2d(pitch,Ts,’zoh’);

7.2.2 Controllabilità e osservabilitàNel paragrafo dello spazio degli stati abbiamo detto che il sistema è completamente controllabilese la matrice di controllabilità ha rango n (con n numero di stati), ed è completamente osservabilese la matrice di osservabilità ha rango n. Vediamo quindi quanto questo sistema è controllaabile eosservabile aggiungendo queste righe:

[F,G,H,J]=ssdata(pitch_d);Ts = 1/100;pitch_d = ss(F,G,H,J,Ts);

co = ctrb(pitch_d);ob = obsv(pitch_d);

Controllability = rank(co)Observability = rank(ob)

Lanciando l’m-file otteniamo:

Controllability =3

Observability =3

Quindi il sistema è del tutto controllabile e osservabile.

CAPITOLO 7. DATI DISCRETI 72

0 1 2 3 4 5 6 7 8 9 100

0.005

0.01

0.015

0.02

0.025

0.03

0.035

Tempo

Am

piez

za

Risultato della simulazione lineare: Modello discreto

Figura 7.7 Risposta a dati discreti del controllore di beccheggio

7.2.3 Progetto del controllo mediante posizionamento dei poliAnche in questo caso useremo il metodo LQR per trovare la matrice di controllo K. Usiamole stesse ipotesi del paragrafo 6.2 e scegliamo un fattore di peso pari a 50 come prima prova.Eliminamo i comandi rank dall’m-file e aggiungiamo queste righe:

t = 0:0.01:10;de = 0.2*ones(size(t));

R=1;Q=C’*C;p = 50;

LQR = R*Q*p;[K] = dlqr(F,G,LQR,1)

Ts = 1/100;sys_cl = ss(F-G*K,G,H,J,Ts);

[Y,T] = lsim(sys_cl,de);stairs(T,Y)

Lanciando l’m-file otterremo la matrice di controllo e la risposta ad una sollecitazione a gradino(fig. 7.7). La risposta ci soddisfa per quanto riguarda rise time, settling time e overshoot ma ha unerrore steady state troppo alto. Per risolvere il problema dobbiamo trovare il fattore di scala Nbar.Non possiamo però usare la funzione rscale perché è definita per dati continui, quindi tramiteprove ed errori troviamo il fattore di scala ottimale pari a 6,95. Per verificarlo ,modifichiamo cosìle ultime righe dell’m-file:

Nbar = 6.95;sys_cl = ss(F-G*K,G*Nbar,H,J,Ts);

[x] = lsim(sys_cl,de);stairs(t,x)

La risposta nella figura 7.8 soddisfa tutti i requisiti.

CAPITOLO 7. DATI DISCRETI 73

0 1 2 3 4 5 6 7 8 9 100

0.05

0.1

0.15

0.2

0.25

Tempo

Am

piez

za

Risultato della simulazione lineare: Modello discreto

Figura 7.8 Risposta a dati discreti del controllore di beccheggio con fattore di scala

Capitolo 8

Simulink

Simulink è un estensione grafica di Matlab per la modellazione e la simulazione dei sistemi. InSimulink, i sistemi sono inseriti come diagrammi a blocchi. Molti elementi del diagramma sonogià disponibili nel programma, come la funzione di trasferimento o le giunzioni di somma, cosìcome sono disponibili input e output visivi come generatori e oscilloscopi. Simulink è integrato inMatlab e i dati possono essere facilmente trasferiti tra i programmi. In questi capitoli applicheremoSimulink agli esempi studiati fin’ora con Matlab.

8.1 Elementi di SimulinkSimulink può essere lanciato dando nella command window il comando:

>> simulink

O in alternativa col tasto Simulink mostrato nella figura 8.1. Una volta lanciato, comparirà unafinestra (fig. 8.2) che rappresenta la libreria di Simulink. Nella libreria sono presenti tutti i blocchigià utilizzabili per creare un modello.

8.1.1 Elementi di baseIn Simulink un modello è un insieme di blocchi che in generale rappresentano un sistema. Ilmodello è composto da due classi di elementi, i blocchi e le linee. I blocchi sono usati per generare,modificare, combinare e mostrare i segnali. Le linee sono usate per trasferire i segnali da un bloccoall’altro.

Blocchi

La libreria di Simulink dispone di molti Blockset, insieme di blocchi appartenenti ad un determinatoargomento (Aerospaziale, comunicazioni, controllo etc.). Oltre a questi ci sono i blocchi di base diSimulink, che si dividono in varie categorie tra cui:

• Sources: Usati per generare vari tipi di segnale.

• Sinks: Usati per creare l’output o mostrare il segnale.

Figura 8.1 Posizione del tasto Simulink in Matlab

74

CAPITOLO 8. SIMULINK 75

Figura 8.2 Libreria di Simulink

• Discrete: Element di un sistema lineare e a tempo discreto (funzioni di trasferimento, spaziodegli stati, etc.).

• Continuous: Elementi di un sistema lineare e a tempo continuo.

• Math operation: Operazioni matematiche.

• Signal routing: Somma di segnali, differenza e varie combinazioni.

Linee

Le linee trasmettono i segnali nella direzione indicata dalla freccia. Le line devono trasmetteresempre dal punto di output di un blocco al punto di input di un altro blocco. L’unica eccezioneè una linea che nasce da un altra, dividendo il segnale in due linee. Le linee non possono maiimmettere il segnale in altre linee, per combinarle è necessario usare un blocco appropriato. Isegnali posson essere sia scalari che vettoriali, per sistemi SISO si usano in genere segnali scalari,per i MIMO si usano i vettoriali. Le linee usate per trasmettere segnali scalari o vettoriali sonoidentiche, il tipo di segnale che passa in esse è determinato dai blocchi alle estremità.

8.1.2 Esempio di modelloPer inserire un blocco basta trascinarlo dalla libreria al modello. Creiamo un modello semplicecomposto da tre blocchi: Step, Transfer Fcn e Scope (visibile nella figura 8.3). Il blocco Stepappartiene alla categoria Sources e fornisce un input a gradino. Il blocco Transfer Fcn appartienealla categoria Continuous ed immette una funzione di trasferimento. Il blocco Scope appartienealla categoria Sinks e da un output visivo simile ad un oscilloscopio.

Modificare i blocchi

Tutti i blocchi possono essere modificati. Ad esempio, se facciamo due volte click sul bloccoTransfer Fcn nel nostro modello, otterremo la finestre mostrata nella figura 8.4, in cui possiamomodificare il numeratore e il denominatore della funzione di trasferimento, inserendoli come vettori

CAPITOLO 8. SIMULINK 76

Figura 8.3 Modello di esempio

Figura 8.4 Finestra di dialogo del blocco Transfer Fcn

che contengono i coefficienti del polinomio (come si è sempre fatto fin’ora in Matlab). Se ad esempiovogliamo inserire come denominatore s2+2s+1 inseriremo [1 2 1]. Chiudendo la finestra di dialogoil modello apparirà come nella figura 8.5.

Anche il blocco Step è modificabile. Nella finestra di dialogo di questo blocco (fig. 8.6) pos-siamo modificare il tempo iniziale del gradino, il livello di partenza e il livello finale. Di default èconfigurato in modo da fornire un gradino unitario da 0 a 1 a t =1 s. Questi parametri possonoessere tutti cambiati, ma per non modifichiamoli e chiudiamo la finestra di dialogo.

L’ultimo blocco dell’esempio è il blocco Scope. La finestra di dialogo si presenta come nellafigura 8.7, ed in questa finestra verrà mostrato l’output mentre la simulazione è in funzione. In ognicaso in questa trattazione non tratteremo a fondo il blocco Scope ma ci limiteremo alla funzioneAutoscale.

CAPITOLO 8. SIMULINK 77

Figura 8.5 Modello modificato con la nuova funzione di trasferimento

Figura 8.6 Finestra di dialogo del blocco Step

CAPITOLO 8. SIMULINK 78

Figura 8.7 Finestra di dialogo del blocco Scope

Figura 8.8 Posizione del comando Start

Simulazione

Prima di avviare la simulazione, apriamo la finestra di dialogo del blocco Scope. Poi selezioniamoStart dal menù Simulation (fig. 8.8). La risposta nel blocco Scope sarà molto rapida e appariracome nella figura 8.9. L’output della simulazione (in giallo) è però poco visibile con gli assi attuali.Per migliorare la visibilità, facciamo click sul bottone Autoscale (a forma di binocolo) che riscaleràgli assi come nella figura 8.10. Notiamo che la risposta non inizia prima di t = 1, questo parametropuò essere cambiato nel blocco Step.

Proviamo ora a cambiare i parametri del sistema e a far ripartire la simulazione. Nel bloccoTransfer Fcn poniamo il denominatore pari a [1 20 400]. Rilanciamo la simulazione e rifacciamol’autoscale per ottenere la figura 8.11. Notiamo che il comando Autoscale modifica solo l’assevericale, e poichè la nostra nuova funzione di trasferimento ha una risposta molto veloce il graficosi trova concentrato nella parte sinistra della figura. Questo non è un problema del blocco scope,ma della simulazione in sè. Simulink infatti simula il sistema per tutti i 10 secondi per cui èconfigurato, anche se la risposta raggiunge lo steady state in poco più di 1 secondo. Per correggerequesto problema dobbiamo modificare i parametri di simulazione. Per farlo, selezioniamo la voceConfiguration parameters dal menù Simulation. Nella finestra che si aprirà (fig. 8.12) cambiamo

CAPITOLO 8. SIMULINK 79

Figura 8.9 Risposta del modello d’esempio

Figura 8.10 Risposta del modello d’esempio con autoscale

CAPITOLO 8. SIMULINK 80

Figura 8.11 Risposta del modello d’esempio con funzione di trasferimento modificata ([1 20 400])

Figura 8.12 Tempo di inizio e fine simulazione nella finestra di configurazione di simulazione

Start time da 0 a 0.8 e Stop time da 10 a 2. Lanciando di nuovo la simulazione e rifacendol’autoscale, otterremo la schermata mostrata nella figura 8.13, decisamente più chiara.

8.1.3 Esempio del modello di un sistemaAdesso proveremo a creare il modello di un sistema closed loop con Simulink. Per prima cosainseriremo i blocchi necessari, poi li modificheremo, li collegheremo e infine otterremo la simulazionedel modello.

Inserimento dei blocchi

Seguiamo questi passi per inserire i blocchi nel sistema:

• Creiamo un nuovo modello selezionando New dal menù di Simulink.

• Inseriamo il blocco Step dalla categoria Sources.

Figura 8.13 Risposta del sistema con tempo di simulazione modificato (0, 8 < t < 2)

CAPITOLO 8. SIMULINK 81

Figura 8.14 Blocchi inseriti nel modello di un sistema

• Inseriamo i blocchi Sum e Gain dalla categoria Math Operation.

• Inseriamo due blocchi Transfer Fcn (per inserire due blocchi dobbiamo trascinare lo stessoblocco due volte) dalla categoria Continuous-

• Inseriamo il blocco Scope dalla categoria Sinks.

Alla fine il modello si presenterà come nella figura 8.14.

Modifica dei blocchi

Seguiamo questi passi per modificare i blocchi del sistema:

• Dalla finestra di dialogo del blocco Sum inseriamo +-| nel campo List of signs.

• Dalla finestra di dialogo del blocco Gain poniamo il guadagno pari a 2, 5.

• Dalla finestra di dialogo del blocco Transfer Fcn a sinistra inseriamo come numeratore [1 2]

e come denominatore [1 0].

• Dalla finestra di dialogo del blocco Transfer Fcn a destra lasciamo il numeratore pari a [1]

e come denominatore inseriamo [1 2 4].

• Cambiamo il nome della prima funzione di trasferimento clickando due volte sulla scrittaTransfer Fcn e chiamiamola PI Controller.

• Cambiamo il nome della seconda funzione di trasferimento clickando due volte sulla scrittaTransfer Fcn e chiamiamola Plant.

Ora il modello dovrebbe apparire come nella figura 8.15.

Collegamento dei blocchi

Dobbiamo ora collegare i vari blocchi tra di loro. Per prima cosa colleghiamo il blocco Step colsegno + del blocco Sum. Poi colleghiamo in seguenza i blocchi Sum, Gain, PI Controller, Plante Scope. Infine facciamo uscire una linea dal collegamento tra il blocco Plant e il blocco Scope ecolleghiamola al segno − del blocco Sum (per far uscire una linea da un altra linea, si deve tenerepremuto il tasto CTRL mentre si seleziona la linea). Clickando due volte su una linea possiamoinfine inserire un etichetta al segnale, così che il modello appaia come nella figura 8.16.

CAPITOLO 8. SIMULINK 82

Figura 8.15 Blocchi modificati nel modello di un sistema

Figura 8.16 Collegamento dei blocchi del modello di un sistema

CAPITOLO 8. SIMULINK 83

Figura 8.17 Risposta del sistema

Simulazione

Ora che il modello è completo, possiamo lanciare la simulazione. Apriamo la finestra del bloccoScope e lanciamo la simulazione. Usando l’autoscale otterremo la figura 8.16.

8.1.4 Importare valori da MatlabSimulink è completamente integrato in Matlab, quindi è possibile importare variabili salvate nelWorkspace di Matlab in Simulink. Per far questo, basta inserire il nome della variabile al postodel numero in un blocco qualsiasi, ad esempio nel blocco Gain si poteva inserire come guadagnoK, variabile che andava poi definita in Matlab.

8.2 Creazione di un modello fisico con SimulinkIn Simulink è molto facile rappresentare un sistema fisico o un modello. In generale, un sistemadinamico può essere costruito basandosi su semplici leggi fisiche. In questo paragrafo vedremocome.

8.2.1 Sistema trenoIn questo esempio creeremo il modello del treno giocattolo già analizzato nel paragrafo 2.1. Per laschematizzazione del modello, l’assegnazioni delle costanti e i criteri di progetto si rimanda quindia quel paragrafo. Il nostro modello si baserà sulla applicazione della seconda legge di Newton, chein Matlab è descritta da queste espressioni:∑

F = M1x1 (8.1)

∑F = M2x2 (8.2)

8.2.2 Costruire il modelloQuesto sistema di equazioni può essere rappresentato graficamente e senza ulteriori manipola-zioni. Per prima cosa costruiamo 2 copie (una per ogni massa) dell’espressione

∑F = Ma o

a = 1/M∑F . Apriamo un nuovo modello in Simulink ed inseriamo due blocchi Sum, uno sopra

l’altro. Chiamiamoli Sum_F1 e Sum_F2 come nella figura 8.18 (ci preoccuperemo in seguito dimodificarli). L’output di questi blocchi rappresenta la somma delle forze agenti su ogni massa.Moltiplicando questa per 1/M otterremo l’accelerazione.

Inseriamo quindi 2 blocchi Gain , colleghiamoli ai blocchi Sum e modifichiamo i guadagni con1/M1 e 1/M2 così da prendere successivamente le variabili da Matlab (probabilmente appena inseritii nuovi guadagni nei blocchi Gain sarà mostrato un generico k-, basterà ingrandire i blocchi per

CAPITOLO 8. SIMULINK 84

Figura 8.18 Modello del sistema treno, passo 1: blocchi Sum

Figura 8.19 Modello del sistema treno, passo 2: blocchi Gain

vedere il guadagno reale). Rinominiamo quindi i blocchi a1 e a2. Dovremmo ottenere il modellonella figura 8.19.

L’output dei due guadagni sono le accelerazioni delle due masse. Poichè siamo interessatisia alla velocità che alla posizione delle masse e la velocità è l’integrale dell’accelerazione e lospazio e l’integrale della velocità, inseriamo quatto blocchi Integrator (dal gruppo Continuous)ed inseriamone due per linea, chiamandoli rispettivamente v1, x1, v2 e x2 (fig. 8.20).

Inseriamo infine due blocchi Scope alla fine delle due linee e chiamiamoliView_x1 eView_x2 (fig.8.21).

Ora siamo pronti a sommare le forze su ogni massa. Per prima cosa modifichiamo i blocchi Sum.In quello superiore inseriamo +-- nel campo List of signs e selezioniamo come forma rectangular.Nel blocco inferiore inseriamo +- nel campo List of signs e selezioniamo la forma rectangular (fig.

CAPITOLO 8. SIMULINK 85

Figura 8.20 Modello del sistema treno, passo 3: blocchi Integrator

Figura 8.21 Modello del sistema treno, passo 4: blocchi Scope

CAPITOLO 8. SIMULINK 86

Figura 8.22 Modello del sistema treno, passo 5: modifica dei blocchi Sum

Figura 8.23 Modello del sistema treno, passo 6: blocco Signal generator

8.22).Per rappresentare l’input F , inseriamo un blocco Signal Generator dalla libreria Sources

nell’angolo superiore sinistro, colleghiamolo ad un segno + del blocco Sum e chiamiamolo F (fig.8.23).

La seconda forza che agisce su entrambe le masse è l’attrito, e l’equazione che lo descriveè Fa = bgMV µ. Per inserirla nel modello, possiamo prendere la velocità facendo uscire duelinee a valle del primo integratore e collegandole ad un blocco Gain che abbia come guadagnorispettivamente mu*g*M1 e mu*g*M2. Questi due blocchi vanno collegati ai segni meno dei blocchiSum. Chiamiamoli rispettivamente Friction_1 e Friction_2 (fig. 8.24).

Resta da inserire l’azione della molla, che è descritta dall’equazione FK = −K(x1 − x2) per lamassa 1, mentre ha segno opposto per la massa 2. Inseriamo quindi un blocco Subtract e come

CAPITOLO 8. SIMULINK 87

Figura 8.24 Modello del sistema treno, passo 7: forza d’attrito

input inseriamo x1 e x2 presi a valle del secondo integratore e chiamiamolo x1-x2. Moltiplichiamol’output di questo blocco per un guadagno K tramite un blocco Gain ed infine collechiamolo alsegno - del blocco Sum_F1 e al segno + del blocco Sum_F2 e chiamiamo questo blocco Spring(fig. 8.25).

Per completare il modello inseriamo un altro Scope (che chiameremo Viev_v1 ) con input v1preso a monte del primo integratore (fig. 8.26).

8.2.3 Avviare la simulazionePer prima cosa immettiamo le costanti in Matlab. Da Command Window inseriamo quindi questicomandi:

>> M1=1;>> M2=0.5;>> K=1;>> F=1;>> mu=0.002;>> g=9.8;

Ora dobbiamo dare un input appropriato al sistema. Apriamo la finestra di dialogo del bloccoGenerator e selezioniamo un onda quadra (square) con frequenza di .001Hz e ampiezza di -1.Infine secegliamo un tempo appropriato di simulazione. Poichè il ciclo ha onde di frequenza 0.001Hz scegliamo come tempo di simulazione 1000 secondi. Ora apriamo la finestra View_v1 e lanciamola simulazione. Con l’uso di autoscale la risposta dovrebbe essere quella nella figura 8.27.

8.2.4 Modello MatlabDa un modello Simulink possiamo estrarre un modello Matlab. Per fare questo, eliminiamo ilblocco View_v1 ed inseriamo un blocco Out dal gruppo Sinks (fig. 8.28). Salviamo quindi ilmodello come train.mdl. Ora possiamo estrarre il modello in Matlab dando questo comando daCommand Window:

[A,B,C,D]=linmod(’train’)

Otterremo così il modello a spazio degli stati in Matlab nelle matrici A, B, C e D.

CAPITOLO 8. SIMULINK 88

Figura 8.25 Modello del sistema treno, passo 8: azione della molla

Figura 8.26 Modello del sistema treno, passo 9: blocco Scope per l’output della velocità

CAPITOLO 8. SIMULINK 89

Figura 8.27 Risposta del modello del treno

Figura 8.28 Estrapolazione del modello in Matlab tramite blocco Out

CAPITOLO 8. SIMULINK 90

Figura 8.29 Modello di controllo di beccheggio, passo 1: blocco Integrator

8.3 Risoluzione del controllore di beccheggio con SimulinkLe equazioni che descrivono il sistema sono state trovate e commentate nel paragrafo 2.5, quindiora ci limiteremo a riportare i dati necessari. Il sistema nella forma dello spazio degli stati è cosìdescritto: α

q

θ

=

−0.313 56.7 0−0.0139 −0.426 0

0 56.7 0

+

αqθ

[δe] (8.3)

y = [001]

αqθ

+ [0][δe] (8.4)

Queste equazioni possono essere così sintetizzate:

dx

dt= Ax+Bu (8.5)

y = Cx+Du (8.6)

8.3.1 Creazione del modelloVogliamo usare queste equazioni esplicitamente in Simulink sfruttando la possibilità di avere segnalivettoriali. Le linee di vettori in Simulink sono automaticamente generate quando l’input o l’outputdi un blocco è un vettore. Per prima cosa rappresentiamo la derivata dello stato:

• Creiamo un nuovo modello in Simulink

• Inseriamo un blocco Integrator.

• Disegnamo una linea uscente dal blocco e assegnamo come etichetta X.

• Disegnamo una linea entrante nel blocco e assegnamo come etichetta d/dt(X) (fig. 8.29).

Rappresentiamo ora la prima equazione di stato, d/dt(X) = Ax+Bu:

• Inseriamo un blocco Gain e rovesciamolo (selezioniamolo e poi usiamo il comando flip dalmenù format).

CAPITOLO 8. SIMULINK 91

Figura 8.30 Modello di controllo di beccheggio, passo 2: prima equazione di stato

• Modifichiamo la voce multiplication dell’elemento Gain e scegliamo Matrix(K*u)(u vector).

• Modifichiamo il guadagno di questo blocco e poniamolo pari a A. Modifichiamo poi l’etichettadel blocco e chiamiamolo A

• Colleghiamo la linea in uscita del blocco Integrator con l’ingresso del blocco A.

• Inseriamo un blocco Sum a sinistra dell’integratore e colleghiamone l’output con l’ingressodell’integratore.

• Colleghiamo l’uscita del blocco A con un ingresso positivo del blocco Sum.

• Inseriamo un altro blocco Gain a sinistra del blocco Sum. Poniamo come guadagno B echiamiamolo B.

• Modifichiamo la voce multiplication dell’elemento Gain e scegliamo Matrix(K*u)(u vector).

• Colleghiamo questo blocco al blocco Sum(fig. 8.30).

Creiamo quindi il segnale di output y = CX +Du:

• Creiamo una linea entrante in B e chiamiamo il segnale u.

• Inseriamo un blocco Gain chiamato C e con guadagno C e colleghiamolo alla linea X.

• Modifichiamo la voce multiplication dell’elemento Gain e scegliamo Matrix(K*u)(u vector).

• Inseriamo un altro blocco Gain e colleghiamolo alla linea u. Poniamo come guadagno D echiamiamolo D.

• Inseriamo un blocco Sum a destra del blocco C.

• Modifichiamo la voce multiplication dell’elemento Gain e scegliamo Matrix(K*u)(u vector).

• Colleghiamo come input del nuovo blocco Sumi blocchi C e D (fig. 8.31).

Ora dobbiamo applicare degli input ed estrarre gli output mediante i blocchi In e Out:

• Inseriamo un blocco In e colleghiamolo alla linea u.

• Chiamiamo il blocco In deltae.

CAPITOLO 8. SIMULINK 92

Figura 8.31 Modello di controllo di beccheggio, passo 3: equazione di output

Figura 8.32 Modello di controllo di beccheggio, passo 4: blocchi In e Out

• Inseriamo un blocco Out e colleghiamolo al blocco Sum.

• Chiamiamo il blocco Out theta.

• Inseriamo un altro blocco Out e colleghiamolo alla linea X, chiamiamolo X (fig. 8.32).

Salviamo il modello col nome Pitch.mdl.

8.3.2 Risposta open loopPer generare una risposta open loop possiamo inserire il nostro modello come sottosistema di unaltro modello.

CAPITOLO 8. SIMULINK 93

Figura 8.33 Modello di controllo di beccheggio, passo 5: blocco Subsystem

• Creiamo un nuovo modello

• Inseriamo un blocco Subsystem dal gruppo Ports & Subsystem.

• Apriamo la finestra di dialogo, otterremo così un nuovo modello chiamato Subsystem.

• Selezioniamo tutti i blocchi dal nostro modello Pitch e sostituiamoli nel modello Subsystem.

• Chiudiamo la finestra Subsystem e chiamiamo il blocco Pitch Model (fig. 8.33).

Per completare il modello dobbiamo assegnare un input e un visualizzatore di output:

• Inseriamo un blocco Step e colleghiamolo all’input del blocco Pitch Model.

• Configuriamo il blocco Step e cambiamo il tempo di inizio con 0.

• Inseriamo un blocco Scope e colleghiamolo all’output theta (fig. 8.34).

Prima di simulare la risposta dobbiamo immettere le matrici del modello a spazio degli stati inMatlab. Da Command Window digitiamo quindi questi comandi:

>> A=[-0.313 56.7 0; -0.0139 -0.426 0; 0 56.7 0];>> B=[0.232; 0.0203; 0];>> C=[0 0 1];>> D=[0];

Ora siamo pronti a simulare la risposta. Apriamo la finestra di dialogo del blocco Scope, lanciamola simulazione e dopo l’autoscale dovremmo ottenere la risposta mostrata nella figura 8.35.

8.3.3 Inserimento di un controllore full-stateCome nel paragrafo 6.2 vogliamo inserire un controllore progettato col metodo LQR, questa voltacon Simulink.

• Inseriamo un blocco Gain sotto il blocco Pitch Model e chiamiamolo K.

• Modifichiamo il guadagno del blocco e poniamolo pari a K.

• Rovesciamo il blocco K col comando Flip.

• Modifichiamo la voce multiplication e scegliamo Matrix(K*u)(u vector).

CAPITOLO 8. SIMULINK 94

Figura 8.34 Modello di controllo di beccheggio, passo 6: blocchi Step e Scope

Figura 8.35 Modello di controllo di beccheggio, risposta open loop

CAPITOLO 8. SIMULINK 95

Figura 8.36 Modello di controllo di beccheggio, passo 7: inserimento di un controllore

• Colleghiamo l’output X del blocco Pitch Model con l’input di K.

• Inseriamo un blocco Sum tra lo Step e il Pitch Model.

• Cambiamo i segni del blocco Sum in +-

• Colleghiamo il blocco Step al segno + e il blocco K al segno -.

• Colleghiamo l’output del blocco Sum all’input del blocco Pitch Model (fig. 8.36).

Per ottenere la risposta closed loop non ci resta che definire K. Come abbiamo già fatto nelparagrafo 6.2, inseriamo questi comandi in Command Window:

>> p=50;>> Q=[0 0 0;

0 0 0;0 0 p];

>> [K]= lqr (A,B,Q,1)

Ora possiamo lanciare la simulazione, ed otterremo la risposta nella figura 8.37.

CAPITOLO 8. SIMULINK 96

Figura 8.37 Modello di controllo di beccheggio, risposta closed loop

Parte II

Modello di un velivolo tramiteSimulink

97

Capitolo 9

Creazione del modello

9.1 Blocchi di basePer creare il modello di un velivolo reale con un qualsiasi programma, è necessario conoscerne ilmodello aerodinamico. Nel nostro esempio, creeremo il modello di un F-4 (fig. 9.1), basandoci suidati ricavati da un report NASA (vedi appendice A) sulla simulazione di modelli non lineari divelivoli.

9.1.1 Modello aerodinamicoNel report NASA (pag. da 39 a 45) sono riportate le funzioni polinomiali dei sei coefficientiaerodinamici (CX , CY , CZ , Cl, Cm, Cn) in funzione degli angoli (in gradi) di incidenza e imbardata(α e β), delle velocità angolari adimensionalizzate del velivolo (p, q e r) e delle deflessioni (ingradi) delle superfici di controllo (δe, δa e δr). Queste relazioni sono valide per −15 ≤ α ≤ 55.Per utilizzare queste equazioni e costruire così il nostro modello aerodinamico possiamo creare unanormale funzione Matlab in un m-file, ed inserirla nel modello Simulink tramite il blocco Embedded

Matlab Function. Questo metodo diminuirà però le prestazioni del modello una volta completato,poichè Simulink dovrà compilare ad ogni avvio della simulazione la nostra funzione, provocandocosì un delay tra il comando Run e l’effettivo inizio della simulazione consistente se la funzione ècomplessa. Per evitare questo inconveniente, per il modello aerodinamico useremo una S-function.

S-function

Una Level-2 S-function è una funzione, che può essere scritta in vari linguaggi tra cui il C, ilC++ e ovviamente l’M, che contiene al suo interno alcuni callback che Simulink normalmente usaquando simula un modello. Inserendo una S-function al posto di una normale funzione Matlab,si migliorano quindi le prestazioni del modello, poichè si usa una funzione già precompilata chediminuisce il carico di lavoro necessario a Simulink per poterla utilizzare.

Figura 9.1 F-4 Phantom

98

CAPITOLO 9. CREAZIONE DEL MODELLO 99

Per scrivere la nostra S-function, andremo a modificare la funzione msfuntmpl_basic.m presentein tutte le distribuzioni recenti di Matlab. Prima però dobbiamo stabilire che genere di funzionevogliamo creare. Scegliamo di creare una funzione che ha come input un vettore di 13 parametri(nell’ordine:cbar, span, xcgref , xcg, V , alpha, beta, p, q, r, deltaE, deltaA, deltaR) e come outputun vettore di 6 parametri (CX , CY , CZ , Cl, Cm, Cn). Apriamo quindi questo file con l’editor emodifichiamolo così:

• Cambiamo il nome della funzione nella prima riga con AerodynamicModelF4_S(block) e lascia-mo invariato il comando setup(block);.

• La prima parte da modificare della S-function è il setup(block). Ricordando che vogliamocome input un vettore di 13 elementi e come output un vettore di 6 elementi, andiamo amodificare solo queste righe del file:

[...]block.InputPort(1).Dimensions = 13;[...]block.OutputPort(1).Dimensions = 6;[...]

• Le parti DoPostPropSetup, InitializeConditions e Start non hanno bisogno di modifichepoichè la nostra funzione dovrà funzionare sempre, quindi le lasceremo invariate.

• La seconda parte da modificare è Outputs. Qui andranno inserite le equazioni, riportate nelreport NASA, che rappresentano il cuore del modello aerodinamico. Ricordando l’ordinedegli input stabilito in precedenza, assegniamo ad ogni elemento del vettore alla rispettivavariabile con queste istruzioni:

cbar = block.InputPort(1).Data(1);span = block.InputPort(1).Data(2);xcgRef = block.InputPort(1).Data(3);xcg = block.InputPort(1).Data(4);V = block.InputPort(1).Data(5);alpha = block.InputPort(1).Data(6);beta = block.InputPort(1).Data(7);p = block.InputPort(1).Data(8);q = block.InputPort(1).Data(9);r = block.InputPort(1).Data(10);deltaE = block.InputPort(1).Data(11);deltaA = block.InputPort(1).Data(12);deltaR = block.InputPort(1).Data(13);

Inizializziamo quindi i coefficienti con questa istruzione:

CX=0;CY=0;CZ=0;Cm=0;Cl=0;Cn=0;

Ora andranno inserite le equazioni presenti nel report NASA. A valle di queste equazioniandremo a definire il vettore di output con questi comandi:

block.OutputPort(1).Data(1) = CX;block.OutputPort(1).Data(2) = CY;block.OutputPort(1).Data(3) = CZ;block.OutputPort(1).Data(4) = Cl;block.OutputPort(1).Data(5) = Cm;block.OutputPort(1).Data(6) = Cn;

• Lasciamo invariate le ultime due parti e salviamo il tutto col nome AerodynamicModelF4_S.m.La nostra S-function è completa.

Possiamo quindi implementare questa funzione in un blocco Simulink. Apriamo un nuovomodello Simulink ed inseriamo un blocco Level-2 M-file S-Function (fig. 9.2). Ora apriamo lafinestra di dialogo del blocco e modifichiamo il nome del M-file, inserendo AerodynamicModelF4_S.m

(fig.9.3). Abbiamo così implementato il modello aerodinamico nel nostro modello.

CAPITOLO 9. CREAZIONE DEL MODELLO 100

Figura 9.2 Inserimento del blocco S-function

Figura 9.3 Finestra di dialogo del blocco S-function

9.1.2 Sistemi di riferimento e angoli di euleroPrima di parlare delle equazioni del moto è opportuno riportare qualche informazione sui sistemidi riferimento usati nel modello e sugli angoli di eulero. In questo modello useremo tre sistemi diriferimento:

• Il sistema di riferimento Body è un sistema solidale al velivolo, con origine coincidente colcentro di massa del velivolo. L’asse xb è l’asse longitudinale del velivolo, contenuto nel pianodi simmetria, e positivo verso la prua. L’asse zb è normale ad xb, è contenuto nel piano disimmetria ed è diretto nel senso testa-piedi del pilota. L’asse yb completa la terna levogiratrirettangola.

• Il sistema di riferimento Earth è un sistema inerziale con asse ze diretto verso il basso nelladirezione dell’accelerazione di gravità e positivo verso il basso. In questo esempio assumiamol’asse xe diretto verso nord e l’asse ye diretto verso est (riferimento north-east-down).

• Quando ci occuperemo dell’output su simulatore di volo 3D useremo un ulteriore sistema diriferimento, detto LLA (latitudine, longitudine e altitudine).

Per quanto riguarda gli angoli di eulero, si ricorda soltanto che in nel modello è utilizzata unasequenza 321.

9.1.3 Equazioni del motoIl secondo blocco fondamentale, contenuto nell’Aerospace Blockset, è il 6DoF (euler angle). Questoblocco integra le forze e i momenti forniti in riferimento Body, e restituisce varie informazioni, tracui la posizione in riferimento Earth e l’orientamento in termini di angoli di eulero (φ, θ e ψ),la velocità in riferimento Body e Earth e le velocità angolari. Inseriamo quindi questo blocco nelmodello (fig. 9.4), apriamone la finestra di dialogo e facciamo qualche modifica:

CAPITOLO 9. CREAZIONE DEL MODELLO 101

Figura 9.4 Inserimento del blocco 6DoF

Figura 9.5 Finestra di dialogo con parametri modificati del blocco 6DoF

• Modifichiamo le velocità iniziali ed inseriamo:

[u0 v0 z0]

• Modifichiamo la massa iniziale come Acmass e la matrice di inerzia come Inertia_Matrix (fig.9.5.

• Selezioniamo col tasto destro il blocco, e poi selezioniamo Look under the mask, apriamo poiil blocco Transform to inertial axis ed inseriamo 2 blocchi Reshape come in figura 9.6.

Così facendo abbiamo inserito dei parametri che andremo a definire in seguito, usando semprecome fonte il report NASA.

I due blocchi principali del modello sono ora inseriti e configurati, restano da definire gli inpute collegare tra loro i blocchi, utilizzando dei blocchi ausiliari.

CAPITOLO 9. CREAZIONE DEL MODELLO 102

Figura 9.6 Aggiunta dei blocchi Reshape

9.2 Sviluppo del modelloDopo aver inserito i blocchi di base, possiamo sviluppare il nostro modello. Per farlo utilizzeremoalcuni blocchi ausiliari che ora andiamo rapidamente a descrivere:

• Turbofan Engine System: Questo blocco, presente nell’Aerospace blockset simula un motoreturbofan, richiede in ingresso il mach di volo, la quota e la manetta, e restituisce la spinta eil consumo di carburante

• COESA Atmosphere model: Fornisce densità, temperatura, velocità del suono e pressione alvariare della quota secondo il modello COESA

• Incidence, sideslip, & Airspeed: Richiede come input il vettore velocità in assi Body, e forniscel’angolo di incidenza, l’angolo di beccheggio e il modulo della velocità

• Dynamic Pressure: Richiede come input la densità e la velocità e restituisce la pressionedinamica

Andiamo quindi a sviluppare il nostro modello.

9.2.1 Input del modello aerodinamicoIniziamo a fornire gli input al modello aerodinamico.

• Sappiamo già che dobbiamo fornire al modello aerodinamico 13 parametri. Di questi 4 sonoparametri geometrici costanti, che non variano durante la simulazione, e 3 sono parametri dicontrollo, che per ora assumiamo costanti (in pratica a comandi bloccati).

• Inseriamo quindi 7 blocchi Constant e come parametri inseriamo cbar, span, xcgRef, xcg,deltaE, deltaA, deltaR, deltaTh.

• Inseriamo un blocco Mux con 13 ingressi e colleghiamo le varie costanti nell’ordine cheabbiamo definito nel capitolo precedente.

• Colleghiamo poi l’uscita del blocco Mux all’ingresso della S-function. Dovremmo ottenere ilmodello nella figura 9.7.

Mancano ancora 6 parametri, cioè le componenti della velocità angolare, l’angolo di attacco edi beccheggio e il modulo della velocità. Queste sono variabili che vengono calcolate istante peristante dal blocco 6DoF.

• Colleghiamo quindi l’uscita ω del blocco 6DoF ad un blocco Demux, così da ottenere le trecomponenti della velocità angolare.

• Colleghiamo le 3 uscite del gruppo Demux agli ingressi corrispondenti del gruppo Mux.Otterremo il modello nella figura 9.8

• Per completare il vettore di ingresso, inseriamo un blocco Incidence, sideslip, & Airspeed. Iningresso inseriamo Vb proveniente dal blocco 6Dof, e poi colleghiamo in ordine le tre uscite (α,β e V ) al vettore di input. Nel farlo ricordiamo che il blocco Incidence, sideslip, & Airspeedrestituisce gli angoli in radianti, mentre nel modello aerodinamico utilizziamo i gradi. Sulledue linee degli angoli inseriamo quindi dei blocchi di conversione da radianti a gradi (fig.9.9).

CAPITOLO 9. CREAZIONE DEL MODELLO 103

Figura 9.7 Inserimento dei blocchi Constant nel modello

Figura 9.8 Inserimento delle velocità angolari nel vettore di input

CAPITOLO 9. CREAZIONE DEL MODELLO 104

Figura 9.9 Inserimento della velocità e degli angoli di incidenza nel vettore di input

9.2.2 Calcolo delle forze e dei momentiOra che il modello aerodinamico può lavorare, possiamo utilizzare i risultati per calcolare le forzee i momenti agenti sul velivolo. A questo punto è utile ricordare come ricavare le forze e i momentipartendo dai coefficienti aerodinamici. Le equazioni sono:

Fx = CxqS (9.1a)Fy = CyqS (9.1b)Fz = CzqS (9.1c)L = ClqSb (9.1d)M = CmqSc (9.1e)N = CnqSb (9.1f)

(9.1g)

• Iniziamo col inserire un blocco COESA Atmosphere model.

• Inseriamo poi un blocco Demux con 3 uscite, cosi da dividere in componenti il vettore posi-zione Xe. La terza componente del vettore posizione, ze, non è però utilizzabile direttamentecome quota. Essa è infatti positiva verso il basso, mentre la quota è positiva verso l’alto. Perovviare a questo problema inseriamo un blocco di guadagno -1. Inoltre se il nostro velivolosi trova a ze = 0 non si trova a quota zero, ma bensì alla quota in cui è posto il sistemadi riferimento. La componente cambiata di segno andrà quindi sommata ad un altezza diriferimento, così da ottenere la quota utilizzabile nel blocco COESA (fig.9.10).

• Inseriamo quindi un blocco Dynamic Pressure, e come ingressi forniamogli la densità pro-veniente dal blocco COESA e la velocità in assi Body proveniente dal blocco 6DoF (fig.9.11).

• Inseriamo ora un blocco Demux, con 6 uscite, e colleghiamolo al modello aerodinamico, cosìda avere i 6 coefficienti separati.

Ricordando quindi le equazioni sopracitate, possiamo ricavare in vari modi il vettore delle forze eil vettore dei momenti aerodinamici. Un modo è quello mostrato nella figura 9.12.

CAPITOLO 9. CREAZIONE DEL MODELLO 105

Figura 9.10 Inserimento del blocco COESA

Figura 9.11 Inserimento del blocco Dynamic Pressure

CAPITOLO 9. CREAZIONE DEL MODELLO 106

Figura 9.12 Calcolo delle forze aerodinamiche

Prima di inserire le forze calcolate nel blocco 6Dof dobbiamo considerare due ulteriori contri-buti. Il primo è quello della spinta fornita dal motore:

• Inseriamo quindi un blocco Turbofan Engine System.

• Inseriamo poi un blocco constant con variabile deltaTh, e calcoliamo il Mach utilizzando lavelocità del suono fornita dal blocco COESA.

• Nella finestra di dialogo del blocco Turbofan Engine System inseriamo come spinta massimaal livello del mare Tmax_Static_SL.

• Poichè l’F-4 ha due motori, inseriamo un blocco Gain con parametro 2 e colleghiamolo allaoutput Thrust.

• Inseriamo un blocco Terminator collegato all’uscita del consumo di carburante.

• Concludiamo rendendo vettoriale la spinta. Assumendo che la spinta non abbia alcuncalettamento e sia quindi diretta lungo xb, otteniamo la configurazione di figura 9.13.

Oltre al contributo della spinta, dobbiamo inserire la forza peso. Il blocco 6Dof ci fornisce trai vari output anche la matrice 3x3 di conversione di coordinate dal sistema Earth al sistema Body(DCM). Inseriamo quindi un blocco Constant contenente come parametro Weight_E’ (Weight_Eè un vettore 1x3 che definiremo in seguito) e facciamo il prodotto riga per colonna tra DCM eWeight_E. Otterremo così un vettore colonna, e facendo la trasposta di quest’ultimo, il vettoredella forza di gravità nel sistema Body (fig. 9.14).

Possiamo ora sommare i 3 contributi delle forze e collegarli al blocco 6DoF. Si assume che nonci siano altri momenti oltre a quelli aerodinamici, quindi possiamo collegarli direttamente al blocco6DoF (fig. 9.15.

9.2.3 Completamento del modello e definizione dei parametriAdesso il nostro modello è quasi completo, basta inserire dei blocchi Scope sui parametri chevogliamo visualizzare, e dei blocchi Terminator sugli output inutilizzati. Riorganizzando i blocchiper motivi di spazio, otterremo un modello simile a quello mostrato nella figura 9.16

CAPITOLO 9. CREAZIONE DEL MODELLO 107

Figura 9.13 Inserimento del blocco Turbofan

Figura 9.14 Inserimento del vettore forza peso in assi Body

CAPITOLO 9. CREAZIONE DEL MODELLO 108

Figura 9.15 Immissione delle forze e dei momenti nel blocco 6DoF

9.2.4 Immissione dei parametriRestano ora da definire tutti i parametri che abbiamo indicato con incognite fino a questo momento.Rifacendoci al report NASA, creiamo un nuovo m-file ed inseriamo queste righe:

% Dati geometricicbar = 2.5;xcg = 0.289*cbar;xcgRef = xcg;span = 11.68;

Ixx = 24970; %( slug ft2)Iyy = 122190;Izz = 139800;Ixy = 0.;Ixz = 1175;Iyz = 0.;

lb2kg = 4.535924e-01;ACmass = 38924.*lb2kg;slug2kg = 1.459390e+01;

g0 = 9.81;Weight_E = [0 0 ACmass*g0];

% slug per cubic foot (slug/ft3) kilogram per cubic meter (kg/m3)% 5.153788 E+02

ft2m = 3.048e-01;

Inertia_Matrix = [ ...Ixx -Ixy -Ixz;-Ixy Iyy -Iyz;-Ixz -Iyz Izz ]*slug2kg*ft2m*ft2m;

CAPITOLO 9. CREAZIONE DEL MODELLO 109

Figura 9.16 Modello completo

CAPITOLO 9. CREAZIONE DEL MODELLO 110

Figura 9.17 Andamento della quota a comandi bloccati

Figura 9.18 Andamento degli angoli di eulero a comandi bloccati

deltaE = -3;deltaA = 0.;deltaR = 0.;deltaTh = 0.50;Tmax_Static_SL = 79624;href = 5000.;% Calcolo dati atmosferici% Nota: funzione presente nella v2008a[temperature, speed_of_sound, pressure, rho] = atmoscoesa(href);

Mach = 0.4;u0 = Mach * speed_of_sound; %m/sv0 = 0.; w0 = 0.;

9.2.5 Simulazione a comandi bloccatiPer collaudare il modello, possiamo lanciare subito una simulazione a comandi bloccati, con iparametri impostati nel precedente m-file. Le variazioni di quota e di angoli di eulero in questasimulazione sono mostrate nelle figure 9.17 e 9.18.

Capitolo 10

Animazione e controllo

Il modello di base può essere ora utilizzato per varie applicazioni. Per farlo è comodo trasformareil modello stesso in un blocco Simulink con i rispettivi Input e Output.

• Sostituiamo quindi i blocchi Costant assegnati ai parametri di controllo (deltaE, deltaA,deltaR, deltaTh) con dei blocchi In.

• Come output del sottoblocco scegliamo gli angoli di eulero, la posizione, la velocità in assiBody e la velocità angolare, e colleghiamo quindi dei blocchi Out a questi parametri. Do-vremmo ottenere un modello simile a quello mostrato nella figura 10.1 (conviene eliminare ilblocco di conversione da radianti a gradi nell’output degli angoli di eulero, poichè i blocchidi Matlab che andremo ad utilizzare richiederanno sempre gli angoli in radianti).

• Selezioniamo quindi tutto il nostro modello, apriamo un nuovo modello Simulink, ed inse-riamo un blocco Subsystem, che non è altro che un modello nel modello. Aprendo la suafinestra di dialogo comparirà un altra schermata di modello Simulink, con all’interno unmodello predefinito con un solo input e un solo output.

• Cancelliamo il modello di base e copiamo il nostro, poi chiudiamo la finestra di dialogo.Rinominando il blocco, avremo qualcosa di simile alla figura 10.2.

• Per ora inseriamo 4 blocchi Constant coi parametri di controllo e 4 blocchi Scope, come infigura 10.3.

Questo modello è ora equivalente al modello definito alla fine del paragrafo precedente, con bloccoSubsystem lo si è reso solo più semplice da utilizzare.

10.1 AnimazioneIl primo esempio di utilizzo del modello consiste nel visualizzare in 3D il comportamento dell’aereo.Prenderemo in considerazione due metodi: Il primo metodo utilizza solo strumenti presenti inMatlab, il secondo metodo utilizza il motore grafico di Flight Gear, un simulatore di volo 3D opensource.

10.1.1 Animazione tramite MatlabNell’Aerospace Blockset, nella categoria Animation sono presenti vari blocchi che permettonol’animazione tramite Matlab, tra cui il blocco 6Dof Animation.

• Inseriamo quindi il blocco 6Dof Animation nel nostro modello

• Questo blocco richiede come ingressi il vettore posizione in assi Earth e gli angoli di eulero.Queste informazioni sono presenti tra gli output del blocco Subsystem, quindi basta collegarele rispettive porte per ottenere il modello nella figura 10.4.

• Ora non resta che modificare il blocco 6DoF Animation aprendo la finestra di dialogo emodificando la dimensione del modello, gli assi e la posizione della telecamera come nellafigura 10.5.

• Modifichiamo quindi il tempo di simulazione del modello e poniamolo uguale a 100 secondi,e poi lanciamo la simulazione per vedere come lavora l’animazione in Matlab.

111

CAPITOLO 10. ANIMAZIONE E CONTROLLO 112

Figura 10.1 Blocchi In e Out

CAPITOLO 10. ANIMAZIONE E CONTROLLO 113

Figura 10.2 Blocco Subsystem

Figura 10.3 Modello equivalente con il blocco Subsystem

CAPITOLO 10. ANIMAZIONE E CONTROLLO 114

Figura 10.4 Inserimento del blocco 6DoF Animation

Figura 10.5 Finestra di dialogo del blocco 6DoF Animation

CAPITOLO 10. ANIMAZIONE E CONTROLLO 115

Figura 10.6 Animazione tramite il blocco 6DoF Animation

Otterremo qualcosa di simile alla figura 10.6, in cui si vede l’orientamento del modello, latraiettoria e la traccia a terra. Dobbiamo però sottolineare che il nostro sistema di riferimento zeè diretto verso il basso, e sebbene Matlab mostri il corretto comportamento durante l’animazione,se si vanno a visualizzare le viste ausiliare come X − Z l’alto e il basso saranno invertiti, poichèqueste viste sono concordi con gli assi (quindi il basso , positivo, diventa l’alto e viceversa).

Nota: Fino a che non implementeremo un controllo, il comportamento del velivolo è quello acomandi bloccati sui valori imposti nel m-file.

10.1.2 Animazione tramite FlightGearNella categoria Animation, Matlab contiene dei blocchi che rendono possibile l’animazione su mo-tori grafici 3D esterni, tra cui FlightGear, un simulatore di volo open source reperibile all’indirizzohttp://www.flightgear.org/.

• Per prima cosa dobbiamo procurarci la versione 1.0 del programma, scaricabile gratuitamenteall’indirizzo sopracitato, e dobbiamo installarlo.

• Torniamo quindi nel nostro modello, cancelliamo il blocco 6DoF Animation, ed inseriamo unblocco FlightGear Preconfigured 6DoF Animation.

Questo blocco vuole come input un vettore contenente gli angoli di eulero e la posizione del velivolonel sistema LLA. Dobbiamo qundi fare un cambio di sistema di riferimento.

• Inseriamo un blocco Flat Earth to LLA e colleghiamolo all’output Xe del blocco Subsystem.

• Inseriamo poi un blocco Constant con parametro -href e colleghiamolo al secondo input delblocco Flat Earth to LLA.

CAPITOLO 10. ANIMAZIONE E CONTROLLO 116

Figura 10.7 Inserimento del blocco FlightGear Preconfigured 6DoF Animation

• Creiamo quindi un vettore contenente tutti e 6 i parametri, stando attenti alla corrispondenzatra longitudine e latitudine.

• Aggiungiamo poi un blocco Generate Run Script che non necessita di nessun collegamento,così da ottenere il sistema nella figura 10.7.

Procediamo quindi col configurare i blocchi:• Apriamo la finestra di dialogo del blocco Flat Earth to LLA ed inseriamo in modo collocare

il velivolo sopra l’aeroporto che sceglieremo in seguito, queste coordinate iniziali (fig. 10.8):[37.7018 -122.213]

• Lasciamo invariato il blocco FlightGear ed apriamo la finestra di dialogo del blocco GenerateRun Script modificando il percorso in cui abbiamo installato Flight Gear, il modello di velivolo(useremo come riferimento il modello già presente T38) l’altitudine e l’heading iniziale (fig.10.9).

• Dopodichè sostituiamo al posto del file T38.ac il nostro modello 3D dandogli lo stesso nome.Il comando Generate Script non fa altro che creare un bat che lancia FlightGear (il cuipercorso nel pc viene impostato nella finestra di dialogo) con determinate opzioni. L’opzionepiù importante dello script è:--fdm=network,localhost,5501,5502,5503

Cioè, FlighGear viene lanciato per utilizzare come fdm (Flight Data Model) un modelloesterno, proveniente dalla rete, all’indirizzo localhost (in questo caso il proprio pc, di default127.0.0.1) e attraverso le porte specificate.Nota: Di default FlightGear assume come indirizzo ip locale 127.0.0.1, nel caso di indirizzoip differente sarà necessario o modificare il proprio o quello di lettura di FlightGear.

Ora il modello è pronto a ricevere i dati da Matlab. Apriamo la finestra di dialogo del bloccoGenerate Run Script e selezioniamo Generate Script, quindi nella finestra di comando di Matlabdiamo questa istruzione:>> dos(’runfg &’)

Se tutto è stato svolto correttamente, si avvierà Flight Gear in modalità di attesa, e verrà vi-sualizzato il modello fermo a mezz’aria. Lanciando quindi la simulazione su Simulink, vedremoil modello in Flight Gear muoversi seguendo i dati inviati da Matlab. Possiamo migliorare la si-mulazione tramite Flight Gear e visualizzare anche le deflessioni delle superfici di controllo, ma inquesto caso non è possibile utilizzare il blocco preconfigurato ma dovremo crearne uno nuovo.

CAPITOLO 10. ANIMAZIONE E CONTROLLO 117

Figura 10.8 Cambio di coordinate nel blocco Flat Earth to LLA

Figura 10.9 Modifiche del blocco Generate Run Script

CAPITOLO 10. ANIMAZIONE E CONTROLLO 118

Figura 10.10 Screenshot dell’animazione in Flight Gear

10.2 Controllo e TrimCome ultimi esempi di utilizzo del nostro modello, inseriamo qualche semplice esempio di controlloe troviamo la condizione di trim del velivolo. Per quanto riguarda il controllo progetteremo unsemplice controllore di beccheggio ed uno stabilizzatore di quota.

10.2.1 Controllo di beccheggioPartendo dal modello con animazione, creiamo un controllore che stabilizzi il velivolo ad un angolodi beccheggio scelto.

• Cominciamo col eliminare il blocco Constant con parametro deltaE, ed inseriamo un bloccoConstant con parametro theta.

• Inseriamo poi un blocco Demux che divida in componenti gli angoli di Eulero, terminiamogli output di φ e ψ ed inseriamo un blocco di conversione da radianti a gradi sull’output diθ.

• Creiamo quindi un ciclo closed loop che parta dalla costante theta, abbia come errore ladifferenza tra θ e theta, e colleghiamolo all’ingresso deltaE del blocco Subsystem.

• Aggiungiamo quindi un controllore PID per migliorarne le prestazioni, utilizzando il bloccoPID Controller, scegliendo come guadagni: KP = 3, KI = 1, 3, KD = 4.

Il sistema sarà simile a quello nella figura 10.11. Non resta che definire l’angolo di beccheggiodesiderato. Aggiungiamo quindi all’m-file di configurazione del modello questa riga:

theta = 6;

Lanciamo l’m-file, poi lanciamo la simulazione e guardiamo la risposta in un blocco Scope, che saràaccettabile (fig. 10.12).

CAPITOLO 10. ANIMAZIONE E CONTROLLO 119

Figura 10.11 Modello del sistema con controllo di beccheggio

Figura 10.12 Andamento dell’angolo di beccheggio nel sistema controllato

CAPITOLO 10. ANIMAZIONE E CONTROLLO 120

Figura 10.13 Modello del sistema con controllo quota

10.2.2 Controllo di quotaCome secondo esempio, progetteremo un controllore di quota. Vogliamo cioè un sistema chemantenga il velivolo in volo alla quota di riferimento. Per fare questo useremo ancora un cicloclosed loop.

• Rimuoviamo il blocco Constant di parametro theta.

• Poichè la componente ze del vettore Xe è nulla se il velivolo è alla quota di riferimento,la useremo direttamente come errore del ciclo. Colleghiamo quindi questa componente adun blocco PID Controller (with Approximate Derivative) e modifichiamo solo il divisoredifferenziale ponendolo uguale a 10.

• Colleghiamo quest’ultimo al blocco Sum utilizzato nel primo esempio, che ha nell’altroingresso θ.

• Inseriamo quindi un blocco Saturation con valori compresi tra -25 e 25 per evitare di immet-tere nel modello deflessioni irreali dell’equilibratore.

A questo punto il controllore è completo, e il sistema dovrebbe apparire come quello in figura 10.13.Lanciando la simulazione, possiamo vedere che la quota del velivolo, dopo una oscillazione inizialedi circa 3 metri, si va stabilizzando al valore di riferimento (fig 10.14). Per completezza possiamovisualizzare anche l’andamento dell’angolo di deflessione degli equilibratori (fig 10.15).

10.2.3 TrimIl trim è una condizione di equilibrio dinamico del velivolo, e come tale può essere utilizzata perapplicazioni quali linearizzazione del modello. In questo esempio, troveremo la condizione per cuiil velivolo sia in condizione di volo rettilineo uniforme senza dover agire sui comandi o inseriresistemi di controllo, ed una condizione di virata equilibrata. Per trovare la condizione di trim inMatlab, ci rifacciamo al modello completo mostrato nella figura 9.16.

• Sostituiamo ai blocchi Constant DeltaE e DeltaTh con due blocchi In.

• Utilizziamo quindi il Control ed estimation tools Manager (fig. 10.16), selezioniamo Operatingpoint, e succesivamente la tag Compute Operating Point.

• Selezioniamo poi Sync with the model, ed otterremo la finestra mostrata nella figura 10.17.

CAPITOLO 10. ANIMAZIONE E CONTROLLO 121

Figura 10.14 Andamento della quota nel sistema con controllo di quota

Figura 10.15 Andamento dell’angolo di deflessione degli equilibratori nel sistema controllato

Volo rettilineo

Per prima cosa scegliamo quali stati vogliamo mantenere in equilibrio. Scegliamo di bloccarel’orientamento del velivolo (quindi i 3 angoli di eulero), la velocità di rotazione, la quota e la spintafornita dal propulsore.

• Nella tag States eliminiamo l’opzione Steady state dai rimanenti stati, e inseriamo poi deivalori massimi e minimi per l’angolo di beccheggio (ricordando che theta è espresso in radianti,come valori scegliamo -0,75 e 0,75).

• Spuntiamo poi l’opzione Know per la componente Ze, lasciando il suo valore 0.

La tag States dovrebbe apparire come nella figura 10.18. Non modifichiamo nulla nelle tagInputs e Outputs. In effetti, mentre gli outputs del nostro sistema coincidono con gli stati e quindiulteriori specifiche diventano ridondanti, per gli input andrebbero almeno specificati gli intervallidi accettabilità. Ma come vedremo, pur senza specificarli il risultato sarà accettabile, quindi nonfaremo alcuna modifica alla tag Inputs.

Per trovare la condizione di trim premiamo quindi Compute Operating point, e Matlab restituiràun Operating point che soddisfi le nostre specifiche. Come si vede dalla figura 10.19 la condizionedi trim si ha con un angolo di beccheggio di circa 0,27 radianti (circa 16 gradi) e con velocità dicomponenti 124 m/s lungo Xb e 35 m/s lungo Zb. Selezionando la tag Inputs (fig. 10.20) vediamoche tale condizione si ottiene con un angolo dell’equilibratore di -6,68 gradi e la manetta al 93%,2 valori accettabili per il nostro modello.

Per verificare se il velivolo viaggia effettivamente in volo rettilineo uniforme, si può utilizzarel’Operating Point per inizializzare il modello. Utilizziamo il tasto destro del mouse sulla voceOperating point nel menù a sinistra, e selezioniamo Export to Workspace (fig. 10.21). Nella finestrasuccessiva, selezioniamo Model Workspace e Use the operating point to initialize the model, poi

CAPITOLO 10. ANIMAZIONE E CONTROLLO 122

Figura 10.16 Schermata iniziale del Control ed estimation tools Manager

Figura 10.17 Finestra ottenuta con Sync with the model

CAPITOLO 10. ANIMAZIONE E CONTROLLO 123

Figura 10.18 Tag States modificata (volo livellato)

Figura 10.19 Tag States dell’Operating Point (volo livellato)

CAPITOLO 10. ANIMAZIONE E CONTROLLO 124

Figura 10.20 Tag Inputs dell’Operating Point (volo livellato)

premiamo Ok. A questo punto possiamo lanciare la simulazione, che da i risultati sperati, come sivede dalle figure 10.22, 10.23 e 10.24.

La condizione di trim trovata non è l’unica, ma semplicemente la prima incontrata dal risolutorecon qui vincoli. A ben guardare non è neanche una condizione di volo usuale, essendo θ pari acirca 16 gradi. Per trovare quindi condizioni di volo livellato a velocità o assetti differenti, bastamodificare i valori minimi e massimi delle velocità nella tag degli stati. Se invece vogliamo bloccarela velocità in modulo e trovare la condizione di trim ad una certa V, possiamo aggiungere un bloccoOut sulla linea V in uscita del blocco Incidence, Sideslip & AirSpeed (fig. 10.25), e poi modificarei valori del parametro V che ora compaiono nella tag Output. Proviamo quindi a imporre come Vminima 200 m/s e come V massima 210 m/s,e troveremo un assetto equlibrato con θ poco inferioreai 7 gradi (fig. 10.26), assetto decisamente più accettabile. Come detto, le condizioni di trimsono infinite, basta variare la velocità desiderata per trovare nuovi assetti. Nella figura 10.27 sonoriportati gli assetti e gli angoli di deflessione dell’equilibratore a varie velocità e 2 quote diverse:Livello del mare (in rosso) e 2000m (in blu). Le velocità alle due quote non hanno lo stesso rangedi variazione perchè oltre un certo valore il modello del propulsore esce dal suo campo di validità.

Virata

Un’altra interessante condizione di trim è quella di virata corretta, cioè virata a quota e velocitàcostante, e con sideslip nullo. Questa può essere trovata sempre tramite il Control ed estimationtools Manager, facendo comparire le variabili che ci interessano. Prima di iniziare, dobbiamo farcomparire come parametro da trimmare la velocità di virata, che non è altro che la componentelungo Ze della velocità angolare, o la terza componente di ωe. Per trovare la velocità di viratadobbiamo operare all’interno del blocco F4 model. Possiamo infatti utilizzare la matrice dei cosenidirettori (DCMbe) fornita dal blocco 6DoF, e farne la trasposta, così da ottenere la matrice ditrasformazione da riferimento body a riferimento earth. Moltiplichiamo poi la nuova matrice perω (fornita sempre dal blocco 6Dof ), così da ottenere ωe. Infine colleghiamo questa ad un bloccoout (fig. 10.28). Sempre all’interno del blocco F4 model possiamo calcolare il fattore di carico.Questo è infatti uguale a 1/ cosφ, dove φ è l’angolo di Bank, ma anche il primo angolo di eulero.

CAPITOLO 10. ANIMAZIONE E CONTROLLO 125

Figura 10.21 Opzione Export to workspace

Figura 10.22 Andamento della quota del velivolo in condizione di equilibrio

CAPITOLO 10. ANIMAZIONE E CONTROLLO 126

Figura 10.23 Andamento degli angoli di eulero del velivolo in condizione di equilibrio

Figura 10.24 Andamento della velocità (assi Earth) del velivolo in condizione di equilibrio

CAPITOLO 10. ANIMAZIONE E CONTROLLO 127

Figura 10.25 Aggiunta dell’output V

Figura 10.26 Andamento degli angoli di eulero nella nuova condizione di trim

CAPITOLO 10. ANIMAZIONE E CONTROLLO 128

100 120 140 160 180 200 220 240 260 280−10

−5

0

5

10

15

20

V (m/s)

(deg

)

Condizioni di volo livellato al variare della velocità a due quote diverse

θ (SL)

δE (SL)

θ (2000m)

δE (2000m)

Figura 10.27 Andamento di θ e δE al variare di velocità e quota

Figura 10.28 Aggiunta dell’output omega_e

CAPITOLO 10. ANIMAZIONE E CONTROLLO 129

Figura 10.29 Aggiunta dell’output n

Inseriamo quindi un blocco Trigonometric Function, con opzione cos, e immettiamo in questol’angolo φ. Inseriamo poi un blocco Divide e un blocco Constant ed otteniamo il fattore di caricocome mostrato in figura 10.29. Colleghiamo l’uscita ad un blocco Out. Chiudiamo quindi il bloccoF4 model, e torniamo alla finestra principale. Ora F4 model avrà 2 output in più, n e ωe, cheandiamo a collegare a 2 blocchi Out. Un’altro parametro interessante della virata corretta è ilraggio di virata, possiamo creare un blocco che calcoli il raggio teorico utilizzando la formula:

R = V 2

g sin(φ) (10.1)

Il blocco è abbastanza semplice ed è mostrato in figura 10.30. Inseriamo un blocco Incidence,Sideslip & Airspeed per ottenere il modulo della velocità, e terminiamo le uscite alpha e beta.Colleghiamo poi l’uscita del blocco Raggio di virata ad un blocco out. Inserendo qualche bloccoScope, il modello dovrebbe essere simile a quello mostrato in figura 10.31.

Ora possiamo iniziare a cercare la condizione di virata corretta desiderata. Per esempio cer-chiamo la virata a quota 5000m (ze = 0), con velocità di virata 0,01 rad/s. Scegliamo quindicome Steady state i parametri: phi, theta, le tre componenti di ω, le tre componenti di Vb e ze.Inoltre, impostiamo come Know e di valore 0 i parametri ze e vb (così da porre nullo il sideslip (fig.10.32). Nella tag Output, impostiamo la terza componente di Omegae come Know e pari a 0.01(fig. 10.33). Lanciamo il solito Compute Operating Points, inizializziamo il modello con l’OperatingPoint appena trovato e lanciamo la simulazione, per verificare che abbiamo effettivamente trovatouna condizione di volo a quota costante ed alla velocità di virata desiderata. In figura 10.34 sonoriportare le traiettorie di virate corrette a 3 diverse velocità di virata (0,03, 0,04, 0,05 rad/sec).

10.3 PerturbazioniPossiamo fare in modo che il modello simuli la risposta del velivolo ad una perturbazione, basteràinfatti far variare le velocità sentita dal velivolo sommando le velocità del vento a quella del velivolo.Supponiamo quindi di voler fornire come input anche la velocità del vento, possibilmente variabilenel tempo, e nella forma delle tre componenti in assi Earth. Apriamo quindi il blocco F4 model,inseriamo un nuovo blocco In chiamato Vw, inseriamo un blocco Matrix Multiply e come inputimmettiamo la matrice dei coseni direttori fornita dal blocco 6DoF e l’input Vw. Inseriamo poiun blocco Sum sull’uscita Vb del blocco 6DoF, e sottraiamo l’output del blocco Matrix Multiply(fig. 10.35). Chiudiamo quindi il blocco F4 model e nella schermata principale inseriamo un Signal

CAPITOLO 10. ANIMAZIONE E CONTROLLO 130

Figura 10.30 Blocco raggio di virata

Figura 10.31 Configurazione del modello con i nuovi output (virata)

CAPITOLO 10. ANIMAZIONE E CONTROLLO 131

Figura 10.32 Tag States dell’Operating Point (virata)

Figura 10.33 Tag Outputs dell’Operating Point (virata)

CAPITOLO 10. ANIMAZIONE E CONTROLLO 132

−4000 −3000 −2000 −1000 0 1000 2000 3000 4000 50000

1000

2000

3000

4000

5000

6000

7000

8000

9000

x (m)

y (m

)

Confronto tra le traiettorie a diverse velocità di virata

.05 rad/s

.04 rad/s

.03 rad/s

Figura 10.34 Traiettorie di virate corrette a diverse velocità di virata

Figura 10.35 Creazione dell’input Vw

Builder di 3 componenti, che tramite un blocco Mux andiamo a collegare al nuovo input del bloccoF4 model (fig. 10.36). Possiamo ora creare il segnale tramite il Signal Builder e simulare l’effettodel vento.

Ad esempio, utilizzando il velivolo in volo orizzontale livellato a 170m/s e a 5000m di quota,trovato nel paragrafo precedente, simuliamo l’effetto di una raffica verticale a gradino della duratadi 1 secondo e alla velocità di 10 m/s. Modifichiamo il blocco Signal Builder come in figura 10.37 elanciamo la simulazione. Nella figure 10.38 e 10.39 sono mostrate le variazioni di angolo di attaccoe di quota dovute alla raffica. Come ulteriore esempio, possiamo simulare l’effetto di una rafficalaterale nel caso di virata corretta. In questo caso è un pò più complicato far si che la rafficavenga effettivamente dal lato dell’aereo. Per semplificare le cose, utilizzando la configurazione divirata corretta a velocità di virata 0,05 rad/sec, inseriamo una componente di Vw solo lungo xe nelmomento in cui il velivolo si dirige parallelo all’asse ye, cioè a circa 34 secondi. Il Signal builder

CAPITOLO 10. ANIMAZIONE E CONTROLLO 133

Figura 10.36 Aggiunta del Signal Builder.

Figura 10.37 Blocco Signal builder modificato per la raffica verticale

CAPITOLO 10. ANIMAZIONE E CONTROLLO 134

Figura 10.38 Andamento dell’angolo d’attaco nel caso di raffica verticale

Figura 10.39 Andamento della quota nel caso di raffica verticale

CAPITOLO 10. ANIMAZIONE E CONTROLLO 135

Figura 10.40 Blocco Signal builder modificato per la raffica laterale

Figura 10.41 Andamento dell’angolo di imbardata nel caso di raffica laterale

apparira quindi come in figura 10.40. Nelle figure 10.41 e 10.42 sono riportate le variazioni diangolo di imbardata e di quota, mentre in figura 10.43 è confrontata la traiettoria della virataindisturbata con quella della virata con raffica.

CAPITOLO 10. ANIMAZIONE E CONTROLLO 136

Figura 10.42 Andamento della quota nel caso di raffica laterale

−3000 −2000 −1000 0 1000 2000 3000 40000

1000

2000

3000

4000

5000

6000

7000

x (m)

y (m

)

Confronto tra virata con raffica e senza raffica

Senza vento lateraleCon vento laterale

Figura 10.43 Confronto delle traiettorie di virata con e senza raffica

Capitolo 11

Altri modelli di velivoli

In letteratura o in rete esistono molti altri modelli di velivoli costruiti con Simulink e Matlab. Inquesto capitolo mostreremo un esempio di modello di un Beaver, presente nel toolbox FDC (FlightDynamics and Contro), un toolbox open source scaricabile gratuitamente in rete.

11.1 Il modello BeaverIl modello Beaver differisce in molti punti dal nostro modello. Nella figura 11.1 si vede lo schemagenerale del modello, in cui possiamo già notare delle differenze fondamentali. In primo luogol’input del Beaver ha molti elementi in più. Questo è dovuto sia all’aggiunta dell’angolo di de-flessione dei flap (deltaf), sia dalla necessità, dettata dal propulsore ad elica, di avere parametridi controllo diversi rispetto alla manetta (n e pz), sia perchè nel modello del Beaver sono inclusedelle pertubazioni che nel nostro modello non sono considerate (i vari input convergenti nel vettoreuwind). Gli output invece sono simili a quelli del nostro modello, ma organizzati in modo diverso. Ilresto del modello è visibile guardando dentro i vari blocchi presenti nella figura 11.1. Le differenzefondamentali dal nostro modello stanno nei modelli aerodinamici e propulsivi, e nel modo in cuisono trattati i dati.

Sia il modello aerodinamico che quello propulsivo lavorano infatti allo stesso modo. Come sivede nella figura 11.2, tutte le grandezze necessarie a ricavare i coefficienti aerodinamici vengonounite in un vettore che viene succesivamente moltiplicato ad una matrice contenente tutte lederivate di stabilità del velivolo, ottenendo così un vettore di coefficienti. Va sottolineato però chequesta differenza è solamente nella programmazione, perchè il calcolo effettuato non differisce daquello effetuato nel nostro modello dal S-function.

Il modello del propulsore funziona in modo simile, ovviamente con matrici e vettori diversi (fig.11.3).

Figura 11.1 Modello Beaver

137

CAPITOLO 11. ALTRI MODELLI DI VELIVOLI 138

Figura 11.2 Modello aerodinamico del Beaver

Figura 11.3 Modello propulsivo del Beaver

CAPITOLO 11. ALTRI MODELLI DI VELIVOLI 139

Figura 11.4 Risoluzione delle equazioni del moto nel modello Beaver

Oltre ai modelli propulsivi e aerodinamici, la differenza fondamentale sta nel fatto che FDCnon utilizza i blocchi di Simulink, ma usa dei blocchi propri creati per l’occasione. Ad esempio, leequazioni del moto che noi abbiamo introdotto con il blocco 6DoF, nel modello del Beaver sonocontenute nel blocco Equations of motion (fig. 11.4), che contiene a sua volte il blocco 12 ODEsche contiene appunto le equazioni differenziali riscritte.

11.1.1 Funzioni del toolbox FDCOltre al modello del Beaver, il toolbox FDC offre alcune interessanti funzioni aggiuntive. Dal puntodi vista Simulink, contiene alcuni esempi di autopiloti o sistemi di controllo progettati per esserecompatibili con qualsiasi velivolo simile al Beaver (cioè con stessi stati, stessi input e output). Dalpunto di vista Matlab contiene invece una interessante funzione, actrim.m, che trova la condizionedi equilibrio sia in volo rettilineo che in virata, sotto varie condizioni, del Beaver e di un qualsiasiaereo simile.

11.2 AirLibAirLib è una libreria scaricabile gratuitamente dal sito www.mathworks.com, che contiene moltimodelli aerodianamici basati sul modello Beaver (fig. 11.5). I dati sono trattati allo stesso mododel Beaver, tranne che per la spinta. In Airlib infatti manca il modello del propulsore e la spintaviene ritenuta costante o comunque un input del modello.

CAPITOLO 11. ALTRI MODELLI DI VELIVOLI 140

Figura 11.5 Schermata di selezione dei modelli in Airlib

Appendice A

Modello aerodinamico

Il modello aerodinamico è riferito ad un F-4 McDonnell-Douglas con carrello retratto, nessun caricosubalare e nessun effetto suolo. I limiti di validità sono: −15 ≤ α ≤ 55, 0 ≤ δth ≤ 1, −21 ≤ δe ≤ 7,−15, 5 ≤ δa ≤ 15, 5, −30 ≤ δr ≤ 30. Di seguito sono riportati i coefficienti in forma polinomiale,secondo gli assi Body, mentre nelle figure A.1, A.2, A.3 e A.4 sono riportati alcuni andamenti deicoefficienti al variare di un solo parametro per α ≤ 15. Si è posto:

A =180 q c2π V , B =180 b

2π V , C = c

b

α ≤ 15

CX =− 0.0434 + (2.39× 10−3)α+ (2.53× 10−5)β2 − (1.07× 10−6)αβ2++ (9.5× 10−4)δe − (8.5× 10−7)δeβ2++A(8.73× 10−3 + 0.001α− (1.75× 10−4)α2)

CY =− 0.012β + (1.55× 10−3)δr − (8× 10−6)δrα++B((2.25× 10−3)p+ 0.0117r − (3.67× 10−4)rα+ (1.75× 10−4)rδe)

CZ =− 0.131− 0.0538α− (4.76× 10−3)δe − (3.3× 10−5)δeα− (7.5× 10−5)δ2a+

− (7.5× 10−5)δ2a +A(−0.111 + (5.17× 10−3)α− (1.1× 10−3)α2)

Cl =− (5.98× 10−4)β − (2.83× 10−4)αβ + (1.51× 10−5)α2β

− δa(6.1× 10−4 + (2.5× 10−5)α− (2.6× 10−6)α2)+− δr(−2.3× 10−4 + (4.5× 10−6)α)++B((−4.12× 10−3)p− (5.24× 10−4)pα+ (4.36× 10−5)pα2++ (4.36× 10−4)r + (1.05× 10−4)rα+ (5.24× 10−5)rδe)

Cm =− 6.61× 10−3 − (2.67× 10−3)α− (6.48× 10−5)β2 − (2.65× 10−6)αβ2+− (6.54× 10−3)δe − (8.49× 10−5)δeα+ (3.74× 10−6)δeβ2 − (3.5× 10−5)δ2

a++A(−0.0473− (1.57× 10−3)α) + (xcgRef − xcg)CZ

Cn =(2.28× 10−3)β + (1.79× 10−6)β3++ (1.4× 10−5)δa + (7.0× 10−6)δaα− (9.0× 10−4)δr + (4.0× 10−6)δrα++B((−6.63× 10−5)p− (1.92× 10−5)pα+ (5.06× 10−6)pα2+− (6.06× 10−3)r − (8.73× 10−5)rδe + (8.7× 10−6)rδeα)+− C(xcgRef − xcg)CY

15 < α ≤ 30

CX = + 0.141− (0.0154)α+ (2.96× 10−4)α2 − (3.72× 10−4)β2++ (4.14× 10−5)αβ2 − (9.12× 10−7)α2β2 + (1.82× 10−3)δe+− (7.3× 10−5)δeα+A(−0.0602 + (2.04× 10−3)α)

CY =(−2.08× 10−2)β + (6.07× 10−4)αβ + (2.37× 10−6)β3+− (3.64× 10−7)αβ3 + (2.3× 10−3)δr − (5.9× 10−5)δrα++B((−1.62× 10−3)p+ (3.32× 10−4)pα+ (0.0311)r − (1.4× 10−3)rα+ (1.75× 10−4)rδe)

141

APPENDICE A. MODELLO AERODINAMICO 142

CZ =− 0.608− 0.022α− (6.77× 10−3)δE + (9.7× 10−5)δEα− (7.5× 10−5)δ2A+

+A(1.136− (0.1418)α+ (3.11× 10−3)α2)Cl =(−1.29× 10−2)β + (1.04× 10−3)αβ − (2.02× 10−5)α2β+

+ (1.36× 10−5)β3 − (1.13× 10−6)αβ3 + (2.01× 10−8)α2β3+− δa((7.74× 10−4)− (1.9× 10−5)α)− δr((−2.0× 10−4) + (5.0× 10−6)α)++B((2.78× 10−3)p− (2.79× 10−4)pα− (6.81× 10−3)r + (6.46× 10−4)rα+ (5.24× 10−5)rδe)

Cm =0.0549− (6.08× 10−3)α− (1.69× 10−4)β2 + (5.64× 10−7)αβ2+− (8.14× 10−3)δe + (1.1× 10−4δeα− (3.5× 10−5)δ2

a++A(−0.0951 + (1.4× 10−3)α) + (xcgRef − xcg)CZ

Cn =(1.02× 10−2)β − (5.12× 10−4)αβ − (5.27× 10−6)β3++ (3.79× 10−7)αβ3 + (9.1× 10−5)δa + (3.0× 10−6)δaα+− (1.37× 10−3)δr + (3.8× 10−5)δrα++B(0.0236p− (2.5× 10−3)pα+ (6.25× 10−5)pα2++ (6.2× 10−4)r − (4.89× 10−4)rα− (8.73× 10−5)rδe + (8.7× 10−6)rδeα)+− C(xcgRef − xcg)CY

α > 30

CX =− 0.0326− (2.16× 10−3)α+ (4.89× 10−5)α2 − (1.24× 10−4)β2++ (1.076× 10−5)αβ2 − (1.54× 10−7)α2β2 + (7.5× 10−4)δe+− (3.9× 10−5)δeα+A(−0.026 + (8.73× 10−4)α)

CY =(−2.095× 10−3)β − (6.36× 10−5αβ − (2.15× 10−5)β3++ (5.42× 10−7)αβ3 + (1.4× 10−3)δr − (2.6× 10−5)δrα++B(0.196p− (9.27× 10−3)pα+ (1.01× 10−4)pα2++ 0.0326r − (2.55× 10−3)rα+ (3.26× 10−5)rα2 + (1.75× 10−4)rδe)

CZ =− 0.891− 0.01146α+ (6.2× 10−3)δe − (5.4× 10−5)δeα++ (6.2× 10−6)δeα2 − (7.5× 10−5)δ2

a++A(0.589− 0.0494α+ (6.11× 10−4)α2)

Cl =(1.18× 10−2)β − (5.29× 10−4)αβ + (4.88× 10−6)α2β+− (2.2× 10−5)β3 + (9.05× 10−7)αβ3 − (9.08× 10−9)α2β3+− (5.0× 10−5)δa − deltar ∗ ((−9× 10−5) + (1.8× 10−6)α)++B(−0.0428p+ (1.82× 10−3)pα− (1.94× 10−5)pα2++ 0.073r − (3.02× 10−3)rα+ (3.14× 10−5)rα2 + (5.24× 10−5)rδe)

Cm =(7.3× 10−3)− (5.5× 10−3)α− (7.93× 10−3)δe + (8.23× 10−5)δeα+− (3.5× 10−5)δ2

a +A(0.16− 0.0101α+ (1.05× 10−4)α2)++ (xcgRef − xcg)CZ

Cn =(−9.23× 10−3)β + (1.52× 10−4)αβ + (1.62× 10−5)β3+− (3.46× 10−7)αβ3 + (1.5× 10−4)δa − (6.8× 10−4)δr++ (1.2× 10−5)δrα− δe((1.67× 10−4)β − (5.56× 10−6)αβ+− (3.81× 10−7)β3 + (1.27× 10−8)αβ3)++B(0.0385p− (1.73× 10−3)pα+ (1.92× 10−5)pα2+− 0.0202r + (3.67× 10−4)rα+ (2.58× 10−3)rδe+− (1.31× 10−4)rδeα+ (1.69× 10−6)rδeα2)− C(xcgRef − xcg)CY

APPENDICE A. MODELLO AERODINAMICO 143

−15 −10 −5 0 5 10 15−1.5

−1

−0.5

0

0.5

1

1.5

α (deg)

−C

Z

Grafico (−CZ)α parametrizzato in (180*q*cbar)/(2*π*V) (β=δA=δE=0)

.8

.4

1.2

−.4

−.8

−1.2

q=0

(a) −CZ − α al variare di A

−15 −10 −5 0 5 10 15−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

α (deg)

−C

Z

Grafico (−CZ)α parametrizzato in δE (beta=δA=q=0)

δE=0

36−3−6−9−12

(b) −CZ − α al variare di δE

Figura A.1 Alcuni grafici del coefficiente aerodinamico CZ

APPENDICE A. MODELLO AERODINAMICO 144

−15 −10 −5 0 5 10 15−0.14

−0.12

−0.1

−0.08

−0.06

−0.04

−0.02

0

0.02

α (deg)

−C

XGrafico (−CX)α parametrizzato in (180*q*cbar)/(2*π*V) (β=δA=δE=0)

−.4

.4

.8

1.2

−.8

−1.2

q=0

(a) −CX − α al variare di A

−15 −10 −5 0 5 10 15−0.1

−0.09

−0.08

−0.07

−0.06

−0.05

−0.04

−0.03

−0.02

−0.01

0

α (deg)

−C

X

Grafico (−CX)α parametrizzato in δE (β=δA=q=0)

δE=0

36−3−6−9−12

(b) −CX − α al variare di δE

Figura A.2 Alcuni grafici del coefficiente aerodinamico CX

APPENDICE A. MODELLO AERODINAMICO 145

−15 −10 −5 0 5 10 15−0.14

−0.12

−0.1

−0.08

−0.06

−0.04

−0.02

0

0.02

0.04

α (deg)

Cm

Grafico Cmα parametrizzato in (180*q*cbar)/(2*π*V) (β=δA=δE=0)

1.2=−1.2

.4=−.4

.8=−.8

q=0

(a) Cm − α al variare di A

−15 −10 −5 0 5 10 15−0.1

−0.08

−0.06

−0.04

−0.02

0

0.02

0.04

0.06

0.08

0.1

α (deg)

Cm

Grafico Cmα parametrizzato in δE (β=δA=q=0)

6

3

−3

−6

−9

−12

δE=0

(b) Cm − α al variare di δE

Figura A.3 Alcuni grafici del coefficiente aerodinamico Cm

APPENDICE A. MODELLO AERODINAMICO 146

−15 −10 −5 0 5 10 15−0.01

−0.008

−0.006

−0.004

−0.002

0

0.002

0.004

0.006

0.008

0.01

α (deg)

Cl

Grafico Cl−α parametrizzato in (180*p*cbar)/(2*π*V) (δA=δE=β=r=0)

.4

.6

.2

−.4

−.6

−5.42

−.2

p=0

(a) Cl − α al variare di B p

−15 −10 −5 0 5 10 15−0.025

−0.02

−0.015

−0.01

−0.005

0

0.005

0.01

0.015

0.02

0.025

α (deg)

Cl

Grafico Clα parametrizzato in β (δE=δA=p=r=0)

2

1

−2

−3

−1

3

−1.92

β=0

(b) Cl − α al variare di β

Figura A.4 Alcuni grafici del coefficiente aerodinamico Cl

Bibliografia

[1] Richard C. Dorf and Robert M. Bishop, “Modern Control Systems.”, Seventh Edition,Addison-Wesley, Reading, Massachusetts, 1995.

[2] Gene F. Franklin, J. David Powell, and Abbas Emani-Naeini, “Feedback Control of DynamicSystems.”, Third Edition, Addison-Wesley, Reading, Massachusetts, 1994.

[3] Benjamin C. Kuo, “Automatic Control Systems.”, Seventh Edition, Prentice Hall, EnglewoodCliffs, New Jersey, 1995.

[4] Norman S. Nise, “Control Systems Engineering.”, Second Edition, Benjamin-Cummings,Redwood City, California, 1995.

[5] Holly Moore, “Matlab. Per l’ingegneria.” , 2008.

[6] Frederico R. Garza and Eugene A. Morelli, “A Collection of Nonlinear Aircraft Simulationsin MATLAB.” NASA Reports, NASA/TM-2003-212145, 2003, pp. 41–45.

147