Sei sulla pagina 1di 165

1

MATLAB-SIMULINK
Simulink

Ing. Alessandro Pisano

pisano@diee.unica.it
2

Indice 3 Introduzione
7 Librerie e blocchi elementari (1)
9 Realizzazione di un modello
11 Esempio: costruzione e visualizzazione di una sinusoide
16 Scelta del solutore
20 Modifica delle impostazioni predefinite
27 Utilizzo di variabili dal workspace
28 Librerie e blocchi elementari (2)
31 Esportazione dati verso il Workspace e su file esterno
37 Esempio: filtro passa basso
40 Integratore
43 Esecuzione automatizzata di test
44 Analisi spettrali (FFT)
59 Filtraggio digitale
63 Esempio: sistema termico ad 1 e 2 gradi di libertà
68 Utilizzo di blocchi Trasnfer function
73 Esempio: Simulazione di un sistema di regolazione di temperatura
81 Creazione di sottosistemi
85 Mask
90 Esempio Distribuzione di temperatura nel rotore di una turbina
99 Realizzazione di sistemi MIMO LTI
109 Variabili popup e checkbox
112 Esempio: sistema di frenatura con ABS
123 Embedded Matlab Function
133 Toolbox avanzati. SimMechanics e SimDriveline

Alessandro Pisano - pisano@diee.unica.it


3

Finestra di avvio (v. 7.8.0)

Editor M-files

Avvio SIMULINK
Cartella corrente

Alessandro Pisano - pisano@diee.unica.it


4

Programmazione dei modelli di simulazione per via grafica

Alessandro Pisano - pisano@diee.unica.it


5

Possibilità di suddividere il modello complessivo in sottosistemi paralleli o


embricati (un sottosistema può essere importato direttamente in un
modello di simulazione differente)

Possibilità di definire finestre di parametrizzazione (Masks)

Esportazione nel workspace Matlab dei risultati della simulazione

Esecuzione automatizzata di test

Toolbox avanzati: SimDrivelline e SimMechanics

Alessandro Pisano - pisano@diee.unica.it


6

Avvio SIMULINK

New

Librerie principali

Alessandro Pisano - pisano@diee.unica.it


7

Libreria “Commonly used blocks”

Alessandro Pisano - pisano@diee.unica.it


8

Libreria “Sinks”

Libreria “Sources”

Alessandro Pisano - pisano@diee.unica.it


9

Realizzazione di un modello Simulink

Pagina di lavoro
10

Realizzazione di un modello Simulink

3 fasi

1. Importare nella pagina di lavoro i blocchi elementari Simulink


necessari, trascinandoli con il mouse dalla rispettiva libreria
(drag-and-drop)

2. Parametrizzare i blocchi Simulink nelle rispettive finestre di


parametrizzazione, alle quali si accede dalla pagina di lavoro
facendo doppio click con il mouse sopra il blocco stesso.

3. Collegare tra loro i blocchi Simulink tracciando le opportune linee di


interconnessione in modo da realizzare le funzionalità desiderate

Alessandro Pisano - pisano@diee.unica.it


11

Esempio introduttivo: costruzione e visualizzazione di un segnale sinusoidale

Sono sufficienti due blocchi elementari: un blocco che generi il segnale desiderato, ed un
blocco che ne permetta la visualizzazione.

Il primo blocco lo troveremo nella libreria “Sources” (blocco Sine Wave),


Il secondo blocco (blocco Scope), si trova nella libreria “Sinks”.

I blocchi necessari vanno


importati nella pagina di lavoro
Untitled trascinando con il
mouse (drag-and-drop) l’icona
del blocco all’interno della
pagina di lavoro. Il risultato di
tale procedura è mostrato in
Figura.

Salvare il modello e attribuire un


nome al file con estensione .mdl

Alessandro Pisano - pisano@diee.unica.it


12

Si deve ora collegare l’uscita del generatore di funzione “Sine Wave” con
l’ingresso del blocco di visualizzazione “Scope”.

Per effettuare un collegamento tra due blocchi vi è una procedura rapida. Si


deve selezionare il blocco di origine (cliccandovi sopra), e si deve
successivamente selezionare il blocco di destinazione con il tasto ctrl
premuto.

Un collegamento correttamente eseguito viene


indicato come in Figura

In alternativa, si può portare la freccia del mouse nel punto di origine del
collegamento e quindi “tracciarlo” tenendo premuto il tasto sinistro del mouse,
portandosi fino al punto di destinazione.

Alessandro Pisano - pisano@diee.unica.it


13

Devono ora essere impostati i parametri di ampiezza, frequenza e sfasamento


che definiscono la particolare sinusoide che si desidera generare. A tal fine è
necessario fare doppio click sul blocco “Sine Wave”, e come risultato si apre
una finestra di dialogo all’interno della quale vanno impostati i parametri di
funzionamento.

Ampiezza

Bias

Frequenza

Sfasamento

Alessandro Pisano - pisano@diee.unica.it Tasto OK


14

Si deve ora impostare la durata (cioè l’intervallo temporale) della simulazione.


La durata si può impostare direttamente dai menù della pagina di lavoro

Tasto RUN Durata


(valore di default 10.0)

Cliccando sul tasto RUN viene


eseguita la simulazione.
Dopo che è stata eseguita la
simulazione si può visualizzare il
segnale generato cliccando sul blocco
Scope.

Alessandro Pisano - pisano@diee.unica.it


15

Ora si aumenti la frequenza della sinusoide da 1 rad/s a 2 rad/s


Si ripeta la simulazione. Si ri-aggiorni il grafico della finestra grafica Scope

cliccando sul pulsante nella barra dei menu della finestra Scope

Grafico “spigoloso”

Si deve andare a modificare il “metodo


di integrazione”, che definisce il passo di
discretizzazione temporale che viene
impiegato nella simulazione del
modello.
16

Il metodo di integrazione (Solver) si imposta selezionando il menu della pagina di


lavoro Simulation->Configuration Parameters

Alessandro Pisano - pisano@diee.unica.it


17

La scelta del solutore con il quale di risolvono numericamente le equazioni


differenziali del modello è ovviamente irrilevante per il semplice esempio in
esame che non coinvolge alcun legame differenziale.
Il motivo della spigolosità del grafico sta nel fatto che il metodo proposto di default
(ode45 a passo variabile) ha “scelto” dei passi di discretizzazione temporale
piuttosto elevati, e sono stati quindi generati “pochi campioni” del segnale
In modelli di simulazione complessi, la scelta del solutore numerico (Runge-Kutta,
Dormand-Prince, Eulero,…) e delle relative caratteristiche (passo fisso/variabile,
etc) va fatta con criterio.

Alessandro Pisano - pisano@diee.unica.it


18

Runge-Kutta e Dormand-Prince sono degli ottimi solutori “general-purpose”.

Per simulazioni “multi-domain” con la copresenza di costanti di tempo molto


differenti tra loro sono consigliati i metodi a passo variabile dedicati ai problemi
Stiff (es. ode15s/stiff).

Per simulazioni con elementi discontinui (non-smooth dynamics) i metodi a passo


variabile talvolta forniscono risposte non veritiere. Il solutore Eulero a passo fisso,
con un passo sufficientemente piccolo, è ritenuto affidabile per sistemi non-
smooth.
Si scelga il solutore ode1 (Eulero) a passo fisso, e se ne imposti il Fixed-Step size a
0.001

Alessandro Pisano - pisano@diee.unica.it


19

Considerazioni aggiuntive

Una scelta ottimale per il solutore bilancia, per il problema in esame, la precisione
della soluzione e la mole di calcoli richiesta, che influenza il tempo di simulazione.

Per identificare un solutore adeguato serve esperienza. Il passo di campionamento


deve essere commisurato alla rapidità di variazione dei segnali in gioco. Quando si
sceglie un solutore a passo variabile si può pensare di introdurre un limite massimo
per il passo adattativo.

Quando il modello non contiene stati continui (non vi sono cioe blocchi “dinamici”
come Integratori, blocchi Transfer Fcn, etc.) Simulink usa il solutore “discrete”
anche se viene specificato un solutore differente,.

Alessandro Pisano - pisano@diee.unica.it


20

Modifica delle impostazione predefinite per i files Simulink all’apertura

Alessandro Pisano - pisano@diee.unica.it


21

Modificare le Solver Options come in figura

Alessandro Pisano - pisano@diee.unica.it


22

Modificare le Data Import/Export Options come in figura

Alessandro Pisano - pisano@diee.unica.it


23

Si ripeta la simulazione e si riaggiorni il grafico

Il grafico della sinusoide è ora correttamente


rappresentato.
In base alla scelta fatta per il passo fisso del
solutore, vengono ora generati, e interpolati dal
grafico, 1000 campioni per ogni secondo di
evoluzione del segnale.

La sinusoide viene però mostrata a partire


dall’istante t=5.
Sono stati “persi” i campioni precedenti.

Il motivo è che, al fine di non saturare rapidamente la memoria del programma,


vige in Simulink una impostazione di default in base alla quale nei blocchi di tipo
Scope vengono visualizzati e mantenuti in memoria solo gli ultimi 5000 campioni
del segnale.

