Sunteți pe pagina 1din 43

UNIVERSIDAD NACIONAL DE SAN

AGUSTIN
ESCUELA PROFESIONAL DE INGENIERIA
ELECTRONICA

S I S TEM A S DE C ONTRO L
RO BU S TO Y
A DA PTATI VO

DESARROLLO:
JULIO A. MOSAJA
AR EQUI PA, 02 DE AGOST O DEL 2012

L A B O R A TO R I O D E S I S T E M A S D E C O N T ROL AVA N Z A D O

SCRIPTFILTROS.3
%% Ejemplo de uso de identificacin estado
% Caso SISO
N= 1000; u= randn(N,1); noise= 0.1*randn(N,1);
y= filter([0,.1], [1,-0.9], u);%+ noise;
[A1,B1,C1,D1]= ssident(y,u,3)
P1= ss(A1, B1, C1, D1, 1);
yhat= lsim(P1,u);
figure; plot([y,yhat]);
Valores singulares:11.0231
Dimension de X:2
A1 =
0.4972
0.4475
0.4475
0.4028
B1 =
0.1000
0.0900
C1 =
0.5525
0.4972
D1 =
3.9458e-17

1.06061e-14

6.77544e-15

0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

100

200

300

400

500

600

700

% Caso MIMO
a=[0.8,0;0,0.9]; b=[0.1,0;0,0.1]; c=[1,1]; d=0;
P= ss(a,b,c,d,1);

800

900

1000

u= randn(N,2); y= lsim(P,u); %+ noise;


[A2,B2,C2,D2]= ssident(y,u,3)
P2= ss(A2,B2,C2,D2,1);
yhat= lsim(P2,u);
figure; plot([y,yhat]);
Valores singulares:13.5446
Dimension de X:3

0.582672

1.993e-14

A2 =
0.2777
0.3444
-0.1633
0.3856
-0.4776
0.4076
B2 =
0.1000
0.1000
0.0800
0.0900
0.0640
0.0810
C2 =
0.8824
0.2777
D2 =
1.0e-15 *
0.0233
-0.1712

0.3856
0.7732
1.0367

-0.1633

0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

100

200

300

400

500

600

700

800

900

%% Identificacin estado Ljung


% Caso MIMO
a=[0.8,0;0,0.9]; b=[0.1,0;0,0.1]; c=[1,1]; d=0;
P= ss(a,b,c,d,1); u= randn(N,2); y= lsim(P,u);%+ noise;
ord= 1:5; % Para analizar el mejor orden
mod= n4sid(iddata(y,u,1), ord) % pem()
yhat= sim(mod, u);
figure; plot([y, yhat]);

1000

Select model order in Command Window.


5
Red: Default Choice (2)
0

Log of Singular values

-5
-10
-15
-20
-25
-30
-35
0.5

1.5

2.5
3
3.5
Model order

4.5

5.5

Select model order ('Return' gives default): 1


mod =
Discrete-time state-space model:
x(t+Ts) = A x(t) + B u(t) + K e(t)
y(t) = C x(t) + D u(t) + e(t)
A =
x1
x1 0.7906
B =
u1
u2
x1 -0.02095 -0.02581
C =
x1
y1 -4.78
D =
u1 u2
y1
0
0
K =
y1
x1 -0.002637
Sample time: 1 seconds
Parameterization:
FREE form (all coefficients in A, B, C free).
Feedthrough: none
Disturbance component: estimate
Number of free coefficients: 5
Use "idssdata", "getpvec", "getcov" for parameters and their
uncertainties.
Status:
Estimated using N4SID on time domain data.
Fit to estimation data: 71.17% (prediction focus)
FPE: 0.005703, MSE: 0.005624

1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8

100

200

300

400

500

600

%% Simulacin planta masa-muelle


% Parmetros de la planta masa-muelle
Kv= 2; K1= 150; K2= 300; K3= 300; C3= 4;
m1= 0.5; m2= 0.5; m3= 0.5;
% Entrada en planta oscilaciones variables
N= 1e4; T=0.01; t= (0:T:100)';
u= 10*sin((2+15*t/50).*t);
% Salida de la planta (simulink)
[t,x,y]= sim('massspring',t,[],[t,u]);
figure; plot(t, y);

700

800

900

1000

0.4

0.3

0.2

0.1

-0.1

-0.2

-0.3

-0.4

10

20

30

40

50

60

70

80

90

100

%% Modelo de estado con coeficientes fijos


% Modelo continuo
m = idss([0 1;0 -1], [0;0.25], eye(2), ...
[0;0], zeros(2,2), [0;0], 'Ts', 0);
m.As = [0 1; 0 NaN]; m.Bs = [0; NaN];
m.Cs = m.C; m.Ds = m.D;
m.Ks = m.K; m.X0s = [NaN;0];
%% Modelo de caja gris masa muelle
% Parmetros iniciales y auxiliares
par= [2,100,250,250,4]; aux=[];
% Modelo continuo
mod= idgrey('ModMassSpring',par,'c',aux);
%% Identificacin modelo caja gris masa muelle
% Datos en tiempo y frecuencia
data= iddata(y,u,T); fdata= fft(data);
% Modelos identificados de caja gris
mod1= pem(data, mod); mod2= pem(fdata, mod);
%%
%% Librera control
s= tf('s');
P1= 1/(s+1)/(s+2); P2= 1/(s^2+s+1);
Pser= P1*P2; % Planta en serie
Ppar= P1+P2; % Planta en paralelo.
%% Operaciones librera
pzmap(Pser); % Polos y ceros del sistema
impulse(Pser); % Respuesta a entrada impulso (f. pond)
step(Pser); % Respuesta a entrada escaln
t= linspace(0,10,100)'; u= sin(3*t);
y= lsim(Pser,u,t); % Simulacin de una entrada u(t) y la guarda en y

figure; plot(y);
bode(Pser); % Diagrama de Bode
nyquist(Pser); % Diagrama de Nyquist

Pole-Zero Map

Impulse Response

0.2

0.8
0.15

0.4
0.2

0.1

Amplitude

Imaginary Axis (seconds-1)

0.6

0
-0.2

0.05

-0.4
-0.6

-0.8
-1
-2.5

-2

-1.5

-1

-0.5

-0.05

Real Axis (seconds -1)

10

12

14

Time (seconds)

Step Response
0.7

0.08
0.07

0.6

0.06
0.5

Amplitude

0.05
0.04

0.4

0.03
0.3

0.02
0.01

0.2

0
0.1

-0.01
0

10

12

-0.02

14

10

20

30

40

50

60

70

80

90

100

Time (seconds)

Nyquist Diagram

Bode Diagram

0.5

0.3
-100

0.2

-150

Imaginary Axis

Magnitude (dB)

0.4
-50

-200
0

Phase (deg)

-90

0.1
0
-0.1
-0.2

-180

-0.3

-270

-0.4

-360
-1

10

10

10

10

-0.5
-1

-0.5

0
Real Axis

Frequency (rad/s)

%% Paso a discreto
s= tf('s');
P= 6/(s+1)/(s+3); T=0.1; % Periodo de muestreo
Pz1= c2d(P,T,'zoh'); % Por residuos
Pz2= c2d(P,T,'tustin'); % Por Tustin
Pz3= c2d(P,T,'matched'); % Polos ceros y gananias
%% Simulacin en discreto
% u -->[P]--> y, ante una entrada escaln u= 1
a1=-1.7; a2= 0.74; b1= 0.09; b0= 0.081
y1=0; y2=0; u1=0 % Valor inicial de las variables
u= 1; % Entrada escaln
for k=1:100,
y(k)= -a1*y1- a2*y2 + b0*u + b1*u1;
% Valores para el siguiente salto:
y2= y1; y1= y(k); u1= u;
end

0.5

figure; plot(y)
4.5
4
3.5
3
2.5
2
1.5
1
0.5
0

10

20

30

40

50

60

70

%% Desarrollo de la simulacin en discreto, matlab


u= ones(100,1);
y1= filter([b0,b1],[1,a1,a2],u); % en z^{-1}
P= tf([b0,b1,0],[1,a1,a2],1); % en z
y2= lsim(P,u);
figure; plot([y1,y2])
Presentan la misma figura(anterior).
%% Convolucin y deconvolucin
u= ones(100,1); num= [1,-.8]; den= [1,-0.9];
y= filter(num, den, u); % en z^{-1}
uhat= deconv(conv(y, den), num);
yhat= deconv(conv(num, u), den);
%% Simulacin en lazo cerrado
% r -->o-e->[K]-u->[sat]-u->[P]-+-> y
%
|
|
%
+------------------------+
% Entrada referencia escaln
y1=0; y2=0; u1=0 % Valor inicial de las variables
r= 1; % Entrada escaln
sat= 10 % Mximo absoluto de entrada
K=0.1; % Ganancia del controlador
for k=1:100,
e= r- y1; u= K*e;
if abs(u)>sat, u= sign(u)*sat; end
y(k)= -a1*y1 - a2*y2 + b0*u + b1*u1;
% Valores para el siguiente salto:

80

90

100

y2= y1; y1= y(k); u1= u;


end
figure; plot(y)

0.35

0.3

0.25

0.2

0.15

0.1

0.05

10

20

30

40

50

%% Desarrollo con control toolbox


r= ones(100,1) % referencia
K= 1; % controlador
T= feedback(P*K,1);
% T= P*K/(1+K*P);
T= minreal(T); % Realizacin mnima
y= lsim(T,r);
%% Variable de estado. Definicin.
a=[0,0;1,1]; b=[0;1]; c=[1,0]; d=[0];
Pss= ss(a,b,c,d);
Pssz= c2d(Pss,0.1);
[a,b,c,d]= ssdata(Pss);
%% Paso a funcin de transferencia
Ptf= tf(Pss);
figure; pzmap(Ptf)
%% Realizacin mnima
s= tf('s');
P= (s+1)/(s+1)/(s+2);
Pss= ss(P)
Pmin= minreal(Pss)

60

70

80

90

100

Pss =
a =
x1
x2
b =
x1
x2

x1
-3
1

x2
-2
0

u1
2
0

c =
y1
d =
y1

x1
0.5

x2
0.5

u1
0

Continuous-time state-space model.


1 state removed.
Pmin =
a =
x1
x1 -2
b =
u1
x1 1.414
c =
x1
y1 0.7071
d =
u1
y1
0
Continuous-time state-space model.
%%
% Correlacin
[coef, lag]= xcorr(y,u,30);
figure; plot(lag, coef);

10

0.08
0.07
0.06
0.05
0.04
0.03
0.02
0.01
0
-30

-20

-10

%% Desarrollo con ident toolbox


