script e function -...
TRANSCRIPT
“Script” e “Function”
A=3;
B=2;
C=1;
D=-0.2;
x=[0:0.1:10];
y=A+B*x+C*x.^2+D*x.^3;
figure,plot(x,y)
y=fun01(x,A,B,C,D);
figure,plot(x,y)
function y=fun01(x,A,B,C,D);
y=A+B*x+C*x.^2+D*x.^3;
return
“Script” (MAIN file)
“Function” file
32 DxCxBxAy
Zero di funzione con MATLAB: fzero
OPTIONS = optimset('Display','iter','tolX',1.e-9);
[xz,yz]=fzero('fun02',X0,OPTIONS,A,B,C,D);
function y=fun02(x,A,B,C,D);
y=A+B*x+C*x.^2+D*x.^3;
return
32 DxCxBxAy
15.0
1
2
3
D
C
B
A
4 – Esercizi su ruote dentate
Esercizio B: traccia
Integrazione Equazioni Differenziali – “ode…”
Il generico solutore
ODExx di MATLAB
risolve problemi nella
forma:
Primo ordine:
),( ytFy
Secondo ordine:
possono essere ricondotte ad un sistema
di due equazioni del primo ordine:
2
1
yx
yx
xy
yxy
2
21
mfymkymcy
yy
/)/()/( 122
21
2yCyBAy
)(tfkxxcxm
m
kn
nm
c
2
mfyyy
yy
nn /2 1
2
22
21
Integrazione Equazioni Differenziali – “ode…”
A=5;
B=-2;
C=-3.5;
t0=0;
tF=2;
y0=0;
OPTIONS=[ ];
[t,y]=ode45('fun03',[t0 tF],y0,OPTIONS,A,B,C);
function yp=fun03(t,y,flag,A,B,C);
yp=A+B*y+C*y^2;
return
MAIN file
FUNCTION
file
MATLAB – ODE: Options
OPTIONS=[ ];
OPTIONS = odeset(‘OutputFcn’,’odeplot’);
OPTIONS = odeset('OutputFcn','odephas2');
OPTIONS = odeset('RelTol',1.e-6);
OPTIONS = odeset(‘AbsTol',1.e-9);
OPTIONS = odeset(‘Stats',’on’);
OPTIONS = odeset('Events','on');
[t,y]=ode45('function_name',t0,y0,OPTIONS,A,B,C,…);
OPTIONS odeset
opzioni di default
plot durante l’integrazione
grafica piano delle fasi
imposta toll. relativa
imposta toll. assoluta
indica il costo computaz.
abilita ricerca eventi
Sistema di Equazioni Differenziali
A1=…; B1=…;
A2=…; B2=…;
An=…; Bn=…;
t0=0; tF=2;
y0=[y01; y02; …; y0n];
OPTIONS=[ ];
[t,y]=ode45('fun04',[t0 tF],y0,OPTIONS,A1,B1,A2,B2,…,An,Bn);
function yp=fun04(t,y,flag,A1,B1,A2,B2, ,…,An,Bn);
yp=[A1+B1*y(1); A2+B2*y(2); …; An+Bn*y(n)];
return
MAIN file
FUNCTION
file
)(
...
)(
)(
)(
...
)(
)(
222
111
2
1
tyBA
tyBA
tyBA
ty
ty
ty
nnnn
Ricerca di EVENTI
A1=4 B1=-3
A2=5 B2=-2
A=2 B=-1
Fase di
strisciamento
OPTIONS=[ ];
[t,y]=ode45('fun04a',[t0 tF],y0,OPTIONS,A1,B1,A2,B2);
function yp=fun04a(t,y,flag,A1,B1,A2,B2);
yp=[A1+B1*y(1); A2+B2*y(2)];
return
A1=4 B1=-3
A2=5 B2=-2
Fase di
strisciamento
OPTIONS=odeset('Events','on');
[t,y,te,ye]=ode45('fun04b',[t0 tF],y0,OPTIONS,A1,B1,A2,B2);
function varargout=fun04b(t,y,flag,A1,B1,A2,B2);
switch flag
case ''
varargout{1} = f(t,y,A1,B1,A2,B2);
case 'events'
[varargout{1:3}] = events(t,y);
otherwise
error(['Error message'])
end
function yp = f(t,y,A1,B1,A2,B2);
yp=[A1+B1*y(1); A2+B2*y(2)];
function [value,isterminal,direction] = events(t,y)
% Locate the time when y passes through the "event"
value = y(1)-y(2); % event
isterminal = 0; % don't stop at the event
direction = 0; % don't care if increasing/decreasing
)()( 21 tyty
Evento:
Raggiungimento
del REGIME
OPTIONS=odeset('Events','on');
[t,y,tR,yR]=ode45('fun04c',[te tF],ye,OPTIONS,A,B,C);
function varargout=fun04c(t,y,flag,A,B,C);
switch flag
case ''
varargout{1} = f(t,y,A,B);
case 'events'
[varargout{1:3}] = events(t,y,C);
otherwise
error(['Error message'])
end
function yp = f(t,y,A,B);
yp=A+B*y;
function [value,isterminal,direction] = events(t,y,C)
% Locate the time when y passes through the "event"
value = y(1)-C; % event
isterminal = 0; % don't stop at the event
direction = 0; % don't care if increasing/decreasing
Evento:
( )y t C
Ricerca di EVENTI: risultati
te = 0.54
ye = 1.66
tR = 1.77
yR = 1.9C=(-A/B)*0.95
( )y t C)()( 21 tyty
Eventi:
A1=4 B1=-3
A2=5 B2=-2
A=2 B=-1
Sistema SDOF libero
Sistema sotto-smorzato
022
xxx nn
1 1 Sistema sovra-smorzato
2
1
yx
yx
),( ytFy
Sistema SDOF libero MATLAB
% Condizioni iniziali
x0=-1;
v0=0;
% Intervallo di
integrazione
t0=0;
tf=1;
function dydt = eq_lib01(t,y,flag,omn,zeta);
dydt = [y(2); -2*zeta*omn^2*y(1)];
return
% Parametri del sistema
omn=10*pi; % rad/s
zeta= 1.1;
% OPTIONS = odeset('OutputFcn','odeplot');
% OPTIONS = odeset('OutputFcn','odephas2');
OPTIONS = [ ];
[t,y]=ode45('eq_lib01',[t0 tf],[x0; v0],OPTIONS,omn,zeta);
Sistema SDOF con attrito Coulombiano
Equazione
differenziale non
lineare
mgkxxm
mgkxxm
0x
0x
)( 21
2
2
21
ysigngyy
yy
n
0)(2
gxsignxx n
Sistema SDOF con attrito Coulombiano MATLAB
% Condizioni iniziali
x0=1;
v0=0;
% Intervallo di
integrazione
t0=0;
tf=8;
function dydt = eq_attrito(t,y,flag,omn,Fatt);
dydt = [y(2); -omn^2*y(1)-Fatt*sign(y(2))];
return)( 21
2
2
21
ysigngyy
yy
n
% Parametri del sistema
omn=3*pi; % rad/s
% Parametri dell'attrito
mu=0.2;
g=9.81;
Fatt=mu*g;
% OPTIONS = odeset('OutputFcn','odeplot');
% OPTIONS = odeset('OutputFcn','odephas2');
OPTIONS = [ ];
[t,y]=ode45('eq_attrito',[t0 tf],[x0; v0],OPTIONS,omn,Fatt);
Sistema SDOF forzato
tm
Fxxx nn cos2 02
0X
2
n
1.0
)(tx
10n Hzfn 5
Sistema SDOF forzato
in RISONANZA0X
1.0
)(tx
10n Hzfn 5
0
)(tx
tm
Fxxx nn cos2 02
2
n
Sistema SDOF forzato:
BATTIMENTO
2n Hzfn 1
0 )(tx
tm
Fxx n cos02
n10
9
210
2
10
1 nn
202
t
MATLAB: Autovalori e Autovettori
>> help eig
EIG Eigenvalues and eigenvectors.
E = EIG(A) is a vector containing the eigenvalues
of a square matrix A.
[V,D] = EIG(A) produces a diagonal matrix D of
eigenvalues and a full matrix V whose columns are
the corresponding eigenvectors so that A*V = V*D.
[V,D] = EIG(K,M) produces a diagonal matrix D of
generalized eigenvalues and a full matrix V whose
columns are the corresponding eigenvectors so that
K*V = M*V*D.
Autovalori e Autovettori
[V,D] = EIG(A) A*V = V*D
[V,D] = EIG(K,M) K*V = M*V*D M-1*K*V = V*D
tieXtx )(}0{}]{[}]{[ xKxM
0][][][ 12 XKMI
0][][2 XKXM
0][][ XAIλ autovalori di [A]
{X} autovettori di [A]
][][][ 1 KMA
Autovalori e Autovettori
[V,D] = eig(inv(M)*K); autovettori con norma = 1
[V,D] = eig(M\K); autovettori con norma = 1
[V,D] = eig(K,M); autovettori normalizzati
rispetto alla matrice [M]
[V]T[M][V] = [I]
Come ordinarli e calcolare le frequenze [Hz]
[om2,ind] = sort(diag(D));
freq = sqrt(om2)/(2*pi);
V = V(:,ind);
][][][ 1 KMA
Normalizzazione Autovettori
Normalizzazione rispetto alla [M]
p = 1./sqrt(diag(V.'*M*V))
P = (p*ones(1,length(V))).’
V = V.*P
Prima componente = 1
p = V(1,:).’
P = (p*ones(1,length(V))).’
V = V./P
i
T
i
i
XMXp
}]{[}{
1
{ } [ ] { } 1T
i i i i iM p X M p X
Massima componente = 1
[p,ind] = max(abs(V))
ind = sub2ind(size(V),ind,[1:length(V)])
p = (sign(V(ind)).*p).’
P = (p*ones(1,length(V))).’
V = V./P
12 – Vibrazioni torsionali di un motore marino
13 – Modifiche strutturali
m
k
m
m
k
k
1
2
3
3
2
1
Autovalori e Autovettori: esercizio 1
21002
2
k
mHz
m
k
Hzm
k
531033
510
2
1
1
1
1
1
2
1
X
X
[V,D] = eig(M\K);
autovettori con norma = 1
[V,D] = eig(K,M);
autovettori normalizzati rispetto a [M]
[V]T[M][V] = [I]
Autovalori e Autovettori: esercizio 2
21002
2
k
m
6.2586
1.384
0
2
3
2
2
2
1
A*m
617.0
1
004.0
1
611.0
016.0
1
1
1
3
2
1
X
X
X9.2583
0.377
2
2
2
1
A*m
A=100
2.2584
7.377
0
2
3
2
2
2
1
618.0
1
000.0
1
617.0
002.0
1
1
1
3
2
1
X
X
X
618.0
1
1
618.0
2
1
X
X
A=1000
2 dofs
SIMULINK – Esempio 1
)()( tutx
SIMULINK – Esempio 2
)()(2)( tutxtx
SIMULINK – Es. 3
m
c
kF
x(t)
)()()()( tFtxktxctxm
)()()()( tFtxktxctxm
SIMULINK – Es. 4
K
CM
g
X0 X1
F K X X g X g
F K X X g X g
F X g
EL
EL
EL
( / ) /
( / ) /
/
1 0 1 0
1 0 1 0
1 0
2 2
2 2
0 2
X
X
X
)()( 01101111 XXCXXKXM
PARAMETRI
m1 = 1.5 kg k1 = 1.5 106 N/m
b = c/k = 10-4 s
Legge di moto cicloidale
Corsa 120 mm
Velocità = 240 rpm
Due condizioni:
g1 = 0
g1 = 0.02 mm
K
CM
g
X0 X1
File:
«LeggeEsempio09.mat» 0 100 200 300
[deg]
0
20
40
60
80
100
120
Legge di Moto X0 [mm]
SIMULINK – Es. 5
dt = 1/100;
time = [0:dt:1];
x = sin(2*pi*time);
A = [time; x].';
SIMULINK – Esempio 6
SIMULINK – Esempio 7
SIMULINK – Es. 8
SIMULINK – Es. 9
M X K X X C X X K X X C X X
M X K X X C X X
1 1 1 1 0 1 1 0 2 2 1 2 2 1
2 2 2 2 1 2 2 1
( ) ( ) ( ) ( )
( ) ( )
PARAMETRI
m1 = 1.5 kg k1 = 1.5 106 N/m
m2 = 1 kg k2 = 1.8 106 N/m
q = c/k = 10-4 s
f1 = 114 Hz f2 = 297 Hz
Legge di moto cicloidale
(file «LeggeEsempio09.mat»)
Corsa 120 mm
Velocità = 240 rpm
Due condizioni:
g1 = g2 = 0
g1 = g2 = 0.02 mm
0 100 200 300
[deg]
0
20
40
60
80
100
120
Legge di Moto X0 [mm]
Legge di moto
SPOSTAMENTO ACCELERAZIONE
0 100 200 300
[deg]
-0.06
-0.04
-0.02
0
0.02
0.04
0.06Accelerazione Teorica [mm/deg
2]
0 100 200 300
[deg]
0
20
40
60
80
100
120
Legge di Moto X0 [mm]
Legge di moto cicloidale
file «LeggeEsempio09.mat»
Equazioni del moto
M X K X X C X X K X X C X X
M X K X X C X X
1 1 1 1 0 1 1 0 2 2 1 2 2 1
2 2 2 2 1 2 2 1
( ) ( ) ( ) ( )
( ) ( )
Modello SIMULINK
Blocco LEGGE di MOTO
File:
«LeggeEsempio09.mat»
Blocco «Fev»
Blocco «Massa»
Simulazione: Accelerazione massa m2
g1 = g2 = 0 g1 = g2 = 0.02 mm
Esempio 11/1 Modello di un azionamento con
controllo di posizione e velocità
Esempio di modello di una trasmissione meccanica
e del relativo azionamento.
L’azionamento è costituito da un motore elettrico a
corrente continua con controllo in loop di corrente.
Il motore applica una coppia motrice ad un
mandrino che, a sua volta, trasmette il moto ad una
pinza terminale attraverso un albero intermedio.
Esempio 11/2 Il moto viene controllato in posizione
ed in velocità confrontando le letture di
posizione e velocità fornite da due
encoder montati in prossimità del
mandrino.
Esempio 11/3
Legge di moto
Regolatore di
posizione
Regolatore di
velocità.
Esempio 11/4 Modello motore elettrico
a corrente continua
Forza
contro-
elettromotrice
Equazione circuito di armatura
(tensione di armatura)
Coppia motrice
Kc costante di coppia, Kb costante di velocità
Esempio 11/5 Modello meccanico
– Il modello meccanico ha tre gradi di libertà
– La prima coordinata è associata all’inerzia del motore elettrico
– La seconda è associata al mandrino (e quindi agli encoder)
– La terza è associata alla pinza
23223233 ckJ
mmmmm ckCJ 2121
232232212122 ckckJ mm
mmmmm ckCJ 2121
232232212122 ckckJ mm
23223233 ckJ
Dati del motore elettrico
L = 0.003 [Vs/A] R = 0.4 [Ohm]
Kc = 5 [Nm/A] Kb = 5 [Vs/rad] Jm = 0.6 [kgm2 ]
Parametri dei controllori ad azione Proporzionale – Integrale
Anello di corrente Anello di velocità Anello di posizione
Kpc = 8 [V/A] Kpv = 95 [Nm/(rad/s)] Kpp = 72 [1/s]
Tic = 0.002 [s] Tiv = 0.1 [s] Tip = 1000 [s]
(di fatto è ad azione Proporzionale)
Parametri del modello meccanico
J2 = 0.085 kgm2 J3 = 0.085 kgm2
k1 = 1.15 106 Nm/rad k2 = 1.15 105 Nm/rad Velocita‘ di rotazione = 20 rpm
q = 10–5 s
c1 = q k1 c2 = q k2
sTKsG
i
p
11)(
Esempio 11/6 Modello dell’intero azionamento
Dati numerici
Dati del motore elettrico
L = 0.003 [Vs/A] R = 0.4 [Ohm] Jm = 0.6 [kgm2 ]
Kc = 5 [Nm/A] Kb = 5 [Vs/rad]
Parametri dei controllori ad azione Proporzionale – Integrale
Anello di corrente Anello di velocità Anello di posizione
Kpc = 8 [V/A] Kpv = 95 [Nm/(rad/s)] Kpp = 72 [1/s]
Tic = 0.002 [s] Tiv = 0.1 [s] Tip = 1000 [s]
(di fatto è ad azione Proporzionale)
Parametri del modello meccanico
J2 = 0.085 kgm2 J3 = 0.085 kgm2
k1 = 1.15 106 Nm/rad k2 = 1.15 105 Nm/rad
q = 10–5 s
c1 = q k1 c2 = q k2
Velocità di rotazione = 20 rpm
Esempio 11/7
sTKsG
i
p
11)(
Esempio 11/8
0 100 200 3000
10
20
30
40
50Legge teorica - spostamento [deg]
[deg]
0 100 200 300-50
0
50Legge teorica - velocita' [deg/s]
[deg]
0 100 200 300-0.5
0
0.5Legge teorica - velocita' [rad/rad]
[deg]
)(')()(
)(
s
dt
d
d
sd
dt
tsdts
)(ts
)(' s
Velocità di rotazione = 20 rpm
Es. 11/9
0 100 200 3000
10
20
30
40
50Legge teorica - spostamento [deg]
[deg]0 100 200 300
-50
0
50Legge teorica - velocita' [deg/s]
[deg]
0 100 200 300-4
-3
-2
-1
0
1
2
3
4x 10
-5 Errore meccanico X2-X1 [deg]
[deg]0 100 200 300
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2x 10
-4 Errore meccanico X3-X2 [deg]
[deg]
Es. 11/10 Il regolatore di posizione è ad azione proporzionale.
Ne consegue un moto effettivo ritardato rispetto a quello
imposto.
Sarebbe improprio considerare come errore la semplice
differenza tra la coordinata 2 e il moto imposto.
E’ più opportuno considerare l’errore a meno del ritardo.
0 100 200 300
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
Errore del controllo X2-Xrif [deg]
[deg]0 100 200 300
-0.02
-0.015
-0.01
-0.005
0
0.005
0.01
0.015
0.02Errore del controllo X2-Xrif senza ritardo [deg]
[deg]