Alessandro Pisano - pisano@diee.unica.it


24

Per modificare tale impostazione per uno specifico


blocco si deve cliccare sul pulsante Parameters nella
finestra del blocco Scope

La finestra “Scope Parameters” ha due sottomenu: “General” e “Data History”.


Dal sottomenu Data History si deve disselezionare la check-box “Limit data points to last ..”

Alessandro Pisano - pisano@diee.unica.it


25

Ora ripetendo la simulazione e riaggiornando il grafico la sinusoide viene


visualizzata per intero

Per visualizzare un segnale costituito dalla somma di tre sinusoidi importiamo


nella pagina di lavoro due nuove istanze del blocco elementare Sine Wave, ed
importiamo anche un blocco che rappresenti un nodo sommatore (blocco Sum
dalla libreria dei Commonly Used Blocks)

Alessandro Pisano - pisano@diee.unica.it


26

Il blocco Sum deve essere


preliminarmente parametrizzato
specificando il numero di segnali in
ingresso, ed il segno con il quale
concorrono alla sommatoria, per
mezzo di una stringa (es. +++ +)

Scegliamo +++
L’aspetto del blocco diventa

Dopo aver cancellato la linea di collegamento


preesistente tra il primo blocco Sine Wave ed
il blocco Scope, si realizzi la connessione
riportata in Figura.

Alessandro Pisano - pisano@diee.unica.it


27

Ora si possono assegnare i parametri di ampiezza, frequenza, bias e sfasamento, delle


tre sinusoidi, rieseguire la simulazione e visualizzare il grafico prodotto dal blocco
Scope .

Tutte le variabili definite nel workspace di Matlab sono disponibili e accessibili da


parte dei blocchi Simulink.

I parametri di un modello possono essere espressi utilizzando delle variabili (es.


A1,f1,b1, …) alle quali si può assegnare un valore con un file script Matlab da
eseguirsi prima della esecuzione della simulazione.

A1=1;
f1=1;
b1=5;
phi1=0;
A2=4; Il modello può essere in questo
f2=pi; modo riparametrizzato con estrema
b2=2; facilità.
phi2=pi/2;
A3=1;
f3=4*pi;
b3=2;
phi3=0;

Alessandro Pisano - pisano@diee.unica.it


28

Libreria “Continuous”

Libreria “Discontinuities”

Libreria “Discrete”
29

Libreria “Lookup Tables”

Libreria “Math operations”


30

Libreria “Model Verification”

Libreria “Signal routing”

Alessandro Pisano - pisano@diee.unica.it


31

Vediamo come esportare in Matlab i dati prodotti eseguendo i modelli


Simulink.

Serve il blocco To Workspace dalla libreria Sinks

Il blocco To Workspace riceve in ingresso il segnale


(scalare o vettoriale) che salva nel workspace. Il
blocco si interconnette agli altri come in Figura.
Per tracciare un collegamento a partire da un
collegamento preesistente si deve portare il mouse
nel punto di diramazione, premere il tasto destro, e
poi allontanarsi e tracciare il collegamento tenendo
il tasto destro premuto, fino a giungere al punto di
destinazione del collegamento

Alessandro Pisano - pisano@diee.unica.it


32

Il blocco To Workspace va parametrizzato specificando il


nome della variabile che verrà creata nel workspace di
Matlab (scegliere y) ed il formato di salvataggio (è
opportuno modificare il formato di default Structure e
selezionare invece Array) .
Per ottimizzare l’impiego della memoria del programma si
può anche impostare un fattore intero di decimazione
(es. con decimation = 10 i dati vengono salvati nel
workspace con uno step temporale 10 volte superiore,
quindi si avranno meno elementi nel vettore y).
Si mantenga il valore unitario di default.

Il vettore dei tempi viene salvato di


default sotto forma di array con il
nome tout.
Bisogna però disabilitare una
impostazione che limita a 1000 il
numero massimo di elementi per
tout. Si deve andare ne Simulation-
>Configuration Parameters, e nel
menu Data Import/Export
disselezionare la check-box Limit
Data Points to Last

Alessandro Pisano - pisano@diee.unica.it


33

Lanciando la simulazione vengono creati nel workspace di Matlab gli array y e


tout.
Verificarlo digitando il comando whos
Si può visualizzare in Matlab il grafico del segnale con il comando
plot(tout,y),grid

Alessandro Pisano - pisano@diee.unica.it


34

Esportazione su file dei dati prodotti da modelli Simulink.

Se si desidera che i dati siano non solo esportati


nel workspace di Matlab ma anche salvati in
modo permanente su un file, si può generare un
file dati nel formato binario .mat con il blocco To
File, dalla libreria Sinks
I files con estensione mat sono detti mat-files.

Il blocco deve essere parametrizzato specificando


nella apposita finestra di configurazione:

-Il nome (comprensivo dell’estensione) del mat-file


che verrà creato (es. y_test1.mat).

-Il nome che verrà assegnato alla variabile


quando il mat-file sarà successivamente
aperto in Matlab (scegliere y)
E’ possibile impostare una decimazione dei dati.
Se si sceglie una “Decimation” > 1 è bene generare
anche un vettore dei tempi “sincrono” con la
variabile sottocampionata
Alessandro Pisano - pisano@diee.unica.it
35

Lanciare la simulazione, e verificare come nella cartella di lavoro sia ora presente il
file y_test1.mat

Possono essere esportati segnali vettoriali. Per mezzo del blocco Mux (libreria
Commonly Used Blocks) si possono “aggregare” i tre segnali sinusoidali in un unico
segnale vettoriale con tre componenti.

Alessandro Pisano - pisano@diee.unica.it


36

La struttura interna dei mat-files prevede la memorizzazione dei dati in una struttura
rettangolare

t1 t2 t3  t N 1 tN
y1 t1  y1 t 2  y1 t3   y1 t N 
y2 t1  y2 t 2  y2 t3   y2 t N 
...
ym t1  ym t 2  ym t3   ym t N 

I mat-files possono essere aperti successivamente in Matlab con il comando load.

>> load y_test1


Viene generata nel workspace di Matlab una variabile matriciale avente il nome
specificato nella finestra di configurazione del blocco To File e la struttura rettangolare
riportata sopra.

Alessandro Pisano - pisano@diee.unica.it


37

Filtro passabasso
Consideriamo un filtro passa-basso RC

+
Vin Vout

Equazione differenziale RC Vout t   Vout t   Vin t 

Vout t   Vin t   Vout t 


Equazione differenziale esplicitata rispetto 1
alla derivata di ordine più elevato
RC

Posso realizzare uno schema di simulazione utilizzando un blocco Integrator, un blocco


Sum e un blocco Gain, oltre che ovviamente un generatore di segnale per costruire la
tensione di ingresso ed un blocco Scope per visualizzare la tensione di uscita.

Alessandro Pisano - pisano@diee.unica.it


38

Modello Simulink.
Grazie al blocco Mux è possibile visualizzare i segnali Vin e Vout nel medesimo blocco
Scope. Inseriamo anche un blocco “To Workspace” (nome variabile vout, tipo array)

Vout t   Vin t   Vout t 


1
RC

Assegniamo un valore ai parametri


scrivendo un semplice script

R=1e4; % 10k Ohm La costante di tempo del filtro vale RC=0.1 s


C=1e-5; % 10 pF

Alessandro Pisano - pisano@diee.unica.it


39

Finestra di parametrizzazione del Signal Generator.


4 tipologie di segnali disponibili (sinusoidale, onda quadra,
dente di sega, random)

Il filtro può essere implementato in forma più compatta


mediante un blocco Transfer Function

Vout s 
RC Vout t   Vout t   Vin t  F s  
1

Vin s  sRC  1
Rappresentazioni equivalenti
Si devono specificare i
coefficienti dei polinomi a
numeratore e
denominatore della FdT
utilizzando la notazione
Matlab per la
rappresentazione dei
polinomi

sRC  1  [ RC 1]
Alessandro Pisano - pisano@diee.unica.it
40

Integratore
Nella finestra di parametrizzazione dell’integratore il parametro piu importante da settare è
la condizione iniziale (Initial Condition), che di default viene impostata pari a zero

Se l’integratore riceve in ingresso un segnale


vettoriale, genera in uscita un vettore di pari
dimensione che contiene l’integrale delle diverse
componenti del vettore di ingresso

Possono essere introdotte saturazioni inferiori


e/o superiori sulle uscite dell’integratore.

Può essere anche applicato un reset sull’uscita


del’integratore. Il reset riporta l’uscita
dell’integratore al valore della condizione iniziale

Alessandro Pisano - pisano@diee.unica.it


41

Integratore con ingresso vettoriale

Condizioni iniziali diverse per le uscite

Alessandro Pisano - pisano@diee.unica.it


42

Integratore con saturazione superiore


43

Esecuzione automatica di test