N= 100; u= idinput(1000)
y= filter([0,0.1], [1,-0.9], u);
data= iddata(y,u);
figure; impulse(data)
figure; step(data)
% usan la antigua funcin cra
figure; plot(cra(data))

11

10

20

30

Impulse Response
From: u1 To: y1
0.12

0.1

Amplitude

0.08

0.06

0.04

0.02

-0.02

-10

10

20

30

40

50

60

70

80

Time (seconds)

Step Response
From: u1 To: y1
1

0.8

Amplitude

0.6

0.4

0.2

-0.2

-10

10

20
Time (seconds)

12

30

40

50

60

0.12

0.1

0.08

0.06

0.04

0.02

10

15

%% Funcin ponderatriz en frecuencia


N= 10000; u= rand(N,1)-0.5;
y= filter([0,0.1],[1,-0.9],u);
[Ryu,lag]= xcorr(y,u,40);
figure; plot(lag, Ryu);
Syu= abs(fft(Ryu));
figure; plot(fftshift(Syu))

13

20

25

90
80
70
60
50
40
30
20
10
0
-10
-40

-30

-20

-10

10

20

30

40

700

600

500

400

300

200

100

10

20

30

40

50

%% Desarrollo en matlab ident toolbox


data= iddata(y,u);
fr= fft(data);
figure; plot(fr)

14

60

70

80

90

% Objeto tipo idfdr


p= spafdr(data);
% Antigua funcin spa
figure; plot(p);
figure; bode(p);
y1
0.8
0.6
0.4
0.2
0

0.5

1.5
2
frequency (rad/TimeUnit)
u1

2.5

3.5

0.5

1.5
2
frequency (rad/TimeUnit)

2.5

3.5

0.5

Bode Diagram
From: u1 To: y1
0

Magnitude (dB)

-5
-10
-15
-20
-25
-30
0

Phase (deg)

-45
-90
-135
-180
0.1

0.2

0.3

0.4

0.5

0.6

Frequency (Hz)

15

0.7

0.8

0.9

Bode Diagram
From: u1 To: y1
0

Magnitude (dB)

-5
-10
-15
-20
-25
-30
0

Phase (deg)

-45
-90
-135
-180
-4

10

-3

10

-2

-1

10

10

Frequency (rad/s)

% Programa para identificacin por mnimos cuadrado


