Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SimulinkFeb 2011 PDF
SimulinkFeb 2011 PDF
MATLAB-SIMULINK
Simulink
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
Editor M-files
Avvio SIMULINK
Cartella corrente
Avvio SIMULINK
New
Librerie principali
Libreria “Sinks”
Libreria “Sources”
Pagina di lavoro
10
3 fasi
Sono sufficienti due blocchi elementari: un blocco che generi il segnale desiderato, ed un
blocco che ne permetta la visualizzazione.
Si deve ora collegare l’uscita del generatore di funzione “Sine Wave” con
l’ingresso del blocco di visualizzazione “Scope”.
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.
Ampiezza
Bias
Frequenza
Sfasamento
cliccando sul pulsante nella barra dei menu della finestra Scope
Grafico “spigoloso”
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.
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,.
Scegliamo +++
L’aspetto del blocco diventa
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;
Libreria “Continuous”
Libreria “Discontinuities”
Libreria “Discrete”
29
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.
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
Filtro passabasso
Consideriamo un filtro passa-basso RC
+
Vin Vout
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)
Vout s
RC Vout 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
sim('filtropassabasso');
y1=vout;
figure(1)
IMP. Utilizzo della funzione sim(‘model’)
plot(tout,vout)
sim('filtropassabasso');
y2=vout;
figure(2)
plot(tout,vout)
figure(3)
plot(tout,y1,tout,y2)
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
bode(F),grid;
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 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
ZOOM
48
function spettro(t,x,n)
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
Vin Vout
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
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)
[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])
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
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])
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
Filtraggio digitale
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 m0
a1 e Ts / b0 1 e Ts /
Schema SIMULINK
A1=1;
omega1=2*(2*pi);
Tc=0.01;
tau=0.1;
a1=exp(-Tc/tau)
b0=1-exp(-Tc/tau)
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
qt 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.
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.
Tf t qt ie Te t ie Ti t
1
Cf
K
Cf
K
Cf
1
Cf
qt 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
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.
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
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
Si desidera anche modificare il profilo di q(t) Si può utilizzare il blocco Step, libreria Sources.
q(t)
q
t
100
T f s qt 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
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
[b1 b0 ]
u t T t
a2 a1 a0
71
Obbiettivi aggiuntivi
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
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).
qt T f t Te t
T f t qt Tp t T f t
1 Kip
Cf Cf
Tp 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
Il segnale q(t) sia disponibile nella forma di un file dati di tipo ASCII
File “dati_problema.dat”
Per importare il segnale si può utilizzare il blocco Simulink “From File”, dalla libreria Sources
Schema Simulink
Creazione di sottosistemi
qt 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.
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
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
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
Creazione di MASK
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.
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.
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
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
Esercizio
.
91
92
X0=0.1;
Y0=0.1;
A=1;
B=1;
C=5;
D=1;
93
x
x0 xL
T x, t 2T x, t
C p k k 2
T x, t
t x 2
T x, t 2T x, t
C p k k 2
T x, t
t x 2
Valori per il ferro puro (rif. Schaum Trasmissione del calore, Tabella B-1 pag. 306)
T x, t 2T x, t
PDE
t x 2
95
T x, t T x 2T x
0
x 2
T T
Soluzione in forma chiusa T x T0 L 0 x
L
h h h h h h L/5
x
x0 x x1 x x2 x x3 x x4 xL
4 “NODI SOLUZIONE”
96
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
2T1 T2 T0
T1 2T2 T3 0
T2 2T3 T4 0
T3 2T4 TL
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
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
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
b=zeros(N,1);
b(1)=-T0;
b(N)=-TL;
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
Poiché la sbarra è termicamente isolata si avrà che il flusso termico nei bordo
destro è pari a zero
T x 0
x x L
0
T T
T x T x 4 3
2 x x h T3 T4
T x
xL 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
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
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
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.
h h h h h h L/5
x
x0 x x1 x x2 x x3 x x4 xL
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.
Tt T1 t , T2 t , T3 t , T4 t
T
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
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
T1 t 2 T2 t 2T1 t T0 t
h
T2 t 2 T3 t 2T2 t T1 t
h
T3 t 2 T4 t 2T3 t T2 t
h
T4 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)
T1 t 2 2T1 t T2 t 2 T0 t
h h
T2 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 ATt But
T 2 1 0 0 1 0
1 2 1 0 0
0
Tt T1 t , T2 t , T3 t , T4 t
T
A 2 B 2
h 0 1 2 1 h 0 0
ut T0 t , TN 1 t
T
0 0 1 2 0 1
109
Devono essere note le temperature nei nodi soluzione all’istante iniziale t=0, cioè il vettore
costante
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
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);
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 ATt But
T 2 1 0 0 1 0
1 2 1 0 0
0
Tt T1 t , T2 t , T3 t , T4 t
T
A 2 B 2
h 0 1 2 1 h 0 0
ut T0 t , 0
T
0 0 1 1 0 1
t ATt But
T 2 1 0 0 1
1 2 1 0 0
Tt T1 t , T2 t , T3 t , T4 t A 2 B 2
T
h 0 1 2 1 h 0
ut T0 t
0 0 1 1 0
116
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)];
k=63
118
k=630
119
t ATt But AT t
T
t Tt
ut But T
Cilindro cavo.
rmax
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)
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
k
K è il coefficiente di diffusione [m2/s]
C p
Cp è la capacita termica a pressione costante per unita di massa [J/kg K]
è 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
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
TN t 2 1 TN 1 t 2 TN t TN 1 t
h h
h rN rN
T0 t TN 1 t Boundary conditions
t ATt But
T
ut T0 t , TN 1 t
T
t ATt But
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
Modello Simulink
FILES
TurbinaVapore01.mdl
T_centrorotore.mat
T_vapor.mat
Esportazione dati
verso il Workspace
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
300
Profili temporali degli elementi del vettore T Uscita del blocco Scope “T”
135
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')
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
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
s
mg
I T f Rr Modello SIMULINK
4
s
m mg
v
4 4
Lookup Table
Integratori saturati
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
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
Il pneumatico si blocca dopo 1.5 secondi circa, mentre la marcia del veicolo
continua per altri 4 secondi.
Nella prossima slide si confrontano due diversi test del sistema ABS con
una diversa velocita di marcia iniziale V0.
v0 = 40 m/s v0 = 70 m/s
145 km/h 250 km/h
151
Tp t
termico del secondo ordine
temperatura della parete
qt T f t Te t
T f t qt Tp t T f t
1 Kip
Cf Cf
Tp t
K pe
Te t Tp t Tp t Tf t
Kip
Cp Cp
FILE: termico_2dof_matfile_mask01_EMF.mdl
….. e realizzando le equazioni per mezzo di un blocco Embeddbed MATLAB Function (EMF)
Integratore
y = uscite “vettoriale”
u = ingressi (bidimensionale)
p = parametri
154
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.
Target
Zoom on T
Toolbox avanzati
SimMechanics
Modellazione di sistemi
meccanici multi-body
Modello VMRL 3D
Vista differente
Toolbox avanzati
SimDriveline
Componenti e modelli
area automotive
Animazione 3D