Il seguente codice lancia in sequenza due simulazioni con valori diversi dei parametri R e
C, memorizza la Vout nelle due prove nei vettori y1 ed y2, e traccia dei grafici delle varie
soluzioni in tre finestre grafiche distinte
% VERIFICA CHE IL MODELLO SIA APERTO, E IN CASO CONTRARIO LO APRE
if isempty(find_system('Name','filtropassabasso'))
open_system('filtropassabasso')
end

R=1e4; % 10k Ohm


C=1e-5; % 10 pF

sim('filtropassabasso');
y1=vout;
figure(1)
IMP. Utilizzo della funzione sim(‘model’)
plot(tout,vout)

R=1e4; % 10k Ohm


C=2e-5; % 20 pF

sim('filtropassabasso');
y2=vout;
figure(2)
plot(tout,vout)

figure(3)
plot(tout,y1,tout,y2)

Alessandro Pisano - pisano@diee.unica.it


44

Risposte in frequenza e analisi spettrali

Impariamo ora a visualizzare la risposta in frequenza di filtri lineari, e a visualizzare lo


spettro di frequenza di un segnale campionato.

Per il filtro considerato


Vout s 
F s  
1
 RC  0.1
Vin s  sRC  1

Le seguenti istruzioni richiedono all’utente l’inserimento da tastiera dei parametri R e C

R=input('Inserire il valore di R [Ohm] (valore consigliato: R=1e4): \n');


C=input('Inserire il valore di C [Farad] (valore consigliato C=1e-5): \n');

Con i valori consigliati per R e C, la pulsazione di taglio è pari a 1/RC = 10 rad/sec  ft=1.6 Hz

omega_t=1/(R*C);
disp(['La frequenza di taglio è: ', num2str(omega_t/(2*pi)),‘ rad/sec']);
45

Posso definire in Matlab un oggetto di tipo “Transfer Function”

e visualizzarne quindi la sua


risposta in frequenza (più
precisamente: i diagrammi
semilogaritmici del modulo in
dB e della fase della Funzione
di Risposta Armonica F(jw) in
funzione della pulsazione w)
con il comando Bode

bode(F),grid;

Cambiamo il valore della


costante di tempo RC, e
ritracciamo i diagrammi
46

Ora riferiamoci allo schema modificato

Il generatore di segnali è sostituito da un blocco Fcn (libreria User-Defined Functions) che riceve
in ingresso il segnale prodotto dal blocco Clock (libreria Sources) , cioè il tempo corrente.
Il blocco To Workspace scrive la variabile out, di tipo array.

Il blocco Fcn puo implementare una qualunque funzione statica, e si parametrizza


compilando, nella apposita finestra di configurazione del blocco, una casella di testo in
linguaggio Matlab, con la variabile standard “u” che denota la variabile in ingresso al blocco

Il codice A1*sin(omega1*u)+A2*sin(omega2*u) definisce un segnale somma di due


sinusoidi con ampiezza e pulsazione parametrizzate dai coefficienti A1, omega1, A2, omega2.

Il blocco Fcn consente di implementare facilmente segnali con una espressione analitica
anche complessa, che potrebbero richiedere un elevato numero di blocchi elementari.
Alessandro Pisano - pisano@diee.unica.it
47

Assegniamo un valore alle costanti.


A1=1;
omega1=1.6*(2*pi); %rad/s (pari alla pulsazione di taglio)
A2=0;
omega2=0;

Vogliamo visualizzare l’ingresso e l’uscita del filtro, ed i relativi spettri di potenza


figure(1)
plot(tout,out(:,1),'k',tout,out(:,2),'k--'),grid,
title('Segnale di ingresso V_{in} e segnale di uscita V_{out}'),
xlabel('Tempo [s]'),
legend('V_{in}','V_{out}')
axis([0 10 -2 2])

ZOOM
48

Si salvi nella cartella di lavoro il seguente codice nel file spettro.m

function spettro(t,x,n)

% calcolo del vettore delle frequenze


f=0:1/t(length(t)):1/t(2);
f=f';

% calcolo della Fast Fourier Transform


Y=fft(x);

% calcolo dello densità spettrale di potenza normalizzato


% che permette di ottenere un'ampiezza unitaria dello spettro
% per una sinusoide di ampiezza unitaria
P=2*abs(Y)/length(Y);

% creazione grafico nella finestra n-esima


figure(n),
plot(f(1:ceil(length(f)/2)),P(1:ceil(length(P)/2)))
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')

La funzione spettro riceve come argomenti, nell’ordine: il vettore dei tempi, il vettore del
segnale, ed il numero della finestra nella quale tracciare il diagramma

Alessandro Pisano - pisano@diee.unica.it


49

Ora si può utilizzare la funzione spettro() per produrre i grafici desiderati

>>spettro(tout,out(:,1),1), axis([0 3 0 1.1])


>>spettro(tout,out(:,2),2), axis([0 3 0 1.1])

Vin Vout

Alessandro Pisano - pisano@diee.unica.it


50

Per ottenere uno spettro maggiormente fedele a quello, ideale, a larghezza nulla, si deve
aumentare il tempo di simulazione.

Vin Vout
Tsim=100

Vin Vout
Tsim=10
51

Si salvi nella cartella di lavoro il seguente codice nel file spettro2.m

function [freq data]=spettro2(t,x)

% calcolo del vettore delle frequenze


f=0:1/t(length(t)):1/t(2);
f=f';

% calcolo della Fast Fourier Transform


Y=fft(x);

% calcolo dello densità spettrale di potenza normalizzato


% che permette di ottenere un'ampiezza unitaria dello spettro
% per una sinusoide di ampiezza unitaria
P=2*abs(Y)/length(Y);

freq=f(1:ceil(length(f)/2));
data=P(1:ceil(length(P)/2));

Rispetto alla funzione spettro, la funzione spettro2 non produce il grafico, ma restituisce
all’esterno i due vettori che consentono di produrre il grafico successivamente (ad esempio,
all’interno di una struttura subpplot)

Alessandro Pisano - pisano@diee.unica.it


52

Analizziamo il seguente codice

[F,X]=spettro2(tout,out(:,1));
figure(4),
subplot(2,1,1),
plot(tout,out(:,1)),title('Segnale di ingresso'), xlabel(‘Tempo[s]')
grid,axis([0 10 -1.5 1.5])
subplot(2,1,2)
plot(F,X),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 5 0 1.1])

[F,X]=spettro2(tout,out(:,2));
figure(5),
subplot(2,1,1),
plot(tout,out(:,2)),title('Segnale di uscita'), xlabel(‘Tempo[s]')
grid,axis([0 10 -1.5 1.5])
subplot(2,1,2)
plot(F,X),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 5 0 1.1])

Alessandro Pisano - pisano@diee.unica.it


53

L’output del precedente codice è il seguente

Concludiamo questo esempio puntualizzando come il modello possa essere reso


completamente parametrizzabile e gestibile da script avendo cura di specificare le grandezze
come la durata della simulazione, le condizioni iniziali degli integratori, il passo di
discretizzazione, etc, per mezzo di costanti simboliche.

Definiamo la variabile Tsim


Alessandro Pisano - pisano@diee.unica.it
54

Analizziamo il seguente codice

% VERIFICA CHE IL MODELLO SIA APERTO, E IN CASO CONTRARIO LO APRE


if isempty(find_system('Name','filtropassabasso2'))
open_system('filtropassabasso2')
end

A1=1;
omega1=1.6*(2*pi);
A2=0;
omega2=0;
Tsim=20;

sim('filtropassabasso2');

[F,X]=spettro2(tout,out(:,1));
figure(6),
subplot(4,1,1),
plot(tout,out(:,1)),title('Segnale di ingresso'), xlabel('Tempo[s]')
grid,axis([0 10 -1.5 1.5])
subplot(4,1,2)
plot(F,X),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 5 0 1.1])
[F,X]=spettro2(tout,out(:,2));
subplot(4,1,3),
plot(tout,out(:,2)),title('Segnale di uscita'), xlabel('Tempo[s]')
grid,axis([0 10 -1.5 1.5])
subplot(4,1,4)
plot(F,X),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 5 0 1.1])
55

Analizziamo il seguente codice (cont.)

A1=1;
omega1=3*(2*pi);
A2=0;
omega2=0;
Tsim=20;

sim('filtropassabasso2');

[F,X]=spettro2(tout,out(:,1));
figure(7),
subplot(4,1,1),
plot(tout,out(:,1)),title('Segnale di ingresso'), xlabel('Tempo[s]')
grid,axis([0 10 -1.5 1.5])
subplot(4,1,2)
plot(F,X),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 5 0 1.1])
[F,X]=spettro2(tout,out(:,2));
subplot(4,1,3),
plot(tout,out(:,2)),title('Segnale di uscita'), xlabel('Tempo[s]')
grid,axis([0 10 -1.5 1.5])
subplot(4,1,4)
plot(F,X),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 5 0 1.1])

Alessandro Pisano - pisano@diee.unica.it


56

L’output del precedente codice è il seguente

Alessandro Pisano - pisano@diee.unica.it


57

% VERIFICA CHE IL MODELLO SIA APERTO, E IN CASO CONTRARIO LO APRE


if isempty(find_system('Name','filtropassabasso2'))
open_system('filtropassabasso2')
end