% Planta discreta sin retraso en z^(-1):
N= 100;
u= rand(N,1)-0.5; noise= (rand(N,1)- 0.5)*0.1;
num= [1];
den= conv([1,-0.8],[1,-0.9]);% [1,-1.7,0.72]
y= filter(num, den, u)+ noise;
% Modelo: y(k)= -a1y(k-1)-a2y(k-2)+ b0u(k);
% Regresor y salida:
Y= y(3:end);
X=[y(2:end-1), y(1:end-2), u(1:end-2)];
theta= inv(X'*X)*X'*Y; % theta= X\Y;
yhat= X*theta;
figure; plot([y(3:end), yhat]);
denhat= [1,-theta(1:2)'];
numhat= theta(3);
P= filt(num,den,1)
Phat= tf(numhat,denhat,1)
roots([1,-theta(1:2)'])

16

10

10

-1

-2

-3
0

10

20

30

40

50

60

70

80

90

100

P =
1
-----------------------1 - 1.7 z^-1 + 0.72 z^-2
Sample time: 1 seconds
Discrete-time transfer function.
Phat =
0.001965
--------------------z^2 - 1.62 z + 0.6529
Sample time: 1 seconds
Discrete-time transfer function.
ans =
0.8636
0.7560
% Programa para identificacin por mnimos cuadrado
% Planta, entrada aleatoria y ruido:
s= tf('s'); P= 20/(s+1)/(s+2);
T= 0.1; t= 0:T:100; N= length(t);N1= floor(N/2);
% Entrada parte aleatorio y parte constante.
%u= [rand(N1,1)-0.5; ones(N-N1,1)]; noise= (rand(N,1)- 0.5)*0.05;
u= [rand(N,1)-0.5]
y= lsim(P, u, t); %+ noise;
figure; plot(t,[u,y]);
% Modelo: y(k)= -a1y(k-1)- a2y(k-2)+ b0u(k);
%Y= y(3:end); X=[y(2:end-1), y(1:end-2), u(3:end)];
Y= y(3:end); X=[y(2:end-1), y(1:end-2), ...

17

u(2:end-1), u(1:end-2)];
theta= inv(X'*X)*X'*Y; % theta= X\Y;
yhat= X*theta;
%Planta en z (no en z^(-1))
num= [0,theta(3),theta(4)]; den= [1,-theta(1),-theta(2)];
Pz= tf(num, den, T); Ps= zpk(d2c(Pz));
1.5

0.5

-0.5

-1

-1.5

10

20

30

40

50

60

70

80

90

%%
N= 1000; u= sign(randn(N,1)); e= randn(N,1)*0.1;
y= filter([0,0.1],[1,-0.9],u)+ ...
filter([1,-0.7],1,e);
Y= y(2:end); X= [y(1:end-1),u(1:end-1)];
theta= X\Y
yf= filter(ones(5,1)/5, 1, y);
uf= filter(ones(5,1)/5, 1, u);
Yf= yf(2:end); Xf= [yf(1:end-1), uf(1:end-1)];
thetaf= Xf\Yf
%%
N= 1000; u= sign(randn(N,1)); e= randn(N,1)*0.2;
y= filter([0,0.1], [1,-0.9], u)+ filter([1,0.7], 1, e);
Y= y(2:end); X= [y(1:end-1), u(1:end-1)];
theta= X\Y
% Variable instrumental
z= filter([0,theta(2)], [1,-theta(1)], u);
Z= [z(1:end-1), u(1:end-1)];
thetac= (Z'*X)\Z'*Y
%%
data= iddata(y,u,0.1);
mod= arx(data,[2,2,1]);

18

100

mod= pem(data,[2,2,1]);

% polos, ceros y ganancia en continuo


P= d2c(zpk(mod))
% dos funciones la entrada-salida y error-salida
figure; step(P)
K= dcgain(P)
NN= struc([2:4],[1:4],[0:5])
V= arxstruc(data(1:floor(end/2)), ...
data(floor(end/2):end), NN);
NNopt= selstruc(V,0);

%%
mod= iv4(data, [2,2,1]);
% polos, ceros y ganancia en continuo
P= d2c(zpk(mod))
% dos funciones la entrada-salida y error-salida
figure; step(P)
K= dcgain(P)
%%
% Prueba librera ARX
s= tf('s'); P= 2/(s+1)/(s+2);
t= (0:0.1:100)'; u= rand(size(t))-0.5;
y= lsim(P,u,t);
[b,a]= ARXm(y,u,[2,2,1]);
Phat= zpk(d2c(tf(b,a,0.1)))

P =
From input "u1" to output "y1":
1.0969 (s+2.003)
---------------------(s^2 + 3.257s + 2.672)
Continuous-time zero/pole/gain model.
K =
0.8221
Phat =
9.7403e-05 (s+2.04e04)
---------------------(s+1.975) (s+1.013)
Continuous-time zero/pole/gain model.

19

Step Response
From: u1 To: y1
0.9
0.8
0.7

Amplitude

0.6
0.5
0.4
0.3
0.2
0.1
0

0.5

1.5

2.5

3.5

4.5

Time (seconds)

CONTROL ROBUSTO
% ejem7_1.m CALCULO DE p(s) Y DE SUS MODELOS NOMINALES pn(s) Y pn(z)
clear all
% PARAMETROS DEL PROCESO NO LINEAL
Lo = 0.776;
JL = 3.5e-7; bL = 1e-5; Ro = 0.01;
Jm = 1.9062e-6; bm = 1.8338e-6; g = 9.81;
E = 31.0352e-3; R = 7.38; m = 0.06377;
Kact = 14.9; cc = 0.25; % Mo = 0,0.01,0.02,0.045;
K = 31.071e-3; n = 19.741; L = 4.64e-3;
B = n^2*bm +bL; Jeff = n^2*Jm +JL;
% PROCESO p(s) (EL SUBINDICE p SIGNIFICA PROCESO)
Mo = 0.045;
M = Jeff + (1/3)*m*Lo^2 + Mo*Lo^2 + (2/5)*Mo*Ro^2;
N = g*Lo*(Mo+m/2);
Ap = [0 1;-N/M -(B + n^2*K*E/R)/M];
Bp = [0;n*K*Kact/(R*M)];
Cp = [1 0]; Dp = [0];
[nump,denp]=ss2tf(Ap,Bp,Cp,Dp);
% nump(s)/denp(s) = p(s) = Kp/(s^2 + ap*s + bp)
Kp = nump(3); ap = denp(2); bp = denp(3);
% MODELO NOMINAL pn(s) (EL SUBINDICE n SIGNIFICA NOMINAL)
Mo=0.0;
M = Jeff + (1/3)*m*Lo^2 + Mo*Lo^2 + (2/5)*Mo*Ro^2;
N = g*Lo*(Mo+m/2);
An = [0 1;-N/M -(B + n^2*K*E/R)/M];
Bn = [0;n*K*Kact/(R*M)];

20

Cn = [1 0]; Dn = [0];
[numn,denn] = ss2tf(An,Bn,Cn,Dn);
% numn(s)/denn(s) = pn(s) = Kn/(s^2 + an*s + bn)
Kn = numn(3); an = denn(2); bn = denn(3);
% [Kp ap bp] = [30.4696 1.2707 14.4007]
% [Kn an bn] = [91.4375 3.8133 17.9220]
% MODELO NOMINAL DISCRETO pnz(z)
T = 0.05;
[numd,dend] = c2dm(numn,denn,T,'zoh');
% numd(s)/dend(s) = pnz(z) = (b1*z + b2)/(z^2 + a1*z + a2)
a1 = dend(2); a2 = dend(3);
b1 = numd(2); b2 = numd(3);
% [a1 b1 a2 b2] = [-1.7858 0.1070 0.8264 0.1004]
% GRAFICOS
subplot(2,1,1)
step(nump,denp)
xlabel('Tiempo en segundos')
ylabel('Respuesta del proceso')
grid
subplot(2,1,2)
step(numn,denn)
ylabel('Respuesta del modelo')
xlabel('Tiempo en segundos')
grid
print -f -deps ejem7_1

Step Response

Respuesta del proceso

4
3
2
1
0

Tiempo en segundos (seconds)


Step Response

Respuesta del modelo

8
6
4
2
0

0.5

1.5

Tiempo en segundos (seconds)

% ejem7_5.m ESTABILIDAD ROBUSTA Y RENDIMIENTO ROBUSTO


clear all
% PARAMETROS DEL PROCESO NO LINEAL
Lo = 0.776;
JL = 3.5e-7; bL = 1e-5; Ro = 0.01;
Jm = 1.9062e-6; bm = 1.8338e-6; g = 9.81;

21

2.5

E = 31.0352e-3; R = 7.38; m = 0.06377;


Kact = 14.9; cc = 0.25; % Mo=0,0.01,0.02,0.045;
K = 31.071e-3; n = 19.741; L = 4.64e-3;
B = n^2*bm +bL; Jeff = n^2*Jm +JL;
% PROCESO p(s)
Mo = 0.045;
M = Jeff + (1/3)*m*Lo^2 + Mo*Lo^2 + (2/5)*Mo*Ro^2;
N = g*Lo*(Mo+m/2);
Ap = [0 1;-N/M -(B + n^2*K*E/R)/M];
Bp = [0;n*K*Kact/(R*M)];
Cp = [1 0]; Dp = [0];
[nump,denp]=ss2tf(Ap,Bp,Cp,Dp);
% nump(s)/denp(s) = p(s) = Kp/(s^2 + ap*s + bp)
Kp = nump(3); ap = denp(2); bp = denp(3);
% PROCESO DISCRETO pz(z)
T = 0.05;
[numdp,dendp] = c2dm(nump,denp,T,'zoh');
% numdp(s)/dendp(s) = pnz(z) = (bp1*z + bp2)/(z^2 + ap1*z + ap2)
ap1 = dendp(2); ap2 = dendp(3);
bp1 = numdp(2); bp2 = numdp(3);
% MODELO NOMINAL pn(s)
Mo=0.00;
M = Jeff + (1/3)*m*Lo^2 + Mo*Lo^2 + (2/5)*Mo*Ro^2;
N = g*Lo*(Mo+m/2);
An = [0 1;-N/M -(B + n^2*K*E/R)/M];
Bn = [0;n*K*Kact/(R*M)];
Cn = [1 0]; Dn = [0];
[numn,denn] = ss2tf(An,Bn,Cn,Dn);
% numn(s)/denn(s) = pn(s) = Kn/(s^2 + an*s + bn)
Kn = numn(3); an = denn(2); bn = denn(3);
% MODELO NOMINAL DISCRETO pnz(z)
T = 0.05;
[numd,dend] = c2dm(numn,denn,T,'zoh');
% numd(s)/dend(s) = pnz(z) = (b1*z + b2)/(z^2 + a1*z + a2)
a1 = dend(2); a2 = dend(3);
b1 = numd(2); b2 = numd(3);
% CHEQUEANDO ESTABILIDAD ROBUSTA
alfa = 0.955;
for w = 0:pi/T
s=i*w; z=exp(s);
pnz = (b1*z+b2)/(z^2+a1*z+a2);
pz = (bp1*z+bp2)/(z^2+ap1*z+ap2);
laz = pz - pnz;
lmz = laz/pnz;
qt = (z^2 + a1*z + a2)/((b1 + b2)*z^2); % qt <> q~
mag_dB(w+1) = 20*log10(1/(abs(pnz*qt*lmz)));
f = (1-alfa)*z/(z-alfa);
magf_dB(w+1) = 20*log10(abs(f));
% PARA ESTABILIDAD ROBUSTA: magf_dB(w+1) < mag_dB(w+1)
end
% CHEQUEANDO RENDIMIENTO ROBUSTO
for w = 0:pi/T
s=i*w; z=exp(s);
pn = Kn/(s^2 + an*s + bn);
p = Kp/(s^2 + ap*s + bp);
la = p - pn;
lm = la/pn;
qt = (z^2 + a1*z + a2)/((b1 + b2)*z^2); % qt <> q~
f = (1-alfa)*z/(z-alfa);
q = qt*f;
W = 0.5/abs(1-pn*qt);

22

M_dB(w+1) = 20*log10(abs(q*la) + abs((1-pn*q)*W));


% PARA RENDIMIENTO ROBUSTO: M_dB < 0
end
% GRAFICOS
ejew = linspace(0,pi/T,pi/T);
subplot(121)
semilogx(ejew,mag_dB(1:pi/T),ejew,magf_dB(1:pi/T),'--')
ylabel('Magnitudes en dB')
title(' (a)')
xlabel('Frecuencia angular (rad/s)')
grid
subplot(122)
semilogx(ejew,M_dB(1:pi/T))
ylabel('Magnitud de M en dB')
title(' (b)')
xlabel('Frecuencia angular (rad/s)')
grid
print -f -deps ejem7_5
print -s -deps ejem7_6a

(a)

(b)

40

30

-2
20
-4

Magnitud de M en dB

Magnitudes en dB

10

-10

-6

-8

-10
-20
-12

-30

-40
0
10

-14

10
Frecuencia angular (rad/s)

10

-16
0
10

10
Frecuencia angular (rad/s)

% p4rob1.m SOLUCION AL PROBLEMA 7.1


clear all
% FT (FUNCION DE TRANSFERENCIA) DEL PROCESO:
% theta/deltae=(1.151s+0.1774)/(s^2+0.739s^2+0.921s) -->dato
% theta/deltae=(a*s+b)/(s^3+c*s^2+d*s): ESTRUCTURA DE LA FT
% SE DESEA ROBUSTEZ EN TODOS LOS PARAMETROS:
an=1; bn=0.1; cn=0.7; dn=0.9; % PARA EL PROCESO NOMINAL
numn=[0 0 an bn]; denn=[1 cn dn 0];
% pn=(an*s+bn)/(s^3+cn*s^2+dn*s)
ap=1.2; bp=0.2; cp=0.8; dp=0.95; % PARA EL PROCESO
nump = [0 0 ap bp]; denp=[1 cp dp 0];

23

10

% p= (ap*s+bp)/(s^3+cp*s^2+dp*s)
% MODELO NOMINAL DISCRETO pnz(z)
T = 0.3;
[numd,dend] = c2dm(numn,denn,T,'zoh');
% numd(z)/dend(z) = pnz(z) = (b1*z^2+b2*z+b3)/(z^3+a1*z^2+a2*z+a3)
a1=dend(2); a2=dend(3); a3=dend(4);
b1=numd(2); b2=numd(3); b3=numd(4);
% PROCESO DISCRETO
[numdp,dendp] = c2dm(nump,denp,T,'zoh');
% numdp(z)/dendp(z) = pz(z) = (bp1*z^2+bp2*z+bp3)/...
% (z^3+ap1*z^2+ap2*z+ap3)
ap1=dendp(2); ap2=dendp(3); ap3=dendp(4);
bp1=numdp(2); bp2=numdp(3); bp3=numdp(4);
% DETERMINACION DE pnz(z)=pA(z)*pM(z):
% roots(numd): 0.9704 y -0.9416
% COMO pnz NO POSEE CEROS FUERA DEL CU, Y COMO z^N*pnz
% DEBE SER SEMIPROPIO, N=1; LUEGO pA=z^(-1) Y
% pM=pnz/pA=z*(b1*z^2+b2*z+b3)/(z^3+a1*z^2+a2*z+a3)
% CALCULO DE v(z)=vA(z)*vM(z)=z/(z-1) PARA UNA ENTRADA ESCALON:
% vA=1; vM=z/(z-1)
% CALCULO DE qtilde_H=z(pM*vM)^(-1){z^(-1)pA^(-1)vM}*:
% z(pM*vM)^(-1)=(z-1)pM^(-1)
% {z^(-1)pA^(-1)vM}*={z/(z-1)}*={1+1/(z-1)}*=1/(z-1)
% qtilde_H=pM^(-1)=(z^3+a1*z^2+a2*z+a3)/(b1*z^3+b2*z^2+b3*z)
% CALCULO DE qtilde_:
% (b1*z^2+b2*z+b3)=(z-0.9704)(z+0.9416); DEBEMOS CANCELAR z=-0.9416
% Y SUSTITUIRLO CON z=0; ESTO ES, k1=-0.9416, rho=1; LUEGO
% qtilde_=z^(-rho)*(z-k1)/(1-k1)=z^(-1)*(z-k1)/(1-k1)
k1=-0.9416;
% CALCULO DE qtilde=qtilde_H*qtilde_*B(z) PARA m=1:
% B(z)=1; qtilde=qtilde_H*qtilde_=
% (z^3+a1*z^2+a2*z+a3)*(z-k1)/((b1*z^3+b2*z^2+b3*z)*z*(1-k1))
% CALCULO DEL FILTRO PARA m=1: f(z)=(1-alfa)*z/(z-alfa);
% FUNCION DE PESO PARA m=1: W(w)>=G/(abs(1-pn*qtilde))
% CONDICIONES: w^(-1)(infty) MAYOR QUE 1, W(0)^(-1) MAYOR QUE 0
% CHEQUEANDO ESTABILIDAD ROBUSTA
alfa = 0.33; % CUMPLE CONDICIONES DE ESTABILIDAD Y RENDIMIENTO
% ROBUSTOS PERO REQUIERE DE UNA ENTRADA U MUY GRANDE; POR ELLO
% PARA EL DISE~NO FINAL EL PARAMETRO SE FIJA EN: alfa=0.5
for w = 0:pi/T % pi/T =
s=i*w; z=exp(s);
pnz = (b1*z^2+b2*z+b3)/(z^3+a1*z^2+a2*z+a3);
pz = (bp1*z^2+bp2*z+bp3)/(z^3+ap1*z^2+ap2*z+ap3);
laz = pz - pnz;
lmz = laz/pnz;
qtilde=(z^3+a1*z^2+a2*z+a3)*(z-k1)/((b1*z^2+b2*z+b3)*z*(1-k1));
mag_dB(w+1) = 20*log10(1/(abs(pnz*qtilde*lmz)));
f = (1-alfa)*z/(z-alfa);
magf_dB(w+1) = 20*log10(abs(f));
% PARA ESTABILIDAD ROBUSTA: magf_dB(w+1) < mag_dB(w+1)
end
% CHEQUEANDO RENDIMIENTO ROBUSTO
for w = 0:pi/T % pi/T =
s=i*w; z=exp(s);
pn=(an*s+bn)/(s^3+cn*s^2+dn*s);
p= (ap*s+bp)/(s^3+cp*s^2+dp*s);
la = p - pn;
lm = la/pn;
qtilde=(z^3+a1*z^2+a2*z+a3)*(z-k1)/((b1*z^2+b2*z+b3)*z*(1-k1));
f = (1-alfa)*z/(z-alfa);
q = qtilde*f;

24

G = 0.1; W = G/abs(1-pn*qtilde);
% PARA RENDIMIENTO ROBUSTO: M_dB < 1
M_dB(w+1) = 20*log10(abs(q*la) + abs((1-pn*q)*W));
end
% GRAFICOS
ejew = linspace(0,pi/T,pi/T);
subplot(121)
semilogx(ejew,mag_dB(1:pi/T),ejew,magf_dB(1:pi/T),'--')
ylabel('Magnitudes en dB')
title(' (a)')
xlabel('Frecuencia angular (rad/s)')
grid
subplot(122)
semilogx(ejew,M_dB(1:pi/T))
ylabel('Magnitud de M en dB')
title(' (b)')
xlabel('Frecuencia angular (rad/s)')
grid
print -f -deps p4rob1f
print -s -deps p4rob1s

(a)

(b)

40

35

30

Magnitud de M en dB

Magnitudes en dB

25

20

15

10

-5

-10

-15

-5

-10
0
10

10
Frecuencia angular (rad/s)

10

-20
0
10

10
Frecuencia angular (rad/s)

% p10rob1.m SOLUCION AL PROBLEMA 7.2


clear all
% FT (FUNCION DE TRANSFERENCIA) DEL PROCESO
% vr(s)/u(s) = K*exp(-d*s/v)/(s^2 + a*s + b): ESTRUCTURA DE LA FT
K=10; a=1.5; b=0.5;
% DESEAMOS ROBUSTEZ EN EL TIEMPO MUERTO CON RANGO:
Tn=9; Tp=11; % (n: NOMINAL, p: PROCESO)
numn=[0 0 K]; denn=[1 a b];
% pn=K*exp(-Tn*s)/(s^2+a*s+b)
nump=[0 0 K]; denp=[1 a b];

25

10

% p=K*exp(-Tp*s)/(s^2+a*s+b)
% MODELO NOMINAL DISCRETO pnz(z)
T = 0.5; % z = exp(T*s) => exp(Tn*s)=z^(Tn/T)=z^18
[numd,dend] = c2dm(numn,denn,T,'zoh');
% numd(z)/dend(z)=(b1*z+b2)/(z^2+a1*z+a2)
a1=dend(2); a2=dend(3);
b1=numd(2); b2=numd(3);
% numD(z)/denD(z)=pnz(z)=z^(-Tn/T)*numd(z)/dend(z)
% pnz(z) = z^(-Tn/T)*(b1*z+b2)/(z^2+a1*z+a2)
% = (b1*z+b2)/(z^20+a1*z^19+a2*z^18)
% PROCESO DISCRETO pz(z)
% T = 0.5; z = exp(T*s) => exp(Tp*s)=z^(Tp/T)=z^22
[numdp,dendp] = c2dm(nump,denp,T,'zoh');
% numdp(z)/dendp(z)=(bp1*z+bp2)/(z^2+ap1*z+ap2)
ap1=dendp(2); ap2=dendp(3);
bp1=numdp(2); bp2=numdp(3);
% numDp(z)/denDp(z)=pz(z)=z^(-Tp/T)*numdp(z)/dendp(z)
% pz(z) = z^(-Tp/T)*(bp1*z+bp2)/(z^2+ap1*z+ap2)
% = (bp1*z+bp2)/(z^24+a1*z^23+a2*z^22)
% DETERMINACION DE pnz(z)=pA(z)*pM(z):
% roots(numD): -0.1353
% COMO pnz NO POSEE CEROS FUERA DEL CIRCULO UNITARIO (CU) Y COMO
% z^N*pnz DEBE SER SEMIPROPIO, ENTONCES N=19; LUEGO pA=z^(-N) Y
% pM=pnz/pA=z^19*(b1*z+b2)/(z^20+a1*z^19+a2*z^18)
% DETERMINACION DE v(z)=vA(z)*vM(z)=z/(z-1) PARA UNA ENTRADA ESCALON:
% SE SABE POR EJERCICIOS ANTERIORES QUE vA=1; vM=z/(z-1)
% CALCULO DE qtilde_H=(pM(z))^(-1):
% SEGUN TABLA, qtilde_H=(z^20+a1*z^19+a2*z^18)/(b1*z^20+b2*z^19)
% CALCULO DE qtilde_:
% (b1*z^4+b2*z^3)=z^3*(b1*z+b2) => CANCELAR z=-b2/b1=-0.1353
% Y SUSTITUIRLO CON z=0; ESTO ES, k1=-0.1353, rho=1, Y
% qtilde_=z^(-rho)*(z-k1)/(1-k1)=z^(-1)*(z-k1)/(1-k1)
k1=-0.1353;
% CALCULO DE qtilde=qtilde_H*qtilde_*B(z) (PARA m=1):
% PARA QUE EL SISTEMA SEA DEL TIPO m=1, B(z)=1, ENTONCES:
% qtilde=qtilde_H*qtilde_=
% (z^20+a1*z^19+a2*z^18)*(z-k1)/(z*(b1*z^20+b2*z^19)*(1-k1))
% CALCULO DEL FILTRO CON m=1: f(z)=(1-alfa)*z/(z-alfa);
% CALCULO DE LA FUNCION DE PESO PARA m=1: W(w)>=G/(abs(1-pn*qtilde))
% CONDICIONES: W^(-1)(infty) MAYOR QUE 1, W(0)^(-1) MAYOR QUE 0
% CHEQUEANDO ESTABILIDAD ROBUSTA
alfa = 0.95;
for w = 0:pi/T % pi/T =
s=i*w; z=exp(s);
pn=K*exp(-Tn*s)/(s^2+a*s^2+b*s);
p= K*exp(-Tp*s)/(s^2+a*s^2+b*s);
pnz = (b1*z+b2)/(z^(Tn/T)*(z^2+a1*z+a2));
pz = (bp1*z+bp2)/(z^(Tp/T)*(z^2+ap1*z+ap2));
laz = pz - pnz;
lmz = laz/pnz;
qtilde=(z^20+a1*z^19+a2*z^18)*(z-k1)/...
(z*(b1*z^20+b2*z^19)*(1-k1));
mag_dB(w+1) = 20*log10(1/(abs(pnz*qtilde*lmz)));
f = (1-alfa)*z/(z-alfa);
magf_dB(w+1) = 20*log10(abs(f));
% PARA ESTABILIDAD ROBUSTA: magf_dB(w+1) < mag_dB(w+1)
end
% CHEQUEANDO RENDIMIENTO ROBUSTO
for w = 0:pi/T
s=i*w; z=exp(s);
pn=K*exp(-Tn*s)/(s^2+a*s^2+b*s);

26

p= K*exp(-Tp*s)/(s^2+a*s^2+b*s);
la = p - pn;
lm = la/pn;
qtilde=(z^20+a1*z^19+a2*z^18)*(z-k1)/...
(z*(b1*z^20+b2*z^19)*(1-k1));
f = (1-alfa)*z/(z-alfa);
q = qtilde*f;
G = 0.9; W = G/abs(1-pn*qtilde);
% PARA RENDIMIENTO ROBUSTO: M_dB < 1
M_dB(w+1) = 20*log10(abs(q*la) + abs((1-pn*q)*W));
end
% GRAFICOS
ejew = linspace(0,pi/T,pi/T);
subplot(121)
semilogx(ejew,mag_dB(1:pi/T),ejew,magf_dB(1:pi/T),'--'); grid
ylabel('Magnitudes en dB')
title(' (a)')
xlabel('Frecuencia angular (rad/s)')
subplot(122)
semilogx(ejew,M_dB(1:pi/T)); grid
ylabel('Magnitud de M en dB')
title(' (b)')
xlabel('Frecuencia angular (rad/s)')
print -f -deps p10rob1f
print -s -deps p10rob1s

(a)

(b)

10

0
-2

-5

Magnitud de M en dB

Magnitudes en dB

-10
-15
-20

-6
-8
-10

-25

-12

-30
-35
0.1
10

-4

0.7

10
Frecuencia angular (rad/s)

-14
0.1
10

0.7

10
Frecuencia angular (rad/s)

% p7rob1.m SOLUCION AL PROBLEMA 7.3


clear all
% ROBUSTEZ EN LOS PESOS M2 Y M3 DADO QUE VARIAN CON EL PESO
% PROCESO: M2=3200; M3=3200 (CARROS CON PASAJEROS);
M1=1300; M2=3200; M3=3200; K12=100000; K23=100000;
B12=500; B23=500; B1=5000; B2=10000; B3=10000;
A=[0 1 0 0 0 0

27

-K12/M1 -(B1+B12)/M1 K12/M1 B12/M1 0 0


0 0 0 1 0 0
K12/M2 B12/M2 -(K12+K23)/M2 -(B2+B23+B12)/M2 K23/M2 B23/M2
0 0 0 0 0 1
0 0 K23/M3 B23/M3 -K23/M3 -(B3+B23)/M3];
B=[0 1 0 0 0 0]';
alfa = 1; % CONSTANTE TACOMETRICA
C=[0 alfa 0 0 0 0]; D=[0];
[nump,denp]=ss2tf(A,B,C,D);
bp1=nump(2); bp2=nump(3); bp3=nump(4); bp4=nump(5);
bp5=nump(6); bp6=nump(7); ap1=denp(2); ap2=denp(3);
ap3=denp(4); ap4=denp(5); ap5=denp(6); ap6=denp(7);
% p=(bp1*s^5+bp2*s^4+bp3*s^3+bp4*s^2+bp5*s+bp6)/...
% (s^6+ap1*s^5+ap2*s^4+ap3*s^3+ap4*s^2+ap5*s+ap6);
% PROCESO DISCRETO
T = 0.2; % PERIODO DE MUESTREO
[G,H,C,D]=c2dm(A,B,C,D,T,'zoh');
[numz,denz]=ss2tf(G,H,C,D);
az1 = denz(2); az2 = denz(3); az3 = denz(4);
az4 = denz(5); az5 = denz(6); az6 = denz(7);
bz1 = numz(2); bz2 = numz(3); bz3 = numz(4);
bz4 = numz(5); bz5 = numz(6); bz6 = numz(7);
% numz/denz=pz=(bz1*z^5+bz2*z^4+bz3*z^3+bz4*z^2*bz5*z+bz6)/...
% (z^6+az1*z^5+az2*z^4+az3*z^3+az4*z^2+az5*z+az6);
% MODELO NOMINAL DEL PROCESO: M2=2600; M3=2600;
M1=1300; M2=2600; M3=2600; K12=100000; K23=100000;
B12=500; B23=500; B1=5000; B2=10000; B3=10000;
A=[0 1 0 0 0 0
-K12/M1 -(B1+B12)/M1 K12/M1 B12/M1 0 0
0 0 0 1 0 0
K12/M2 B12/M2 -(K12+K23)/M2 -(B2+B23+B12)/M2 K23/M2 B23/M2
0 0 0 0 0 1
0 0 K23/M3 B23/M3 -K23/M3 -(B3+B23)/M3];
B=[0 1 0 0 0 0]';
alfa = 1; % CONSTANTE TACOMETRICA
C=[0 alfa 0 0 0 0]; D=[0];
[numn,denn]=ss2tf(A,B,C,D);
bn1=numn(2); bn2=numn(3); bn3=numn(4); bn4=numn(5);
bn5=numn(6); bn6=numn(7); an1=denn(2); an2=denn(3);
an3=denn(4); an4=denn(5); an5=denn(6); an6=denn(7);
% pn=(bn1*s^5+bn2*s^4+bn3*s^3+bn4*s^2+bn5*s+bn6)/...
% (s^6+an1*s^5+an2*s^4+an3*s^3+an4*s^2+an5*s+an6);
% MODELO NOMINAL DISCRETO
T = 0.2; % PERIODO DE MUESTREO
[G,H,C,D]=c2dm(A,B,C,D,T,'zoh');
[num,den]=ss2tf(G,H,C,D);
a1 = den(2); a2 = den(3); a3 = den(4);
a4 = den(5); a5 = den(6); a6 = den(7);
b1 = num(2); b2 = num(3); b3 = num(4);
b4 = num(5); b5 = num(6); b6 = num(7);
% num/den=pnz=(b1*z^5+b2*z^4+b3*z^3+b4*z^2*b5*z+b6)/...
% (z^6+a1*z^5+a2*z^4+a3*z^3+a4*z^2+a5*z+a6);
% DETERMINAION DE bp(z)
% roots(den): pn(z) POSEE 1 POLO EN z=1 Y NINGUNO FUERA DEL
% CU (CIRCULO UNITARIO) => bp(z)=1
% CALCULO DE pnz(z)=pA(z)*pM(z):
% z^N*pnz DEBE SE SEMIPROPIO, ENTONCES N=1 Y pA=z^(-1); LUEGO:
% pM=pnz/pA=z*(b1*z^5+b2*z^4+b3*z^3+b4*z^2*b5*z+b6)/...
% (z^6+a1*z^5+a2*z^4+a3*z^3+a4*z^2+a5*z+a6);
% DETERMINACION DE v(z)=vA(z)*vM(z)=z/(z-1) PARA ENTRADA ESCALON:
% SE SABE POR EJEMPLOS ANTERIORES QUE: vA=1; vM=z/(z-1)

28

% DETERMINACION DE bv(z)
% COMO v(z) NO POSEE POLOS FUERA DEL CU, ENTONCES bv(z)=1
% CALCULO DE qtilde_H=z*bp*(pM*bv*vM)^(-1){(z*bp*pA)^(-1)*vM}*:
% NOTAR QUE pnz(z) Y v(z) POSEEN 1 POLO EN z=1. COMO bp=bv=1,
% qtilde_H=pM^(-1)=(z^6+a1*z^5+a2*z^4+a3*z^3+a4*z^2+a5*z+a6)/...
% (z*(b1*z^5+b2*z^4+b3*z^3+b4*z^2*b5*z+b6));
% CALCULO DE qtilde_= z^(-r)*((z-k1)/(1-k1)* ... *(z-kr)/(1-kr)):
% roots([b1 b2 b3 b4 b5 b6]): -0.2943 + 0.5702i,
% -0.2943 - 0.5702i; 0.4916 + 0.4604i, 0.4916 - 0.4604i, 1.0000
% r=2 POLOS DE qtilde_H CON PARTE REAL NEGATIVA; k1=-0.2943;
% k2=k1 => qtilde_=z^(-2)*(z-k1)^2/(1-k1)^2
k1=-0.2943;
% CALCULO DE qtilde=qtilde_H*qtilde_*B(z):
% EL MINIMO COMUN DENOMINADOR DE pnz Y v CON RAICES INESTABLES ES:
% (z-piz)=(z-1) => z=piz=1, m1=1 (MULTIPLICIDAD) y B(z)=b0=1;
% qtilde=qtilde_H*qtilde_=
% (z^6+a1*z^5+a2*z^4+a3*z^3+a4*z^2+a5*z+a6)*(z-k1)^2/...
% (z^3*(b1*z^5+b2*z^4+b3*z^3+b4*z^2*b5*z+b6)*(1-k1)^2);
% DETERMINACION DEL FILTRO: f(z)=(1-alfa)*z/(z-alfa);
% CALCULO DE LA FUNCION DE PESO PARA m=1: W(w)>=G/(abs(1-pn*qtilde))
% CONDICIONES: w^(-1)(infty) MAYOR QUE 1, W(0)^(-1) MAYOR QUE 0
% CHEQUEANDO ESTABILIDAD ROBUSTA
alfa = 0.8;
for w = 0:pi/T % pi/T =
s=i*w; z=exp(s);
pnz=(b1*z^5+b2*z^4+b3*z^3+b4*z^2*b5*z+b6)/...
(z^6+a1*z^5+a2*z^4+a3*z^3+a4*z^2+a5*z+a6);
pz=(bz1*z^5+bz2*z^4+bz3*z^3+bz4*z^2*bz5*z+bz6)/...
(z^6+az1*z^5+az2*z^4+az3*z^3+az4*z^2+az5*z+az6);
laz = pz - pnz;
lmz = laz/pnz;
qtilde=(z^6+a1*z^5+a2*z^4+a3*z^3+a4*z^2+a5*z+a6)*(z-k1)^2/...
(z^3*(b1*z^5+b2*z^4+b3*z^3+b4*z^2*b5*z+b6)*(1-k1)^2);
mag_dB(w+1) = 20*log10(1/(abs(pnz*qtilde*lmz)));
f = (1-alfa)*z/(z-alfa);
magf_dB(w+1) = 20*log10(abs(f));
% PARA ESTABILIDAD ROBUSTA: magf_dB(w+1) < mag_dB(w+1)
end
% CHEQUEANDO RENDIMIENTO ROBUSTO
for w = 0:pi/T
s=i*w; z=exp(s);
pn=(bn1*s^5+bn2*s^4+bn3*s^3+bn4*s^2+bn5*s+bn6)/...
(s^6+an1*s^5+an2*s^4+an3*s^3+an4*s^2+an5*s+an6);
p=(bp1*s^5+bp2*s^4+bp3*s^3+bp4*s^2+bp5*s+bp6)/...
(s^6+ap1*s^5+ap2*s^4+ap3*s^3+ap4*s^2+ap5*s+ap6);
la = p - pn;
lm = la/pn;
qtilde=(z^6+a1*z^5+a2*z^4+a3*z^3+a4*z^2+a5*z+a6)*(z-k1)^2/...
(z^3*(b1*z^5+b2*z^4+b3*z^3+b4*z^2*b5*z+b6)*(1-k1)^2);
f = (1-alfa)*z/(z-alfa);
q = qtilde*f;
G = 0.72; W = G/abs(1-pn*qtilde);
% PARA RENDIMIENTO ROBUSTO: M_dB < 1
M_dB(w+1) = 20*log10(abs(q*la) + abs((1-pn*q)*W));
end
% CALCULO DEL CONTROLADOR c=q/(1-pnz*q)
% NOTAR QUE q*pnz=(z-k1)^2*(1-alfa)/(z^2*(1-k1)^2*(z-alfa))
num1=(1-alfa)*[1 -2*k1 k1^2]; den1= ...
[(1-k1)^2 -((1-k1)^2*alfa+(1-alfa)) (1-alfa)*2*k1 -(1-alfa)*k1^2];
% numc=conv(den,num1); denc=conv(num,den1);
[numc,denc]=series(den,num,num1,den1);

29

% GRAFICOS
ejew = linspace(0,pi/T,pi/T);
subplot(121)
semilogx(ejew,mag_dB(1:pi/T),ejew,magf_dB(1:pi/T),'--'); grid
ylabel('Magnitudes en dB');
title(' (a)')
xlabel('Frecuencia angular (rad/s)')
subplot(122)
semilogx(ejew,M_dB(1:pi/T)); grid
ylabel('Magnitud de M en dB');
title(' (b)')
xlabel('Frecuencia angular (rad/s)')
print -f -deps p7rob1f
print -s -deps p7rob1s
(b)
0

30

-2

20

-4

Magnitud de M en dB

Magnitudes en dB

(a)
40

10

-10

-20
0
10

-6

-8

-10

-12
0
10

10
10
Frecuencia angular (rad/s)

% p8rob1.m SOLUCION AL PROBLEMA 7.4


clear all
% PROCESO
Ac = [-0.2 0 0 0;1 0 0 0;2 0 -2 0;5 0 0 -5];
Bc = [0.012;0;0;0];
Cc = [0 1 0 0]; Dc = [0];
[nump,denp]=ss2tf(Ac,Bc,Cc,Dc);
bp2=nump(3); bp3=nump(4); bp4=nump(5);
ap1=denp(2); ap2=denp(3); ap3=denp(4); ap4=denp(5);
% p=(bp2*s^2+bp3*s+bp4)/(s^4+ap1*s^3+ap2*s^2+ap3*s);
% PROCESO DISCRETO
T = 0.8; % TIEMPO DE MUESTREO
[G,H,C,D]=c2dm(Ac,Bc,Cc,Dc,T,'zoh');
[numz,denz]=ss2tf(G,H,C,D);
az1 = denz(2); az2 = denz(3); az3=denz(4); az4=denz(5);
bz1 = numz(2); bz2 = numz(3); bz3=numz(4); bz4=numz(5);
% numz/denz=pz=(bz1*z^3+bz2*z^2+bz3*z+bz4*z)/...
% (z^4+az1*z^3+az2*z^2+az3*z+az4);
% PROCESO NOMINAL

30

10
10
Frecuencia angular (rad/s)

Ac = [-0.2 0 0 0;1 0 0 0;2 0 -2 0;5 0 0 -5];


Bc = [0.008;0;0;0];
Cc = [0 1 0 0]; Dc = [0];
[numn,denn]=ss2tf(Ac,Bc,Cc,Dc);
bn2=numn(3); bn3=numn(4); bn4=numn(5);
an1=denn(2); an2=denn(3); an3=denn(4);
% pn=(bn2*s^2+bn3*s+bn4)/(s^4+an1*s^3+an2*s^2+an3*s);
% MODELO NOMINAL DISCRETO
T = 0.8; % TIEMPO DE MUESTREO
[G,H,C,D]=c2dm(Ac,Bc,Cc,Dc,T,'zoh');
[num,den]=ss2tf(G,H,C,D);
a1 = den(2); a2 = den(3); a3=den(4); a4=den(5);
b1 = num(2); b2 = num(3); b3=num(4); b4=num(5);
% num/den=pnz=(b1*z^3+b2*z^2+b3*z+b4*z)/...
% (z^4+a1*z^3+a2*z^2+a3*z+a4);
% DETERMINAION DE bp(z)
% roots(den): pn(z) POSEE 1 POLO EN z=1 Y NINGUNO FUERA DEL
% CIRCULO UNITARIO => bp(z)=1
% CALCULO DE pnz(z)=pA(z)*pM(z):
% z^N*pnz DEBE SER SEMIPROPIO, ENTONCES N=1 Y pA=z^(-1); LUEGO:
% pM=pnz/pA=z*(b1*z^3+b2*z^2+b3*z+b4*z)/...
% (z^4+a1*z^3+a2*z^2+a3*z+a4);
% DETERMINACION DE v(z)=vA(z)*vM(z)=z/(z-1) PARA ENTRADA ESCALON:
% SE SABE POR EJEMPLOS ANTERIORES QUE vA=1 Y vM=z/(z-1)
% DETERMINACION DE bV(z):
% COMO v(z) NO POSEE POLOS FUERA DEL CU, bv(z)=1
% CALCULO DE qtilde_H=z*bp*(pM*bv*vM)^(-1){(z*bp*pA)^(-1)*vM}*
% NOTAR QUE pnz(z) Y v(z) POSEEN 1 POLO EN z=1. COMO bp=bv=1:
% qtilde_H=pM^(-1)=(z^4+a1*z^3+a2*z^2+a3*z+a4)/...
% z*(b1*z^3+b2*z^2+b3*z+b4);
% CALCULO DE qtilde_= z^(-r)*((z-k1)/(1-k1)* ... *(z-kr)/(1-kr))
rr=roots([b1 b2 b3 b4]); k1=rr(1);
% r=1 POLOS DE qtilde_H CON PARTE REAL NEGATIVA;
% => qtilde_=z^(-1)*(z-k1)/(1-k1)=(z-k1)/(z*(1-k1))
% CALCULO DE qtilde=qtilde_H*qtilde_*B(z)
% EL MINIMO COMUN DENOMINADOR DE pnz Y v CON RAICES INESTABLES
% ES: (z-piz)=(z-1) => z=piz=1, MULTIPLICIDAD m1=1 Y B(z)=b0=1;
% qtilde=qtilde_H*qtilde_=
% (z^4+a1*z^3+a2*z^2+a3*z+a4)*(z-k1)/...
% (z^2*(1-k1)*(b1*z^3+b2*z^2+b3*z+b4*z));
% DETERMINACION DEL FILTRO: f(z)=(1-alfa)*z/(z-alfa);
% CALCULO DE LA FUNCION DE PESO PARA m=1: W(w)>=G/(abs(1-pn*qtilde))
% CONDICIONES: w^(-1)(infty) MAYOR QUE 1, W(0)^(-1) MAYOR QUE 0
%
% CHEQUEANDO ESTABILIDAD ROBUSTA
alfa = 0.7;
for w = 0:pi/T
s=i*w; z=exp(s);
pnz=(b1*z^3+b2*z^2+b3*z+b4)/(z^4+a1*z^3+a2*z^2+a3*z+a4);
pz=(bz1*z^3+bz2*z^2+bz3*z+bz4)/(z^4+az1*z^3+az2*z^2+az3*z+az4);
laz = pz - pnz;
lmz = laz/pnz;
qtilde=(z^4+a1*z^3+a2*z^2+a3*z+a4)*(z-k1)/...
(z^2*(1-k1)*(b1*z^3+b2*z^2+b3*z+b4));
mag_dB(w+1) = -20*log10(abs(pnz*qtilde*lmz));
f = (1-alfa)*z/(z-alfa);
magf_dB(w+1) = 20*log10(abs(f));
% para estabilidad robusta: magf_dB(w+1) < mag_dB(w+1)
end
% CHEQUEANDO RENDIMIENTO ROBUSTO
for w = 0:pi/T

31

s=i*w; z=exp(s);
pn=(bn2*s^2+bn3*s+bn4)/(s^4+an1*s^3+an2*s^2+an3*s);
p=(bp2*s^2+bp3*s+bp4)/(s^4+ap1*s^3+ap2*s^2+ap3*s);
la = p - pn;
lm = la/pn;
qtilde=(z^4+a1*z^3+a2*z^2+a3*z+a4)*(z-k1)/...
(z^2*(1-k1)*(b1*z^3+b2*z^2+b3*z+b4));
f = (1-alfa)*z/(z-alfa);
q = qtilde*f;
G = 0.75; W = G/abs(1-pn*qtilde);
% PARA RENDIMIENTO ROBUSTO: M_dB < 1
M_dB(w+1) = 20*log10(abs(q*la) + abs((1-pn*q)*W));
end
% CALCULO DEL CONTROLADOR c=q/(1-pnz*q)
% NOTAR QUE q*pnz=(z-k1)*(1-alfa)/(z*(1-k1)*(z-alfa))
num1=(1-alfa)*[1 -k1];
den1=[(1-k1) -((1-k1)*alfa+(1-alfa)) (1-alfa)*k1];
% numc=conv(den,num1); denc=conv(num,den1);
[numc,denc]=series(den,num,num1,den1);
% GRAFICOS
ejew = linspace(0,pi/T,pi/T);
subplot(121)
semilogx(ejew,mag_dB(1:pi/T),ejew,magf_dB(1:pi/T),'--'); grid
ylabel('Magnitudes en dB'); title(' (a)')
xlabel('Frecuencia angular (rad/s)')
subplot(122)
semilogx(ejew,M_dB(1:pi/T)); grid
ylabel('Magnitud de M en dB'); title(' (b)')
xlabel('Frecuencia angular (rad/s)')
print -f -deps p8rob1f
print -s -deps p8rob1s

(a)

(b)

15

0.5
0

10

-0.5

-5

Magnitud de M en dB

Magnitudes en dB

-1
5

-1.5
-2
-2.5
-3
-3.5

-10
-4
-15
0.3
0.5
10
10
Frecuencia angular (rad/s)

-4.5
0.3
0.5
10
10
Frecuencia angular (rad/s)

32

SISTEMAS DE CONTROL PREDICTIVO


% p4pred1.m SOLUCION DEL PROBLEMA 6.1: CONTROL DE LA INCLINACION
% DE UN AVION USANDO CONTROL PREDICTIVO CON CONTROL ESCALAR
clear all
% FUNCION DE TRANSFERENCIA DE LA PLANTA EN TIEMPO CONTINUO
numc=[0 1.151 0.1774];
denc=[1 0.739 0.921 0];
A=[-0.313 56.7 0; -0.0139 -0.426 0; 0 56.7 0];
B=[0.232; 0.0203; 0]; C=[0 0 1]; D=[0];
% FUNCION DE TRANSFERENCIA DE LA PLANTA EN TIEMPO DISCRETO
tm=1.25; % TIEMPO DE MUESTREO
[numd,dend]=c2dm(numc,denc,tm,'zoh');
[G,H]=c2d(A,B,tm);
a1=dend(2); a2=dend(3); a3=dend(4);
b1=numd(2); b2=numd(3); b3=numd(4);
% HORIZONTES DE CONTROL
N1 =1; N2 =10; Nu =1;
% RESPUESTA AL ESCALON
g(1) = b1; g(2) = -a1*b1 + b1 + b2;
g(3) = - a1*g(2) - a2*g(1) + b1 +b2+b3;
for k=4:N2
g(k) = -a1*g(k-1) -a2*g(k-2) -a3*g(k-2) + b1 + b2 + b3;
end
% CONDICIONES INICIALES
for k=1:4
yf(k)=0; y(k)=0; r(k)=0; u(k)=0;
end
alf = 0.1; lambda=0; MM = 500;
% LAZO DE CONTROL
for t=4:MM+3;
% TRAYECTORIA DESEADA, REFERENCIA r Y RESPUESTA LIBRE yf
for k=1:N2
W(t+k) = sign(sin(0.02*t));
r(t+k) = alf*r(t+k-1) + (1-alf)*W(t+k);
yf(t+k)= -a1*yf(t+k-1)-a2*yf(t+k-2)-a3*yf(t+k-3)+(b1+b2+b3)*u(t-1);
end
% LEY DE CONTROL
du(t) = (g(1)*(r(t+1) - yf(t+1)) + g(6)*(r(t+6) - yf(t+6)) + ...
g(2)*(r(t+2) - yf(t+2)) + g(7)*(r(t+7) - yf(t+7)) + ...
g(3)*(r(t+3) - yf(t+3)) + g(8)*(r(t+8) - yf(t+8)) + ...
g(4)*(r(t+4) - yf(t+4)) + g(9)*(r(t+9) - yf(t+9)) + ...
g(5)*(r(t+5) - yf(t+5)) + g(10)*(r(t+10) - yf(t+10)) )/...
(g(1)^2 + g(2)^2 + g(3)^2 + g(4)^2 + g(5)^2 + g(6)^2 + ...
g(7)^2 + g(8)^2 + g(9)^2 + g(10)^2 + lambda);
u(t) = u(t-1) + du(t);
% MODELO DEL PROCESO EN SU FORMA CARIMA
y(t+1)=-a1*y(t)-a2*y(t-1)-a3*y(t-2) ...
+b1*u(t)+b2*u(t-1)+b3*u(t-2);
end % FIN DEL LAZO DE CONTROL
% GRAFICOS
ejex=linspace(0,MM*tm,MM-3);
subplot(2,1,1)
plot(ejex,W(4:MM),ejex,y(4:MM)); grid
ylabel('y: Inclinacion (rad) ')
subplot(2,1,2)
plot(ejex,u(4:MM)); grid
xlabel('TIEMPO : SEG')
ylabel('u: Angulo del deflector (rad)')
print -deps -f p4pred1

33

y: Inclinacion (rad)

2
1
0
-1

u: Angulo del deflector (rad)

-2

100

200

300

400

500

600

700

100

200

300
400
TIEMPO : SEG

500

600

700

1
0.5
0
-0.5
-1

% p4pred2.m SOLUCION DEL PROBLEMA 6.2: CONTROL DE LA INCLINACION


% DE UN AVION USANDO CONTROL PREDICTIVO CON CONTROL MATRICIAL
clear all
% FUNCION DE TRANSFERENCIA CONTINUA DE LA PLANTA
numc=[0 1.151 0.1774];
denc=[1 0.739 0.921 0];
A=[-0.313 56.7 0; -0.0139 -0.426 0; 0 56.7 0];
B=[0.232; 0.0203; 0]; C=[0 0 1]; D=[0];
% FUNCION DE TRANSFERENCIA DISCRETA DE LA PLANTA
tm=2.2; % TIEMPO DE MUESTREO
[numd,dend]=c2dm(numc,denc,tm,'zoh');
[G,H]=c2d(A,B,tm);
a1=dend(2); a2=dend(3); a3=dend(4);
b1=numd(2); b2=numd(3); b3=numd(4);
% HORIZONTES DE CONTROL
N1 =1; N2 =10; Nu =5;
% RESPUESTA AL ESCALON
g(1) = b1; g(2) = -a1*b1 + b1 + b2;
g(3) = - a1*g(2) - a2*g(1) + b1 +b2+b3;
for k=4:N2
g(k) = -a1*g(k-1) -a2*g(k-2) -a3*g(k-2) + b1 + b2 + b3;
end
% MATRIZ GANANCIA DE RESPUESTA AL ESCALON
GG=[g(1) 0 0 0 0
g(2) g(1) 0 0 0
g(3) g(2) g(1) 0 0
g(4) g(3) g(2) g(1) 0
g(5) g(4) g(3) g(2) g(1)
g(6) g(5) g(4) g(3) g(2)
g(7) g(6) g(5) g(4) g(3)
g(8) g(7) g(6) g(5) g(4)

34

g(9) g(8) g(7) g(6) g(5)


g(10) g(9) g(8) g(7) g(6)];
% CONDICIONES INICIALES
for k=1:4
yf(k)=0; y(k)=0; r(k)=0; u(k)=0;
end
alf = 0.1; lambda = 0.98; MM = 500; du(1)=0;
I=eye(5,5); % MATRIZ IDENTIDAD
% LAZO DE CONTROL
for t =4:MM+3
% TRAYECTORIA DESEADA, REFERENCIA r Y RESPUESTA LIBRE yf
for k=1:N2
W(t+k)= sin(0.05*t)+0.005*t;
r(t+k) = alf*r(t+k-1) + (1-alf)*W(t+k);
yf(t+k)= -a1*yf(t+k-1)-a2*yf(t+k-2)-a3*yf(t+k-3)+(b1+b2+b3)*u(t-1);
end
% MATRIZ R DE SE~NALES r
R=[r(t+1) r(t+2) r(t+3) r(t+4) r(t+5) r(t+6)...
r(t+7) r(t+8) r(t+9) r(t+10)]';
% MATRIZ DE RESPUESTA LIBRE YF
YF=[yf(t+1) yf(t+2) yf(t+3) yf(t+4) yf(t+5) yf(t+6)...
yf(t+7) yf(t+8) yf(t+9) yf(t+10)]';
% LEY DE CONTROL
U=inv(GG'*GG+lambda*I)*GG'*(R-YF);
du=U(1);
u(t) = u(t-1) + du;
% PROCESO
y(t+1)=-a1*y(t)-a2*y(t-1)-a3*y(t-2) ...
+b1*u(t)+b2*u(t-1)+b3*u(t-2);
end % FIN DEL BUCLE DE CONTROL
% GRAFICOS
ejex=(4:MM); ejex=ejex*tm;
subplot(2,1,1)
plot(ejex,W(4:MM),ejex,y(4:MM)), grid
ylabel('y: Inclinacion (rad) ')
subplot(2,1,2)
plot(ejex,u(4:MM)), grid
xlabel('TIEMPO : SEG')
ylabel('u: Angulo del deflector (rad)')
print -deps -f p4pred2

35

y: Inclinacion (rad)

4
3
2
1
0

u: Angulo del deflector (rad)

-1

200

400

600

800

1000

1200

200

400

600
TIEMPO : SEG

800

1000

1200

0.3
0.2
0.1
0
-0.1
-0.2

% p7pred1a.m SOLUCION DEL PROBLEMA 6_3: CONTROL DE VELOCIDAD


% DEL MONORRIEL DE DOS CARROS USANDO CONTROL PREDICTIVO
% CON FUERZA DE CONTROL ESCALAR Y REFERENCIA ESCALON.
% PARA REFERENCIA ARBITRARIA VER PROGRAMA p7pred1b.m
clear all
% DATOS DEL PROCESO
M1=1300; M2=2600; M3=2600; K12=100000; K23=100000;
B12=500; B23=500; B1=5000; B2=10000; B3=10000;
% MODELO DEL PROCESO
A=[0 1 0 0 0 0
-K12/M1 -(B1+B12)/M1 K12/M1 B12/M1 0 0
0 0 0 1 0 0
K12/M2 B12/M2 -(K12+K23)/M2 -(B2+B23+B12)/M2 K23/M2 B23/M2
0 0 0 0 0 1
0 0 K23/M3 B23/M3 -K23/M3 -(B3+B23)/M3];
B=[0 1 0 0 0 0]';
alfa = 1; % CONSTANTE TACOMETRICA
C=[ 0 alfa 0 0 0 0
0 0 0 alfa 0 0
0 0 0 0 0 alfa];
D=[0;0;0];
[numc,denc]=ss2tf(A,B,C,D);
% MODELO DEL PROCESO EN TIEMPO DISCRETO
tm=0.3; % TIEMPO DE MUESTREO
[G,H]=c2d(A,B,tm);
[numd,dend]=ss2tf(G,H,C,D,1);
a1=dend(2); a2=dend(3); a3=dend(4); a4=dend(5);
a5=dend(6); a6=dend(7);
b1=numd(2); b2=numd(3); b3=numd(4); b4=numd(5);
b5=numd(6); b6=numd(7);
% HORIZONTES
N1 =1; N2 =10; Nu =1;
% RESPUESTA AL ESCALON

36

g(1)=b1; g(2)=-a1*b1+b1+b2;
g(3)=-a1*g(2)-a2*g(1)+b1+b2+b3;
g(4)=-a1*g(3)-a2*g(2)-a3*g(1)+b1+b2+b3+b4;
g(5)=-a1*g(4)-a2*g(3)-a3*g(2)-a4*g(1)+b1+b2+b3+b4+b5;
g(6)=-a1*g(5)-a2*g(4)-a3*g(3)-a4*g(2)-a5*g(1)+b1+b2+b3+b4+b5+b6;
for k=7:N2
g(k)=-a1*g(k-1)-a2*g(k-2)-a3*g(k-1)-a4*g(k-1)-a5*g(k-2)...
-a6*g(k-1) + b1 + b2 + b3 + b4 + b5 + b6;
end
% CONDICIONES INICIALES
for k=1:7
yf(k)=0; y(k)=0; r(k)=0; u(k)=0;
end
alf =0.1; lambda = 0; MM=500;
% LAZO DE CONTROL
for t=7:MM+6;
% TRAYECTORIA DESEADA, REFERENCIA r Y RESPUESTA LIBRE yf
for k=1:N2
W(t+k)= 25 + 5*sign(sin(0.01*t));
r(t+k) = alf*r(t+k-1) + (1-alf)*W(t+k);
yf(t+k) = -a1*yf(t+k-1)-a2*yf(t+k-2)-a3*yf(t+k-3)...
-a4*yf(t+k-4)-a5*yf(t+k-5)-a6*yf(t+k-6)+(b1+b2+b3+b4+b5+b6)*u(t-1);
end
% LEY DE CONTROL
du(t)=(g(1)*(r(t+1)-yf(t+1))+g(6)*(r(t+6)-yf(t+6))+...
g(2)*(r(t+2)-yf(t+2))+g(7)*(r(t+7)-yf(t+7))+ ...
g(3)*(r(t+3)-yf(t+3))+g(8)*(r(t+8)-yf(t+8))+ ...
g(4)*(r(t+4)-yf(t+4))+g(9)*(r(t+9)-yf(t+9))+ ...
g(5)*(r(t+5)-yf(t+5))+g(10)*(r(t+10)-yf(t+10)))/...
(g(1)^2 + g(2)^2 + g(3)^2 + g(4)^2 + g(5)^2 + g(6)^2 + ...
g(7)^2 + g(8)^2 + g(9)^2 + g(10)^2 + lambda);
u(t) = u(t-1) + du(t);
% PROCESO
y(t+1)= -a1*y(t) -a2*y(t-1) -a3*y(t-2) -a4*y(t-3)...
-a5*y(t-4) -a6*y(t-5)...
+b1*u(t) +b2*u(t-1) +b3*u(t-2) +b4*u(t-3)...
+b5*u(t-4)+b6*u(t-5);
end
% GRAFICOS
ejex=linspace(0,MM*tm,MM-6);
subplot(2,1,1)
plot(ejex,W(7:MM),ejex,y(7:MM)); grid
ylabel('Y1: Velocidad (m/s)')
subplot(2,1,2)
plot(ejex,u(7:MM)); grid
xlabel('Tiempo (segundos)')
ylabel('Control u (volt)')
print -deps -f p7pred1a

37

Y1: Velocidad (m/s)

30

20

10

50

50

100

150

100

150

Control u (volt)

100

50

-50

Tiempo (segundos)

% p8pred1.m SOLUCION DEL PROBLEMA 6_5: CONTROL DE POSICION


% DE UN ASCENSOR USANDO CONTROL PREDICTIVO CON FUERZA
% DE CONTROL ESCALAR Y CON RESTRICCION EN LA SALIDA
clear all
% ECUACION DE ESTADO
A=[-0.2 0 0 0
1 0 0 0
2 0 -2 0
5 0 0 -5];
B=[0.001;0;0;0]; C=[0 1 0 0]; D=[0];
% PROCESO EN TIEMPO DISCRETO
tm=1;
[G,H]=c2d(A,B,tm);
[numd,dend]=ss2tf(G,H,C,D);
a1=dend(2); a2=dend(3); a3=dend(4); a4=dend(5);
b1=numd(2); b2=numd(3); b3=numd(4); b4=numd(5);
% HORIZONTES DE CONTROL
N1 =1; N2 =10; Nu =1;
% RESPUESTA AL ESCALON
g(1) = b1; g(2) = -a1*b1 + b1 + b2;
g(3) = - a1*g(2) - a2*g(1) + b1 +b2+b3;
g(4) = - a1*g(3) - a2*g(2)-a3*g(1) + b1+b2+b3+b4;
for k=5:N2
g(k) = -a1*g(k-1)-a2*g(k-2)-a3*g(k-3)-a4*g(k-4)+b1+b2+b3+b4;
end
% CONDICIONES INICIALES
for k=1:5
yf(k)=0; y(k)=0; r(k)=0; u(k)=0;
end
alf =0.1; lambda = 0.00;
MM=300;
% LAZO DE CONTROL
for t =5:MM+4;

38

% TRAYECTORIA DESEADA, REFERENCIA r Y RESPUESTA LIBRE yf


for k=1:N2
W(t+k)=-3*sign(sin(0.02*t));
r(t+k) = alf*r(t+k-1) + (1-alf)*W(t+k);
yf(t+k)= -a1*yf(t+k-1)-a2*yf(t+k-2)-a3*yf(t+k-3)-a4*yf(t+k-4)...
+ (b1 + b2 + b3 + b4)*u(t-1);
end
% RESTRICCION A LA SALIDA
y(t) = W(t);
% LEY DE CONTROL
du(t)=(g(1)*(r(t+1)-yf(t+1))+g(6)*(r(t+6)-yf(t+6))+ ...
g(2)*(r(t+2) - yf(t+2)) + g(7)*(r(t+7) - yf(t+7)) + ...
g(3)*(r(t+3) - yf(t+3)) + g(8)*(r(t+8) - yf(t+8)) + ...
g(4)*(r(t+4) - yf(t+4)) + g(9)*(r(t+9) - yf(t+9)) + ...
g(5)*(r(t+5) - yf(t+5)) +g(10)*(r(t+10)- yf(t+10)))/...
(g(1)^2 + g(2)^2 + g(3)^2 + g(4)^2 + g(5)^2 + g(6)^2 + ...
g(7)^2 + g(8)^2 + g(9)^2 + g(10)^2 + lambda);
u(t) = u(t-1) + du(t);
% EVITANDO LA SATURACION DEL AMPLIFICADOR
if(u(t) > 200)
u(t) = 200;
elseif(u(t) < -200)
u(t) = 200;
end
% PROCESO
y(t+1)=-a1*y(t)-a2*y(t-1)-a3*y(t-2)-a4*y(t-3)...
+b1*u(t)+b2*u(t-1)+b3*u(t-2)+b4*u(t-3);
end % FIN DEL LAZO DE CONTROL
% GRAFICOS
ejex=linspace(0,MM*tm,MM-4);
subplot(2,1,1)
plot(ejex,W(5:MM),ejex,y(5:MM)); grid
ylabel('POSICION (m)')
xlabel('TIEMPO EN SEGUNDOS')
subplot(2,1,2)
plot(ejex,u(5:MM)); grid
xlabel('TIEMPO EN SEGUNDOS')
ylabel('VOLTAJE DE CONTROL')
print -deps -f p8pred1

39

POSICION (m)

4
2
0
-2

VOLTAJE DE CONTROL

-4

50

100
150
200
TIEMPO EN SEGUNDOS

250

300

50

100
150
200
TIEMPO EN SEGUNDOS

250

300

200
100
0
-100
-200

% p9pred1.m SOLUCION DEL PROBLEMA 6.7 CONTROL DE NIVEL


% USANDO CONTROL PREDICTIVO CON CONTROL du ESCALAR
clear all
% PARAMETROS DEL SISTEMA
A = 9; gamma = 0.4; rho = 1.23; g = 9.81; Q = 3;
H =Q^2/(gamma^2*rho*g);
Z=(gamma*sqrt(rho*g))/(2*A*sqrt(H));
% ESPACIO DE ESTADO DE LA PLANTA EN TIEMPO CONTINUO
Ac = [-Z 0;Z -Z]; Bc=[1 ; 0];
Cc=[0 1]; Dc=[0];
T = 0.9; % TIEMPO DE MUESTREO
% MODELO LINEAL DISCRETO
[G,H,C,D]=c2dm(Ac,Bc,Cc,Dc,T,'zoh');
[numd,dend]=ss2tf(G,H,C,D);
a1 = dend(2); a2 = dend(3);
b1 = numd(2); b2 = numd(3);
% RESPUESTA AL ESCALON
g1 = b1;
g2 = -a1* b1 + b1 + b2;
g3 = -a1*g2-a2*g1+b1+b2; g4 = -a1*g3-a2*g2+b1+b2;
g5 = -a1*g4-a2*g3+b1+b2; g6 = -a1*g5-a2*g4+b1+b2;
g7 = -a1*g6-a2*g5+b1+b2; g8 = -a1*g7-a2*g6+b1+b2;
g9 = -a1*g8-a2*g7+b1+b2; g10 = -a1*g9-a2*g8+b1+b2;
% HORIZONTES DE CONTROL
N1 = 1; N2 =10; Nu =1; % control escalar
% CONDICIONES INICIALES
for k=1:3
yf(k)=0; y(k)=0; r(k)=0; u(k)=0;
end
alf = 0.1; lambda = 0; MM = 500;
% LAZO DE CONTROL
for t =3:MM+2
% TRAYECTORIA DESEADA, REFERENCIA r Y RESPUESTA LIBRE yf

40

for k=1:N2
W(t+k) = 1.5 + 0.5*sign(sin(0.02*t));
r(t+k) = alf*r(t+k-1) + (1-alf)*W(t+k);
yf(t+k) = -a1*yf(t+k-1) - a2*yf(t+k-2) + (b1 + b2)*u(t-1);
end
% LEY DE CONTROL
du(t)=(g1*(r(t+1)-yf(t+1))+g6*(r(t+6)-yf(t+6))+ ...
g2*(r(t+2) - yf(t+2)) + g7*(r(t+7) - yf(t+7)) + ...
g3*(r(t+3) - yf(t+3)) + g8*(r(t+8) - yf(t+8)) + ...
g4*(r(t+4) - yf(t+4)) + g9*(r(t+9) - yf(t+9)) + ...
g5*(r(t+5) - yf(t+5)) + g10*(r(t+10)-yf(t+10)))/...
(g1^2 + g2^2 + g3^2 + g4^2 + g5^2 + g6^2 + ...
g7^2 + g8^2 + g9^2 + g10^2 + lambda);
u(t) = u(t-1) + du(t);
% PROCESO LINEALIZADO (ECUACION RESIDUAL)
y(t+1)=-a1*y(t)-a2*y(t-1)+b1*du(t)+b2*du(t-1);
% SALIDA ACTUAL (NIVEL H2)
Y(t+1) = y(t+1)+W(t+1);
% LIMITANDO EL FLUJO DE CONTROL
fu = 3.0;
if(u(t) > 0 & u(t) > fu)
u(t) = fu;
elseif(u(t) < 0 & u(t) < -fu)
u(t) = -fu;
end
end % FIN DEL LAZO DE CONTROL **************
% GRAFICOS
ejex = linspace(0,MM*T,MM-2);
subplot(2,1,1)
plot(ejex,W(3:MM),ejex,Y(3:MM)); grid
ylabel('NIvel H2 (m)')
xlabel('Tiempo en segundos')
subplot(2,1,2)
plot(ejex,u(3:MM)); grid
ylabel('Flujo de control (m^3/s)')
xlabel('Tiempo en segundos')
print -deps -f p9pred1

41

POSICION (m)

4
2
0
-2

VOLTAJE DE CONTROL

-4

50

100
150
200
TIEMPO EN SEGUNDOS

250

300

50

100
150
200
TIEMPO EN SEGUNDOS

250

300

200
100
0
-100
-200

% p11pred1.m SOLUCION DEL PROBLEMA 6_9


% CONTROL DE VELOCIDAD DEL SISTEMA ELECTROMECANICO
% USANDO CONTROL PREDICTIVO CON CONTROL du ESCALAR
clear all
% PARAMETROS DEL SISTEMA
J = 0.01; Ke = 0.01; Kt = 0.01;
R = 12; C = 0.5; L = 0.5; Kw = 1.8;
% MODELO DEL PROCESO EN TIEMPO CONTINUO
Ac = [-1/(R*C) -1/C 0
Kw/(L*Kw + Kt*Ke) 0 -Ke*Kw/(L*Kw + Kt*Ke)
0 Kt/J 0];
Bc = [1/(R*C);0;0];
Cc = [0 0 1]; Dc = [0];
T = 0.1; % TIEMPO DE MUESTREO
% MODELO LINEAL DISCRETO
[G,H,C,D]=c2dm(Ac,Bc,Cc,Dc,T,'zoh');
[numd,dend]=ss2tf(G,H,C,D);
a1 = dend(2); a2 = dend(3); a3=dend(4);
b1 = numd(2); b2 = numd(3); b3=numd(4);
% RESPUESTA AL ESCALON
g1 = b1; g2 =-a1*b1+b1+b2;
g3=-a1*g2-a2*g1+b1+b2+b3;
g4 =-a1*g3- a2*g2-a3*g1+b1+b2+b3;
g5=-a1*g4-a2*g3-a3*g2+b1+b2+b3;
g6 =-a1*g5-a2*g4-a3*g3+b1+b2+b3;
g7=-a1*g6-a2*g5-a3*g4+b1+b2+b3;
g8 =-a1*g7-a2*g6-a3*g5+b1+b2+b3;
g9=-a1*g8-a2*g7-a3*g6+b1+b2+b3;
g10=-a1*g9-a2*g8-a3*g7+b1+b2+b3;
% HORIZONTES DE CONTROL
N1 = 1; N2 = 10; Nu = 1;
% CONDICIONES INICIALES
for k = 1:4

42

yf(k) = 0; y(k) = 0; r(k) = 0; u(k) = 0;


end
du(1) = 0;
alf = 0.85; lambda = 0;
% LAZO DE CONTROL
MM=1000;
for t =4:MM+3
% TRAYECTORIA DESEADA, REFERENCIA r Y RESPUESTA LIBRE yf
for k=1:N2
W(t+k)= 4*sign(sin(0.01*t));
r(t+k) = alf*r(t+k-1) + (1-alf)*W(t+k);
yf(t+k)= -a1*yf(t+k-1)-a2*yf(t+k-2)-a3*yf(t+k-3)+(b1+b2+b3)*u(t-1);
end
% LEY DE CONTROL
du(t) = ( g1*(r(t+1) - yf(t+1)) + g6*(r(t+6) - yf(t+6)) + ...
g2*(r(t+2) - yf(t+2)) + g7*(r(t+7) - yf(t+7)) + ...
g3*(r(t+3) - yf(t+3)) + g8*(r(t+8) - yf(t+8)) + ...
g4*(r(t+4) - yf(t+4)) + g9*(r(t+9) - yf(t+9)) + ...
g5*(r(t+5) - yf(t+5)) + g10*(r(t+10) - yf(t+10)) )/...
(g1^2 + g2^2 + g3^2 + g4^2 + g5^2 + g6^2 + ...
g7^2 + g8^2 + g9^2 + g10^2 + lambda);
u(t) = u(t-1) + du(t);
if(u(t) > 100)
u(t)=100;
elseif(u(t) < -100)
u(t) = - 100;
end
% PROCESO
y(t+1) = -a1*y(t)-a2*y(t-1)-a3*y(t-2)+b1*u(t)+b2*u(t-1)+b3*u(t-2);
end % FIN DEL LAZO DE CONTROL
% GRAFICOS
ejex=linspace(0,MM*T,MM-3);
subplot(2,1,1)
plot(ejex,W(4:MM),ejex,y(4:MM)); grid
ylabel('Velocidad (rad/s)')
xlabel('Tiempo en segundos')
subplot(2,1,2)
plot(ejex,u(4:MM)); grid
xlabel('Tiempo en segundos')
ylabel('Voltaje de control')
print -deps -f p11pred1

43

S-ar putea să vă placă și