R=1e4; % 10k Ohm


C=1e-5; % 10 pF
A1=1;
omega1=1.6*(2*pi);
A2=2;
2 armoniche distinte
omega2=10*(2*pi);
Tsim=20;

sim('filtropassabasso2');

[F,X]=spettro2(tout,out(:,1));
figure(8),
subplot(4,1,1),
plot(tout,out(:,1)),title('Segnale di ingresso'), xlabel('Tempo[s]')
grid,axis([0 10 -4 4])
subplot(4,1,2)
plot(F,X),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 15 0 2.1])
[F,X]=spettro2(tout,out(:,2));
subplot(4,1,3),
plot(tout,out(:,2)),title('Segnale di uscita'), xlabel('Tempo[s]')
grid,axis([0 10 -4 4])
subplot(4,1,4)
plot(F,X),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 15 0 2.1])
58

L’output del precedente codice è il seguente

Alessandro Pisano - pisano@diee.unica.it


59

Filtraggio digitale

Molto importante nei sistemi di acquisizione dati

n m
y F
k  aj y F
k j   b j yk  j
j 1 j 0

Es. y F k  a1 y F k 1  b0 yk n 1 m0

Un filtro digitale del primo ordine rappresenta una implementazione discreta


del filtro passa-basso studiato nell’esempio precedente

a1  e Ts / b0  1  e Ts /

 = costante di tempo del filtro

Ts = passo di campionamento della sequenza di input


60

Schema SIMULINK

A1=1;
omega1=2*(2*pi);
Tc=0.01;
tau=0.1;
a1=exp(-Tc/tau)
b0=1-exp(-Tc/tau)

Per ruotare di 90° un blocco lo si deve


selezionare e si devono premere
successivamente i tasti CTRL + R

Blocco UNIT DELAY


(libreria discrete)

Alessandro Pisano - pisano@diee.unica.it


61

A1=1;
omega1=2*(2*pi);
Tc=0.01;
tau=0.1;
a1=exp(-Tc/tau)
b0=1-exp(-Tc/tau)
62

clear all
close all Implementazione del filtraggio digitale in Matlab
clc

Tc=0.01;
tau=0.1;
a1=exp(-Tc/tau);a2=0;
b0=1-exp(-Tc/tau);b1=0;
ordine=2;

t=0:0.01:20;
y=sin(t);
rum=0.1*rand(1,length(t));
y_rum=y+rum;

figure(1)
plot(t,y);
grid,title('segnale senza rumore')

figure(2)
plot(t,rum);
grid,title('rumore')

figure(3)
plot(t,y_rum);
grid,title('segnale rumoroso')

yf=zeros(1,length(t));
for i=(ordine+1):length(t)
yf(i)=a1*yf(i-1)+a2*yf(i-2)+b0*y_rum(i)+b1*y_rum(i-1)+;
end

figure(4)
plot(t,yf);
grid,title('segnale FILTRATO ')
Alessandro Pisano - pisano@diee.unica.it
63

Ora simuliamo un sistema termico

Consideriamo un sistema termico rappresentato da un volume V circondato da una


parete e contenente un fluido

qt  T f t  Te t 

Sia Te(t) [K] la temperatura esterna alla parete, Tf(t) [K] la temperatura del fluido interno al
volume, e q(t) [J/s] una sorgente di calore interna al volume.
Sia Cf [J/K] la capacita termica del fluido, e sia Kie (J/K s) il coefficiente di scambio termico
tra interno ed esterno.

C f Tf t   qt   Kie Te t   T f t 

Alessandro Pisano - pisano@diee.unica.it


64

Per tradurre una equazione differenziale in termini di una combinazione tra blocchi Simulink
si deve esplicitare l’equazione differenziale rispetto alle derivate di ordine piu elevato.

Tf t   qt   ie Te t   ie Ti t  
1
Cf
K
Cf
K
Cf
1
Cf

qt   KieTe t   KieT f t  
Con un blocco integratore (Integrator) e con dei blocchi “Constant” e “Gain” si può realizzare
il seguente modello di simulazione che ipotizza dei valori costanti per q e Te

Si noti come all’ingresso dell’integratore, punto cui corrisponde il segnale dTf/dt, venga

“costruita” elemento per elemento la formula Tf t  


1
Cf
 
qt   Kie Te t   T f t 
Alessandro Pisano - pisano@diee.unica.it
65

Per eseguire la simulazione bisogna assegnare un valore ai parametri Cf [J/K] e Kie [J/Ks],
alla condizione iniziale Tf(0), ed al valore costante dei segnali Te e q.

La condizione iniziale dell’integratore si specifica nella relativa finestra di dialogo

Script di parametrizzazione
Tf_zero=298.16; %[K], pari a 25°C
q=2000; % J/s q=2kW
Te=323.16; %[K], pari a 50°C;
Cf=2e3; % J/K per 1 kg di sostanza
Kie=1e2; % J / K s , per 1 m^2 di superficie di scambio

Alessandro Pisano - pisano@diee.unica.it


66

Si desidera visualizzare Tf sia in gradi Kelvin che in gradi centigradi in 2 finestre Scope separate.
La conversione da °K a °C può essere realizzata con il blocco Fcn (libreria User Defined Functions

Il blocco Fcn consente di realizzare una funzione


statica tra un parametro di ingresso (scalare o
vettoriale) e un parametro di uscita scalare.
Si deve scrivere l’espressione della funzione,
denotando con u (parola riservata) la variabile in
ingresso al blocco

Si desidera anche modificare il profilo di q(t) Si può utilizzare il blocco Step, libreria Sources.

q(t)
q
t
100

Alessandro Pisano - pisano@diee.unica.it


67

Si realizzi lo schema seguente

Grafico della temperatura Tf in


gradi centigradi

Alessandro Pisano - pisano@diee.unica.it


68

Realizziamo lo stesso modello in maniera più compatta, utilizzando il blocco “Transfer


Function” (libreria Continuous).

Trasformiamo secondo Laplace l’equazione differenziale


C f Tf t   qt   Kie Te t   Ti t   qt   KieTe t   KieTi t 

sC f T f s   KieT f s   Qs   KieTe s  sC f 


 Kie T f s   Qs   KieTe s  T f s  
1
Qs   KieTe s 
sC f  Kie

T f s   qt   KieTe t 
1
Notazione impropria, ma chiara
sC f  Kie

Schema a blocchi
Schema Simulink compatto

KieTe t 

+ T f t 
+ 1
q(t) sC f  K ie
69

Parametrizzazione del blocco Transfer Function

Il blocco deve rappresentare la Funz. di Trasf.

F s  
1
sC f  K ie
Si devono specificare i coefficienti dei polinomi a
numeratore e denominatore della FdT utilizzando la
notazione Matlab per la rappresentazione dei polinomi
(un vettore che contiene i coefficienti dl polinomio in
ordine decrescente rispetto alle potenze di s)

sC f  Kie  [C f Kie ]
Si può “aggirare” la trasformazione secondo Laplace ragionando sui coefficienti della equazione
differenziali

C f Tf t   KieT f t   ut  u t 


[1]
T f t 
ut   qt   KieTe t  [C f Kie ]
70

FdT del secondo ordine


a2T t   a1T t   a0T t   b1ut   b0ut 

[b1 b0 ]
u t  T t 
a2 a1 a0 
71

a2 yt   a1 y t   a0 yt   b1ut   b0ut 

Alessandro Pisano - pisano@diee.unica.it


72

Obbiettivi aggiuntivi

Far variare nel tempo la temperatura esterna ed osservare le corrispondenti fluttuazioni


della temperatura interna

Nell’ipotesi che q(t) possa assumere solo due valori (il valore nullo q=0, ed un valore
costante q=Q* ) realizzare un sistema di controllo ON-OFF per regolare ad un valore
desiderato la temperatura del fluido interno al volume

Confrontare i risultati ottenuti impiegando come controllore un rele’ con e senza isteresi

Alessandro Pisano - pisano@diee.unica.it


73

Schema SIMULINK FILE: termico1dof_feedback.mdl


Tf_zero=298;.16 %[K], pari a 25°C
q=2000; % J/s
Te=323;.16 %[K], pari a 50°C;
Cf=2e3; % J/K
Kie=1e2; % J / K s
74

Sistema a ciclo aperto

Alessandro Pisano - pisano@diee.unica.it


75

Ampiezza
isteresi = 4°C

Ampiezza
isteresi = 2°C
76

Complichiamo il modello

Trattiamo in maniera distinta gli accumuli termici nel volume e nella parte di contorno.
Definiamo quindi un modello più complesso che mi fornisca anche l’evoluzione temporale della
temperatura della parete Tp(t).

Tp t  temperatura della parete

qt  T f t  Te t 

Cf [J/K] è la capacita termica del gas interno al volume


Cp [J/K] è la capacita termica del materiale che costituisce la parete
Kip [J/K s] è il coefficiente di scambio termico tra l’interno del volume e la parete.
Kpe [J/K s] è il coefficiente di scambio termico tra la parete e l’esterno.

C f Tf t   qt   Kip Tp t   T f t 


C pTp t   K pe Te t   Tp t   Kip Tp t   T f t 
77

Esplicitiamo il sistema di equazioni rispetto alle derivate di ordine più elevato

T f t   qt   Tp t   T f t 
 1 Kip
Cf Cf

Tp t  
K pe
Te t   Tp t  Kip Tp t   Tf t 
Cp Cp
Importiamo nella pagina di lavoro un ulteriore blocco integratore la cui uscita sarà la
temperatura Tp della parete.
Utilizziamo anche un visualizzatore a Display (libreria Sinks)
Lo schema può essere realizzato come segue
78

Script di configurazione dei parametri

Tf_zero=25+273.15; %[K], pari a 25°C


Tp_zero=10+273.15; %[K], pari a 10°C
Cf=2e3; % J/K
Cp=10e3; % J/K
Kip=1e2; % J/K s
Kpe=1e2; % J/K s
q=2000; % J/s
Te=20+273.15 %[K], pari a 20°C;

Risultati della simulazione


79

Si desidera acquisire il segnale q(t) da un file esterno.

Il segnale q(t) sia disponibile nella forma di un file dati di tipo ASCII

File “dati_problema.dat”

La prima riga riporta i tempi e la seconda riporta il valore del segnale


Bisogna creare un mat-file (lo chiamiamo dati_mat.mat) che contenga tali informazioni.
%clear all
load dati_problema.dat
M=dati_problema;
tempi=M(1,:); %non utilizzato
segnale=M(2,:); %non utilizzato
save dati_mat M %si puo’ fare direttamente >> save dati_mat dati_problema
Tf_zero=298.16; %[K], pari a 25°C
Tp_zero=10+273.16; %[K], pari a 10°C
Cf=2e3; % J/K
Cp=10e3; % J/K
Kip=1e2; % J/K s
Kpe=1e2; % J/K s
q=2000; % J/s
Te=20+273.16; %[K], pari a 20°C;
80

Per importare il segnale si può utilizzare il blocco Simulink “From File”, dalla libreria Sources

Schema Simulink

In accordo con i dati acquisiti,


la durata della simulazione deve
essere posta pari a 2.

Alessandro Pisano - pisano@diee.unica.it


81

Creazione di sottosistemi

Si vuole rendere più compatta la rappresentazione del modello attraverso la definizione di un


macroblocco come in figura

qt  Tp t  T f t 

Te t  Tp t 

Simulink consente di definire dei macroblocchi (sottosistemi) che rappresentano una particolare
interconnessione tra altri blocchi, alla quale si accede esplorando il contenuto del sottosistema.

Alessandro Pisano - pisano@diee.unica.it


82

Creazione di sottosistemi

Si dispongano i blocchi del modello come in figura, in modo che sia possibile tracciare un
rettangolo nel quale entrano i segnali di input del sottosistema e dal quale escono i segnali di
output.
83

Con il mouse si deve “tracciare” nella pagina di lavoro un rettangolo come quello nella slide
precedente.
Poi, dal menu Edit della pagina di lavoro Simulink, si deve selezionare il comando Create Subsystem
Ridisponendo i blocchi dello schema si puo realizzare la seguente configurazione

Cliccando sul blocco


Subsystem si accede al
suo contenuto.
Si notino i blocchi “In1”,
“In2” , “Out1” ed “Out2”

Alessandro Pisano - pisano@diee.unica.it


84

Rinominando i blocchi “In1”, “In2”,


“Out1” ed “Out2” si può fare in
modo che nelle porte di input e
di Output del Subsystem
compaia il nome della grandezza
associata

La parametrizzazione del modello è attualmente effettuata per mezzo del file di script
precedentemente illustrato, che assegna una valore alle costanti simboliche usate nel modello
Simulink definendo opportune variabili omologhe nel workspace di Matlab. Tale m-file di
script deve sempre accompagnare il file Simulink (che ha estensione .mdl) e deve essere
lanciato prima di quest’ultimo

Può essere conveniente disporre di una maschera di parametrizzazione interna al


modello Simulink.

In questo modo tutte le informazioni associate al modello sono contenute in un unico file (il
file .mdl) e la riparametrizzazione del modello avviene in maniera più semplice, senza dovere
ogni volta rilanciare il file script con estensione .m

Alessandro Pisano - pisano@diee.unica.it


85

Creazione di MASK

Bisogna portarsi con il mouse sul Subsystem


“Camera di Combustione”, premere il tasto
destro del mouse, e selezionare Mask
Subsystem dal menu che compare

Alessandro Pisano - pisano@diee.unica.it


86

Dopo avere selezionato Mask Subsystem si deve nuovamente portarsi con il mouse sul
Subsystem “Camera di Combustione”, premere il tasto destro del mouse, e selezionare stavolta
Edit Mask dal menu che compare.

Finestra di configurazione della mask

Andare nel sottomenù:


Parameters

Alessandro Pisano - pisano@diee.unica.it


87

Nel sottomenù Parameters completare le voci “Dialog Parameters” come in Figura,


creando una riga per ognuno dei 6 parametri da settare .

Pulsante “Add”
Aggiunge una riga.

Per ciascun parametro , oltre al nome della relativa variabile (Cf, Cp, …) si può riportare
una frase descrittiva che comparirà nella maschera di configurazione, che riportiamo
nella slide seguente.

Alessandro Pisano - pisano@diee.unica.it


88

Maschera di parametrizzazione del Subsystem

Viene visualizzata facendo doppio click sul blocco Simulink del


Sottosistema
E’ possibile inserire manualmente il valore dei parametri nelle
opportune caselle di testo. I valori inseriti vengono memorizzati
al salvataggio del file, e riproposti alla sua riapertura.

Per accedere al contenuto del blocco “mascherato” premere il


tasto destro del mouse e poi selezionare “Look Under Mask”

Script semplificato
%clear all
load dati_problema.dat
M=dati_problema;
tempi=M(1,:); %non utilizzato
segnale=M(2,:); %non utilizzato
save dati_mat M
q=2000; % J/s
Te=20+273.16; %[K], pari a 20°C;

FILE:
termico_2dof_matfile_mask01.mdl
89

Si inserisca una ulteriore mask che consenta l’impostazione manuale di q e Te

FILE:
termico_2dof_matfile_mask02.mdl

Script
%clear all
load dati_problema.dat
M=dati_problema;
tempi=M(1,:); %non utilizzato
segnale=M(2,:); %non utilizzato
save dati_mat M

Alessandro Pisano - pisano@diee.unica.it


90

Esercizio
.
91
92

X0=0.1;
Y0=0.1;

A=1;
B=1;
C=5;
D=1;
93

Sistemi termici spazialmente distribuiti

Barra metallica filiforme di lunghezza L = 50 cm

x
x0 xL

Variabile di interesse: la temperatura T x, t 

Ipotesi : barra uniforme, termicamente isolata, in assenza di sorgenti di calore

Equazione del calore monodimensionale

T x, t   2T x, t 
C p k  k 2
T x, t 
t x 2

Alessandro Pisano - pisano@diee.unica.it


94

T x, t   2T x, t 
C p k  k 2
T x, t 
t x 2

 è la densità [kg /m3 ]

Cp è la capacita termica a pressione costante per unita di massa [J/kg K]

k è la conduttività termica [J/s m K ; W / mK ]

Valori per il ferro puro (rif. Schaum Trasmissione del calore, Tabella B-1 pag. 306)

  7856 kg/m c p  435 J/kgK k  63 W/mK (a 100 C)


k

C p è il coefficiente di diffusione [m2/s]   1.8 105 m2 / s (a 100 C)

T x, t   2T x, t 
 PDE
t x 2
95

Analisi in regime stazionario

T x, t   T x   2T x 
0
x 2

Siano noti e mantenuti costanti i valori di temperatura agli estremi T0  T 0 TL  T L 


La soluzione è calcolabile in forma chiusa, ma scegliamo di risolvere l’equazione
numericamente perché questo modo di ragionare di consentirà di risolvere agevolmente
anche i problemi distribuiti in regime transitorio , che vedremo in seguito.

 T T 
Soluzione in forma chiusa T x   T0   L 0  x
 L 

h h h h h h  L/5
x
x0 x  x1 x  x2 x  x3 x  x4 xL
4 “NODI SOLUZIONE”
96

Definiamo il vettore che contiene le temperature incognite nei nodi soluzione.

T  T1 , T2 , T3, .T4 


T

Approssimiamo l’equazione in un intorno dei nodi soluzione, e mettiamo a sistema

2 T2  2T1  T0 2 T4  2T3  T2
T  x   T  x  
x 2 h 2 x 2 x x
h 2
x x
1
3

2 T3  2T2  T1 2 TL  2T4  T3
T  x   T  x  
x 2 x x
h 2
x 2 x x
h 2
2 4

T2  2T1  T0  0

T3  2T2  T1  0

T4  2T3  T2  0

TL  2T4  T3  0
97

Isoliamo alla sinistra dell’uguale le temperature incognite, ordinandole

 2T1  T2  T0
T1  2T2  T3  0
T2  2T3  T4  0
T3  2T4  TL

Sistema di equazioni lineari


 2 1 0 0   T0 
 1 2 1   0 
b 
AT  b 0
A 
0 1 2 1   0 
   
 0 0 1  2  
 LT

T1 
T 
T   2   A 1b
T3 
 
T4 
98

50
T0=10; %temperatura nel punto x=0
TL=50; %temperatura nel punto x=L 45
L=0.5; %Lunghezza della sbarra
N=4; %numero di nodi di discretizzazione 40
h=L/(N+1);

Temperatura [°C]
35
A=[-2 1 0 0;1 -2 1 0; 0 1 -2 1; 0 0 1 -2];
30
b=[-T0;0;0;-TL];
25

disp('il vettore incognito è:')


T=inv(A)*b 20

15

disp('Vettore completo:')
10
T_tot=[T0 T' TL]' 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
Ascissa lungo la sbarra [m]

x=0:h:L;
T_teorica=T0+(TL-T0)/L*x

plot(x,T_tot,'*',x,T_teorica,'r'),grid
xlabel('Ascissa lungo la sbarra [m]')
ylabel('Temperatura [°C]')
99

Modificare il codice per includere un numero


arbitrario N di nodi soluzione.
100
50
T0=10; %temperatura nel punto x=0
TL=50; %temperatura nel punto x=L 45

L=0.5; %Lunghezza della sbarra 40


N=10; %numero di nodi di discretizzazione
h=L/(N+1);

Temperatura [°C]
35

30
A=zeros(N,N);
for i=1:N, 25

A(i,i)=-2;
20
end
for j=1:N-1, 15

A(j,j+1)=1;
A(j+1,j)=1; 10
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5

end Ascissa lungo la sbarra [m]

b=zeros(N,1);
b(1)=-T0;
b(N)=-TL;

disp('il vettore incognito è:')


T=inv(A)*b
%ISTRUZIONE ALTERNATIVA
T=A\b;

disp('Vettore completo:')
T_tot=[T0 T' TL]'

x=0:h:L;
T_teorica=T0+(TL-T0)/L*x

plot(x,T_tot,'*',x,T_teorica,'r'),grid
xlabel('Ascissa lungo la sbarra [m]')
ylabel('Temperatura [°C]')
101

Ora studiamo un problema differente

E’ noto e prefissato il valore di temperatura T0 all’estremo sinistro, mentre la


temperatura all’estremo destro non è imposta.

Poiché la sbarra è termicamente isolata si avrà che il flusso termico nei bordo
destro è pari a zero


T x   0
x x L

La soluzione in regime permanente è ancora calcolabile in forma chiusa

Soluzione in forma chiusa T x   T0

0
  T T 
T x   T x   4 3 
2 x x h  T3  T4
T x   
xL x  x4
 
x 2
x x
h h h2
4
102

 2T1  T2  T0
T1  2T2  T3  0
T2  2T3  T4  0
T3 T4  0

Modificare il codice Matlab

 2 1 0 0  T0 
 1 2 1   0 
0
AT  b A  b 
0 1 2 1   0 
   
 0 0 1  1  0 
103

Ora analizziamo il caso in cui anche la temperatura all’estremo sinistro non è


imposta.
Seguendo il medesimo ragionamento adottato in precedenza si ottiene il sistema:

 T1  T2  0
T1  2T2  T3  0
T2  2T3  T4  0
T3 T4  0

 1 1 0 0 0 
 1 2 1 0  0 
AT  b A  b 
0 1 2 1  0 
   
 0 0 1  1 0 

Il sistema lineare non puo essere risolto numericamente perche


ammette infinite soluzioni

Soluzione in forma chiusa T x   cost.


104

Cosa succede se le due temperature agli estremi, ancorche’ imposte


dall’esterno, siano variabili nel tempo ?.

L’analisi in regime stazionario perde di significato !

L’equazione del calore deve ora essere considerata nella sua interezza.

T x, t   2T x, t 

t x 2
Il ragionamento svolto in precedenza va opportunamente modificato.

La discretizzazione del dominio è sempre valida.

h h h h h h  L/5
x
x0 x  x1 x  x2 x  x3 x  x4 xL
105

Definiamo il vettore che contiene le temperature incognite nei nodi soluzione, che a
differenza dal caso stazionario non sono più delle costanti, ma sono delle funzioni del tempo.

Tt   T1 t , T2 t , T3 t , T4 t 
T

T0 t  TL t  Condizioni al contorno NOTE

T x, t   2T x, t 

t x 2
T 0, t   T0 t 
Questa tipologia di condizioni al contorno sono dette di “DIRICHLET”.
T L, t   TL t 

L
Ti t   T xi , t  i  1,2,3,4 xi  i  h  i 
5
106

T xi , t   T  x, t   2
T  x, t 
Ti t   
2
  i  1,2,3,4
t x 2 x  x x 2 x  x
i
i

Le derivate seconde vengono approssimate mediante differenze finite, in maniera analoga a


quanto fatto in precedenza ma coinvolgendo funzioni del tempo anzichè costanti

2 T2 t   2T1 t   T0 t 
T  x , t  
x 2 x x
h 2
1

2 T3 t   2T2 t   T1 t 
T  x , t  
x 2 x x
h 2
2

2 T4 t   2T3 t   T2 t 
T  x, t  
x 2 x x
h 2
3

2 TL t   2T4 t   T3 t 
T  x, t  
x 2 x x
h 2
4
107

 2
T  x, t 
Ti t   
 i  1,2,3,4
x 2 x  x
i

Sostituendo le approssimazioni alle differenze finite si ottiene un sistema di equazioni


differenziali ordinarie (ODE), di ordine pari al numero di nodi soluzioni (4 nel caso in esame).


T1 t   2 T2 t   2T1 t   T0 t 
h


T2 t   2 T3 t   2T2 t   T1 t 
h


T3 t   2 T4 t   2T3 t   T2 t 
h


T4 t   2 TL t   2T4 t   T3 t 
h
108

Risulta conveniente separare alla destra dell’uguale le quantità incognite dalle quantità note
T0(t) e TL(t)

 
T1 t   2  2T1 t   T2 t   2 T0 t 
h h

T2 t   2 T1 t   2T2 t   T3 t 
h

T3 t   2 T2 t   2T3 t   T4 t 

h
 
T4 t  2 T3 t  2T4 t  2 TL t 
       
h h

 t   ATt   But 
T  2 1 0 0 1 0 
 1 2 1  0 0 
  0 
Tt   T1 t , T2 t , T3 t , T4 t 
T
A 2 B 2   
h 0 1 2 1  h 0 0 
   
ut   T0 t , TN 1 t 
T
0 0 1  2  0 1
109

Ora sia il coefficiente di diffusione  che lo step h di discretizzazione spaziale influenzano


esplicitamente la soluzione. L’analisi in regime stazionario prevedeva la scomparsa di tali
coefficienti dalle relazioni risolutive

Devono essere note le temperature nei nodi soluzione all’istante iniziale t=0, cioè il vettore
costante

T0  T1 0, T2 0, T3 0, T4 0


T

Va rimarcato che trascorso un transitorio sufficientemente lungo i profili di temperatura non


dipendono più dalle condizioni iniziali, e tendono ad una soluzione di “regime dinamico” le
cui caratteristiche sono indipendenti dalle condizioni iniziali
110

clear all
clc
x=linspace(h,L-h,N);
L=0.5; t=0:Tcamp:Tfinale;
N=20; numsample=length(t);
rho=7856; Tinit=10*ones(1,N);
Cp=435;
k=63; T_soluz=zeros(numsample,N);
alfa=k/(rho*Cp); T_dot=zeros(numsample,1);
h=L/(N+1); T_soluz(1,:)=Tinit;
A=zeros(N,N); T0=30+5*sin(0.1*t)'; Cond. al contorno
for i=1:N, TL=30*ones(numsample,1);
A(i,i)=-2;
end for i=1:numsample-1
for j=1:N-1, Tdot=Ac*T_soluz(i,:)'+Bc*[T0(i);TL(i)]; Eulero esplicito
A(j,j+1)=1; T_soluz(i+1,:)=T_soluz(i,:)+Tcamp*Tdot';
A(j+1,j)=1; end
end
x_ext=linspace(0,L,N+2);
B=zeros(N,2); T_soluz_ext=[T0 T_soluz TL];
B(1,1)=1;
B(N,2)=1; [X,Y] = meshgrid(x_ext,t);
Ac=(alfa/h^2)*A; h=mesh(X,Y,T_soluz_ext);
Bc=(alfa/h^2)*B; title('Distribuzione temperatura lungo la sbarra.');
xlabel('Coordinata spaziale x [m] ','FontName','times','FontSize',14); Grafica
Tcamp=0.1; ylabel('Tempo [s]','FontName','times','FontSize',14);
Tfinale=100; zlabel('T(x,t)','FontName','times','FontSize',14);
set(gca,'FontSize',14,'FontName','Times');
111

Profilo spaziotemporale della soluzione


112

clear all x=linspace(h,L-h,N);


clc t=0:Tcamp:Tfinale;
numsample=length(t);
L=0.5;
N=5; Tinit=30*ones(1,N);

rho=7856; T_soluz=zeros(numsample,N);
Cp=435; T_dot=zeros(numsample,1);
k=63;
T_soluz(1,:)=Tinit;
alfa=k/(rho*Cp);
T0=30+20*sin(0.1*t)';
h=L/(N+1); TL=30*ones(numsample,1);

A=zeros(N,N); for i=1:numsample-1


for i=1:N, Tdot=Ac*T_soluz(i,:)'+Bc*[T0(i);TL(i)];
A(i,i)=-2; T_soluz(i+1,:)=T_soluz(i,:)+Tcamp*Tdot';
end end
for j=1:N-1,
A(j,j+1)=1;
A(j+1,j)=1; x_ext=linspace(0,L,N+2);
end T_soluz_ext=[T0 T_soluz TL];

B=zeros(N,2); [X,Y] = meshgrid(x_ext,t);


B(1,1)=1;
B(N,2)=1; h=mesh(X,Y,T_soluz_ext);
title('Distribuzione temperatura lungo la sbarra.');
Ac=(alfa/h^2)*A; xlabel('Coordinata spaziale x [m]
Bc=(alfa/h^2)*B; ','FontName','times','FontSize',14);
ylabel('Tempo [s]','FontName','times','FontSize',14);
Tcamp=0.01; zlabel('T(x,t)','FontName','times','FontSize',14);
Tfinale=100; set(gca,'FontSize',14,'FontName','Times');
113
114

Ora applichiamo una condizione al contorno che non “fissi” il valore della temperatura
nell’estremo destro, ma imponga l’isolamento termico dell’estremo destro x=L in
analogia con quanto fatto nella analisi a regime.

T x, t   2T x, t 

t x 2

T 0, t   T0 t 
T
L, t   0 Questa tipologia di condizione al contorno viene detta di “NEUMANN”.
x

T
L, t   TL t   TN t  Si ricava il modello discretizzato
x h
115

 t   ATt   But 
T  2 1 0 0 1 0 
 1 2 1  0 0 
  0 
Tt   T1 t , T2 t , T3 t , T4 t 
T
A 2  B 2   
h 0 1 2 1  h 0 0 
   
ut   T0 t  , 0 
T
0 0 1  1  0 1

 t   ATt   But 
T  2 1 0 0 1 
   
  1 2 1 0   0 
Tt   T1 t , T2 t , T3 t , T4 t  A 2 B 2 
T

h 0 1 2 1  h 0 
ut   T0 t     
 0 0 1  1 0 
116

clear all Tcamp=0.1;


clc Tfinale=1000;

L=0.5; x=linspace(h,L-h,N);
t=0:Tcamp:Tfinale;
N=20;
numsample=length(t);
rho=7856; Tinit=10*ones(1,N);
Cp=435;
k=63; T_soluz=zeros(numsample,N);
alfa=k/(rho*Cp); T_dot=zeros(numsample,1);

h=L/(N+1); T_soluz(1,:)=Tinit;

A=zeros(N,N); T0=10+5*sin(0.1*t)';
TL=0*ones(numsample,1);
for i=1:N,
A(i,i)=-2;
for i=1:numsample-1
end Tdot=Ac*T_soluz(i,:)'+Bc*[T0(i);TL(i)];
for j=1:N-1, T_soluz(i+1,:)=T_soluz(i,:)+Tcamp*Tdot';
A(j,j+1)=1; end
A(j+1,j)=1;
end x_ext=linspace(0,L,N+2);
A(N,N)=-1; T_soluz_ext=[T0 T_soluz T_soluz(:,end)];

B=zeros(N,2); [X,Y] = meshgrid(x_ext,t);


B(1,1)=1;
h=mesh(X,Y,T_soluz_ext);
B(N,2)=1;
title('Distribuzione temperatura lungo la sbarra.');
xlabel('Coordinata spaziale x [m] ','FontName','times','FontSize',14);
ylabel('Tempo [s]','FontName','times','FontSize',14);
Ac=(alfa/h^2)*A; zlabel('T(x,t)','FontName','times','FontSize',14);
Bc=(alfa/h^2)*B; set(gca,'FontSize',14,'FontName','Times');
117

k=63
118

k=630
119

Sistema LTI (Linear Time Invariant)


MIMO (multi-input-multi-output)

 t   ATt   But  AT t 
T

 t  Tt 
ut  But  T

Uso di Matrix Gain Integratore saturato

Alessandro Pisano - pisano@diee.unica.it


120

Un processo termico 2D a parametri distribuiti

Cilindro cavo.

Parti grigie in acciaio.


statore
Parte bianca: volume con vapore ad alta temperatura.

Parte nera: piccolo volume interno


r rotore
Coordinata
radiale

rmax

Es. Sezione di una turbina a vapore

Alessandro Pisano - pisano@diee.unica.it


121

Es. Sezione di una turbina a vapore

Alessandro Pisano - pisano@diee.unica.it


122

Ipotesi: simmetria angolare della distribuzione di temperatura

Si desidera calcolare la distribuzione di temperatura nel rotore (in uno dei suoi raggi)

T r , t  rmin  r  rmax
Mediante misure acquisite in una turbina in esercizio, si suppone nota la temperatura nella
“parte bianca” (regione del vapore in alta temperatura)

In una modellazione più dettagliata, si potrebbe essere interessati a valutare la distribuzione di


temperatura nella superficie delle pale di rotore, onde valutare gli stress termici sui materiali.

Problema complesso (anche nella formulazione semplificata sotto esame) perche il modello
matematico è una equazione alle derivate parziali (sistema a parametri distribuiti, sistema
infinito-dimensionale)
Alessandro Pisano - pisano@diee.unica.it
123

Eq. di diffusione (Equazione del calore) monodimensionale in coord.


cilindriche , con unica variabile spaziale la coordinata cilindrica radiale r

k
K è il coefficiente di diffusione [m2/s]
C p
Cp è la capacita termica a pressione costante per unita di massa [J/kg K]

k è la conduttività termica [J/K s m]

 è la densità [g /m3 ]
124

r  rmax
ri  rmin  i  h
i  0, 1, 2, ..., N  1
r  rmin rmax  rmin
h
N 1
r =0

Ti t   T ri , t 

Alessandro Pisano - pisano@diee.unica.it


125

Approssimazione delle derivate spaziali mediante differenze finite

 Ti 1 t   Ti t 
Ti t  
r h
2 Ti 1 t   2Ti t   Ti 1 t 
T t  
r 2
i
h2

Sistema di ODE

 1 Ti 1 t   Ti t  Ti 1 t   2Ti t   Ti 1 t 
Ti t   K 
  2 
 ri h h 
 1 1   2 1   i  1, 2, ..., N
 K  2  Ti 1 t    2  Ti t   2 Ti 1 t  
1
 h ri h  h ri h  h 
 h   h 

K

 1  
Ti 1 t   
 2  
Ti t   Ti 1 t 
h2  ri   ri  
Alessandro Pisano - pisano@diee.unica.it
126

Sistema di ODE

K  h   h 
T1 t   2 1  T2 t    2  T1 t   T0 t 
    
h  r1   r1  

K  h   h 
            
T2 t  2 1  T3 t   2  T2 t  T1 t 
h  r2   r2  

K     
TN t   2 1  TN 1 t    2  TN t   TN 1 t 
h h
h  rN   rN  

Tt   T1 t , T2 t , T3, ..., TN 2 , TN t 


T

T0 t  TN 1 t  Boundary conditions
 t   ATt   But 
T

ut   T0 t , TN 1 t 
T

Alessandro Pisano - pisano@diee.unica.it


127

 t   ATt   But 
T

  h h 

   2  
 1  0 0 0 0 
  r1 r1 
  h h 
 1  
 2  
 1  0 0 0  1 0 
  r2  r2  0 0 
  h   
K       0 
B  2    
A 2 0 1  2 0 K
h   r3  
 0 0 1   0  h 0 
 0 
 h 
 0 0 0   1   0 1  h
rN 1
   rN 
  h 
 0 0 0 0 1  
 2  
  rN 

T0  T1 0, T2 0, T3, ..., TN 2 , TN 1 0 Condizioni iniziali


T

Alessandro Pisano - pisano@diee.unica.it


128

Modello Simulink

FILES
TurbinaVapore01.mdl
T_centrorotore.mat
T_vapor.mat

Esportazione dati
verso il Workspace

Contenuto del Subsystem “Modello termico Rotore”

Due diverse modalità di specificare i


due segnali di input.

Linee spesse che rappresentano


segnali multidimensionali

Alessandro Pisano - pisano@diee.unica.it


129

Parametrizzazione del modello


Utilizziamo una mask

Alessandro Pisano - pisano@diee.unica.it


130

Costruzione della maschera di parametrizzazione

Alessandro Pisano - pisano@diee.unica.it


131

Calcolo delle Matrici A e B

Alessandro Pisano - pisano@diee.unica.it


132

Codice copiabile Matrici A e B (per n = 6)


ed seguibile

n=40;
r_min=0.05;
r_max=0.392;
rho=7900;
C=0.45;
k=73;
T_in=80;

h=(r_max-r_min)/n;
K=k/(rho*C*1e3)/h^2;

A=zeros(n,n);B=zeros(n,2);

for i=1:n,
A(i,i)=-(2+h/(r_min+i*h));
end
for j=1:n-1,
A(j,j+1)=1+h/(r_min+j*h);
A(j+1,j)=1;
end

B(1,1)=1;B(n,2)=1+h/r_max;
A=K*A; B=K*B;
133

Documentation - descrizione della MASK

Alessandro Pisano - pisano@diee.unica.it


134
Analisi dei risultati
Impostiamo preliminarmente due valori costanti per le temperature al contorno
30 
ut   T0 t , TN t     C
T

300
Profili temporali degli elementi del vettore T Uscita del blocco Scope “T”
135

Profilo di temperatura al nodo 40

Alessandro Pisano - pisano@diee.unica.it


136

Con dei profili differenti per le boundary conditions, l’evoluzione del profilo di temperatura è
differente.

Ora processiamo in Matlab i risultati della simulazione, creando dei grafici 3D.

r_min=0.05;
r_max=0.392;
n=40;

[X,Y] = meshgrid(linspace(r_min,r_max,n),tout);

h=mesh(X,Y,Trot)
title('Distribuzione temperatura rotore.')
xlabel('Coordinata radiale r [m]
','FontName','times','FontSize',14)
ylabel('Tempo [s]','FontName','times','FontSize',14)
zlabel('T(r,t)','FontName','times','FontSize',14)
set(gca,'FontSize',14,'FontName','Times')

Alessandro Pisano - pisano@diee.unica.it


137

Invertiamo la direzione dell’asse dei tempi


138

Completiamo questo esempio mostrando l’impiego, nella Mask, di variabili di configurazione


tipo “popup” o “checkbox” e un loro possibile impiego.

Si apportino le seguenti modifiche alla lista dei Parameters


139

Si apportino le seguenti modifiche alle istruzioni di Initialization


140

Si apportino le seguenti modifiche allo schema Simulink

Ora si esegua il modello con diverse scelte per le variabili pop up e checkbox, e si analizzino i
risultati.

FILES:
TurbinaVapore02.mdl
T_centrorotore.mat
T_vapor.mat

Alessandro Pisano - pisano@diee.unica.it


141

Anti-lock bracking system (ABS)

Simulazione di un sistema di frenatura con ABS Modello quarto di veicolo

I  T f  Rr Fps  = velocità ruota Rr = raggio ruota


I = inerzia ruota
m Fps = forza da interazione
v  Fps pneumatico/strada T f = coppia frenante
4

 s 
mg
Fps   s  1 s = scorrimento
4 v / Rr

 s 
mg
I  T f  Rr

4 Sistema dinamico NON LINEARE, del secondo ordine
 s 
m mg
v  
4 4
Caratteristica -s nota in forma tabellare

Alessandro Pisano - pisano@diee.unica.it


142

 s 
mg
I  T f  Rr Modello SIMULINK
4
 s 
m mg
v  
4 4

Lookup Table

Blocco Fcn per il calcolo dello scorrimento


clear all
g = 9.81;
v0 = 40; % velocita iniziale (m/s)
Rr = 0.6; % raggio Stop a veicolo fermo
m = 200; % massa
J = 5; % inerzia
% Curva mu-slip
slip = 0:.05:1.0;
mu = [0 .4 .8 .97 1.0 .98 .96 .94 .92 .9 .88 .855 .83 .81 .79 .77 .75 .73 .72 .71 .7];
143

Lookup Table (libreria Lookup Tables)

La caratteristica viene disegnata sulla


maschera del blocco

Blocco Stop Simulation


(libreria Sinks )
Interrompe la simulazione
Integratori saturati
quando il veicolo si ferma

Alessandro Pisano - pisano@diee.unica.it


144

Dettaglio sulla parte che


interrompe la simulazione

Alessandro Pisano - pisano@diee.unica.it


145

Integratori saturati

Soluzione semplificata per


interrompere la simulazione quando
il veicolo si ferma

Alessandro Pisano - pisano@diee.unica.it


146

Ora modelliamo l’ABS

La dinamica del sistema di frenatura idraulico è approssimata da un filtro del primo ordine
(dinamica cassetti distributori) e da un integratore saturato (pressurizzazione).
Il controllo è un relè (controllo bang-bang). L’apposito blocco Relay si trova nella libreria
Discontinuities

Kf = 3; %guadagno
PBmax = 1500; % saturazione
TB = 0.01; %costante di tempo

Alessandro Pisano - pisano@diee.unica.it


147
FILES:
Modello complessivo ABS_OpenClosedLoop.mdl
ABS_OpenClosedLoop_DATI.m

E’ stato aggiunto un blocco “Manual Switch” (libreria Signal Routing) per poter simulare una
frenatura non controllata (Tf=-1000).
Eseguiamo una simulazione, e visualizziamo i risultati nei blocchi Scope
Alessandro Pisano - pisano@diee.unica.it
148

Frenatura non controllata (ABS disattivato)

Il pneumatico si blocca dopo 1.5 secondi circa, mentre la marcia del veicolo
continua per altri 4 secondi.

Lo scorrimento diventa unitario quando il pneumatico si blocca


149

Frenatura con ABS attivato

Il pneumatico ora si blocca solo nell’ultima parte della frenata.

Il bloccaggio del pneumatico avviene quando ormai la velocita di marcia


del veicolo è prossima a zero, la marcia del veicolo si arresta infatti dopo
pochi decimi di secondo.

Lo scorrimento viene regolato attorno al set point desiderato 0.2.


diventando unitario solo a frenata ormai conclusa.

Nella prossima slide si confrontano due diversi test del sistema ABS con
una diversa velocita di marcia iniziale V0.

Alessandro Pisano - pisano@diee.unica.it


150

Con ABS Con ABS

v0 = 40 m/s v0 = 70 m/s
 145 km/h  250 km/h
151

Embedded Matlab Function block

Consideriamo nuovamente il sistema

Tp t 
termico del secondo ordine
temperatura della parete

qt  T f t  Te t 

T f t   qt   Tp t   T f t 
 1 Kip
Cf Cf

Tp t  
 K pe
Te t   Tp t  Tp t   Tf t 
Kip
Cp Cp

Alessandro Pisano - pisano@diee.unica.it


152

Realizziamo il modello SIMULINK in maniera differente, generando i segnali q e Te con dei


blocchi Signal Builder (libreria Sources) …..

FILE: termico_2dof_matfile_mask01_EMF.mdl

Alessandro Pisano - pisano@diee.unica.it


153

….. e realizzando le equazioni per mezzo di un blocco Embeddbed MATLAB Function (EMF)

Integratore
y = uscite “vettoriale”
u = ingressi (bidimensionale)
p = parametri
154

Il blocco Camera di Combustione conserva la medesima maschera della


implementazione precedente

Alessandro Pisano - pisano@diee.unica.it


155

Codice del blocco EMF

function ydot = fcn(y,u,p)

Cf=p(1);
Cp=p(2);
Kip=p(3);
Kpe=p(4);

q=u(1);
Te=u(2);

Tf=y(1);
Tp=y(2);

Tfdot=q/Cf+(Kip/Cf)*(Tp-Tf);
Tpdot=(Kpe/Cp)*(Te-Tp)-(Kip/Cp)*(Tp-Tf);
Variabili globali non concesse
ydot=[Tfdot Tpdot];
all’interno di blocchi EMF.

I parametri della mask non sono


Codice analogo a quello direttamente accessibili da parte
di un Function file della EMF

Alessandro Pisano - pisano@diee.unica.it


156

Parametrizzazione dei Signal Builder

Target

Alessandro Pisano - pisano@diee.unica.it


157

Zoom on T

Spostiamo verso sinistra


questa linea
(dopppio click su di essa)

Alessandro Pisano - pisano@diee.unica.it


158

Spostiamo verso destra


questa linea con modalità
analoghe

Spostiamo verso l’alto questa


linea con modalita analoghe

Alessandro Pisano - pisano@diee.unica.it


159

Profilo completo q(t) Profilo più complicato per q(t)

Proflo piu complicato per T(t)

Alessandro Pisano - pisano@diee.unica.it


160
Non serve piu un file script in abbinamento

Risultati della simulazione

Alessandro Pisano - pisano@diee.unica.it


161

Toolbox avanzati

SimMechanics

Modellazione di sistemi
meccanici multi-body

Alessandro Pisano - pisano@diee.unica.it


162

Modello VMRL 3D

Alessandro Pisano - pisano@diee.unica.it


163

Vista differente

Alessandro Pisano - pisano@diee.unica.it


164

Variare il controllo sul FUEL


(Subsystem Control)

Osservare la velocità dell’albero motore in RPM, e correlarne le variazioni ai


corrispondenti incrementi e decrementi del fuel rate

Alessandro Pisano - pisano@diee.unica.it


165

Toolbox avanzati

SimDriveline

Componenti e modelli
area automotive

Animazione 3D

Alessandro Pisano - pisano@diee.unica.it

Potrebbero piacerti anche