Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Control Óptimo
Control Adaptivo
Control Predictivo
Control Robusto
Control No Lineal
Control Avanzado
Diseño y Aplicaciones en Tiempo Real
Copyright
c 2001 Arturo Rojas-Moreno. Reservados todos los derechos.
ISBN 9972–9318–0–3
A mi Familia
A mi Alma Mater
Índice general
Dedicatoria III
Prefacio XI
2. Sistemas Discretos 29
2.1. Diseño de Sistemas de Control Digital . . . . . . . . . . . . . 29
2.2. Concepto de Estado y Variables de Estado . . . . . . . . . . . 31
2.2.1. Linealización de Procesos . . . . . . . . . . . . . . . . 31
2.3. Fundamentos de Sistemas Discretos . . . . . . . . . . . . . . . 38
2.3.1. Muestreo y Reconstrucción . . . . . . . . . . . . . . . 38
2.3.2. La Transformada Z . . . . . . . . . . . . . . . . . . . . 45
2.3.3. La Transformada Z Inversa . . . . . . . . . . . . . . . 49
2.3.4. Función de Transferencia de Pulso . . . . . . . . . . . 51
2.3.5. El Espacio de Estado Discreto . . . . . . . . . . . . . 53
2.3.6. Controlabilidad y Observabilidad . . . . . . . . . . . . 64
VI ÍNDICE GENERAL
3. Modelado de Procesos 69
3.1. Modelo del Proceso Péndulo Invertido . . . . . . . . . . . . . 69
3.1.1. Modelo del Subsistema Carro-Péndulo . . . . . . . . . 70
3.1.2. Modelo del Subsistema Motor-Polea . . . . . . . . . . 72
3.1.3. Representación en el Espacio de Estado . . . . . . . . 74
3.1.4. Obtención del Modelo Lineal . . . . . . . . . . . . . . 75
3.1.5. El Modelo en el Espacio de Estado Discreto . . . . . . 76
3.2. Modelo del Proceso Grúa-Puente . . . . . . . . . . . . . . . . 77
3.2.1. Modelo del Subsistema Carro-Varilla . . . . . . . . . . 77
3.2.2. Modelo del Subsistema Motor-Polea . . . . . . . . . . 79
3.2.3. Representación en el Espacio de Estado . . . . . . . . 79
3.2.4. Obtención del Modelo Lineal . . . . . . . . . . . . . . 80
3.2.5. El Modelo en el Espacio de Estado Discreto . . . . . . 80
3.2.6. Resumen de Variables y Parámetros . . . . . . . . . . 81
3.2.7. Identificación de la Zona Muerta del Servomotor . . . 81
3.3. Modelo del Servomotor D.C. No Lineal . . . . . . . . . . . . . 84
3.3.1. El Subsistema Mecánico . . . . . . . . . . . . . . . . . 84
3.3.2. El Subsistema Eléctrico . . . . . . . . . . . . . . . . . 86
3.3.3. Conversión de Energı́a Eléctrica en Mecánica . . . . . 87
3.3.4. Modelo y Compensación de no Linealidades . . . . . . 89
3.3.5. Linealización y Discretización del Proceso . . . . . . . 90
3.4. Problemas Resueltos . . . . . . . . . . . . . . . . . . . . . . . 91
3.5. Problemas Propuestos . . . . . . . . . . . . . . . . . . . . . . 116
. Bibliografı́a 453
Fundamentos
Herramientas Computacionales
La gran mayorı́a de los ejercicios y problemas formulados en este libro se
desarrollan con el auxilio de la computadora personal. Especı́ficamente, para
el desarrollo de los ejemplos y problemas, y para la simulación de las aplica-
ciones, se emplea el software “MATLAB” (versión 4.2) con sus herramientas
“Control Systems”, “Signal Processing” y “SIMULINK”. El software para
las aplicaciones en tiempo real está escrito en C/C++ de “Borland”, versión
4.52. Evidentemente, los programas elaborados también pueden ejecutarse
en versiones de software más actualizadas. Los programas fuente se pueden
descargar de mi página web: http:/fiee.uni.edu.pe/728681F. Antes de
emplear tales programas, leer el archivo README.TXT.
Agradecimientos
La publicación de este libro fue financiada en parte por el Instituto Gene-
ral de Investigación de la UNI. Mi agradecimiento a su Director, Dr. Guiller-
mo Lira. Mi gratitud especial a mis alumnos que colaboraron con esta pub-
licación: Leonardo Gushiken (capı́tulos 3 y 4), Omar Tupayachi (capı́tulos 3
y 8) y Raúl Benitez (capı́tulos 6 y 7). Luis Lecina (alumno de la Universidad
Politécnica de Cataluña) colaboró con el capı́tulo 5. La revisión de todo lo
escrito estuvo a cargo de mi alumna Claudia Córdova, mientras que Rommel
Romero (mi futuro alumno) se encargó de todo lo relativo a la impresión del
libro.
Por ejemplo:
b11
a11 a12 a13 b21 = c 11 a11 b11 + a12 b21 + a13 b31
=
a21 a22 a23 c21 a21 b11 + a22 b21 + a23 b31
b31
Si κ es un escalar, entonces κA resulta una matriz en donde cada elemento
queda multiplicado por κ. Es decir:
κA = κ[aij ] = [κaij ]
La multiplicación es asociativa:
y distributiva:
(A + B)(C + D) = AC + AD + BC + BD
AB = BA
4 Matemática Asistida con Computadora
Tipos de Matrices
Si el orden de una matriz A es n × n, entonces la matriz se denomina
cuadrada de orden n. Esta matriz posee una diagonal principal, o simple-
mente una diagonal con elementos aii . La traza de una matriz cuadrada se
define como:
traza(A) = a11 + · · · + ann
Una matriz cuadrada se denomina matriz diagonal cuando los elementos que
no pertenecen a su diagonal son todos ceros:
d11 0 0 . . . 0
0 d22 0 . . . 0
D = [dii ] = . .. .. ..
.. . . .
0 0 0 . . . dnn
A es antihermitiana si: AH = −A
A es unitaria si: AAH = AH A = I
A es normal si: AAH = AH A
A−1 es inversa de A si: AA−1 = A−1 A = I
A es singular si: det(A) = 0 (1.1)
donde det(A) denota el determinante de A, punto que se trata en la siguiente
subsección.
Una matriz cuadrada A con elementos complejos puede ser escrita co-
mo la suma de una matriz hermitiana B = 12 (A + AH ) más una matriz
antihermitiana C = 12 (A − AH ). Es decir:
1 1
A = B + C = (A + AH ) + (A − AH )
2 2
Matriz Inversa
Si A y B son dos matrices no singulares; es decir, si det(A) = 0 y
det(B) = 0, entonces:
e f b c b c
det −det det
h i
h i
e f
1 d f a c a c
A−1 = −det det −det
det(A)
g i
g i
d f
d e a b a b
det −det det
g h g h d e
Ejemplo 1.1
angle(A)*real(A)*imag(A)/((2*j+1)*trace(A)*det(A));
% B = 1.0e+002 *
% 0.2488 - 0.0957i 0.8007 - 0.3510i -2.1614 + 0.9495i
% 0.2952 + 0.3551i 0.9809 + 1.0977i -2.6468 - 2.9592i
% 0.8222 + 0.1991i 2.7135 + 0.5050i -7.3267 - 1.3550i
Ejemplo 1.2
Ejemplo 1.3
Multiplicación con Partición de Matrices.- Dos matrices Anm y Bmp
(los subı́ndices indican las dimensiones) pueden ser particionadas como sigue:
An1 m1 · · · An1 mm Bm1 p1 · · · Bm1 pp
.. .. .. ..
A= . . ; B= . .
Ann m1 · · · Ann mm Bmm p1 · · · Bmm pp
La condición necesaria para realizar el producto Cnp = Anm Bmp empleando
particiones, es que las columnas de A y las filas de B sean particionadas
en la misma forma. Por tanto, n = n1 + · · · + nn , m = m1 + · · · + mm y
p = p1 + · · · + pp . Determinar si el producto siguiente es válido y si lo es,
obtener C = AB.
A22 A23 A21 B22 B23
AB = A32 A33 A31 B32 B33
A42 A43 A41 B12 B13
Solución: Podemos notar que para A: n = 2 + 3 + 4 = 9, m = 2 + 3 + 1 = 6,
y para B: m = 2 + 3 + 1 = 6 y p = 2 + 3 = 5. Por consiguiente, la partición
es correcta. La multiplicación ahora es directa:
A22 B22 + A23 B32 + A21 B12 A22 B23 + A23 B33 + A21 B13
C = A32 B22 + A33 B32 + A31 B12 A32 B23 + A33 B33 + A31 B13
A42 B22 + A43 B32 + A41 B12 A42 B23 + A43 B33 + A41 B13
En notación MATLAB, conociendo las matrices particionadas, el producto
resulta:
1.1 Cálculo Matricial 11
C = [A22*B22+A23*B32+A21*B12 A22*B23+A23*B33+A21*B13
A32*B22+A33*B32+A31*B12 A32*B23+A33*B33+A31*B13
A42*B22+A43*B32+A41*B12 A42*B23+A43*B33+A41*B13];
Ejemplo 1.4
Ejemplo 1.5
Si los λi son los eigenvalores de la matriz A de orden n, comprobar numéri-
camente que:
det(A) = λ1 λ2 . . . λn ; i = 1, . . . , n
Solución: Ver el programa ejem1 5.m.
% ejem1_5.m COMPRUEBA QUE det(A)=L(1)L(2)L(3)L(4)
clear all
A = [1-j 2-j 3-j -3+8j
4j -2 3+5j 4-2j
6-j 7-j 8+3j 3+j
2 -1 j 0];
L = eig(A); % DETERMINA LOS EIGENVALORES DE A
detA = det(A); P = L(1)*L(2)*L(3)*L(4);
% SE DEBE CUMPLIR QUE: P = detA
Ejemplo 1.6
Conocidas las matrices Ann , Bnm , Cmn y Dmm con det(A) = 0 y det(D) = 0,
y definiendo:
A B A 0 A B
E= ; G= ; H=
0 D C D C D
12 Matemática Asistida con Computadora
Ejemplo 1.7
Ejemplo 1.8
−1
A B A−1 + A−1 B(D − CA−1 B)−1 CA−1 −A−1 B(D − CA−1 B)−1
=
C D −(D − CA−1 B)−1 (D − CA−1 B)−1
−1
A B (A − BD−1 C)−1 −(A − BD−1 C)−1 BD−1
=
C D −D C(A − BD−1 C)−1
−1
D C(A − BD−1 C)−1 BD−1 + D−1
−1
5-8j -7-2j];
B = [ j -1+3j 2-5j
4+7j 6 3+8j];
C = [ 2-j j
1+j -5j
-3-7j 8];
D = [2+j -3-j 4j
1+3j 0 -7j
1+j -9-2j -5];
% CONDICION: det(D) Y det(D-C*inv(A)*B) DISTINTOS DE 0
E = [A B;C D];
G11 = inv(A) + inv(A)*B*inv(D-C*inv(A)*B)*C*inv(A);
G12 = -inv(A)*B*inv(D-C*inv(A)*B);
G21 = -inv(D-C*inv(A)*B)*C*inv(A);
G22 = inv(D-C*inv(A)*B);
G = [G11 G12;G21 G22];
% CONDICION: det(D) Y det(A-B*inv(D)*C) DISTINTOS DE 0
H11 = inv(A-B*inv(D)*C);
H12 = -inv(A-B*inv(D)*C)*B*inv(D);
H21 = -inv(D)*C*inv(A-B*inv(D)*C);
H22 = inv(D)*C*inv(A-B*inv(D)*C)*B*inv(D)+inv(D);
H = [H11 H12;H21 H22];
% E*G, E*H, G*E y H*E DEBEN RESULTAR MATRICES IDENTIDAD
n
xH y = (yH x)∗ = yT x∗ = x∗i yi
i=1
n
n
xH x = x∗i xi = |xi |2
i=1 i=1
x1 x∗1 x1 x∗2 . . . x1 x∗n
.. ..
xxH = . . . . . (1.15)
xn x∗1 xn x∗2 . . . xn x∗n
Si x e y son vectores reales de orden n:
n
n
x T y = yT x = xi yi ; xT x = x2i
i=1 i=1
x21 x1 x2 . . . x1 xn
.. ..
xxT = . . . . . (1.16)
xn x1 xn x2 . . . x2n
Vectores Ortonormales
Los vectores reales x1 , x2 , . . . son ortonormales si xTi xj = 0 cuando i = j
y = 0 cuando i = j.
xTi xj
x ≥ 0 para todo x = 0
1.2 Análisis Vectorial 17
x = 0 si y sólo si x = 0
κx = κ x κ es un escalar
Desigualdad triangular: x + y ≤ x + y
Desigualdad de Schwarz: |xH y| ≤ x y
A ≤ κ A
A 2 = máx[xH AH Ax], si xH x = 1
x
|λ| ≤ A , si λ es un eigenvalor de A
Otras normas para una matriz A de orden n son:
1/2
n
n n
n
A = |aij |; A F = |aij |2
i=1 j=1 i=1 j=1
18 Matemática Asistida con Computadora
m
n
A 1 = máx |aij | ; A ∞ = máx |aij |
j i
i=1 j=1
A 2 = máx λi (AH A)
i
rango(A) = n
Eigenvalores y Eigenvectores
Un eigenvalor de una matriz de orden n, conocido también como valor
propio, modo, “eigenvalue”, valor o raı́z caracterı́stica, es un escalar λ que
permite una solución no trivial de la ecuación:
Ax = λx x≤0 (1.18)
det(λI − A) (1.19)
n
n
H
x Ax = aij x∗i xj ; aji = a∗ij
i=1 j=1
n
n
xT Ax = aij xi xj ; aji = aij
i=1 j=1
Formas Bilineales
n
m
xH Ay = aij x∗i yj
i=1 j=1
n
m
xT Ay = aij xi yj
i=1 j=1
1.2 Análisis Vectorial 21
Ejemplo 1.9
B = [2-9j;4-j;3+j];
X = A\B; %
% X =
% 3.5719 - 3.4126i --> x1;
% 0 --> x2
% -2.8535 + 1.6221i --> x3
% 0 --> x4
% 0.9991 - 0.4860i --> x5
Ejemplo 1.10
Ejemplo 1.11
xH y = (yH x)∗ = yT x∗
Ejemplo 1.12
% ejem1_12.m NORMAS
clear all
% VECTOR DATO
x = [-1+j;3-5j;-5+6j;8-9j;4-2j;-1+j];
a = norm(x,5); % NORMA p = 5 (a = 12.3798)
b = norm(x,2); % NORMA EUCLIDIANA (b = 16.2481)
c = norm(x,inf); % NORMA INFINITO (c = 12.0416)
d = norm(x,-inf); % NORMA -INFINITO (d = 1.4142)
% MATRIZ DATO
A = [1-j 2-j 3-j -4-j
4j -2 3+5j 2-8j
6-j 7-j 8+3j -7+3j
3+5j 2-8j 1-j 2-9j];
e = norm(A); % MAXIMO EIGENVALOR DE A: e = 18.7269
f = norm(A,2); % LO MISMO QUE norm(A): e = f = 18.7269
g = norm(A,1); % max(sum(abs(A)))): g = 29.2046
h = norm(A,inf); % max(sum(abs(A’))): h = 29.3136
k = norm(A,’inf’); % IGUAL QUE norm(A,inf): k = h = 29.3136
m = norm(A,’fro’); % sqrt(sum(diag(A’*A))): m = 23.7276
p = ’fro’; % p DEBE SER 1, 2, inf o ’fro’
n = norm(A,2); % NORMA p: n = 18.7269
Ejemplo 1.13
Sean las matrices Anm , Bmp y Cmm . Demostrar numéricamente las siguien-
tes propiedades del rango: rango(A) ≤ mı́n(n, m); rango(A) = rango(AH );
rango(AB) ≤ min(rango(A), rango(B)); rango(CB) = rango(B).
Ejemplo 1.14
% 0 0 -1 0
% 0 0 0 -1
rank((-1)*eye(4)-A); % RESULTA 2 => 2 BLOQUES DE JORDAN
% ASOCIADOS CON LA RAIZ TRIPLE (-1)
% FORMA DE JORDAN: 0 0 0 0
% 0 -1 1 0
% 0 0 -1 0
% 0 0 0 -1
Ejemplo 1.15
Ejemplo 1.16
Ejemplo 1.17
Empleando las propiedades del valor inicial y del valor final, determinar tales
valores para la velocidad del móvil del problema anterior.
Solución: El valor inicial se determina de: lı́mt→0 v(t) = lı́ms→∞ sv(s) = 0.
El valor final se obtiene de: lı́mt→∞ v(t) = lı́ms→0 sv(s) = 1b .
Capı́tulo 2
Sistemas Discretos
Disturbios
Filtraje Medicion
Ẋ = f(X, U, v, t)
Y = h(X, U, w, t) (2.1)
donde f y h son funciones vectoriales de variable vectorial de orden n y r
respectivamente, X es el vector de estado de orden n, U es el vector de
control de orden m, Y es el vector de salida de orden r, v es el vector de
disturbios (de orden n) en los estados, y w es el vector de disturbios (de
orden r) en las salidas. El tiempo t se incluye como parte del argumento
para indicar que pueden existir parámetros variantes con el tiempo. En este
punto es conveniente definir el concepto de estado:
El vector de estado X = [X1 . . . Xn ]T de un proceso (donde el su-
perı́ndice T indica transpuesta) es el mı́nimo conjunto de variables, las va-
riables de estado X1 . . . Xn , las cuales contienen información suficiente
acerca de la historia pasada del proceso. Esta información permite computar
todos los futuros estados del proceso, asumiendo por supuesto, que todas las
futuras entradas U son también conocidas, como del mismo modo lo son las
ecuaciones dinámicas que describen dicho sistema. El número n de variables
de estado define el orden o la dimensión del sistema.
El espacio de estado es el espacio n-dimensional de todos los estados.
Cuando el sistema es de orden n = 2, el espacio de estado es conocido como
el plano de fase con coordenadas X1 y X2 . Los puntos de equilibrio en el
espacio de estado para el proceso descrito en (2.1) se determinan cuando el
estado del proceso no cambia gracias a la acción de una fuerza de entrada
Ū. Por tanto, los puntos de equilibrio (X̄) se determinan de:
˙ = f(X̄, Ū) = 0
X̄ (2.2)
y = Cx + Du + F w (2.3)
x = X − X̄
u = U − Ū
det(sI − A) = 0 (2.6)
Ejemplo 2.1
Q p
0 0
ρ Tanque
H1
1
p
1 γ
g
Q
p 1
0
ρ
Tanque
H2
2
p
2 γ
Q
2
como:
Q1 = γ P1 − P0 ; Q2 = γ P2 − P0
donde P1 , P2 y P0 son las presiones en el fondo de los tanques y en el exterior
respectivamente, y γ=0.4 es una constante que depende de la geometrı́a del
orificio. Si ρ=1.23 kg/m3 es la densidad del lı́quido y g=9.81 m/s2 es la
aceleración de la gravedad:
P1 − P0 = ρgH1 ; P2 − P0 = ρgH2
ḣ = P h + B q0 ; y = h2 = C h
2.2 Concepto de Estado y Variables de Estado 35
donde:
√
∂f1 ∂f1 −
γ ρg
√ 0
h1
h= ; P = ∂H1
∂f2
∂H2
∂f2 = 2A
√ H̄1
γ ρg
√
γ ρg
h2 ∂H1 ∂H2 √ − √
(H̄1 ,H̄2 ) 2A H̄1 2A H̄2
∂f1
∂Q0 1/A
B= ∂f2 = ; C = [0 1]; D = [0]
∂Q0
0
Q̄0
Ejemplo 2.2
El proceso péndulo no lineal mostrado en la figura 2.3 puede rotar libre-
mente alrededor del pivote gracias a la acción de un torque externo U . En
dicha figura Bp =1.3366 N-m/rad/s es la fricción viscosa rotacional en el
punto pivote, Lo =1.6350 m es la longitud de la varilla de peso desprecia-
ble, Mo =0.5 kg es la masa de la esfera y g=9.81 m/s2 es la aceleración
de la gravedad. La salida de interés es la posición angular θ del péndulo.
Para las situaciones mostradas en las figuras 2.3(a) y 2.3(b) determine: las
ecuaciones no lineales de estado y de salida, los puntos de equilibrio, las
ecuaciones linealizadas de estado y de salida, las funciones de transferencia,
las ecuaciones caracterı́sticas, y la estabilidad del proceso.
0110 Bp Mo
10
1010 U
Θ U
1010 Φ
10 Lo
1010 Lo
10 Mo Bp
(a) (b)
1
= (2.12)
Mo L2o s2 + Bp s + Mo gLo
∞
∗
u (t) = u(kT )δ(t − kT ) (2.15)
k=0
COMPUTADORA DIGITAL
rd ud u* u
D RETENCION’
DE CONTROL
ALGORITMO
ACTUADOR PROCESO
A T
D FILTRAJE
y MEDICION
yd A y* T
Laplace de u∗ resulta:
∞ ∞
∗
u (s) = L[ u(kT )δ(t − kT )] = u(kT )L[δ(t − kT )]
k=0 k=0
∞
= u(kT )e−kT s = u∗ (esT ) (2.16)
k=0
1 si t ≥ kT
µ(t − kT ) =
0 si t < kT
2.3 Fundamentos de Sistemas Discretos 41
u(t) u(j ω)
t ωmax ωmax ω
u*(t) jω
u*(e )
ωs ωs
2 2
t ωs ωmax ωmax ωs ω
Figura 2.5: Respuesta en frecuencia de las señales u(t) y u∗ (t) para ilustrar
el teorema del muestreo.
e−kT s
Empleando la conocida transformación L[µ(t − kT )] = s , la transforma-
da de Laplace de u(t) resulta:
∞
1 1
ū(s) = u(kT )e−kT s [1 − e−T s ] = u∗ (s) [1 − e−T s ]
s s
k=0
Discretización Directa
Es bastante útil discretizar directamente expresiones que contengan in-
tegrales y derivadas. La aproximación rectangular calcula el área debajo de
una cierta curva e(t) mediante la suma de rectángulos de la forma T e(iT −T )
(T es el tiempo de muestreo), tal como se ilustra a continuación. Por consi-
guiente, términos que contengan integración pueden discretizarse empleando
42 Sistemas Discretos
_
u(s) u*(s) 1 e- sT u(s)
T s
’ DE ORDEN CERO
RETENCION _
u (t) u*(t) u (t)
u(2T)
u(3T)
u(T)
u(0)
t 0 T 2T 3T 4T 0 T 2T 3T 4T
Ejemplo 2.4
Discretizar el siguiente controlador ideal PID:
t
1 de(t)
u(t) = K e(t) + e(t)dt + TD (2.25)
TI 0 dt
donde K es la ganancia proporcional, TI es el tiempo de integración y TD
es el tiempo derivativo. En un primer caso emplear integración rectangular
y luego usar integración trapezoidal.
Solución: Empleando las relaciones (2.23) y (2.24) en (2.25) se obtiene:
! "
T
k
TD
u(k) = K e(k) + e(i − 1) + [e(k) − e(k − 1)]
TI T
i=0
44 Sistemas Discretos
0.2
0.18
0.16
0.14
Posición (rad)
0.12
0.1
0.08
0.06
0.04
0.02
0
0 100 200 300 400 500 600 700 800 900 1000
Tiempo discreto k
! k
T
k
u(k − 1) = K e(k − 1) + e(i − 1) − e(k − 1) + e(i) − e(k)
2TI
i=0 i=0
2.3 Fundamentos de Sistemas Discretos 45
#
TD
+ [e(k − 1) − e(k − 2)]
T
Restando las expresiones anteriores y despejando u(k) obtenemos una ex-
presión similar a (2.26), donde:
TD T TD T TD
q0 = K(1 + + ); q1 = −K(1 + 2 − ); q2 = K
T 2TI T 2TI T
2.3.2. La Transformada Z
Es útil introducir la siguiente relación:
z = eT s = eT (σ+jω) = eT σ [cosωT + jsenωT ] (2.27)
Reemplazando en la ecuación (2.16) la señal u por una variable genérica g,
llegamos a la siguiente definición de la transformada Z:
∞
g(z) = Z[g(kT )] = g(kT )z −k = g(0) + g(T )z −1 + g(2T )z −2 + · · · (2.28)
k=0
La serie en (2.28) converge si |g(kT )| se restringe a valores finitos y si |z| > 1.
Las sumatorias siguientes son bastante útiles para resolver problemas
relacionados con la transformada Z:
N −1
1 − aN
ak = ; |a| < 1
1−a
k=0
∞
1
ak = ; |a| < 1
1−a
k=0
∞
a
kak = ; |a| < 1
(1 − a)2
k=0
N2
aN1 − aN2 −1
ak = ; |a| < 1
1−a
k=N1
∞
aN1
ak = ; |a| < 1 (2.29)
1−a
k=N1
la cual es válida para |z −1 | < 1 (o |z| > 1), pues la serie debe ser conver-
gente. La tabla 2.1 ilustra la transformada Z de algunas secuencias notables,
mientras que la tabla 2.2 presenta la relación existente entre la transformada
Z y la transformada de Laplace.
A continuación se formulan algunas propiedades de la transformada Z:
(1) Linealidad:
Z[ag1 (kT ) + bg2 (kT )] = aZ[g1 (kT )] + bZ[g2 (kT )]
(4) Amortiguamiento:
Z[g(kT )e−akT ] = g(zeaT )
No g(t) g(z)
(1) δ(k) 1
2 T 2 ze−aT (z+e−aT )
(6) t2 e−at (s+a)3
(kT )2 (e−aT )k (z−e−aT )3
z(1−e−aT )
(7) 1 − e−at a
s(s+a) 1 − (e−aT )k (z−1)(z−e−aT )
z(e−aT −e−bT )
(8) e−at − e−bt b−a
(s+a)(s+b) (e−aT )k − (e−bT )k (z−e−aT )(z−e−bT )
ω zsenωT
(9) senωt s2 +ω 2
senωkT z 2 −2zcosωT +1
s z(z−cosωT )
(10) cosωt s2 +ω 2
cosωkT z 2 −2zcosωT +1
ze−aT senωT
(11) e−at senωt ω
(s+a)2 +ω 2
(e−aT )k senωkT z 2 −2ze−aT cosωT +e−2aT
z(z−e−aT cosωT )
(12) e−at cosωt s+a
(s+a)2 +ω 2
(e−aT )k cosωkT z 2 −2ze−aT cosωT +e−2aT
2.3 Fundamentos de Sistemas Discretos 49
q(s)
g(s) =
p(s)
g(s)z
g(z) = (s − ai )
z − eT s s=ai
i=1
Q
#
1 dmj −1 mj g(s)z
+ (s − bj ) (2.30)
(mj − 1)! dsmj −1 z − eT s s=bj
j=1
Ejemplo 2.6
Determinar g(kT ) para:
z z
(a) : g(z) = ; (b) : g(z) =
(z − 1)(z − 2) (z − 1)2
Solución: Para el primer caso: P = 2, a1 = 1, a2 = 2, Q = 0. Por tanto:
k
k
z z
g(k) = + = −1 + 2k
z − 1 z=1 z − 1 z=2
Para el segundo caso: P = 0, Q = 1, b1 = 1, m1 = 1. Luego:
1 d 2 z d k
g(k) = (z − 1) z k−1
= (z ) =k
1! dz (z − 1)2 z=1 dz z=1
2.3 Fundamentos de Sistemas Discretos 51
T T
G 1 (s) G 2 (s)
u(s) u*(s) x(s) x*(s) y(s)
(a)
T y(s)
G 1 (s) G 2 (s)
u(s) u*(s)
(b)
u(s) T
G 1 (s) G 2 (s)
x(s) x*(s) y(s)
(c)
T -Ts
1-e
D(z) G p (s)
u(s) u*(s) s y(s)
(d) G(s)
u(s) T y(s) u(s) y(s)
x(s)
G(s) G(s)
+ x*(s) +
- - T
H(s) H(s)
y*(s)
(e) (f)
Por consiguiente:
y(z) = [G2 G1 (s)](z)u(z)
Para la figura (e) se tiene: y(s) = G(s)x∗ (s) y x(s) = u(s) − H(s)y(s).
Reemplazando y(s) en x(s), muestreando y despejando x∗ (s) se obtiene:
u∗ (s)
x∗ (s) =
1 + [GH](z)
G(z)
y(z) = u(z)
1 + [GH](z)
[GH](z)
y(z) = u(z)
1 + [GH](z)
ẋ = Ax + Bu; y = Cx + Du (2.33)
donde:
∞
−1 −1 A(t−t0 ) Aν (t − t0 )ν
φ(t − t0 ) = L [(sI − A) ]=e =
ν!
ν=0
s + 7 −1 −6
s + 7 −1 2
x(s) = + u(s)
12 s 12 1
s −1
#
1 s 1 −6 2 3
= 2 +
s + 7s + 12 −12 s + 7 1 −1 s+1
2
−6s +s−2
(s+1)(s+3)(s+4)
= s2 +77s−14
(s+1)(s+3)(s+4)
−6s2 +s−2
(s+1)(s+3)(s+4) 3
y(s) = Cx(s) + Du(s) = 3 −4 s2 +77s−14 −2
(s+1)(s+3)(s+4)
s+1
−22s2 − 305s + 50 6 297/6 −767/2 918/3
= − = + +
(s + 1)(s + 3)(s + 4) s + 1 s+1 s+3 s+4
297 −t −767 −3t 918 −4t
y(t) = e + e + e , t≥0
6 2 3
2.3 Fundamentos de Sistemas Discretos 55
% GRAFICOS
t=linspace(0,10,101); t1=linspace(0,10,100);
t2=linspace(0,10,250);
plot(t,y,t1,y1,’--’,t2,y2,’-.’); grid
ylabel(’Respuesta y(t)’)
xlabel(’Tiempo en segundos’)
print -deps -f fig2_9
10
−10
y
−20
Salida
−30
−40
−50
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
Figura 2.9: Respuestas y(t) para el ejemplo 2.9. Curva sólida: y(t); en trazos:
y(kT1 ), T1 = 0,04 s; curva punto y raya: y(kT2 ), T2 = 0,1 s.
en: t
x(t) = φ(t − kT )x(t0) + u(kT ) φ(t − τ )Bdτ
t0
donde:
T
AT
G = Φ(T ) = e ; H= φ(λ)dλ B (2.37)
0
Notar que (2.36) es una ecuación vectorial de diferencias que puede ser
resuelta recursivamente, como sigue:
..
.
k
x(k) = Gk x(0) + Gν−1 Hu(k − ν) (2.38)
ν=1
Despejando:
det(zI − G) = 0 (2.43)
y(z) b0 + b1 z −1 + · · · + bn z −n b0 z n + b1 z n−1 + · · · + bn
Gp (z) = = =
u(z) 1 + a1 z −1 + · · · + an z −n z n + a1 z n−1 + · · · + an
(2.44)
y su correspondiente ecuación de diferencias toma la forma:
ci n
y(z) y(z)
= b0 + ; ci = lı́m (z − pi ) (2.58)
u(z) z − pi z→pi u(z)
i=1
Ejemplo 2.10
La función de transferencia de pulso de un proceso se modela como:
6 −i
y(z) i=0 bi z
=
u(z) 1 + 6i=1 ai z −i
donde b0 = 1, b1 = −2,8, b2 = −0,65, b3 = 6,8, b4 = −4,25, b5 = −1,3,
b6 = 1,2, a1 = 1,3, a2 = −1,69, a3 = −0,345, a4 = 0,49, a5 = 0,02 y
a6 = −0,04. Determinar la estabilidad del proceso. Determinar la ecuación
2.3 Fundamentos de Sistemas Discretos 61
1 0 0 0 0 -a5
0 1 0 0 0 -a4
0 0 1 0 0 -a3
0 0 0 1 0 -a2
0 0 0 0 1 -a1];
Ho = [b6-a6*b0
b5-a5*b0
b4-a4*b0
b3-a3*b0
b2-a2*b0
b1-a1*b0];
Co = [0 0 0 0 0 1]; Do=[b0];
[numc,denc] = ss2tf(Gc,Hc,Cc,Dc);
[numo,deno] = ss2tf(Go,Ho,Co,Do);
% SE COMPRUEBA QUE: num=numc=numo, den=denc=deno, eig(Gc)=eig(Go)
Ejemplo 2.11
Ejemplo 2.12
10 yd_
Mux
2s+1
u Proceso parcial Tiempo yd Graph
muerto yd Mux
yda
10 −Tt^3/120s3+Tt^2/10.s 2−Tt/2s+1 yda_
yda
2s+1 Tt^3/120.s3+Tt^2/10.s 2+Tt/2.s+1
Proc. parcial Aproximación del tiempo muerto
10
8
Respuestas al escalóon
−2
0 2 4 6 8 10 12
Tiempo en segundos
Concepto de Observabilidad
Un proceso lineal dinámico con salida y(k) se denomina observable si
algún estado x(k) puede ser obtenido a partir de un número finito de salidas
y(k), y(k − 1), . . . , y(k − n). Consideremos la siguiente ecuación de salida:
y(k) = Cx(k)
y(k) = Cx(k)
y(k + 1) = CGx(k) + CHu(k)
y(k + 2) = CG2 x(k) + CGHu(k) + CHu(k + 1)
..
.
y(k + n − 1) = CGn−1 x(k) + [0, CH, CGH, . . . , CGn−2 H]Un (2.63)
donde:
siempre que det(N ) = 0. Luego, para que el proceso dinámico sea observable,
la matriz de observabilidad N debe cumplir:
rango[N ] = n (2.66)
Ejemplo 2.13
B = [1
0];
C = [0 1]; D = [0];
M = [B A*B]; % MATRIZ DE CONTRABILIDAD
rangM = rank(M);% rangM = 2 = n => COMPLETAMENTE CONTROLABLE
N = [C’ A’*C’]; % MATRIZ DE OBSERVABILIDAD
rangN = rank(N);% rangN = 1 < 2 => NO ES COMPLETAMENTE OBSERVABLE
% PROCESO PENDULO
Bp = 1.3366; Lo = 1.635; Mo = 0.5; g = 9.81;
AP = [0 1
-g/Lo^2 -Bp/(Mo*Lo^2)]; % n = 2
BP = [0
1/(Mo*Lo^2)]; CP = [1 0]; DP = [0];
MP = [BP AP*BP]; % MATRIZ DE CONTRABILIDAD
rangMP = rank(MP); % rangMP = 2 = n => COMPLETAMENTE CONTROLABLE
NP = [CP’ AP’*CP’];% MATRIZ DE OBSERVABILIDAD
rangNP = rank(NP); % rangNP = 2 = n => COMPLETAMENTE OBSERVABLE
Capı́tulo 3
Modelado de Procesos
+ Fuerza de
u control y’
-
Servomotor
D.C. y
θ Pendulo
z F
Carro
11
00
00
11
00
11
l v /2 00
11
me g
θ
mvg lv
le
z’
0
z
P
F
ze = z + le sen θ (3.1)
lv
zv = z + sen θ (3.2)
2
3.1 Modelo del Proceso Péndulo Invertido 71
N
d2
M
mi 2 ri = Fj (3.3)
dt
i=1 j=1
d2 d2 d2 lv
mc z + me (z + l e sen θ) + mv (z + sen θ) = F (3.5)
dt2 dt2 dt2 2
y desarrollando las derivadas resulta:
lv lv
(mc +me +mv )z̈ −(me le +mv )(sen θ)+ θ̇2 (me le +mv )(cos θ)θ̈ = F (3.6)
2 2
Para completar el modelo, utilizamos la segunda ley de Newton aplicada al
movimiento rotatorio alrededor del punto P del carro. Esta ley establece que
para un sistema de N partı́culas en movimiento rotacional respecto a un sis-
tema de referencia inercial, sometidas a M torques externos perpendiculares
al plano de giro, se cumple que:
N
d2 M
Ji 2 θi = τj (3.7)
dt
i=1 j=1
Ra θm
+
u Va Vb Jo rp
-
La Jm F
Bm Bo
Ra ia + Vb = KA u = Va (3.11)
Vb = Kb θ̇m (3.12)
donde:
Tm = Km ia (3.16)
Jeq Beq n rp
ia = θ̈m + θ̇m + F (3.17)
Km Km Km
donde:
lv
M1 = mc + me + mv ; M2 = me le + mv (3.24)
2
Jeq
J1 = Je + Jv ; J2 = (3.25)
n2 rp2
Km Beq Kb Km
Kx = ; Bx = + (3.26)
Ra nrp n2 rp2 n2 rp2 Ra
x1 = θ (3.27)
x2 = θ̇ (3.28)
x3 = z (3.29)
x4 = ż (3.30)
y = Cx (3.32)
donde:
1 0 0 0
C= (3.33)
0 0 1 0
3.1 Modelo del Proceso Péndulo Invertido 75
ẋ = Ax + Bu (3.38)
donde:
0 1 0 0
(M1 +J2 )M2 g Bx M2
(M1 +J2 )J1 −M22
0 0 (M1 +J2 )J1 −M22
A=
(3.39)
0 0 0 1
−M22 g −J1 Bx
(M1 +J2 )J1 −M22
0 0 (M1 +J2 )J1 −M22
0
−Kx M2 KA
(M1 +J2 )J1 −M22
B= (3.40)
0
J1 Kx KA
(M1 +J2 )J1 −M22
G = Φ(T ) (3.46)
3.2 Modelo del Proceso Grúa-Puente 77
T
H= Φ(λ)(dλ) B (3.47)
0
La ecuación de salida en tiempo discreto viene a ser:
z F
Carro
θ
’ puente
Grua
y’
y y’
z
P z’
0
F z
lv
θ
2
111
000
000
111
le
000
111
000 m v g
111 lv
me g
lv
zv = z −
sen θ (3.50)
2
Aplicando la ley de Newton para el movimiento lineal dada por la ecuación
(3.3) en la dirección z, obtenemos:
d2 d2 d2
mc z + me z e + mv zv = F (3.51)
dt2 dt2 dt2
Luego, sustituyendo ze y zv en función de z:
d2 d2 d2 lv
mc 2
z + me 2
(z − l e sen θ) + mv 2
(z − sen θ) = F (3.52)
dt dt dt 2
y desarrollando las derivadas, tenemos:
lv lv
(mc +me +mv )z̈+(me le +mv )(sen θ)θ̇2 −(me le +mv )(cos θ)θ̈ = F (3.53)
2 2
Ahora, aplicando en la figura 3.5 la segunda ley de Newton para el movimien-
to rotatorio dada por la ecuación (3.7) alrededor del punto P:
lv lv
(Je + Jv )θ̈ = me z̈(cos θ)le + mv z̈(cos θ) − me g(senθ)le − mv g(sen θ)
2 2
(3.54)
3.2 Modelo del Proceso Grúa-Puente 79
y reordenando, obtenemos:
lv lv
(me le + mv )z̈(cos θ) − (me le + mv )g(sen θ) = (Je + Jv )θ̈ (3.55)
2 2
donde:
lv2
Je = me le2 ; Jv = mv
3
y = Cx (3.64)
donde:
1 0 0 0
C= (3.65)
0 0 1 0
ẋ = Ax + Bu (3.66)
donde:
0 1 0 0
−(M1 +J2 )M2 g −Bx M2
(M1 +J2 )J1 −M22
0 0 (M1 +J2 )J1 −M22
A=
(3.67)
0 0 0 1
−M22 g −J1 Bx
(M1 +J2 )J1 −M22
0 0 (M1 +J2 )J1 −M22
y
0
Kx M2 KA
(M1 +J2 )J1 −M22
B= (3.68)
0
J1 Kx KA
(M1 +J2 )J1 −M22
entrada vs salida
800
600
400
200
salida
−200
−400
−600
−800
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
entrada
Figura 3.6: Respuesta del servomotor sin compensar (voltaje vs. velocidad
angular).
entrada vs salida
150
100
50
salida
−50
−100
−150
−0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4
entrada
entrada vs salida
800
600
400
200
salida
−200
−400
−600
−800
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
entrada u
si SE\~NAL_DE_CONTROL < 0
entonces VOLTAJE_HACIA_EL_MOTOR = SE\~NAL_DE_CONTROL - 0.1
si SE\~NAL_DE_CONTROL > 0
entonces VOLTAJE_HACIA_EL_MOTOR = SE\~NAL_DE_CONTROL + 0.1
si SE\~NAL_DE_CONTROL = 0
entonces VOLTAJE_HACIA_EL_MOTOR = SE\~NAL_DE_CONTROL
I MO
T N1 RO
11
00
+ + 00
11
00
11
LO
u Kact eb Jm 00
11 m
- - 00
11
00
11
00
11 q
0000
1111
0000
TM 1111
0000ω m
1111 00
11
00
11
TL ω
R L 00
11
bm q 00
11
00
11
m 00
11 JL
00
11
00
11
N 2 = n N1 00
11
00
11 00000
11111
00
11 11111
00000
N2 00 11111
11 00000bL
nT = nTM + TE + TL + TN (3.69)
donde:
TM = Jm ẇm + bm wm = nJm ẇ + nbm w (3.70)
2 1
TL = (Mo L2o + Mo Ro2 + mL2o + JL )ẇ + bL w (3.71)
5 3
m
TE = gLo (Mo + )sen q (3.72)
2
Reemplazando las ecuaciones (3.70), (3.71) y (3.72) en la ecuación (3.69) se
obtiene:
nTm = M ẇ + Bw + N sen q + TN (3.73)
donde:
2 1
M = Jef f + M L2o + M Ro2 + mL2o ) (3.74)
5 3
m
N = gLo (M + ) (3.75)
2
Jef f = n2 Jm + JL (3.76)
B = n2 bm + bL (3.77)
eb = Ewm (3.79)
Va = uKact (3.80)
3.3 Modelo del Servomotor D.C. No Lineal 87
T = KI (3.81)
ẋ1 = x2
N B 1 nK
ẋ2 = −( )senx1 − x2 − TN + x3
M M M M
nE R Kact
ẋ3 = − x2 − x3 + u (3.85)
L L L
donde la salida es la posición x1 . Por consiguiente:
x2
F (x) = −( M )senx1 − M x2 − M
N B 1
TN + nK
M x3
− L x2 − L x3
nE R
0
G(x) = 0 ; H(x) = x1 (3.86)
Kact
L
cc
gan1 fricción de
Coulomb
Kact + n*K − 1 w 1 q
− +
R − Ms+B s
gan5
sum1subsistema sum2 subsistema Integrador gráfico
eléctrico mecánico
u n*E
gan2 N MATLAB
Function
gan3 seno
1.4
1.2
Posición q (rad); entrada u (voltios)
0.8
0.6
u
0.4
0.2
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
y(z) b1 z + b2 b1 z −1 + b2 z −2
Gp (z) = = 2 = (3.96)
u(z) z + a1 z + a2 1 + a1 z −1 + a2 z −2
3.4 Problemas Resueltos 91
y(z) b1 z −1 + b2 z −2
Gp (z) = = C(zI − G)−1 H = (3.102)
u(z) 1 + a1 z −1 + a2 z −2
Problema 3.1
Masa de 1/4
x1 m1
del bus
k1 u b1
x2 Masa de la m2
suspension
k2 b2
w
Se puede demostrar que las ecuaciones de estado y de salida del proceso son:
ẋ1 0 1 0 0 x1 0 0
ẍ1 a21 0 a23 − m b1
x˙1 1
= 1
+ m1 u+ −ab21
2 w
ẏ1 − b2 0 a33 1 y1 0 − m2
m2
1 1
ẏ2 k2
m2 0 a43 0 y2 m1 + m2 −m k2
2
x1
x˙1 u
y= 0 0 1 0 y1
+ 0 0
w
y2
donde:
y1 = x1 − x2
k1 k1 k2 1 1
y2 = − + y1 − (w − x2 ) + + u dt
m1 m2 m2 m1 m2
b1 b2 b1 b1 b1 b2 k1
a21 = − ; a23 = + + −
m1 m2 m1 m1 m2 m2 m1
b1 b1 b2 k1 k1 k2
a33 = − + + ; a43 = − + +
m1 m2 m2 m1 m2 m2
% P3_1P3.m SOLUCION AL PROBLEMA 3.1
clear all
94 Modelado de Procesos
% G =
% 0.9995 0.0100 -0.0010 0.0000
% -0.1306 0.9995 -0.1834 -0.0024
% 0.4271 0.0022 0.5513 0.0077
% 11.5437 0.0643 -14.1982 0.9221
% H =
% 0.0000 0.0005
% 0.0000 0.1306
% 0.0000 -0.4271
% 0.0000 -11.5437
% RESPUESTAS AL ESCALON
[Y,X,t] = step(A,B,C,D);
[YY,XX] = dstep(G,H,C,D);
tt = linspace(0,size(YY,1)*T,size(YY,1));
subplot(221)
plot(t,Y(:,1)); grid
xlabel(’Tiempo en segundos’)
3.4 Problemas Resueltos 95
−5 −5
x 10 x 10
2.5 2.5
y(k) para u=1, w=0
y(t) para u=1, w=0
2 2
1.5 1.5
1 1
0.5 0.5
0 0
0 50 100 150 0 50 100 150
Tiempo en segundos Tiempo en segundos
1 1
y(k) para u=0, w=1
y(t) para u=0, w=1
0.5 0.5
0 0
−0.5 −0.5
−1 −1
0 50 100 150 0 50 100 150
Tiempo en segundos Tiempo en segundos
Problema 3.2
θ
Impulso α
γ
e
x’
Arrastre
δe
z
Peso
z’
% G =
% 0.9968 0.5649 0
% -0.0001 0.9957 0
% 0.0000 0.5658 1.0000
% H =
% 0.0024
% 0.0002
% 0.0001
% RESPUESTAS AL ESCALON
[Y,X,t] = step(A,B,C,D);
[YY,XX] = dstep(G,H,C,D);
98 Modelado de Procesos
tt = linspace(0,size(YY,1)*T,size(YY,1));
subplot(211)
plot(t,Y); grid
xlabel(’Tiempo en segundos’)
ylabel(’y(t) continua’)
subplot(212)
plot(tt,YY); grid
xlabel(’Tiempo en segundos’)
ylabel(’y(k) discreta’)
print -deps -f P3_2P4
6
y(t) continua
0
0 5 10 15 20 25 30
Tiempo en segundos
4
y(k) discreta
0
0 5 10 15 20 25
Tiempo en segundos
Problema 3.3
r
L BARRA
ESFERA
LEVA
α
θ
ENGRANAJE
d
r
ṙ
y= 1 0 0 0 α
α̇
El modelo descrito está en www.engin.umich.edu/group/ctm/index.html.
% G =
% 1.0000 0.1000 0.0010 0.0000
% 0 1.0000 0.0209 0.0010
3.4 Problemas Resueltos 101
% 0 0 1.0000 0.1000
% 0 0 0 1.0000
% H =
% 0.0000
% 0.0000
% 0.0050
% 0.1000
% RESPUESTAS AL ESCALON
TT=0:0.1:3;
[Y,X] = step(A,B,C,D,1,TT);
[YY,XX] = dstep(G,H,C,D,1,31);
subplot(211)
plot(TT,Y); grid
xlabel(’Tiempo en segundos’)
ylabel(’y(t) continua’)
subplot(212)
plot(TT,YY); grid
xlabel(’Tiempo en segundos’)
ylabel(’y(k) discreta’)
print -deps -f P3_3P5
0.8
0.6
y(t) continua
0.4
0.2
0
0 0.5 1 1.5 2 2.5 3
Tiempo en segundos
0.8
0.6
y(k) discreta
0.4
0.2
0
0 0.5 1 1.5 2 2.5 3
Tiempo en segundos
Problema 3.4
La curva exponencial 120e−t/τ obtenida con los datos de la tabla 3.3 permite
calcular su constante de tiempo τ = rc = 3000 s. La curva cuadrática
obtenida con los datos de la tabla 3.4 permite obtener r/R = 5 × 10−2 . Por
consiguiente, la dinámica del horno resulta:
dΘi 1 1 1
=− Θi + Θ0 + V 2 = f (Θi , Θo , Vc )
dt 3000 3000 60000 c
Para efectos de linealización podemos definir las siguientes variables:
dθi 1 1 1
=− θi + θo + vc
dt 3000 3000 1500
104 Modelado de Procesos
Problema 3.5
1.5
y(t) continua
0.5
0
0 2000 4000 6000 8000 10000 12000 14000 16000
Tiempo en segundos
1.5
y(k) discreta
0.5
0
0 2000 4000 6000 8000 10000 12000
Tiempo en segundos
ẋ = Ax + Bu(t)
donde:
0 1 0 0 0 0
− K12 +B12
− B1M K12 B12
M1 M1 M1 0 0
0 1
0 0 1 0 0
A = K12
M2 B12
− K12M+K 23
− B2 +BM232+B12 K23 B23
M2 2 M2 M2
0 0 0 0 0 1
+B23
0 0 K23
M3
B23
M3 −K23
M3 − B3M 3
x = [x1 v1 x2 v2 x3 v 3 ]T
B = [0 1 0 0 0 0]T
106 Modelado de Procesos
11
00
00
11 x1
00
11
00
11 x3
x2
00
11
00
11
00
11
B 23 B 12
00
11
00
11
2do. CARRO 1er. CARRO MAQUINA
00
11 M3 M2 M1
00
11 0000000
1111111
K 23 1111111
0000000 K 12 11111111
00000000
0000000000000000000000000000000000000
11111111111111111111111111111111111
0000000
1111111 0000000
1111111 00000000
11111111
11 B3 B2 B1
yi = αi vi , i = 1, 2, 3
donde αi es la constante tacométrica. Asumir los siguientes valores para
los parámetros: M2 = M3 = 2M1 = 2600 kg, K23 = K23 = 100000 N/m,
B23 = B12 = 500 N-s/m y B2 = B3 = 2B1 = 10000 N-s/m.
% P3_5P7.m SOLUCION AL PROBLEMA 3.5
clear all
% MODELO DEL MONORRIEL
M2=2600; M3=M2; M1=1300; K23=100000; K12=K23; alfa=1;
B23=500; B12=B23; B2=10000; B3=B2; B1=5000;
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];
C = [0 alfa 0 0 0 0
0 0 0 alfa 0 0
0 0 0 0 0 alfa]; D = [0;0;0];
3.4 Problemas Resueltos 107
Problema 3.6
0.1
continuas
0.08
0.06
Salidas 0.04
0.02
0
0 0.5 1 1.5 2 2.5 3
Tiempo en segundos
0.1
discretas
0.08
0.06
0.04
Salidas
0.02
0
0 0.5 1 1.5 2 2.5 3
Tiempo en segundos
el cual no debe exceder los ± 200 volt. Esto significa una velocidad x1 en
estado estable de:
0,001
x̄1 = (200) = 1 m/s
s + 0,2 s=0
Observar en la figura 3.22(d) que la velocidad y posición del elevador se
miden separadamente. Entre pisos, el amplificador de potencia se encuen-
tra en estado de saturación, generando ± 200 volt, dependiendo de si el
ascensor está subiendo o bajando. Cuando el ascensor se aproxima al piso
donde debe parar, la operación del amplificador pasa a la zona lineal. En
esta situación debe actuar un controlador para posicionar suavemente al as-
censor empleando las mediciones de velocidad y posición del ascensor. Tales
mediciones, ası́ como también la medición del voltaje de armadura en la zona
de saturación, están disponibles para cada piso. La figura 3.22(d) muestra el
sistema de control digital del ascensor. Las ecuaciones de estado y de salida
del ascensor son:
−3
ẋ1 −0,2 0 0 0 x1 10
ẋ2 1 0 0 0 x2 0
ẋ3 = 2 0 −2 0 x3 0
+
ẋ4 5 0 0 −5 x4 0
3.4 Problemas Resueltos 109
y= 0 1 0 0 x
% G =
% 0.9608 0 0 0
% 0.1961 1.0000 0 0
% 0.3227 0 0.6703 0
% 0.6176 0 0 0.3679
% H = 1.0e-003 *
% 0.1961
% 0.0197
% 0.0347
% 0.0725
% RESPUESTAS AL ESCALON
110 Modelado de Procesos
v x1
200 0.005
3000
1
u t
-200 5 10 15
(b) (c)
Posicion del
x4 ascensor
u D/A con u v Actuador
mas x
memoria sensores 2
x4
Computador Amplificador
digital
x3 Voltaje de sensor de
armadura velocidad
v
A/D
sensor de posicion x3
(d)
[Y,X,t] = step(A,B,C,D);
[YY,XX] = dstep(G,H,C,D);
tt = linspace(0,size(YY,1)*T,size(YY,1));
subplot(211)
plot(t,Y); grid
xlabel(’Tiempo en segundos’)
ylabel(’Salidas continuas’)
subplot(212)
plot(tt,YY); grid
xlabel(’Tiempo en segundos’)
ylabel(’Salidas discretas’)
print -deps -f P3_6P8
0.15
Salidas continuas
0.1
0.05
0
0 5 10 15 20 25 30
Tiempo en segundos
0.2
Salidas discretas
0.15
0.1
0.05
0
0 5 10 15 20 25 30 35 40 45
Tiempo en segundos
Problema 3.7
orden. La figura 3.24(b) muestra la F.T. del proceso. El modelo del proceso
en estudio se encuentra en la referencia [10].
Tolva Controlador
Referencia
Sensor
Horno
d
v
v Deposito
(b)
d/v
u hs hr vr
1 10
e -(d/v)s
s+1 s + 0.5
Horno Tiempo muerto Sensor
% H =
% 0.0872
% 0.0046
% 0.0002
% 0.0000
% 0.0000
% EIGENVALORES:
eigG = eig(G);
% eigG =
% 0.9048; 0.9633+0.0338i; 0.9633-0.0338i; 0.9512; 0.9546
% RESPUESTAS AL ESCALON
[Y,X,t] = step(A,B,C,D);
[YY,XX] = dstep(G,H,C,D);
tt = linspace(0,size(YY,1)*T,size(YY,1));
subplot(211)
plot(t,Y); grid
xlabel(’Tiempo en segundos’)
ylabel(’Humedad continua’)
subplot(212)
plot(tt,YY); grid
xlabel(’Tiempo en segundos’)
ylabel(’Humedad’)
print -deps -f P3_7P10
Problema 3.8
Los parámetros valorados del proceso mostrado en la figura 3.26 son: momen-
to de inercia del rotor J = 0.01 kg-m2 /s2 , constante electromotriz Ke = Kt
= 0.01 N-m/A, resistencia R = 12 ohm, resistencia de armadura RA R,
condensador C = 0.5 µF, inductancia de armadura L = 0.5 H, constante
torsional Kω = 1.8 N-m/rad.
Las ecuaciones que gobiernan la dinámica del proceso electromecánico
mostrado en la figura 3.26 se describen a continuación. Subproceso eléctrico:
1 vC dIM
IR = (v − vC ); C = IR − IM ; L = vC − e
R dt dt
114 Modelado de Procesos
20
continua
15
10
Humedad 5
−5
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
20
Humedad discreta
15
10
−5
0 5 10 15 20 25
Tiempo en segundos
Motor:
T = Kt IM ; e = Ke ω1
Resorte torsional más la inercia J:
dT dω2
= Kω (ω1 − ω2 ); J =T
dt dt
Seleccionando como variables de estado x1 = vC , x2 = IM y x3 = ω2 , y
como salida y = x3 , la representación de estado del proceso resulta:
ẋ = Ax + Bu; y = Cx
1
− RC − C1 0
A= Kω
LKω +Kt Ke 0 −Ke Kω
LKω +Kt Ke
Kt
0 J 0
1
RC
B = 0 ; C= 0 0 1
0
El modelo del proceso en estudio se encuentra en la referencia [10].
3.4 Problemas Resueltos 115
IR R L IM
+ Kω
+
v C e
-
-
T ω2
J
ω1
% 0.9720 + 0.1968i
% 0.9720 - 0.1968i
% G =
% 0.9638 -0.1970 0
% 0.1970 0.9802 0
% 0.0099 0.0993 1.0000
% H =
% 0.0164
% 0.0017
% 0.0001
% RESPUESTAS AL ESCALON
[Y,X,t] = step(A,B,C,D);
[YY,XX] = dstep(G,H,C,D);
tt = linspace(0,size(YY,1)*T,size(YY,1));
subplot(211)
plot(t,Y)
xlabel(’Tiempo en segundos’)
ylabel(’Voltaje en C (continuo)’)
grid
subplot(212)
plot(tt,YY)
xlabel(’Tiempo en segundos’)
ylabel(’Voltaje en C (discreto)’)
grid
print -deps -f P3_8P11
Voltaje en C (continuo)
4
0
0 5 10 15 20 25 30 35 40 45 50
Tiempo en segundos
5
Voltaje en C (discreto)
0
0 10 20 30 40 50 60
Tiempo en segundos
Problema 3.9
Las ecuaciones del modelo linealizado para controlar la posición angular del
cañón ubicado en la la torreta de un tanque mediante un actuador hidráulico
son las siguientes (ver figura 3.28):
θ̇ = ω
ω̇ = p + dτ
Km Km
ṗ = −Ωm p − q+ ω + dp
J J
q̇ = −Kv Lv q − Kv K∆p Jp + Kv u + dq ; Lv = 1
donde θ es el ángulo de la torreta, ω es la velocidad angular de la torreta, p
es la aceleración angular producida por el actuador hidráulico, q es el des-
plazamiento de la servoválvula, Km = [8.46×106 , 1.96×106 ] (el primer valor
118 Modelado de Procesos
Angulo de
θ ’
elevacion
’
Azimut: angulo de
posicionamiento horizontal
Problema 3.10
Extractante
(glycol)
Agua
11
00
00 T1 T1
Mezcla de 1100
11
S: flujo lateral
de vapor
agua e iso-
propanol z
1 Propanol
Glycol T
11
00 T
00 2
11
2
00
11
z2
u 1 : vapor de
calentamiento
Producto (glycol) Concentraciones Temperaturas
x = Ax + Bu + F d; y = Cx
donde:
∆Q1
∆V1 ∆u1 ∆xF A1 ∆T1
x=
∆z1 ; u= ; d= ; y=
∆S ∆FA ∆T2
∆z2
a11 0 0 0 b11 0
a21 a22 0 0 0 0
A= 0
; B=
a32 0 0 0 b32
0 a42 ) 0 0 0 b42 )
0 0
0 0 0 0 c13 0
F =
f31
; C=
f32 0 0 0 c24
0 f42
120 Modelado de Procesos
con a11 = −30,3, a21 = 0,12 × 10−3 , a22 = −6,02, a32 = −3,77, a42 = −2,8,
b11 = 6,15 × 105 , b32 = 3,04, b42 = 0,052, f31 = 62,2, f32 = 5,76, f42 = 5,12,
c13 = −7,3 y c24 = −25. Las variables poseen el siguiente significado (ver
figura 3.29): ∆Q1 es el flujo de calor producido por el caldero de vapor, ∆V1
es el flujo de vapor producido por el caldero de vapor, ∆u1 es el vapor de
calefacción, ∆S es el flujo de vapor lateral, ∆z1 es la posición del cambio
de interfase entre el agua y el isopropanol, ∆z2 es la posición del cambio de
interfase entre el agua y el glycol, ∆T1 y ∆T2 son los cambios de temperatura
en z1 y z2 , ∆FA es el flujo de la mezcla de agua más isopropanol, y ∆xF A1
es la composición de la mezcla de agua más isopropanol. Notar que todas
las variables son residuales; es decir, representan los cambios con respecto al
estado de equilibrio. El modelo de este proceso de encuentra en la referencia
[17].
Problema 3.11
Problema 3.12
Mo Ro
L1 τ
m1
’
Union
R θm no
+ Ν1 flexible
Lo θ
u Va eb
m
-
Jm
L Bm θ
Ν2 BL JL
Problema 3.13
Problema 3.14
+ Fuerza de
u control
- τ
Servomotor
D.C. y
θ
z F
Carro
+ Fuerza de
u control
-
Servomotor
D.C. y
z F
Carro
θ
z
Doble
y’ ’ puente
τ grua
Control Óptimo
4.1. Introducción
El control óptimo trata de determinar el “mejor” sistema de control emple-
ando una técnica óptima de diseño. Esta técnica asume la formulación de una
función matemática denominada la función de costo, también conocida como
función de rendimiento, ı́ndice de rendimiento o ı́ndice de funcionamiento,
entre otras denominaciones. El procedimiento de diseño del sistema de con-
trol óptimo trata de encontrar un extremo (un mı́nimo o un máximo, dado el
caso) de una función de costo con el propósito de determinar los parámetros
124 Control Óptimo
donde K(k) (de dimensión r×n) es la matriz de ganancia del controlador, de-
nominada también matriz de realimentación de estados. Cuando la dinámica
del sistema de control es finita, K(k) es una matriz variante en el tiempo;
pero cuando dicha dinámica alcanza su estado estacionario (es decir, cuando
N → ∞), entonces K(k) se convierte en una matriz constante K. En esta
última situación, estaremos frente al denominado control óptimo en estado
estacionario, y es el que usaremos en nuestras aplicaciones. Una condición
necesaria para poder aplicar el control por realimentación de estados es que
el proceso sea completamente controlable. Por consiguiente, será necesario
verificar dicha condición en el proceso antes de iniciar el procedimiento de
diseño.
La realimentación de estados requiere además que todos los estados sean
disponibles y medibles. Si en el sistema a controlar existieran estados que
126 Control Óptimo
posea rango completo; es decir, el rango de M debe ser igual al orden n del
proceso.
La solución al problema del control óptimo cuadrático no estacionario
está dada por la siguiente matriz de ganancia del controlador:
P (N ) = S (4.10)
Por otra parte, en el estado estacionario la matriz P (k) resulta una matriz
constante P . De este modo la ecuación de Riccati en estado estacionario
toma la forma:
K = [R + H T P H]−1 H T P G (4.14)
u (k) x (k)
H I z -1
-K
x (k)
r(k) + u(k) y(k) = x 2 (k)
k2 x (k+1) = G x (k) + Hu(k) .. C
+ .
- -
- - k1
k3
..
.
kn
z−1
lı́m y(k) = lı́m y(z) = C(I − G + HK)−1 Hk2 R (4.22)
k→∞ z→1 z
130 Control Óptimo
donde los elementos qi pueden ser positivos y algunos de ellos nulos para
que Q sea una matriz simétrica semidefinida positiva.
Cada elemento qi o cada elemento ri dará un peso correspondiente a cada
variable de estado xi o a cada señal de control ui , respectivamente. El criterio
para escoger los pesos está en relación con la importancia que le demos a
cada variable o señal en cuestión. Para el caso del observador de estados,
las matrices de ponderación Re y Qe deben ser elegidas de tal forma que
la respuesta del observador sea dos o tres veces más rápida (regla práctica)
en comparación con la respuesta del proceso. Es decir, la salida y(k) del
proceso (ver figura 4.6) debe alcanzar su estado estacionario después que la
salida ŷ(k) del observador ya la haya alcanzado. Generalmente para que esto
ocurra, los elementos de Re deben ser bastante menores que los elementos
de Qe . Debemos tener en cuenta que un mayor peso en una de las variables
ocasiona una mejor respuesta con relación a tal variable, pero disminuye el
desempeño de las demás. Es entonces necesario balancear en forma adecuada
los pesos, de manera tal que obtengamos un desempeño general del sistema,
que se acerque en lo posible al óptimo y que evidentemente, cumpla las
especificaciones de diseño.
Ejemplo 4.1
R L
+ T
+
.
V e=Kθ J
- - .
bθ
I b
x1
y = x1 = 1 0 + DV ; D = [0]
x2
El programa ejem4 1.m resuelve el problema planteado y los resultados se
muestran en la figura 4.4.
end
Kr = inv(R + H’*P*H)*H’*P*G;
% SE CUMPLE QUE K=Kr Y P=Pr
0.1
yRpta (rad/s)
0.05
0
0 0.5 1 1.5 2 2.5 3
1.5
y (rad/s)
0.5
0
0 0.5 1 1.5 2 2.5 3
40
V (voltios)
20
0
0 0.5 1 1.5 2 2.5 3
Tiempo (s)
Figura 4.4: Respuesta yRpta (a lazo abierto) del motor D.C. a un escalón
de 1 rad/s. La velocidad angular controlada es y; la señal de control es V .
Ejemplo 4.2
1.5
y (rad)
0.5
0
0 0.5 1 1.5 2 2.5 3
60
40
V (voltios)
20
−20
0 0.5 1 1.5 2 2.5 3
Tiempo (s)
^
y(k) − y(k)
Ke
+
^x (k)
− +
H I z −1 C
+ +
+
G
det[zI − G + Ke C] = 0 (4.28)
G → GT ; H → CT ; K → KeT (4.31)
Ejemplo 4.3
Diseñar un observador óptimo para el proceso motor D.C. del ejemplo 4.2
asumiendo que se requiere observar los estados x1 , x2 y x3 .
Solución: Ver programa ejem4 3.m. En la figura 4.3 se muestra la evolu-
ción de los valores de algunos elementos de Pe hasta alcanzar el estado de
equilibrio.
% ejem4_3.m OBSERVADOR OPTIMO PARA EL MOTOR D.C.
clear all
J = 0.01; b = 0.1; K = 0.01; R = 1; L = 0.5;
A = [-b/J K/J 0
-K/L -R/L 0
1 0 0];
B = [0;1/L;0];
Cc = [0 0 1]; Dc = [0];
T = 0.05; % SELECCIONADO EN EL EJEMPLO 4.1
[G,H,C,D] = c2dm(A,B,Cc,Dc,T,’zoh’); % CONVERSION A DISCRETO
Pe =zeros(3,3); % condicion inicial
Qe = [1 0 0;0 1 0;0 0 1]; Re = [1]; % TODOS CON IGUAL PESO
for k=1:40
Pe = Qe + G*Pe*G’ - G*Pe*C’*inv(Re + C*Pe*C’)*C*Pe*G’;
pe11(k) = Pe(1,1); pe21(k) = Pe(2,1); pe31(k) = Pe(3,1);
end
t = linspace(0,length(pe11),length(pe11)); % EJE DE TIEMPOS
plot(t,pe11,t,pe21,’--’,t,pe31,’-.’);
xlabel(’Muestras k’);
ylabel(’Algunos elementos de Pe’); grid
print -deps -f ejem4_3
Ke = inv(Re + C*Pe*C’)*C*Pe*G’; % GANANCIA DEL OBSERVADOR
1.8
1.6
1.4
Algunos elementos de Pe
1.2
0.8
0.6
0.4
0.2
0
0 5 10 15 20 25 30 35 40
Muestras k
referencia r(k) un escalón unitario, de la figura 4.8 podemos deducir que las
4.7 El Regulador Óptimo Proporcional Integral 141
de donde se obtiene:
Si definimos:
x(k) − x(∞) = xe (k) (4.48)
v(k) − v(∞) = ve (k) (4.49)
y restamos ahora la ecuación (4.47) de (4.45), y luego usando las relaciones
(4.48) y (4.49) obtendremos:
xe (k + 1) G − HK HKI xe (k)
=
ve (k + 1) −CG + CHK 1 − CHKI ve (k)
G 0 xe (k) H xe (k)
= + −K KI (4.50)
−CG I ve (k) −CH ve (k)
1
∞
J= ξ(k)T Q̃ξ(k) + w2 (k)R̃ (4.57)
2
k=0
4.7 El Regulador Óptimo Proporcional Integral 143
Debemos entonces calcular una matriz K̃ adecuada de forma tal que mini-
mice la función de costo dada en la ecuación (4.57). Empleando el mismo
procedimiento usado en la sección 4.3, es posible formular la ecuación de
Riccati y la ecuación de ganancia del controlador K̃ para el regulador, como
sigue:
P̃ = Q̃ + G̃T P̃ G̃ − G̃T P̃ H̃[R̃ + H̃ T P̃ H̃]−1 H̃ T P̃ G̃ (4.58)
K̃ = [R̃ + H̃ T P̃ H̃]−1 H̃ T P̃ G̃ (4.59)
La selección del tiempo de muestreo se trata en la subsección 4.9.6.
Ejemplo 4.4
for k=1:N
v = v + r - yi;
V(k) = -K*x + KI*v;
x = G*x + H*V(k);
y(k) = x(1); yi = y(k);
end
% GRAFICOS
t = linspace(0,T*N,N);
subplot(2,1,1)
plot(t,y); ylabel(’y (rad/s)’); grid;
subplot(2,1,2)
plot(t,V); ylabel(’V (voltios)’); grid;
xlabel(’Tiempo (s)’)
print -deps -f ejem4_4
% CALCULO RECURSIVO DE LA MATRIZ Ptilde Y CALCULO DE Ktilde
T = 15; Ptilde = zeros(3,3);
for i=1:T
Ptilde = Q + Gtilde’*Ptilde*Gtilde - Gtilde’*Ptilde*Htilde*...
inv(R+Htilde’*Ptilde*Htilde)*Htilde’*Ptilde*Gtilde;
end
Ktilde = inv(R + Htilde’*Ptilde*Htilde)*Htilde’*Ptilde*Gtilde;
% SE CUMPLE QUE Ktil = Ktilde Y Ptil = Ptilde
1.5
1
y (rad/s)
0.5
0
0 0.5 1 1.5 2 2.5 3
25
20
V (voltios)
15
10
5
0 0.5 1 1.5 2 2.5 3
Tiempo (s)
1,0002 0,0050 0 0,0002 −0,0004
0,0995 1,0002 0 0,0963 −0,1497
G=
0,0000
; H=
0,0000 1,0000 0,0049 0,0002
−0,0019 0,0000 0 0,9508 0,0765
C= 0 0 1 0
donde:
G 0 H
G̃(k) = ; H̃(k) = ; K̃(k) = K −KI
−CG I −CH
G1 = [G zeros(4,1)
-Cc*G 1];
H1 = [H;-Cc*H];
% MATRIZ DE CONTROLABILIDAD
M = [H1 G1*H1 G1^2*H1 G1^3*H1 G1^4*H1];
rM = rank(M); % rM = 5 => COMPLETAMENTE CONTROLABLE
1,0002 0,0050 0 0,0002 0 −0,0004
0,0995 1,0002 0 0,0963 0 −0,1497
G̃ =
0,0000 0,0000 1,0000 0,0049 0 ;
H̃ =
0,0002
−0,0019 0,0000 0 0,9508 0 0,0765
0,0000 0,0000 −1,0000 −0,0049 1,0000 −0,0002
148 Control Óptimo
C = [1 0 0 0
0 0 1 0];
N = [C’ G’*C’ G’^2*C’ G’^3*C’ G’^4*C’];
rnN = rank(N); % debe ser rnN = 4
Pe (k + 1) = Qe + GPe (k)GT − GPe (k)C T [Re + CPe (k)C T ]−1 CPe (k)GT
for i = 1:40
Pe = Qe + G*Pe*G’-G*Pe*C’*inv(Re+C*Pe*C’)*C*Pe*G’
end
150 Control Óptimo
d = ((M1+J2)*J1-M2^2);
a21 = (M1+J2)*M2*g/d; a24 = Bx*M2/d;
a41 = -M2^2*g/d; a44 = -J1*Bx/d;
b21 = -Kx*M2*KA/d; b41 = J1*Kx*KA/d;
% MODELOS LINEALES CONTINUO Y DISCRETO
A = [0 1 0 0
a21 0 0 a24
0 0 0 1
a41 0 0 a44];
B = [0
b21
0
b41];
Cc = [0 0 1 0]; % POSICION DEL CARRO
Ts = 1/200; % TIEMPO DE MUESTREO
[G,H] = c2d(A,B,Ts);
G1 = [G zeros(4,1)
-Cc*G 1];
H1 = [H;-Cc*H];
M = [H1 G1*H1 G1^2*H1 G1^3*H1 G1^4*H1];
rM = rank(M); % rM=5 => COMPLETAMENTE CONTROLABLE
% CALCULO DE LA GANANCIA DEL CONTROLADOR
Q = [200 0 0 0 0
0 0 0 0 0
0 0 100 0 0
0 0 0 0 0
0 0 0 0 0.01]; R = [100];
P = zeros(5,5);
for i=1:1000
P = Q + G1’*P*G1 -G1’*P*H1*inv(R+H1’*P*H1)*H1’*P*G1;
end
K1 = inv(R+H1’*P*H1)*H1’*P*G1;
[KK,PP] = dlqr(G1,H1,Q,R); % K1=KK, P=PP
K = [KK(1) KK(2) KK(3) KK(4)]; KI = - KK(5);
% CALCULO DE LA GANANCIA DE UN OBSERVADOR
C = [1 0 0 0
0 0 1 0]; % SE OBSERVAN POSICIONES ANGULAR Y LINEAL
Qe = [1 0 0 0
0 1000 0 0
0 0 0.9 0
0 0 0 1000]; Re = [1 0;0 10];
Pe = zeros(4,4);
for i=1:40
152 Control Óptimo
Pe = Qe + G*Pe*G’ -G*Pe*C’*inv(Re+C*Pe*C’)*C*Pe*G’;
end
KeT = inv(Re+C*Pe*C’)*C*Pe*G’; Ke=KeT’;
[KKeT,PPe] = dlqr(G’,C’,Qe,Re); KKe=KKeT’;% Pe=PPe, Ke=KKe
% SIMULACION DEL SISTEMA DE CONTROL OPTIMO
% CONDICIONES INICIALES
x1=0; x2=0; x3=0; x4=0; x5=0;
xe = [0;0;0;0]; r=1.5;
v=0; N = 4000; % TIEMPO EN SEGUNDOS: Ts*N
for k=1:N
u = -K*xe + KI*v;
if(u > 1.4), u = 1.4; % PARA NO SATURAR EL SERVOMOTOR
elseif(u < -1.4), u = -1.4;
end
xe = G*xe + u*H + Ke*([x1;x3] - C*xe);
% PROCESO NO LINEAL DISCRETIZADO DIRECTAMENTE
den = -M2^2*cos(x1)^2+(M1+J2)*J1;
x1 = x1 + Ts*x2;
x2 = x2 + ...
Ts*(-M2^2*sin(x1)*cos(x1)*x2^2+M2*Bx*cos(x1)*x4 ...
+M2*(M1+J2)*g*sin(x1)-M2*Kx*cos(x1)*KA*u)/den;
x3 = x3 + Ts*x4;
x4 = x4 + ...
Ts*(M2^2*g*sin(x1)*cos(x1)+J1*M2*sin(x1)*(x2)^2 ...
-J1*Bx*x4+J1*Kx*KA*u)/den;
v = v + r - x3;
y1(k)=x1; y2(k)=x3; U(k) =u;
end
% GRAFICOS
t = linspace(0,Ts*N,N);
figure(1)
plot(t,y2(1:N)); grid
ylabel(’Posicion del carro’)
xlabel(’Tiempo (s)’)
print -deps -f spoz
figure(2)
plot(t,y1(1:N)); grid
ylabel(’Posicion angular del pendulo’)
xlabel(’Tiempo (s)’)
print -deps -f spoa
figure(3)
plot(t,U); grid
ylabel(’Se~nal de control u’)
4.9 Control Óptimo Cuadrático del Péndulo Invertido 153
xlabel(’Tiempo (s)’)
print -deps -f spou
1.6
1.4
1.2
1
Posición del carro
0.8
0.6
0.4
0.2
−0.2
0 2 4 6 8 10 12 14 16 18 20
Tiempo (s)
Figura 4.10: Simulación del sistema péndulo invertido: posición del carro.
Dos poleas de radio igual a 6.48 cm, una de las cuales está unida al
eje del motor y la otra, al otro extremo de un carril.
0.15
0.1
Posición angular del péndulo
0.05
−0.05
−0.1
0 2 4 6 8 10 12 14 16 18 20
Tiempo (s)
Figura 4.11: Simulación del sistema péndulo invertido: posición angular del
péndulo.
0.7
0.6
0.5
0.4
Señal de control u
0.3
0.2
0.1
−0.1
−0.2
0 2 4 6 8 10 12 14 16 18 20
Tiempo (s)
COMPUTADORA
PERSONAL
TARJETA LAB-PC+
AMPLIFI- PROCESO:
SALIDAS DAC0 ’
PENDULO
CADOR
ANALOGICAS DAC1 INVERTIDO /
PWM GRUA PUENTE
PA0 16 bits
.. SENSOR EN
PA .
PA7 EL MOTOR
COMPUERTAS MUX
16 bits
DIGITALES PB0
.. SENSOR EN
PB . LA VARILLA
DE ENTRADA
PB7
Y SALIDA SALIDAS
PC0
..
PC .
PC6
PC7
Fs
CONTADOR / OUTB0
TEMPORIZADOR
SERVOMOTOR PENDULO
POLEA
CARRO
CARRIL
Un carro de metal con cuatro ruedas de bronce, el cual posee una junta
móvil (para sujetar una varilla metálica por uno de sus extremos) y
un codificador óptico incorporado (ver figura 4.15). El peso total del
carro es de 920 gr. El esquema del carro se muestra en la figura 4.16.
Codificador optico
’
Polea
Alimentacion
’
. . .
Servomotor D.C .
Reductor de
velocidad
’
Pendulo
Codificador
’
optico
Ruedas
Canal A
Canal B
Fuente de luz
Transistor
’optico
Disco con
mascara
’
permiten el paso de luz a través del disco. Dicho haz activa el transistor
óptico del emisor-sensor, generando un pulso de corriente que se constituye
ası́ en la entrada a un contador de pulsos. El número de ranuras que posee el
sensor de la varilla es 256, mientras que el sensor del servomotor posee 512
ranuras. Hay que tomar en cuenta además que el codificador incorporado en
el motor es solidario al eje primario; es decir, para obtener el ángulo de giro
en el eje de salida, se tiene que aplicar un factor de reducción cuyo valor
numérico se da en la sección 3.2.6.
El codificador óptico da como salida un tren de pulsos con una frecuencia
proporcional a la velocidad angular del disco y otro tren de pulsos desfasado
en +90 o −90 grados respecto al primero, de acuerdo al sentido de giro
del disco. Estos dos trenes de pulsos pasan luego a un decodificador de
cuadratura LS7083 que genera las señales Clock Up o Clock Down, según
sea positivo o negativo el sentido de giro del disco (ver figura 5.14). Las
señales Clock Up y Clock Down alimentan a un contador Up/Down de 16
bits compuesto por 4 contadores 74LS193 de 4 bits conectados en cascada.
Los dos codificadores ópticos poseen la circuiterı́a descrita anteriormente,
de modo tal que para cada sensor tenemos una salida de 16 bits que se
almacena en un registro.
La selección entre una u otra salida binaria se realiza por medio de la
habilitación de un registro, o mediante una señal proveniente de la computa-
dora personal (ver figura 4.13). En conclusión, la cuenta almacenada en los
contadores es una función lineal proporcional a la posición angular del eje
del disco. Para obtener la posición angular a partir del número de pulsos
NP dados por los contadores, podemos usar la siguiente relación:
Para el motor, posición angular del eje del motor: (2π/512)×NP (antes
de la reducción).
El Amplificador de Potencia
Un amplificador de potencia basado en la modulación PWM (”Pulse
Width Modulation”) alimenta al servomotor D.C. Este amplificador está com-
puesto por un modulador PWM de baja potencia (el LM3524), una lógica
digital de disparo y un conmutador amplificador tipo H implementado con
cuatro Mosfets. También existe circuiterı́a adicional para generar la tensión
de disparo en cada conmutador Mosfet.
4.9 Control Óptimo Cuadrático del Péndulo Invertido 159
Clock UP
74HC Clock Down
4 bits
193
Puerto
digital 8 bits
PA Canal A
74HC
4 bits
193 LS7083
Canal B
74HC
4 bits
193
Puerto R L
digital 8 bits
PB 74HC
4 bits
193
El Archivo de Interfaz
El Programa de Control
El programa de control se denomina PENDOI4.CPP. En el ambiente de
trabajo de Borland C/C++, los archivos FUNC PEN.H, FUNC PEN.CPP
y PENDOI4.CPP forman en conjunto el proyecto PENDOI4.PRJ. El pro-
grama PENDOI4.CPP comprende las partes siguientes:
1. Inicialización
a) Inicialización de la tarjeta de adquisición de datos.
b) Inicialización de variables.
c) Establecimiento de la posición cero del carro y de la varilla.
2. Bucle del algoritmo de control
INICIO
INMICIALIZA:
- TARJETA DE ADQUISICION DE DATOS
- VARIABLES
BORRA CONTADORES
ESTABLECIMIENTO DE LA POSICION
CERO DEL CARRO Y LA VARILLA
NO
TIEMPO < TIEMPO LIMITE FIN
SI
DETECTA
FLANCO DE SUBIDA NO
DEL PULSO DE RELOJ
SI
MIDE SALIDAS
ESTIMA ESTADOS
~
CALCULA SENAL DE CONTROL
~
COMPENSA SENAL DE CONTROL
~
ENVIA SENAL DE CONTROL
ACTUALIZA VARIABLES
ARCHIVA DATOS
Inicialización de Variables
Se inicializan todas las variables a utilizar en el programa y se cargan
las matrices que previamente fueron calculadas.
Para el motor, posición angular del eje del motor: (2π/512)×NP (antes
de la reducción).
a un incremento de 256 puntos, valor bastante lejos del valor máximo del
contador. El problema a resolver aquı́ es cómo reconocer si nos encontramos
ante un recorrido positivo o negativo justo cuando el contador comienza a
decrementar (partiendo de 0). Para resolver esta situación, consideraremos
que estamos ante un valor negativo si el contenido de los contadores es
mayor que 32768 (la mitad del valor máximo que pueden contener). Por
ejemplo, si obtenemos en el contador un valor de 65534, y como éste es
mayor que 32768, entonces representa una posición negativa; su equivalente
es: −(65536−65534) = −2. Luego, para obtener la posición angular hacemos:
−2 × 2π/256 rad. La rutina que realiza esta lectura esta dada por:
la tarjeta de interfaz*/
void EnviarVoltaje (float);
/*env\’{\i}a voltaje al DAC de la tarjeta*/
unsigned int LeerSensor(int);
/*lee sensor=0 contadores del lado izquierdo
lee sensor=1 contadores del lado derecho */
int NivelClock ();
/*devuelve el nivel del clock 0 o 1 */
void ResetContadores();
/*resetea los contadores que estan conectados a los sensores*/
#endif
USE_LAB();
/*esta funcion ayuda a mantener el tama~no de la aplicacion en DOS
ante un mayor crecimiento debido a la inclusion de porciones de
la libreria NI-DAQ que no son necesarias para el dispositivo de
adquisicion que se esta utilizando */
Init_DA_Brds(1,&deviceCode);
/*inicializa el hardware y el software de la libreria NI-DAQ
deviceNumber = 1
deviceNumberCode devuelve el tipo del dispositivo inicializado */
ICTR_Setup(1,0,3,periodoTimer,1);
/*deviceNumber = 1
ctr = 0 => clock de muestreo timer0
MODE = 3 => selecciona onda cuadrada con duty cycle de 50 %
COUNT = periodoTimer => periodo de la onda
binBcd = 1 => selecciona el contador binario de 16-bits */
168 Control Óptimo
outportb(0x273, 0x9A);
/*’’setea’’ el DIGITAL CONTROL REGISTER (273H) y configura los
ports como:
PA:INPUT
PB:INPUT
PC0 ... 3:OUTPUT
PC4 ... 7:INPUT */
}
if(sensor) outportb(PORTC,inportb(PORTC)&251);
//PC2 = 0 selecciona contador derecho
else
outportb(PORTC,inportb(PORTC)|4);
//PC2 = 1 selecciona contador izquierdo
byteL = inportb(PORTA);//Lee PORT A
byteH = inportb(PORTB);//Lee PORT B
return (256*byteH+byteL);
}
int NivelClock()
{
unsigned char bytePoll;
bytePoll = inportb (PORTC); //lee PORTC
return (bytePoll>127);//valida solo PC7 (clk de la tarjeta-OUTB0)
//(pooling)
}
void ResetContadores()
4.9 Control Óptimo Cuadrático del Péndulo Invertido 169
{
outportb(PORTC,inportb(PORTC)|8);
for(int i=0;i<10000;i++);
outportb(PORTC,inportb(PORTC)&(255-8));
}
#define PI M_PI
#define IZQ 0
#define DER 1
#define VARILLA IZQ
#define MOTOR DER
#define A_RADIANES 2.*PI/512.
#define Nm 1/19.741
#define rp 0.0648
#define Fs 200.
#define Ts (1./Fs)
#define tsimul 60.
#define DeadZone 0.1
#define offset 2.29 //2.36
#define SP 1.5
float G_KeC[4][4],H[4];
float K[4],KI,Ke[4][2];
float r=0.;
float Xe[4]={0,0,0,0},Xe_a[4]={0,0,0,0};
float y0,y1;
float u=0.;
void inicializaMatrices()
{
170 Control Óptimo
char ruta[]="C:\\user\\leonardo\\datos\\pendoi.dat";
int i,j;
FILE *pfichero;
pfichero=fopen(ruta,"rt");
if (pfichero == NULL) printf("No se puede abrir\n");
for(i = 0;i <= 3;i++)
{
for(j = 0;j <= 3;j++)
fscanf(pfichero,"%f",&G_KeC[i][j]);
}
for(i = 0;i <= 3;i++)
fscanf(pfichero,"%f",&H[i]);
for(i = 0;i <= 3;i++)
fscanf(pfichero,"%f",&K[i]);
fscanf(pfichero,"%f",&KI);
clrscr();
for(i = 0;i <= 3;i++)
{
for(j = 0;j <= 3;j++)
printf("%f ",G_KeC[i][j]);
printf("%f\n",G_KeC[i][3]);
}
for(i = 0;i <= 3;i++)
printf("%f\n",H[i]);
for(i = 0;i <= 3;i++)
printf("%f\t",K[i]);
printf("\n%f",KI);
printf("\n");
for(i = 0;i <= 3;i++)
{
for(j = 0;j <= 1;j++)
printf("%f\t",Ke[i][j]);
4.9 Control Óptimo Cuadrático del Péndulo Invertido 171
printf("\n");
}
}
/*calcula G_KeC*X */
for(i = 0;i <= 3;i++)
{ S = 0.;
for(p = 0;p <= 3;p++)
S = G_KeC[i][p]*Xe[p]+S;
G_KeCX[i] = S;
}
/*calcula KeYant*/
for(i = 0;i <= 3;i++)
{ S=0.;
for(p = 0;p <= 1;p++)
S = Ke[i][p]*Yant[p]+S;
KeYant[i] = S;
}
/*calcula Xe(K+1)[i]*/
for(i = 0;i <= 3;i++)
Xe[i] = G_KeCX[i]+H[i]*u+KeYant[i];
Yant[0] = X0;
Yant[1] = X2;
}
}
return (u+volt);
}
void main()
{
inicializaMatrices();
n=(int) tsimul/Ts;
assert(NULL! = (y_0_=(float*)calloc(n+1,sizeof(float))));
assert(NULL! = (y_1_=(float*)calloc(n+1,sizeof(float))));
clrscr();
174 Control Óptimo
ResetContadores();
ck_ant = ck_act;
ck_act = NivelClock();
yant=y1;
MideSalidas(&y0,&y1);
yact=y1;
if(y1 > 1.74) break;
if(y1 < -0.08) break;
gotoxy(5,13);printf("Tiempo: %f", t);
gotoxy(5,15); printf("varilla en grados : %f",y0*180./PI);
4.9 Control Óptimo Cuadrático del Péndulo Invertido 175
EstimaEstados(y0,y1);
/*saturacion*/
if(u < -1.4) u = -1.4;
if(u > 1.4) u = 1.4;
vel = (yact-yant)/Ts/rp;//Xe_act[3]/rp;
/*Compensa zona muerta*/
if(u < 0) v = -DeadZone;
if(u > 0) v = +DeadZone;
if(u == 0)v = 0.;
EnviarVoltaje(u+v+offset);
k++;t += Ts;
}
}
FIN:
EnviarVoltaje(offset);
/*guarda tiempo*/
pfichero = fopen(tiempo,"wb");
if (pfichero == NULL) printf("\nNo se puede abrir %s\n",tiempo);
else
{
for(k = 0;k<n+1;k++)
{
t = k*Ts;
c = fwrite(&t,sizeof(float),1,pfichero);
}
fclose(pfichero);
176 Control Óptimo
c=fwrite(y_0_,sizeof(y_0_),n+1,pfichero);
fclose(pfichero);
printf("\nelementos escritos en %s:%d\n",sal_var,c);
}
/*guarda y1 posicion del carro*/
pfichero = fopen(sal_car,"wb");
if (pfichero == NULL) printf("\nNo se puede abrir %s\n",sal_car);
else
{
c=fwrite(y_1_,sizeof(y_1_),n+1,pfichero);
fclose(pfichero);
printf("\nelementos escritos en %s:%d\n",sal_car,c);
}
/*guarda y1 posicion del carro*/
pfichero = fopen(U_,"wb");
if (pfichero == NULL) printf("\nNo se puede abrir %s\n",U_);
else
{
c=fwrite(u_,sizeof(u_),n+1,pfichero);
fclose(pfichero);
printf("\nelementos escritos en %s:%d\n",U_,c);
}
getch();
}
1.5
1
posición (m)
0.5
−0.5
0 2 4 6 8 10 12 14 16 18 20
tiempo (s)
Figura 4.20: Control óptimo del péndulo invertido: posición del carro.
0.4
0.3
0.2
0.1
ángulo (rad)
−0.1
−0.2
−0.3
−0.4
−0.5
0 2 4 6 8 10 12 14 16 18 20
tiempo (s)
Figura 4.21: Control óptimo del péndulo invertido: posición angular del
péndulo.
4.10 Control Óptimo Cuadrático de la Grúa-Puente 179
entrada
1.5
0.5
entrada (v)
−0.5
−1
−1.5
0 2 4 6 8 10 12 14 16 18 20
tiempo (s)
A = [0 1 0 0
a21 0 0 a24
0 0 0 1
a41 0 0 a44];
B = [0
b21
0
b41];
Cc = [0 0 1 0]; % POSICION DEL CARRO
Ts = 1/200; % TIEMPO DE MUESTREO
[G,H] = c2d(A,B,Ts);
G1 = [G zeros(4,1)
-Cc*G 1];
H1 = [H;-Cc*H];
M = [H1 G1*H1 G1^2*H1 G1^3*H1 G1^4*H1];
rM = rank(M); % rM=5 => COMPLETAMENTE CONTROLABLE
% CALCULO DE LA GANANCIA DEL CONTROLADOR
Q = [500 0 0 0 0
0 0 0 0 0
0 0 200 0 0
0 0 0 0 0
0 0 0 0 0.1]; R = [1];
P = zeros(5,5);
for i=1:1000
P = Q + G1’*P*G1 -G1’*P*H1*inv(R+H1’*P*H1)*H1’*P*G1;
end
K1 = inv(R+H1’*P*H1)*H1’*P*G1;
[KK,PP] = dlqr(G1,H1,Q,R); % K1=KK, P=PP
K = [KK(1) KK(2) KK(3) KK(4)]; KI = - KK(5);
% CALCULO DE LA GANANCIA DEL OBSERVADOR
C = [1 0 0 0
0 0 1 0]; % SE OBSERVAN POSICIONES ANGULAR Y LINEAL
Qe = [1000 0 0 0
0 1500 0 0
0 0 100 0
0 0 0 1500]; Re = [1 0;0 1];
Pe = zeros(4,4);
for i=1:200
Pe = Qe + G*Pe*G’ -G*Pe*C’*inv(Re+C*Pe*C’)*C*Pe*G’;
end
KeT = inv(Re+C*Pe*C’)*C*Pe*G’; Ke=KeT’;
[KKeT,PPe] = dlqr(G’,C’,Qe,Re); KKe=KKeT’; % Pe=PPe, Ke=KKe
% CONDICIONES INICIALES PARA LA SIMULACION
182 Control Óptimo
0,9998 0,0050 0 −0,0002 0,0004
−0,0972 0,9998 0 −0,0941 0,1462
G=
0,0000
; H=
0,0000 1,0000 0,0049 0,0002
−0,0019 0,0000 0 0,9508 0,0765
C= 0 0 1 0
1,0002 0,0050 0 0,0002 0 −0,0004
0,0995 1,0002 0 0,0963 0 −0,1497
G̃ =
0,0000 0,0000 1,0000 0,0049 0 ;
H̃ =
0,0002
−0,0019 0,0000 0 0,9508 0 0,0765
0,0000 0,0000 −1,0000 −0,0049 1,0000 −0,0002
1,9636 0,2257 −3,3116 −0,4202 0,0300
0,2257 0,1481 −0,7068 −0,2891 0,0030
P̃ = 10 ×
4
−3,3116 −0,7068 8,5186 1,4030 −0,0745
−0,4202 −0,2891 1,4030 0,5668 −0,0061
0,0300 0,0030 −0,0745 −0,0061 0,0013
K̃ = K −KI
K= 8,2596 −4,3465 37,9206 10,3665]; KI = 0,2907
1,0102 −0,0055
2,1836 −1,1280
Ke =
−0,0005
0,9936
−0,0982 0,6519
4.27 y 4.28.
1.8
1.6
1.4
1.2
Posición del carro
0.8
0.6
0.4
0.2
0
0 2 4 6 8 10 12 14 16 18 20
Tiempo (s)
0.4
0.3
Posición angular de la grúa puente
0.2
0.1
−0.1
−0.2
−0.3
−0.4
0 2 4 6 8 10 12 14 16 18 20
Tiempo (s)
1.4
1.2
Señal de control u 1
0.8
0.6
0.4
0.2
−0.2
0 2 4 6 8 10 12 14 16 18 20
Tiempo (s)
1.5
1
posición (m)
0.5
−0.5
0 2 4 6 8 10 12 14 16 18 20
tiempo (s)
0.6
0.4
0.2
ángulo (rad)
−0.2
−0.4
−0.6
0 2 4 6 8 10 12 14 16 18 20
tiempo (s)
entrada
1.5
0.5
entrada (v)
−0.5
−1
−1.5
0 2 4 6 8 10 12 14 16 18 20
tiempo (s)
Problema 4.1
El problema 3.1 presenta las ecuaciones que gobiernan la dinámica del sis-
tema de suspensión de un bus (ver figura 3.12). Diseñar un sistema de control
óptimo cuadrático estacionario para lograr el objetivo de control siguiente:
la salida del proceso y = x2 − x1 (referencia nula) no debe presentar so-
breimpulsos mayores que el 5 %, y luego de alrededor de 20 segundos, las
oscilaciones originadas por un disturbio escalón de 10 cm (provocada por
imperfecciones en la pista), prácticamente deben desaparecer. La selección
del tiempo de muestreo es a conveniencia del diseño.
% p3opt2.m SOLUCION DEL PROBLEMA 4.1
clear all
% PARAMETROS DEL PROCESO
m1 = 2500; k1 = 80000; b1 = 350;
m2 = 320; k2 = 500000; b2 = 15020;
188 Control Óptimo
a23 = (b1/m1)*(b1/m1+b1/m2+b2/m2)-k1/m1;
a33 = -(b1/m1+b1/m2+b2/m2);
a43 = -(k1/m1+k1/m2+k2/m2);
% MODELO LINEAL: dx/dt = A*x + B*u + E*d; y = C*x + D*u
A = [0 1 0 0
-b1*b2/(m1*m2) 0 a23 -b1/m1
b2/m2 0 a33 1
k2/m2 0 a43 0];
B = [0;1/m1;0;(1/m1+1/m2)];
E = [0;b1*b2/(m1*m2);-b2/m2;-k2/m2];
C = [0 0 1 0]; D = [0];
% CONVERSION AL ESPACIO DE ESTADO DISCRETO
T=0.8; % TIEMPO DE MUESTREO
[G,H,C,D] = c2dm(A,B,C,D,T,’zoh’);
[G,F,C,D] = c2dm(A,E,C,D,T,’zoh’);
% Contro Optimo del sistema
Q = [1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1];
R = [1];
% ECUACION DE RICCATI
P = diag(0,3); % MATRIZ DE CEROS DE ORDEN 4
for i = 1:40
P = Q + G’*P*G - G’*P*H*inv(R+H’*P*H)*H’*P*G;
end
% CALCULO DE LA MATRIZ DE GANANCIA K
K = inv(R+H’*P*H)*H’*P*G;
% SIMULACION DEL SISTEMA CONTROLADO
N = 200; x=[0;0;0;0]; w=0.01;
for k=1:N
U=-K*x;
x = G*x + H*U + F*w;
y(k)=x(3); u(k)=U;
end
% GRAFICOS
t=linspace(0,N*T,N);
subplot(2,1,1)
plot(t,y(1:N)), grid
ylabel(’Posicion y (m)’)
xlabel(’Tiempo en segundos’)
subplot(2,1,2)
plot(t,u(1:N)), grid
4.11 Problemas Resueltos 189
xlabel(’Tiempo en segundos’)
ylabel(’Control u (N)’)
print -deps -f p3opt2
−3
x 10
5
Posición y (m)
−5
−10
0 20 40 60 80 100 120 140 160
Tiempo en segundos
−4
x 10
1
0.8
Control u (N)
0.6
0.4
0.2
0
0 20 40 60 80 100 120 140 160
Tiempo en segundos
Problema 4.2
% INGRESO DE PESOS
Q = [1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1 ];
R = [1];
% EQUACION DE RICCATI
P = diag(0,3);
for i = 1:40
P = Q + G1’*P*G1 - G1’*P*H1*inv(R+H1’*P*H1)*H1’*P*G1;
end
% SIMULACION
N = 100; x=[0;0;0]; v=0; Y=0;
for k=1:N
r(k)=0.1; Ref=r(k);
v = v + Ref - Y;
U = - K*x + KI*v;
x = G*x + H*U;
4.11 Problemas Resueltos 191
Y = C*x;
y(k) = Y; u(k) = U;
end
% GRAFICOS
t=linspace(0,N*T,N);
subplot(2,1,1)
plot(t,y(1:N)), grid
ylabel(’Inclinacion (rad)’)
xlabel(’Tiempo en segundos’)
subplot(2,1,2)
plot(t,u(1:N)), grid
xlabel(’Tiempo en segundos’)
ylabel(’Angulo del deflector (rad)’)
print -deps -f p4opt2
0.15
Inclinación (rad)
0.1
0.05
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
0.2
Angulo del deflector (rad)
0.15
0.1
0.05
−0.05
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
Problema 4.3
KI = -KK(5);
% SIMULACION
N = 100; x=[0;0;0;0]; v=0; Y=0;
for k=1:N
r(k)=0.5; Ref=r(k);
v = v + Ref - Y;
U = - K*x + KI*v;
x = G*x + H*U;
Y = C*x;
y(k) = Y; u(k) = U;
end
% GRAFICOS
t=linspace(0,N*T,N);
subplot(2,1,1)
plot(t,y(1:N)), grid
ylabel(’Posicion (m)’)
xlabel(’Tiempo en segundos’)
subplot(2,1,2)
plot(t,u(1:N)), grid
xlabel(’Tiempo en segundos’)
ylabel(’Voltaje de control’)
print -deps -f p5opt2
Problema 4.4
0.6
Posición (m)
0.4
0.2
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
40
Voltaje de control
20
−20
−40
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
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 LINEAL DISCRETO
T = 0.2; % perı́odo de muestreo
[G,H,C,D]=c2dm(A,B,C,D,T,’zoh’);
% ADICIONANDO ACCION INTEGRAL
G1 = [G zeros(6,1);-C(1,:)*G 1];
H1 = [H;-C(1,:)*H];
% CALCULO DE LA GANANCIA DEL CONTROLADOR
Q = [1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
4.11 Problemas Resueltos 195
0 0 0 1 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 1 0
0 0 0 0 0 0 100];
R = [10];
% OBTENEMOS LA GANANCIA DEL CONTROLADOR APLICANDO dlqr
[KK,P]=dlqr(G1,H1,Q,R);
% SEPARAMOS LA ACCION INTEGRAL
K = [KK(1) KK(2) KK(3) KK(4) KK(5) KK(6)];
KI = -KK(7);
% SIMULACION
N = 500; x=[0;0;0;0;0;0]; v=0; Y=0;
for k=1:N
r(k)=20 + 10*sign(sin(0.02*k)); Ref=r(k);
v = v + Ref - Y;
U = - K*x + KI*v;
x = G*x + H*U;
Y = C(1,:)*x;
y(k) = Y; u(k) = U;
end
% GRAFICOS
t=linspace(0,N*T,N);
subplot(2,1,1)
plot(t,y(1:N),t,r(1:N)), grid
ylabel(’Velocidad (m/s)’)
xlabel(’Tiempo en segundos’)
subplot(2,1,2)
plot(t,u(1:N)), grid
xlabel(’Tiempo en segundos’)
ylabel(’Fuerza de control (N)’)
print -deps -f p7opt2
Problema 4.5
30
25
Velocidad (m/s)
20
15
10
5
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
600
Fuerza de control (N)
400
200
0
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
P = diag(0,4);
for i = 1:40
P = Q + G1’*P*G1 - G1’*P*H1*inv(R+H1’*P*H1)*H1’*P*G1;
end
% CALCULO DE LA MATRIZ DE GANANCIA KK
KK = inv(R+H1’*P*H1)*H1’*P*G1;
% SEPARAMOS LA ACCION INTEGRAL
K = [KK(1) KK(2) KK(3) KK(4)];
KI = -KK(5);
% KK = dlqr(G1,H1,Q,R);
% CALCULO DE LA MATRIZ DE OBSERVABILIDAD
No = [C’ G’*C’ (G’)^2*C’ (G’)^3*C’];
rankNo = rank(No); % sistema no es observable
% SIMULACION
N = 200; x=[0;0;0;0]; v=0; Y=0;
for k=1:N
r(k)=3*sign(sin(0.02*k)); Ref=r(k);
v = v + Ref - Y;
U = - K*x + KI*v;
if(U > 200)
U = 200;
elseif(U < -200)
U = -200;
end
x = G*x + H*U;
Y = C*x;
y(k) = Y; u(k) = U;
end
% GRAFICOS
t=linspace(0,N*T,N);
subplot(2,1,1)
plot(t,y(1:N),t,r(1:N)), grid
ylabel(’Posicion (m)’)
xlabel(’Tiempo en segundos’)
subplot(2,1,2)
plot(t,u(1:N)), grid
xlabel(’Tiempo en segundos’)
ylabel(’Voltaje de control’)
print -deps -f p8opt2
Problema 4.6
La figura 2.2 muestra dos tanques idénticos colocados en cascada. La sección
horizontal A=9 m2 de cada tanque es constante. El objetivo de control
198 Control Óptimo
Posición (m)
0
−2
−4
0 5 10 15 20 25 30 35 40
Tiempo en segundos
100
Voltaje de control
−100
−200
0 5 10 15 20 25 30 35 40
Tiempo en segundos
Problema 4.7
Nivel (m)
2
0
0 5 10 15 20 25 30 35 40
Tiempo en segundos
1.5
Flujo de control (m^3/s)
0.5
0
0 5 10 15 20 25 30 35 40
Tiempo en segundos
para controlar la velocidad angular del eje del motor mediante el voltaje de
entrada que puede variar entre ± 100 volt.
% p11opt2.m SOLUCION DEL PROBLEMA 4.7
clear all
% PARAMETROS GENERALES
nn = 3; r=1; % nn: ORDEN DEL PROCESO; r: NUMERO DE SALIDAS
NN = 7; % ORDEN DEL VECTOR ESTIMADO DE PARAMETROS
% PARAMETROS DEL SISTEMA:
J = 0.01; % MOMENTO DE INERCIA DEL MOTOR (kgm2/s2)
Ke =0.01; Kt = 0.01; % CONSTANTE ELECTROMOTRIZ (Nm/A)
R = 12; % RESISTENCIA (Ohmios)
C = 0.5; % CONDENSADOR (uF)
L = 0.5; % INDUCTANCIA DE LA ARMADURA (H)
Kw = 1.8; % CONSTANTE TORSIONAL (Nm/rad)
% MODELO LINEAL 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.05; % PERIODO DE MUESTREO
% MODELO LINEAL DISCRETO
[G,H,C,D]=c2dm(Ac,Bc,Cc,Dc,T,’zoh’);
4.11 Problemas Resueltos 201
[num,den]=ss2tf(G,H,C,D);
a1 = den(2); a2 = den(3); a3=den(4);
b1 = num(2); b2 = num(3); b3=num(4);
% SIMULACION
N = 600; x=[0;0;0]; v=0; Y=0;
for k=1:N
r(k)=5*sign(sin(0.008*k)); Ref=r(k);
v = v + Ref - Y;
U = - K*x + KI*v;
% if(U > 24)
% U = 24;
% elseif(U < -24)
% U = -24;
% end
x = G*x + H*U;
Y = C(1,:)*x;
y(k) = Y; u(k) = U;
end
% GRAFICOS
t=linspace(0,N*T,N);
subplot(2,1,1)
plot(t,y(1:N),t,r(1:N)), grid
202 Control Óptimo
ylabel(’Velocidad (rad/s)’)
xlabel(’Tiempo en segundos’)
subplot(2,1,2)
plot(t,u(1:N)), grid
xlabel(’Tiempo en segundos’)
ylabel(’Voltaje de control’)
print -deps -f p11opt2
10
Velocidad (rad/s)
−5
−10
0 5 10 15 20 25 30
Tiempo en segundos
40
20
Voltaje de control
−20
−40
−60
0 5 10 15 20 25 30
Tiempo en segundos
N −1
1 T 1 T
J = x (N )Sx(N ) + x (k)Qx(k) + uT (k)Ru(k)
2 2
k=0
4.12 Problemas Propuestos 203
Problema 4.9
Las ecuaciones del modelo linealizado para controlar la posición del cañón
montado en la torreta de un tanque (ver figura 3.28) empleando un actuador
hidráulico se detallan en el problema 3.9.
(a) Diseñar un sistema de control óptimo estacionario para controlar el
ángulo de elevación θ con las especificaciones siguientes: tiempo de
estabilización menor de 2 s, sobreimpulso y error en estado estacionario
nulos. Los disturbios tipo escalón pueden actuar simultáneamente o
no y pueden ser positivos o negativos. Para cada caso, el sistema de
control óptimo debe ser capaz de minimizar sus efectos. La selección
del tiempo de muestreo es a conveniencia del diseño.
(b) Lo mismo que (a), pero en este caso para controlar el ángulo azimutal.
Problema 4.10
Problema 4.11
Problema 4.12
La figura 3.32 muestra el proceso péndulo doble no lineal, el cual es una ex-
tensión del péndulo simple descrito en la sección 3.1. El acoplamiento entre
los dos péndulos de igual longitud no es flexible. Las ecuaciones que describen
la dinámica del sistema son materia del problema propuesto 3.13. Diseñar un
sistema de control óptimo no estacionario para controlar simultáneamente
las posiciones θ y τ con mı́nimo tiempo de estabilización y mı́nimo sobreim-
pulso, de modo tal que el péndulo doble permanezca en posición vertical.
Problema 4.13
Problema 4.14
Control Adaptivo
5.1. Introducción
Los sistemas de control adaptivo ajustan su comportamiento a las cam-
biantes propiedades del proceso controlado y de las señales que interactúan
sobre dicho proceso. Por el contrario, los sistemas de control fijos se ca-
racterizan por la presencia de una ley de control invariable con el tiempo.
206 Control Adaptivo
^x ^
ESTIMADOR θ ESTIMADOR DE
DE ESTADOS PARAMETROS
U ESTIMACION MODELO
DE U LINEAL
+
Y CONTROLADOR CON + PROCESO Y
+ AUTOSINTONIZACION u U NO LINEAL
-
DISTURBIOS
donde X (de orden n) y U (t) (de orden uno) son el vector de estado y la ley de
control, respectivamente. La función no lineal f (.) puede también contener
disturbios v(.) en los estados. De la ecuación (5.1), es posible obtener el
modelo lineal siguiente:
A(z −1 ) = 1 + a1 z −1 + . . . + an z −n
B(z −1 ) = b1 z −1 + . . . + bn z −n (5.5)
ψ T (k) = [Y (k − 1) . . . Y (k − n) U (k − 1) . . . U (k − n) 1] (5.10)
ˆT
θ̂(k) = [−â1 (k) . . . − ân (k) b̂1 (k) . . . b̂n (k) C] (5.11)
B = n^2*bm +bL;
Jeff = n^2*Jm +JL;
M = Jeff + (1/3)*m*Lo^2 + Mo*Lo^2 + (2/5)*Mo*Ro^2;
N = g*Lo*(Mo+m/2);
% MODELO LINEAL CONTINUO DEL PROCESO DE SEGUNDO ORDEN
Ac = [0 1;-N/M -(B + n^2*K*E/R)/M]; % (c: CONTINUO)
Bc = [0;n*K*Kact/(R*M)];
Cc = [1 0]; Dc = [0];
% MODELO LINEAL DISCRETO DEL PROCESO DE SEGUNDO ORDEN
T = 0.01; % PERIODO 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);
b1 = num(2); b2 = num(3);
% CONDICIONES INICIALES Y OTROS PARAMETROS
alfa=1000; Pi = alfa*eye(5); % MATRIZ P INICIAL
theta_p = [-a1 -a2 b1 b2]’; % PARAMETROS DEL PROCESO
thetai = [0 0 0 0 0]’; % PARAMETROS INICIALES
lambda = 0.99; % FACTOR DE MEMORIA
Y(1) = 0; Y(2) = 0; U(1) = 0; U(2) = 0;
% PROCEDIMIENTO DE IDENTIFICACION
Mm = 1000;
for r = 1:Mm
k = r + 2;
U(k) = 0.4;
psi_p = [Y(k-1) Y(k-2) U(k-1) U(k-2)]’;
Y(k) = psi_p’*theta_p; % MODELO LINEAL DEL PROCESO
psi = [psi_p;1]; % VECTOR DE DATOS
e = Y(k)-psi’*thetai; % ERROR DE ESTIMACION
i = Pi*psi;
j = psi’*i;
gamma = i/(lambda + j);
5.3 Procedimientos de Estimación 211
0.4
SEÑAL EXCITATRIZ U
0.3
0.2
0.1
0
0 100 200 300 400 500 600 700 800 900 1000
MUESTRAS DISCRETAS k = 0.01 s
RESPUESTA Y DEL PROCESO
2.5
1.5
0.5
0
0 100 200 300 400 500 600 700 800 900 1000
MUESTRAS (CADA MUESTRA EQUIVALE A 0.01 s)
Figura 5.2: Respuesta del modelo lineal del proceso a un escalón de magnitud
U = 0.4.
0.5
PARAMETROS ESTIMADOS
−0.5
−1
−1.5
−2
0 100 200 300 400 500 600 700 800 900 1000
MUESTRAS (CADA MUESTRA EQUIVALE A 0.01 s)
Figura 5.3: Parámetros estimados â1 (k) (curva sólida) y â2 (k).
5.3 Procedimientos de Estimación 213
0.045
0.04
0.03
0.025
0.02
0.015
0.01
0.005
0
0 100 200 300 400 500 600 700 800 900 1000
MUESTRAS (CADA MUESTRA EQUIVALE A 0.01 s)
Figura 5.4: Parámetros estimados b̂1 (k) (curva sólida) y b̂2 (k).
8) Computar:
PS (k) = S(k)P (k)S(k)
ψnS = [S(k)]−1 ψn
T
r(k) = 1 + ψnS (k)PS (k − 1)ψnS (k)
&
1 4P (k − 1)ψ (k)2
S nS
λ(k) = 1 − r(k) − r2 (k) −
2 tr PS (k − 1)
Ejemplo 5.2
Estimar los parámetros del proceso servomotor D.C. con carga no lineal
descrito en la sección 3.3, empleando el método de los mı́nimos cuadrados
recursivo mejorado. Emplee el modelo no lineal de segundo orden del pro-
ceso y como señal excitadora use un escalón de magnitud 0.4. Grafique la
respuesta del proceso.
Solución: El programa ejem5 2.m estima los parámetros para el proceso
pedido. La figura 5.5 grafica la respuesta Y del proceso a un escalón U
= 0.4. Las figuras 5.6 y 5.7 muestran los parámetros estimados. Podemos
observar que cada parámetro estimado converge a un valor constante.
5.3 Procedimientos de Estimación 215
B = n^2*bm +bL;
Jeff = n^2*Jm +JL;
M = Jeff + (1/3)*m*Lo^2 + Mo*Lo^2 + (2/5)*Mo*Ro^2;
N = g*Lo*(Mo+m/2);
% MODELO LINEAL CONTINUO DEL PROCESO DE SEGUNDO ORDEN
Ac = [0 1;-N/M -(B + n^2*K*E/R)/M]; % (c: CONTINUO)
Bc = [0;n*K*Kact/(R*M)];
Cc = [1 0]; Dc = [0];
% MODELO LINEAL DISCRETO DEL PROCESO DE SEGUNDO ORDEN
T = 0.01; % PERIODO 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);
b1 = num(2); b2 = num(3);
% CONDICIONES INICIALES (ARBITRARIAS) Y OTROS PARAMETROS
alfa=1000; N = 5; Pi = alfa*eye(N); % MATRIZ P INICIAL
theta_p = [-a1 -a2 b1 b2]’; % PARAMETROS DEL PROCESO
thetai = [-a1/3 -a2/2 3*b1 2*b2 0]’; % PARAMETROS INICIALES
lambda = 0.99; % FACTOR DE MEMORIA
Y(1) = 0; Y(2) = 0; U(1) = 0; U(2) = 0;
x1 = 0; x2 = 0;
% PROCEDIMIENTO DE IDENTIFICACION
Mm = 1000;
for r = 1:Mm
k = r + 2;
U(k) = 0.4;
% MODELO NO LINEAL DE SEGUNDO ORDEN DISCRETIZADO DIRECTAMENTE
TN = cc*sign(x2);
x1=x1+T*x2;
x2=x2+T*(-(N/M)*sin(x1) - (B/M + n^2*K*E/(M*R))*x2 - TN/M ...
+ (n*K*Kact/(R*M))*U(k) );
Y(k) = x1;
216 Control Adaptivo
% PROCEDIMIENTO DE IDENTIFICACION
psi_p = [Y(k-1) Y(k-2) U(k-1) U(k-2)]’;
psi = [Y(k-1) Y(k-2) U(k-1) U(k-2) 1]’;
nor = max(1,norm(psi));
psin = psi/nor;
Q = chol(Pi’);
S = inv(diag(Q*ones(N,1),0));
Ps = S*Pi*S;
psins = inv(S)*psin;
rt = 1 + psins’*Ps*psins;
LF = 1 - (rt-sqrt(rt^2-4*norm(Ps*psins)^2/trace(Ps)))/2;
e = Y(k)/nor - thetai’*psin;
div = psins’*Ps*psins + LF;
theta = thetai + e*inv(S)*Ps*psins/div;
ae1(r) = -theta(1); % PARAMETRO a1 ESTIMADO
ae2(r) = -theta(2); % PARAMETRO a2 ESTIMADO
be1(r) = theta(3); % PARAMETRO b1 ESTIMADO
be2(r) = theta(4); % PARAMETRO b2 ESTIMADO
Hns = Ps*psins/div;
Ps = Ps/LF - Hns*psins’*Ps/LF;
tt = abs(max(eig(Ps))/min(eig(Ps)) );
cmax = 100; cmin = 15;
if tt <= cmin,
thetai = theta; Pi = Ps;
elseif tt >= cmax,
Qnew = chol(Ps’);
Snew = inv(diag(Qnew*ones(N,1),0));
Psnew = Snew*Ps*Snew;
Pi = Psnew; thetai = theta;
end
end
% GRAFICOS
q=0:Mm-1;
figure(1)
subplot(2,1,1)
plot(q,U(1:Mm))
ylabel(’SE~
NAL EXCITATRIZ U’)
grid
subplot(2,1,2)
plot(q,Y(1:Mm))
ylabel(’RESPUESTA Y DEL PROCESO’)
xlabel(’MUESTRAS (CADA MUESTRA EQUIVALE A 0.01 s)’)
grid
5.3 Procedimientos de Estimación 217
0.4
SEÑAL EXCITATRIZ U
0.3
0.2
0.1
0
0 100 200 300 400 500 600 700 800 900 1000
RESPUESTA Y DEL PROCESO
0.15
0.1
0.05
0
0 100 200 300 400 500 600 700 800 900 1000
MUESTRAS (CADA MUESTRA EQUIVALE A 0.01 s)
0.6
a2
0.4
ESTIMADOS
0.2
0
PARAMETROS
−0.2
−0.4
−0.6
a1
−0.8
0 100 200 300 400 500 600 700 800 900 1000
MUESTRAS (CADA MUESTRA EQUIVALE A 0.01 s)
−3
x 10
14
12
10
ESTIMADOS
4
PARAMETROS
b1
2
−2
b2
−4
−6
0 100 200 300 400 500 600 700 800 900 1000
MUESTRAS (CADA MUESTRA EQUIVALE A 0.01 s)
entonces:
z(k + 1) = z(k) − y(k) = z(k) − Cx(k) (5.21)
de modo que la representación en el espacio de estado del sistema aumentado
toma la forma siguiente:
xa (k + 1) = Ga xa (k) + H a u(k) (5.22)
a a
y(k) = C x (k) (5.23)
donde el superı́ndice a significa aumentado. El vector xa y las matrices Aa ,
B a y C a poseen la forma:
a x(k) a G 0
x (k) = ; G (k) =
z(k) −C I
H
Ha = ; C a = [C 0] (5.24)
0
Por consiguiente, el problema es determinar la matriz de ganancia K a como
resultado de la minimización de la siguiente función de costo:
∞
a
I = [xa )T (k)Qa xa (k) + u2 (k)R] (5.25)
k=0
5.5 Procedimiento de Diseño 221
ẋ = Ac x + Bc u; y = Cc x
donde:
0 1 0
Ac = 2E Bc = KnKact ; Cc = 1 0
−MN
−( M
B
+ Kn
MR ) MR
(5.29)
La función de transferencia de pulso Gp (z), para un tiempo de muestreo de
0.01 s (o lo que es lo mismo, una frecuencia de muestreo de Fs = 100 Hz),
tiene la forma:
y(z) b1 z + b2 b1 z −1 + b2 z −2
Gp (z) = = 2 = (5.30)
u(z) z + a1 z + a2 1 + a1 z −1 + a2 z −2
Con los datos determinados hasta aquı́, ahora podemos implementar los
otros pasos (ver ejemplo 5.2) con Cmin = 15 y Cmax = 100.
224 Control Adaptivo
donde:
a x(k) a G 0
x (k) = ;
G (k) =
z(k) −C I
a H
H = ; C a = [C 0]
0
5.6 Control Adaptivo de un Servomotor No Lineal 225
El programa disadap.m calcula las matrices K a (k), Ga (k) y H a (k) para cada
tiempo de muestreo. En el software de control implementado, la matriz P a (k)
se obtiene luego de iterar la ecuación de Riccati 20 veces en cada perı́odo de
muestro. Los valores de R y Qa para la simulación son:
0,05 0 0
R = 0,45; Qa = 0 0,01 0 ; (5.37)
0 0 0,01
Ū (k) = [b̂1 (k) + b̂2 (k)]−1 [1 + â1 (k) + â2 (k)]Ȳ (k) − C(k)
ˆ
% PARAMETROS DE OPTIMIZACION
Qo = 0.01; Ro = 0.04; % PARA EL FILTRO DE KALMAN
R = 0.45; Qa = [0.05 0 0;0 0.1 0;0 0 1]; % PARA LA GANANCIA Ka
% ******** LAZO DEL SISTEMA DE CONTROL ADAPTIVO *********
Mm = 2000;
for r = 1:Mm
t = r + 2;
% SE~NAL DE REFERENCIA
Yo(t)= Ref*sign(sin(frec*(t-2)));
% ESTIMACION DE PARAMETROS (METODO MCRM)
psi = [Y(t-1) Y(t-2) U(t-1) U(t-2) 1]’;
rho = max(1,norm(psi));
psin = psi/rho;
Nn = chol(Pi’); % Nn’*Nn = Pi => Nn*Nn’ = Pi’
S = inv(diag(Nn*ones(5,1),0));
Ps = S*Pi*S;
psins = inv(S)*psin;
rt = 1 + psins’*Ps*psins;
lamb = 1 - (rt-sqrt(rt^2-4*norm(Ps*psins)^2/trace(Ps)))/2;
e = Y(t)/rho - thi’*psin;
j = psins’*Ps*psins + lamb;
th = thi + e*inv(S)*Ps*psins/j;
Hns = Ps*psins/j;
Ps = (Ps - Hns*psins’*Ps)/lamb;
tt = abs(max(eig(Ps))/min(eig(Ps)) );
cmax = 100; cmin = 15;
if tt <= cmin,
Pi = Ps; thi = th;
elseif tt >= cmax,
Nnew = chol(Ps’); % Nnew*Nnew’ = Ps’
Snew = inv(diag(Nnew*ones(5,1),0));
Psnew = Snew*Ps*Snew;
Pi = Psnew; thi = th;
end
% RECUPERACION DE LA ECUACION CANONICA CONTROLABLE
ae1 = -th(1); ae2 = -th(2);
be1 = th(3); be2 = th(4); Ce = th(5);
ae11 = 0; ae12 =1; ae21 = -ae2; ae22 = -a1;
GE = [ae11 ae12;ae21 ae22];
be11 = 0; be21 = 1; HE = [be11;be21];
ce11 =be2; ce12 = be1; CE = [ce11 ce12]; DE = [0];
% SALIDA RESIDUAL (DESVIACION)
y(t) = Y(t) - Yo(t);
228 Control Adaptivo
Posición Y (rad)
1
−1
−2
0 2 4 6 8 10 12 14 16 18 20
2
Señal de control U (voltios)
−1
−2
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
El Actuador
COMPUTADORA
PERSONAL
Sensor (encoder)
PA0
..
PA .
PA7
COMPUERTAS MUX
DIGITALES PB0
..
PB . 16 bits SERVO-
DE ENTRADA MOTOR
PB7
Y SALIDA Decodificador DC
PC1 de cuadratura
.. y contador
PC . UP / DOWN
PC7 Varilla
PC0
Fs
CONTADOR / OUTB0 Carga
Adicional
TEMPORIZADOR
Codificador optico
’
Reductor de
velocidad
Alimentacion
’
11
00
. . . 00
11
00
11
00
11
00
11
00
11
Servomotor DC 00
11
Eje de salida
Varilla
Adaptador de carga
11
00
00
11
Carga 00
11
00
11
adicional
Figura 5.10: Proceso servomotor D.C. con carga no lineal y codificador óptico
incorporado.
Ca Ra Amplificador Rc
de potencia
Viene de la Salida A
PWM Al servo-
salida A0 Salida B motor DC
de la LAB-PC+
Generador
PWM
Cp Rp
Vcc
A1 B1
~ SISTEMA
SENAL PWM SERVO-
DE MOTOR
DISPARO DC
B2
A2
Par conmutador A = A1 + A2
Par conmutador B = B1 + B2
El Sensor de Posición
El sensor de posición esta conformado por un codificador óptico ro-
tatorio (interno al motor), un decodificador de cuadratura y un contador
UP/DOWN. El codificador óptico rotatorio consiste en:
Un disco opaco ranurado acoplado al eje del motor, que se mueve entre
una fuente de luz permanente habilitada y un detector. A medida que
gira el rotor, el paso de luz hacia el detector es habilitado o inhabilitado
por un patrón de áreas oscuras y transparentes impreso en el disco,
produciendo una señal digital que puede ser fácilmente interpretada
por el controlador de movimiento del sistema.
Canal A
Canal B
Fuente de luz
Transistor
’optico
Disco con
mascara
’
Clock UP
74HC Clock Down
4 bits
193
Puerto
digital 8 bits
PA Canal A
74HC
4 bits
193 LS7083
Canal B
74HC
4 bits
193
Puerto R L
digital 8 bits
PB 74HC
4 bits
193
La Interfaz Lab-PC+
La interfaz entre el microcomputador, la planta, el actuador y el sensor
es la tarjeta de adquisición de datos Lab-PC+. Los terminales usados para
el control son:
4. El terminal PC0 (bit 0 del puerto C), que se utiliza como entrada de
la señal de reloj Fs proveniente de OUTB0.
La señal de reloj OUTB0 se genera a partir de una base de tiempos de 2
MHz que activa la salida del contador/temporizador 8253. Los puertos de
entrada/salida provienen de la PPI (Interfaz Paralela Programable) 8255.
con x = Xk y u(k) = uk .
La ley de control es: uk = −K a Xka con (ver ecuación (5.26)):
K a = (R + (H a )T P a H a )−1 (H a )T P a Ga
236 Control Adaptivo
1. Inicializa_Sistema();
2. Mide_Variables(&y,&r,&vel,t);
3. Estima_Parametros(Th,y,u);
4. Encuentra_Control(r,&u);
5. u=Aplica_Control(u,vel);
/*R1LLIB.CPP
*Archivo de declaracion de funciones definidas en R1LLIB.H
*Estas funciones permiten facilitar el manejo de la tarjeta
*de adquisicion de datos Lab-PC+: Digital Input (16 bits),
*Analog Output, Timer Generator, Polling. Usa funciones de
*lecto/escritura de registros (inportb, outport).
*/
#include "r1llib.h"
#include "nidaq.h"
#include <dos.h>
static unsigned R1LLSBPort; // direccion del LSB (bit menos
//significativo) del puerto digital de entrada PA0-7
static unsigned R1LMSBPort; // direccion del MSB (bit mas
//significativo del puerto digital de entrada PB0-7
static unsigned R1LPollPort; // direccion del puerto digital
//de polling PC0-7. Esto es, la entrada al timer de la se~nal
//de muestreo en forma de una sucesion de pulsos en el bit
//indicado en la descripcion del bus (PC0)
static unsigned R1LAOPort; // direccion de la salida
//anal’ogica (DAC0)
static int R1LFS ; // frecuencia de muestreo (Hertz)
/* Inicializando la tarjeta de adquisicion de datos */
void ConfigurarHardware (unsigned pollPort, unsigned lPort,
unsigned hPort, unsigned salPort, int frec)
{
int cuentaTimer, deviceCode;
cuentaTimer = (int)(2000000/frec);
R1LPollPort = pollPort;
5.6 Control Adaptivo de un Servomotor No Lineal 239
R1LLSBPort = lPort;
R1LMSBPort = hPort;
R1LAOPort = salPort;
R1LFS = frec;
USE_LAB();
Init_DA_Brds(1,&deviceCode);
ICTR_Setup(1,0,3,cuentaTimer,1); // clock de muestreo = timer0
DIG_Prt_Config(1,(int)(pollPort - 0x270),0,0);
DIG_Prt_Config(1,(int)(lPort-0x270),0,0);
DIG_Prt_Config(1,(int)(hPort-0x270),0,0);
}
/*Enviando al puerto de salida el voltaje especificado */
void EnviarVoltage (float u)
{
unsigned salidaDigital;
salidaDigital = (unsigned) (409.5*u-0.5);
outport(R1LAOPort,salidaDigital);
}
/*Detectando el numero de posiciones registrados en los
contadores */
unsigned int LeerPosicion()
{
unsigned char oct1,oct2;
oct1 = inportb(R1LLSBPort);
oct2 = inportb(R1LMSBPort);
return (255*oct2+oct1);
}
/*Detectando verdadero o falso en forma alternativa, de
acuerdo a la frecuencia indicada en ConfigurarHardware */
int NivelClock ()
{
unsigned char bytePoll;
bytePoll = inportb (R1LPollPort);
return (bytePoll&1);
}
Phi[0]= ym1; Phi[1]= ym2; Phi[2]= um1; Phi[3]= um2; Phi[4]= 1.;
for(Ro=i=0; i<5; i++) Ro += Phi[i]*Phi[i];
if(Ro>1.) Ro= sqrt(Ro);
else Ro= 1.;
for(i=0; i<5; i++)
{
Phin[i]= Phi[i]/Ro;
for(j=0; j<5; j++)
Nk[i][j]= Pk[i][j];
}
/*Ahora hacemos Cholesky */
for(j=0; j<5; j++)
{
for(i=0, val=0.; i<j; i++) val += Nk[j][i]*Nk[j][i];
Nk[j][j]= sqrt(Nk[j][j]-val);
for(i=j+1; i<5; i++)
{
for(k=0, val=0.; k<j; k++) val += Nk[i][k]*Nk[j][k];
Nk[i][j]= (Nk[i][j]-val)/Nk[j][j];
} }
/*Y ahora encontramos la Sk*/
Sk[0]= 1./ Nk[0][0];
Sk[1]= 1./(Nk[1][0]+Nk[1][1]);
Sk[2]= 1./(Nk[2][0]+Nk[2][1]+Nk[2][2]);
Sk[3]= 1./(Nk[3][0]+Nk[3][1]+Nk[3][2]+Nk[3][3]);
Sk[4]= 1./(Nk[4][0]+Nk[4][1]+Nk[4][2]+Nk[4][3]+Nk[4][4]);
/*Y ahora la Psk y la Phins*/
for(i=0; i<5; i++)
{
Phins[i]= Phin[i]/Sk[i];
for(j=0; j<5; j++)
Psk[i][j]= Sk[i]*Pk[i][j]*Sk[j];
}
/*Y ahora la ’Rt’ y la ’LF’ y el ’ek’ y el ’div’*/
for(i=0, rt= 1., val1= LF= ek= 0.; i<5; i++)
{
for(j=0, val=0.; j<5; j++)
val += Psk[i][j]*Phins[j];
rt += val*Phins[i]; /* OJO QUE EN LA SIMULACION PONE "+=" */
val1+= Psk[i][i];
LF += val*val;
ek += Thk[i]*Phin[i];
}
246 Control Adaptivo
LF = 1-.5*(rt-sqrt(rt*rt-4.*LF/val1));
ek = Yk/Ro - ek;
div= LF + rt - 1.;
/*Ahora Th y Theta y algo de Psk */
for(i=0; i<5; i++)
{
for(j=0, val= 0.; j<5; j++)
{
val += Psk[i][j]*Phins[j];
Psn[i][j]= Psk[i][j]; /* Esto es de Psk */
}
Theta[i] = Th[i] = Thk[i] + val*ek/Sk[i]/div/* en la simul*/;
}
/*Y la ’Psk’ (tambi’en se puede hacer O(n2) en vez de O(n3)) */
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
for(k=0, val= val1= 0.; k<5; k++)
{
val += Psn[i][k]*Phins[k];
val1+= Phins[k]*Psn[k][j];
}
Psaux[i][j]= Psk[i][j]= Psk[i][j]/LF - val*val1/div/LF;
} }
/*Ahora calculamos la C */
Co= calculaC();
/*Y renovamos las variables */
if( Co<= Cmin )
for(i=0; i<5; i++)
{
Thk[i]= Th[i];
for(j=0; j<5; j++)
Pk[i][j]= Psk[i][j];
}
else if(Co>= Cmax)
{
for(i=0; i<5; i++)
for(j=0; j<5; j++)
Nk[i][j]= Psk[i][j];
/*Ahora hacemos el Cholesky */
for(j=0; j<5; j++)
{
5.6 Control Adaptivo de un Servomotor No Lineal 247
if(theta<0.) t= -t;
}
c= 1./sqrt(1+t*t); s= t*c;
tau= s/(1.+c); h= t*Psaux[ip][iq];
z[ip] -= h; z[iq] += h;
D[ip] -= h; D[iq] += h;
Psaux[ip][iq] = 0.;
{
int i, j, k, n=3, niter;
double delta;
delta= TOL+1.;
niter= 0;
while(delta>TOL && 20>niter++)
{
/*P(k).H y H’P(k) */
for(i=0; i<n; i++)
for(Vaux1[i]=Vaux2[i]=0.,j=0; j<n; j++){
Vaux1[i] += P[i][j]*He[j];
Vaux2[i] += He[j]*P[j][i];
}
/*Raux1= R + H’P(k).H */
for(Raux1= R, i=0; i<n; i++)
Raux1 += He[i]*Vaux1[i];
/*G’P(k).H y H’P(k).G */
for(i=0; i<n; i++){
Vaux3[i]= Vaux4[i]= 0.;
for(j=0; j<n; j++){
Vaux3[i] += Ge[j][i]*Vaux1[j];
Vaux4[i] += Vaux2[j]*Ge[j][i];
}
/*3er. Termino */
for(i=0; i<n; i++)
for(j=0; j<n; j++)
Maux1[i][j]= Vaux3[i]*Vaux4[j]/Raux1;
/*G’P(k) */
for(i=0; i<n; i++)
for(j=0; j<n; j++){
Maux2[i][j]= 0.;
for(k=0; k<n; k++)
Maux2[i][j] += Ge[k][i]*P[k][j];
}
/*2o. Termino> G’P(k).G */
for(i=0; i<n; i++)
for(j=0; j<n; j++){
Maux3[i][j]= 0.;
for(k=0; k<n; k++)
Maux3[i][j] += Maux2[i][k]*Ge[k][j];
}
/*Y Total */
5.6 Control Adaptivo de un Servomotor No Lineal 251
delta= 0.;
for(i=0; i<n; i++)
for(j=0; j<n; j++){
Raux1= Q[i][j]+Maux3[i][j]-Maux1[i][j];
if(fabs(P[i][j]-Raux1)>delta) delta= fabs(P[i][j]-Raux1);
P[i][j]= Raux1; }
}/* Fin de encontrar la de Riccati */
/*Encontramos ahora la de control */
/*H’P */
for(Vaux1[i=0]=0.; i<n; Vaux1[++i]= 0.)
for(j=0; j<n; j++)
Vaux1[i] += He[j]*P[j][i];
/*R+H’P.H */
for(Raux1= R, i=0; i<n; i++)
Raux1 += Vaux1[i]*He[i];
/*Y Final, encontramos K= H’P.G/(R+H’P.H) */
for(K[i=0]=0.; i<n; K[++i]=0.){
for(j=0; j<n; j++)
K[i] += Vaux1[j]*Ge[j][i];
K[i] /= Raux1;
}
/*encontrando el control y el nuevo estado del Observador*/
u= -(K[0]*x[0] + K[1]*x[1] + K[2]*z);
Raux1= G[0][0]*x[0] + G[0][1]*x[1] + H[0]*u;
x[1] = G[1][0]*x[0] + G[1][1]*x[1] + H[1]*u;
x[0] = Raux1;
/*ahora encontramos el valor ABSOLUTO */
*U = u + ((1.+a1+a2)*r-Cc)/(b1+b2);
}
/*Funci\’on principal del programa */
void main()
{
int ant=0, act=0, k, n;
FILE *out;
float *yv, *uv, *rv, vel, y, u, r;
Inicializa_Sistema();
clrscr();
assert(tsimul<120);
t= tsimul/Td;
n= (int)t;
assert(NULL!=(uv= (float *)calloc(n/5,sizeof(float))));
assert(NULL!=(yv= (float *)calloc(n/5,sizeof(float))));
assert(NULL!=(rv= (float *)calloc(n/5,sizeof(float))));
252 Control Adaptivo
t= u= vel= y= 0.;
for(k=0; k<n;)
{
act=NivelClock();
if ((ant==0)&&(act==1))
{
Mide_Variables(&y, &r, &vel, t);
Estima_Parametros(Th, y, u);
Encuentra_Control(r, &u);
u= Aplica_Control(u, vel);
if(!(k%5))
{
yv[k/5]= y; rv[k/5]= r; uv[k/5]= u;
}
k++;
t += Td; gotoxy(5,5); printf("%f",t);
if(kbhit()) if(getch()==27) break;
}
ant=act;
}
EnviarVoltage(Ofst);
out=fopen("c2.out","wt");
for (int i=0; i<n/5; i++)
fprintf(out,"%10f %10f %10f %10f %10f\n",
i*5*Td, rv[i], yv[i], uv[i], rv[i]-yv[i]);
fclose(out);
}
2
Posición (radianes)
1.5
0.5
0
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
1.5
Señal de control (voltios)
0.5
−0.5
−1
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
Problema 5.1
El problema 3.1 presenta las ecuaciones que gobiernan la dinámica del sis-
tema de suspensión de un bus (ver figura 3.12). Diseñar un sistema de control
adaptivo con autosintonización para lograr el objetivo de control siguien-
te: la salida del proceso y = x2 − x1 (referencia nula) no debe presentar
sobreimpulsos mayores que el 5 %, y luego de 20 segundos, las oscilaciones
254 Control Adaptivo
2.5
Posición (radianes)
2
1.5
0.5
0
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
1.5
Señal de control (voltios)
0.5
−0.5
−1
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
b2/m2 0 a33 1
k2/m2 0 a43 0];
B = [0 0;1/m1 b1*b2/(m1*m2);0 -b2/m2;(1/m1+1/m2) -k2/m2];
C = [0 0 1 0]; D = [0 0];
% CONVERSION AL ESPACIO DISCRETO
T=0.5; % TIEMPO DE MUESTREO
[G,H,C,D] = c2dm(A,B,C,D,T,’zoh’); % ESPACIO DE ESTADO
% FT CUANDO ACTUA LA SE~NAL CONTROL u Y EL DISTURBIO w ES NULO
[num,den]=ss2tf(G,H,C,D,1);
a1 = den(2); a2 = den(3); a3 = den(4); a4 = den(5);
b1 = num(2); b2 = num(3); b3 = num(4); b4 = num(5);
% F.T. cuando act’ua disturbio w y control u es nulo
[numd,dend]=ss2tf(G,H,C,D,2); % dend = den
j1=numd(2); j2=numd(3); j3=numd(4); j4=numd(5);
% F.T. del proceso: y = (num/den)*u + (numd/den)*w
% PARAMETROS PARA OPTIMIZAR LA GANANCIA F DEL FILTRO DE KALMAN
Xi = 1; Sigma = 1;
% PARAMETROS DE OPTIMIZACION DEL CONTROLADOR Ke
R = 1;
Qa = 1*[1 0 0 0 0;0 1 0 0 0;0 0 1 0 0;0 0 0 1 0;0 0 0 0 1];
% CONDICIONES INICIALES
Ref = 1; % MAGNITUD DE LA SE~NAL DE REFERENCIA
nn = 4; r=1; % nn: ORDEN DEL PROCESO; r: NUMERO DE SALIDAS
NN=13; % NUMERO DE PARAMETROS A ESTIMAR
Ce = (1 + a1 + a2+ a3+a4)*Ref;
thi =[-a1 -a2 -a3 -a4 b1 b2 b3 b4 j1 j2 j3 j4 Ce]’;
alfa=1000; Pi = alfa*eye(NN); % MATRIZ P INICIAL
lamb=0.98; % FACTOR DE MEMORIA
Y(1) = 0; Y(2) = 0; Y(3) = 0; Y(4)=0; Y(5) =0; % SALIDA
U(1)= 0; U(2) = 0; U(3) = 0; U(4)=0; U(5)=0; % CONTROL
w(1)= 0; w(2) = 0; w(3) = 0; w(4)=0; w(5)=0;
xmenos = zeros(nn,1); % VECTOR DE OBSERVACION INICIAL
z=0; % ACCION INTEGRAL INICIAL
MM = 200;
% LAZO DEL SISTEMA DE CONTROL ADAPTIVO ********************
for t=1:MM;
t1=t+1;
% SE~NAL DEL DISTURBIO
w(t1+4) = 0.01;%*sign(sin(0.03*t1));
% SE~NAL DE REFERENCIA
W(t1+4) = 0;
% MODELO LINEAL DEL PROCESO CON DISTURBIO
Y(t1+4)=[Y(t1+3) Y(t1+2) Y(t1+1) Y(t1) ...
256 Control Adaptivo
F = dlqe(GE,FE,CE,Sigma,Xi);
xmas = xmenos + F*(y(t1+4) - CE*xmenos); % OBSERVACION
z = z -CE*xmas; % ACCION INTEGRAL
Problema 5.2
0.01
Salida y = x1−x2 (m)
0.005
−0.005
−0.01
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
−20
Fuerza de control (N)
−40
−60
−80
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
Cc = [0 0 1]; Dc = [0];
T = 0.1; % PERIODO DE MUESTREO
% MODELO LINEAL DISCRETO
[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);
b1 = num(2); b2 = num(3); b3=num(4);
% CONDICIONES INICIALES
Ref = 0.2; % MAGNITUD DE LA SE~NAL DE REFERENCIA
Ce = (1 + a1 + a2 + a3)*Ref; % Uo = 0 (ARBITRARIO)
thi = [-a1 -a2 -a3 b1 b2 b3 Ce]’;
alfa=1000; Pi = alfa*eye(NN); % MATRIZ P INICIAL
lamb=0.98; lamb0 = 0.99; % FACTOR DE MEMORIA
Y(1)=0; Y(2)=0; Y(3)=0; y(1)=0; y(2)=0; y(3)=0; % SALIDA
U(1)=0; U(2)=0; U(3)=0; u(1)=0; u(2)=0; u(3)=0; % CONTROL
xmenos = zeros(nn,1); % VECTOR DE OBSERVACION INICIAL
z=0; % ACCION INTEGRAL INICIAL
tt = abs(max(eig(Ps))/min(eig(Ps)) );
cmax = 100; cmin = 15;
if tt <= cmin,
Pi = Ps; thi = th;
elseif tt >= cmax,
Nnew = chol(Ps’); % Nnew*Nnew’ = Ps’
Snew = inv(diag(Nnew*ones(NN,1),0));
Psnew = Snew*Ps*Snew;
Pi = Psnew; thi = th;
end
% RECUPERACION DE LA ECUACION CANONICA CONTROLABLE
ae1 = -th(1); ae2 = -th(2); ae3 = -th(3);
be1 = th(4); be2 = th(5); be3 = th(6); Ce = th(7);
nume = [0 be1 be2 be3];
dene = [1 ae1 ae2 ae3];
[GE,HE,CE,DE] = tf2ss(nume,dene);
% CALCULO DE LA GANANCIA F DEL ESTIMADOR DE KALMAN
F = dlqe(GE,HE,CE,Sigma,Xi);
xmas = xmenos + F*(y(t+3) - CE*xmenos); % OBSERVACION
z = z -CE*xmas; % ACCION INTEGRAL
% CALCULO DE LA GANANCIA Ka DEL CONTROLADOR
Ga = [GE zeros(nn,r);-CE eye(r,r)];
Ha = [HE;zeros(r,r)];
Ca = [CE zeros(r,r)];
Ka = dlqr(Ga,Ha,Qa,R);
% CALCULO DE LA LEY DE CONTROL RESIDUAL
u(t+3) = - Ka*[xmas;z]; % ec. (27)
% ACTUALIZANDO ESTADOS
xmenos = GE*xmas + HE*u(t+3); %
% CALCULO DEL VALOR DE EQUILIBRIO U
AE = 1 + ae1 + ae2 + ae3; BE = be1 + be2 + be3;
Uin = inv(BE)*(AE*v1(t+3) - Ce);
% CALCULO DE LA SE~NAL ACTUAL DE CONTROL U(K)
U(t+3) = u(t+3) + Uin;
end % *********************************
% GRAFICOS
ejex = linspace(0,MM*T,MM);
subplot(2,1,1)
plot(ejex,v1(3:MM+2),ejex,Y(3:MM+2)), grid
ylabel(’Inclinacion (rad)’)
subplot(2,1,2)
plot(ejex,U(3:MM+2)), grid
5.7 Problemas Resueltos 261
xlabel(’Tiempo en seg’)
ylabel(’Angulo del deflector (rad)’)
print -deps -f p4adap1
0.4
Inclinación (rad)
0.2
−0.2
−0.4
0 20 40 60 80 100 120 140 160 180 200
1
Angulo del deflector (rad)
0.5
−0.5
−1
0 20 40 60 80 100 120 140 160 180 200
Tiempo en seg
Problema 5.3
subplot(2,1,1)
plot(ejex,Yo(7:MM+6),ejex,Y(7:MM+6)), grid
ylabel(’Y1: Velocidad (m/s)’)
xlabel(’Tiempo en segundos’)
subplot(2,1,2)
plot(ejex,U(7:MM+6)), grid
xlabel(’Tiempo en segundos’)
ylabel(’Voltaje de control u’)
print -deps -f p7adap1a
40
Y1: Velocidad (m/s)
30
20
10
0
0 50 100 150 200 250 300
Tiempo en segundos
30
Voltaje de control u
20
10
−10
0 50 100 150 200 250 300
Tiempo en segundos
Problema 5.4
40
20
10
0
0 50 100 150 200 250 300
Tiempo en segundos
30
Voltaje de control u
20
10
−10
0 50 100 150 200 250 300
Tiempo en segundos
clear all
% PARAMETROS GENERALES
nn = 4; r=1; % nn: orden del proceso; r: NUMERO DE SALIDAS
NN = 9; % ORDEN DEL VECTOR ESATIMADO DE PARAMETROS
% cmax = 100; cmin = 15; % PARA EL ESTIMADOR DE PARAMETROS
% PARAMETROS PARA OPTIMIZAR GANANCIA DEL FILTRO DE KALMAN
Xi = 0.001; Sigma = 400;
% PARAMETROS DE OPTIMIZACION DEL CONTROLADOR Ke
R = 1; Qa = 1*eye(r+nn,r+nn);
% MODELO LINEAL DEL PROCESO EN TIEMPO CONTINUO
Ac = [-0.2 0 0 0;1 0 0 0;2 0 -2 0;5 0 0 -5];
Bc = [0.001;0;0;0];
Cc = [0 1 0 0]; Dc = [0];
T = 0.8; % PERIODO DE MUESTREO
% MODELO LINEAL DISCRETO
[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);
% CONDICIONES INICIALES
Ref = 1; % MAGNITUD DE LA SE~NAL DE REFERENCIA: Yo = Ref
5.7 Problemas Resueltos 267
Ce = (1 + a1 + a2 + a3 + a4)*Ref; % Uo = 0 (arbitrario)
thi = [-a1 -a2 -a3 -a4 b1 b2 b3 b4 Ce]’;
alfa=1000; Pi = alfa*eye(NN); % MATRIZ P INICIAL
lamb=0.98; lamb0 = 0.99; % FACTOR DE MEMORIA
Y(1)=0;Y(2)=0;Y(3)=0;Y(4)=0; y(1)=0;y(2)=0;y(3)=0;y(4)=0;
U(1)=0;U(2)=0;U(3)=0;U(4)=0; u(1)=0;u(2)=0;u(3)=0;u(4)=0;
xmenos = zeros(nn,1); % VECTOR DE OBSERVACION INICIAL
z=0; % ACCION INTEGRAL INICIAL
% INCIO DEL LAZO DE CONTROL **********************************
MM = 1000;
for t = 1:MM
% SE~NAL DE REFERENCIA
g(t+4)=6 + 4*sign(sin(0.01*t));
% MODELO LINEAL DEL PROCESO
Y(t+4)=[Y(t+3) Y(t+2) Y(t+1) Y(t) ...
U(t+3) U(t+2) U(t+1) U(t)]*[-a1 -a2 -a3 -a4 b1 b2 b3 b4]’;
y(t+4) = Y(t+4) - g(t+4); % salida residual (desviacion)
% ESTIMACION DE PARAMETROS (METODO MCRM)%
psi = [Y(t+3) Y(t+2) Y(t+1) Y(t) ...
U(t+3) U(t+2) U(t+1) U(t) 1]’;
rho = max(1,norm(psi));
psin = psi/rho;
Nn = chol(Pi’); % Nn’*Nn = Pi => Nn*N’ = Pi’
S = inv(diag(Nn*ones(NN,1),0));
Ps = S*Pi*S;
psins = inv(S)*psin;
rt = 1 + psins’*Ps*psins;
lamb = 1 - (rt-sqrt(rt^2-4*norm(Ps*psins)^2/trace(Ps)))/2;
e = Y(t+4)/rho - psin’*thi;
j = psins’*Ps*psins + lamb;
th = thi + e*inv(S)*Ps*psins/j;
Hns = Ps*psins/j;
Ps = (Ps - Hns*psins’*Ps)/lamb;
tt = abs(max(eig(Ps))/min(eig(Ps)) );
cmax = 100; cmin = 15;
if tt <= cmin,
Pi = Ps; thi = th;
elseif tt >= cmax,
Nnew = chol(Ps’); % Nnew*Nnew’ = Ps’
Snew = inv(diag(Nnew*ones(NN,1),0));
Psnew = Snew*Ps*Snew;
Pi = Psnew; thi = th;
end
268 Control Adaptivo
xlabel(’Tiempo en segundos’)
subplot(2,1,2), grid
plot(ejex,U(3:MM+2)), grid
xlabel(’Tiempo en segundos’)
ylabel(’Voltaje de control’)
print -deps -f p8adap1
10
8
Posición (m)
0
0 100 200 300 400 500 600 700 800
Tiempo en segundos
200
Voltaje de control
100
−100
−200
0 100 200 300 400 500 600 700 800
Tiempo en segundos
Problema 5.5
u(t+2) = - Ka*[xmas;z];
% ACTUALIZANDO ESTADOS
xmenos = GE*xmas + HE*u(t+2);
% CALCULO DE Uo (VALOR D.C. DE U)
% AE(z^(-1)) = 1 + ae1*z^(-1) + ae2*z^(-1);
% BE(z^(-1)) = be1*z^(-1) + be2*z^(-1);
% AE(z^(-1))*Y(k) = BE(z^(-1))*U(k) + Ce; Ce = th(N), N=5
% En estado estacionario: z=1, Y(k) = Yo(k) (Referencia)
% entonces: U(z=1) = inv(B(z=1)*[A(z=1)*Ref - ce]
AE = 1 + ae1 + ae2; BE = be1 + be2;
Uin = inv(BE)*(AE*g(t+2) - Ce);
% CALCULO DE LA SE~NAL DE CONTROL U(t)
U(t+2) = u(t+2) + Uin;
% LIMITANDO LA SE~NAL U(t)
if(U(t+2) > 3)
U(t+2) = 3;
elseif(U(t+2) <-3)
U(t+2) = -3;
end
end % FIN DEL LAZO DE CONTROL **********************
% GRAFICOS
ejex = linspace(0,MM*T,MM);
subplot(2,1,1)
plot(ejex,g(3:MM+2),ejex,Y(3:MM+2)), grid
ylabel(’Nivel en metros’)
xlabel(’Tiempo en segundos’)
subplot(2,1,2)
plot(ejex,U(3:MM+2)), grid
xlabel(’Tiempo en segundos’)
ylabel(’Flujo de control (m/s)’)
print -deps -f p9adap1
Problema 5.6
Nivel en metros
2.5
1.5
1
0 20 40 60 80 100 120 140 160
Tiempo en segundos
4
Flujo de control (m/s)
−2
−4
0 20 40 60 80 100 120 140 160
Tiempo en segundos
Ps = (Ps - Hns*psins’*Ps)/lamb;
tt = abs(max(eig(Ps))/min(eig(Ps)) );
cmax = 100; cmin = 15;
if tt <= cmin,
Pi = Ps; thi = th;
elseif tt >= cmax,
Nnew = chol(Ps’); % Nnew*Nnew’ = Ps’
Snew = inv(diag(Nnew*ones(NN,1),0));
Psnew = Snew*Ps*Snew;
Pi = Psnew; thi = th;
end
% RECUPERACION DE LA ECUACION CANONICA CONTROLABLE
ae1 = -th(1); ae2 = -th(2); ae3 = -th(3);
be1 = th(4); be2 = th(5); be3 = th(6); Ce = th(7);
ae11 = 0; ae12 =1; ae13 = 0; ae21 = 0; ae22 = 0;
ae23 = 1; ae31 =-ae3; ae32 = -ae2; ae33 = -ae1;
GE = [ae11 ae12 ae13;ae21 ae22 ae23;ae31 ae32 ae33];
be11 = 0; be21 = 0; be31 = 1; HE = [be11;be21;be31];
ce11 =be3; ce12 = be2; ce13 = be1;
CE = [ce11 ce12 ce13]; DE = [0];
% CALCULO DE LA GANANCIA F DEL ESTIMADOR DE KALMAN
F = dlqe(GE,HE,CE,Sigma,Xi);
xmas = xmenos + F*(y(t+3) - CE*xmenos);
z = z -CE*xmas;
% CALCULO DE LA GANANCIA Ka DEL CONTROLADOR
Ga = [GE zeros(nn,r);-CE eye(r,r)];
Ha = [HE;zeros(r,r)];
Ca = [CE zeros(r,r)];
Ka = dlqr(Ga,Ha,Qa,R);
% CALCULO DE LA LEY DE CONTROL RESIDUAL
u(t+3) = - Ka*[xmas;z];
% ACTUALIZANDO ESTADOS
xmenos = GE*xmas + HE*u(t+3);
AE = 1 + ae1 + ae2 + ae3; BE = be1 + be2 + be3;
Uin = inv(BE)*(AE*Yo(t+3) - Ce);
% CALCULO DE LA SE~NAL DE CONTROL U(t)
U(t+3) = u(t+3) + Uin;
% LIMITANDO LA SE~NAL U(t)
if(U(t+3) > 100)
U(t+3) = 100;
elseif(U(t+3) <-100)
U(t+3) = -100;
end
276 Control Adaptivo
8
Velocidad (rad/s)
−2
0 10 20 30 40 50 60 70 80
40
Voltaje de control
20
−20
−40
0 10 20 30 40 50 60 70 80
Tiempo en seg
Problema 5.7
En el problema 3.3 se describe el proceso de la bola rodando a lo largo de
una barra con un grado de libertad, tal como se muestra en la figura 3.16.
Una leva conecta la barra con un engranaje accionado por un servomotor.
Se desea diseñar un sistema de control adaptivo que pueda posicionar la
bola a 0.5 m de un extremo de la barra de 1 m de longitud. Evidentemente,
la oscilación de la bola debe estar restringida sobre la barra. El voltaje de
control no debe sobrepasar los ± 40 voltios.
5.7 Problemas Resueltos 277
for t = 1:MM
% SE~NAL DE REFERENCIA
Yo(t+4)= 0.5;%sign(sin(0.005*t));
% MODELO LINEAL DEL PROCESO
Y(t+4) = [Y(t+3) Y(t+2) Y(t+1) Y(t)...
U(t+3) U(t+2) U(t+1) U(t)]*...
[-a1 -a2 -a3 -a4 b1 b2 b3 b4]’;
y(t+4) = Y(t+4) - Yo(t+4); % salida residual
% ESTIMACION DE PARAMETROS (METODO MCRM)
psi = [Y(t+3) Y(t+2) Y(t+1) Y(t)...
U(t+3) U(t+2) U(t+1) U(t) 1]’;
rho = max(1,norm(psi));
psin = psi/rho;
Nn = chol(Pi’); % Nn’*Nn = Pi => Nn*N’ = Pi’
S = inv(diag(Nn*ones(NN,1),0));
Ps = S*Pi*S;
psins = inv(S)*psin;
rt = 1 + psins’*Ps*psins;
lamb = 1 - (rt-sqrt(rt^2-4*norm(Ps*psins)^2/trace(Ps)))/2;
e = Y(t+4)/rho - psin’*thi;
j = psins’*Ps*psins + lamb;
th = thi + e*inv(S)*Ps*psins/j;
Hns = Ps*psins/j;
Ps = (Ps - Hns*psins’*Ps)/lamb;
tt = abs(max(eig(Ps))/min(eig(Ps)) );
cmax = 100; cmin = 15;
if tt <= cmin,
Pi = Ps; thi = th;
elseif tt >= cmax,
Nnew = chol(Ps’); % Nnew*Nnew’ = Ps’
Snew = inv(diag(Nnew*ones(NN,1),0));
Psnew = Snew*Ps*Snew;
Pi = Psnew; thi = th;
end
% RECUPERACION DE LA ECUACION CANONICA CONTROLABLE
ae1 = -th(1); ae2 = -th(2); ae3 = -th(3); ae4 = -th(4);
be1 = th(5); be2 = th(6); be3 = th(7); be4 = th(8); Ce = th(9);
dene = [1 ae1 ae2 ae3 ae4];
nume = [0 be1 be2 be3 be4];
[GE,HE,CE,DE] = tf2ss(nume,dene);
% CALCULO DE LA GANANCIA F DEL ESTIMADOR DE KALMAN
F = dlqe(GE,HE,CE,Sigma,Xi);
xmas = xmenos + F*(y(t+4) - CE*xmenos); % OBSERVACION
5.8 Problemas Propuestos 279
0.8
Posición (m)
0.6
0.4
0.2
0
0 50 100 150 200 250
10
5
Voltaje de control
−5
−10
−15
0 50 100 150 200 250
Tiempo en seg
del modelado del proceso, el tiempo muerto puede ser descrito mediante la
aproximación de Padé de tercer orden (ver ejemplo ??):
num(s) 1 − Tt s/2 + (Tt s)2 /10 − (Tt s)3 /120
e−T s ≈ =
den(s) 1 + Tt s/2 + (Tt s)2 /10 + (Tt s)3 /120
Especificaciones de diseño: tiempo de estabilización menor que 40 s, error
en estado estacionario nulo y porcentaje de sobreimpulso menor al 5 %.
Problema 5.9
Las ecuaciones del modelo linealizado para controlar la posición del cañón
montado en la torreta de un tanque (figura 3.28), empleando un actuador
hidráulico se detallan en el problema 3.9.
(a) Diseñar un sistema de control adaptivo con autosintonización para
controlar el ángulo de elevación θ con las especificaciones siguientes:
tiempo de estabilización menor que 5 s, mı́nimo sobreimpulso en la res-
puesta y error de estado estacionario nulo. Los disturbios tipo escalón
pueden actuar simultáneamente o no, y pueden ser positivos o nega-
tivos. Para cada caso, el sistema de control diseñado debe ser capaz
de minimizar sus efectos.
5.8 Problemas Propuestos 281
(b) Lo mismo que (a), pero en este caso para controlar el ángulo azimutal.
Problema 5.10
Problema 5.11
La figura 3.32 muestra el proceso péndulo doble no lineal que es una exten-
sión del péndulo simple descrito en la sección 3.1. El acoplamiento entre los
dos péndulos de igual longitud no es flexible. Las ecuaciones que describen la
dinámica del sistema son materia del problema propuesto 3.13. Considerar
que la carga esférica es de 0.02 kg. Diseñar un sistema de control adaptivo
con autosintonización para controlar simultáneamente las posiciones θ y τ
con mı́nimo tiempo de estabilización y mı́nimo sobreimpulso en la salida, de
modo tal que el péndulo doble permanezca en posición vertical.
Problema 5.12
La figura 3.33 muestra el proceso doble grúa puente no lineal que es una ex-
tensión del proceso grúa-puente descrito en la sección 3.2. El acoplamiento
entre las dos secciones iguales de la varilla no es flexible. Para poder deter-
minar un modelo no lineal dinámico para este proceso, conviene emplear las
ecuaciones de Lagrange de la mecánica clásica (ver problema 3.14). Conside-
rar que la carga esférica es de 0.02 kg. Diseñar un sistema de control adaptivo
con autosintonización para controlar simultáneamente las posiciones θ y τ
con mı́nimo tiempo de estabilización y mı́nimo sobreimpulso, de modo tal
que la doble grúa-puente permanezca en posición vertical cuando el carro
realiza un recorrido predeterminado.
Problema 5.13
dv
mv̇(t) + bv(t) = u(t); v̇ =
dt
Diseñar un sistema de control adaptivo con autosintonización para contro-
lar la velocidad del móvil con mı́nimo tiempo de estabilización y mı́nimo
sobreimpulso en la salida. La señal de referencia puede ser arbitraria (pro-
blema de seguimiento).
Problema 5.14
Control Predictivo
y(t + k/t), denota los valores futuros de la salida basado en las medi-
ciones disponibles en el tiempo t:
2
Trayectoria de
referencia
Trayectoria
deseada 1
2
Tiempo
Salida pasada Muerto
del proceso
Pasado 1 2 Futuro N2
Momento presente t
Entradas y
salidas Salidas + Trayectoria de
pasadas predecidas referencia
MODELO -
Entradas
futuras
OPTIMIZADOR
Funcion
’ de costo restricciones
El Disturbio n(t)
La señal de disturbio n(t) incluye todos los efectos no deseados en la sali-
da y(t). Esta señal representa el efecto conjunto de todos los disturbios sobre
el proceso, otras entradas no medibles, ruido de medición, errores de mode-
lado, incertidumbres, etc. El disturbio n(t), que es de carácter estocástico,
puede ser modelado mediante un filtro coloreado de la forma:
n(t) C(z −1 )
= (6.2)
e(t) D(z −1 )
x(t) = f (x(t − 1), x(t − 2), . . . , u(t − 1), u(t − 2), . . .) (6.5)
El Modelo CARIMA
El modelo CARIMA, del inglés “Controlled Autoregressive Integrated
Moving Average”, es un modelo lineal básico y bastante extendido en su
aplicación y es precisamente el que emplearemos. El modelo CARIMA del
proceso puede ser representado por:
C(z −1 )
A(z −1 )y(t) = B(z −1 )u(t) + e(t) (6.6)
D(z −1 )
donde:
A(z −1 ) = 1 + a1 z −1 + ... + ana z −na (6.7)
B(z −1 ) = b1 z −1 + ... + bnb z −nb (6.8)
El origen del término CARIMA se debe a que la ecuación de diferencias
del modelo del proceso presenta tres componentes, a saber, la componente
salida autoregresiva:
Ejemplo 6.1
El modelo lineal de orden 2 del servomotor D.C. sujeto a cargas no lineales
descrito en la sección 3.3 es:
q̇ = w
N B n2 KE nKact K
ẇ = − q − + w+ u
M M MR RM
Asumiendo que el ruido de medición n(t) en la posición del eje del servomotor
(la salida del proceso) es coloreado:
1
n(t) = e(t)
1 − z −1
determine su modelo CARIMA.
Solución: La función de transferencia de pulso del proceso posee la forma:
q(z) b1 z + b2 b1 z −1 + b2 z −2 B(z −1 )
= 2 = =
u(z) z + a1 z + a2 1 + a1 z −1 + a2 z −2 A(z −1 )
290 Control Predictivo
B(z −1 ) B(z −1 ) 1
q(z) = −1
u(z) + n(t) = −1
u(z) + e(t)
A(z ) A(z ) 1 − z −1
donde e(t) es ruido blanco gaussiano con media nula. La ecuación de dife-
rencias del proceso ruidoso viene a ser:
x(t+k-1/t) y(t+k-1/t)
x(t+k-2/t) y(t+k-2/t) MODELO
MODELO x(t+k/t) SERIE / x(t+k/t)
u(t+k-1/t) PARALELO u(t+k-1/t) PARALELO
u(t+k-2/t) u(t+k-2/t)
El Modelo Paralelo
El modelo paralelo, llamado algunas veces modelo independiente, puede
ser usado para procesos estables y es el que se implementa por defecto. En
6.4 El Modelo del Predictor 291
El Modelo Serie/Paralelo
El modelo serie/paralelo puede ser empleado para procesos estables o
C(z −1 )
inestables. En este caso, el modelo del disturbio n(t) = D(z −1 ) e(t) se es-
+
+
- MODELO -
x MODELO y
SERIE / x
u PARALELO x u PARALELO
Ejemplo 6.2
Comparar las respuestas a una sinusoide del proceso servomotor D.C. no
lineal del ejemplo 6.1, cuando la salida y no es ruidosa y cuando lo es. El
tiempo de muestreo es T = 0.01 s. Considerar ruido blanco gaussiano.
Solución: Empleando el resultado del ejemplo 6.1, la solución a este proble-
ma se detalla en el programa ejem6 2.m. Los resultados se muestran en las
figuras 6.6, 6.7 y 6.8. Observar en la última figura que el ruido e(t) empleado
posee media cero y una función de distribución gaussiana.
% ejem6_2.m SOLUCION EJEMPLO 6.2
clear all
% PARAMETROS DEL PROCESO NO LINEAL (TABLA 3.3)
JL = 3.5e-7; bL = 1e-5; Ro = 0.01; Lo = 0.776;
Jm = 1.9062e-6; bm = 1.8338e-6; g = 9.81;
E = 31.035e-3; R = 7.38; m = 0.06377;
Kact = 14.9; cc = 0.25; Mo = 0.045; % 0, 0.01, 0.02
K = 31.071e-3; n = 19.741; L = 4.64e-2;
B = n^2*bm + bL;
Jeff = n^2*Jm +JL;
M = Jeff + (1/3)*m*Lo^2 + Mo*Lo^2 + (2/5)*Mo*Ro^2;
N = g*Lo*(Mo+m/2);
% MODELO NO LINEAL DEL PROCESO CONTINUO DE SEGUNDO ORDEN
Ac = [0 1;-N/M -(B + n^2*K*E/R)/M];
Bc = [0;n*K*Kact/(R*M)]; Cc = [1 0]; Dc = [0];
% MODELO LINEAL DISCRETO DEL PROCESO DE SEGUNDO ORDEN
T = 0.01; % PERIODO 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); b1 = num(2); b2 = num(3);
% CONDICIONES INICIALES NULAS
q(1)=0; q(2)=0; q(3)=0; u(1)=0; u(2)=0; u(3)=0;
294 Control Predictivo
Posición en rad
2
−2
−4
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
1
Entrada (voltios)
0.5
−0.5
−1
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
4
Posición ruidosa (rad)
−2
−4
−6
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
1
Entrada (voltios)
0.5
−0.5
−1
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
0.4
−0.2
−0.4
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
300
Distribución de e(t)
200
100
0
−0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4
<−−−−−− e(t) −−−−−−>
Figura 6.8: Ruido blanco e(t) con media cero y distribución gaussiana.
N2 u −1
N
J= [r(t + k/t) − y(t + k/t)]2 + λ [∆u(t + k/t)]2 (6.24)
k=N1 k=0
donde :
∆u(t + k/t) = u(t + k/t) − u(t + k − 1/t) (6.25)
con ∆u(t + k/t) = 0 para k ≥ Nu . La trayectoria de referencia está repre-
sentada por la ecuación:
El efecto debido a las señales de control pasadas u(t − 1), u(t − 2), . . .
298 Control Predictivo
u 1
0
0
1
N u =4
1
0
0
1 00
11
00 11
11
0
1
01
1 00
00
11 00
11
00
11 00
11
00
1100
11
00
11 00
11
00
11 00
11
00
11
0
1
0
1 0
0
1 00
11
00
11
0
1
0
1
0
1
0
1
01
1 y(t+k/t)
0
0
1
u(t+k/t)
o o o o
o o o o
o o o o o o o o o o o o o o o o
o o o o o
o o o
r=w y
N 1=2 N 2 =8
PASADO Tiempo actual t FUTURO
etc.
6.5 El Controlador Predictivo 299
’
∆u(t/t) Entrada escalon
g ∆u(t/t)
k
Respuesta
’
al escalon
k Muestras Tiempo
t t+k
(a)
’
∆u(t+1/t) Entrada escalon
g ∆u(t+1/t)
k
Respuesta
’
al escalon
t t+k
(b)
Ejemplo 6.3
Determinar la respuesta libre y los coeficientes gk de la respuesta al escalón
para el proceso servomotor D.C. descrito en el ejemplo 6.1.
Solución: La ecuación de diferencias del proceso es:
y(k) = −a1 y(k − 1) − a2 y(k − 2) + b1 u(k − 1) + b2 u(k − 2)
Cuando la entrada es u(k) = 1 para todo k ≥ 0, entonces y(k) = g(k) para
todo k ≥ 0. Luego, los coeficientes g(k) se determinan de:
g(k) = −a1 g(k − 1) − a2 g(k − 2) + b1 u(k − 1) + b2 u(k − 2)
Ası́ podemos obtener que g(0) = 0, g(1) = b1 , g(2) = −a1 b1 + b1 + b2 , y:
g(k) = −a1 g(k − 1) − a2 g(k − 2) + b1 + b2 ; k≥3
La condición para respuesta libre es que:
u(t/t) = u(t + 1/t) = · · · = u(t + N2 /t) = u(t − 1)
Aplicando tal condición en la ecuación de diferencias del proceso, determi-
namos la respuesta libre ylibre como sigue:
ylibre (t + 1) = −a1 ylibre (t) − a2 ylibre (t − 1) + (b1 + b2 )u(t − 1)
6.5 El Controlador Predictivo 301
Ejemplo 6.4
Determinar la matriz dinámica de control para el proceso del ejemplo 6.1
empleando los datos siguientes: N1 = 7, N2 = 12, Nu = 6.
% ejem6_4.m SOLUCION DEL EJEMPLO 6.4
clear all
% PARAMETROS DEL PROCESO NO LINEAL (TABLA 3.3)
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.035e-3; RR = 7.38; m = 0.06377;
Kact = 14.9; cc = 0.25; Mo = 0.045; % tambi’en 0,.01,.02
K = 31.071e-3; n = 19.741; L = 4.64e-3;
B = n^2*bm + bL;
Jeff = n^2*Jm +JL;
M = Jeff + (1/3)*m*Lo^2 + Mo*Lo^2 + (2/5)*Mo*Ro^2;
N = g*Lo*(Mo+m/2);
% MODELO NO LINEAL DEL PROCESO CONTINUO DE TERCER ORDEN
6.6 Procedimiento de Diseño 303
7) Implementar el hardware.
8) Implementar el software de control.
9) Realizar pruebas de funcionamiento (resultados experimentales).
y(z) b1 z + b2 b1 z −1 + b2 z −2 B(z −1 )
Gp (z) = = 2 = =
u(z) z + a1 z + a2 1 + a1 z −1 + a2 z −2 A(z −1 )
A(z −1 ) = 1 + a1 z −1 + a2 z −2 ; B(z −1 ) = b1 z −1 + b2 z −2
Con Mo = 0 (varilla sin carga adicional), los parámetros poseen los valores
siguientes: a1 =-1.9614 , a2 =0.9614 , b1 =0.0044 y b2 =0.0043 .
N = g*Lo*(Mo+m/2);
% MODELO LINEAL CONTINUO DEL PROCESO DE SEGUNDO ORDEN
Ac = [0 1;-N/M -(B + n^2*K*E/RR)/M];
Bc = [0;n*K*Kact/(RR*M)];
Cc = [1 0]; Dc = [0];
% MODELO LINEAL DISCRETO DEL PROCESO DE SEGUNDO ORDEN
T = 0.01; % PERIODO 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);
b1 = num(2); b2 = num(3);
% HORIZONTES
N1 = 1; N2 =12; Nu =1; % LEY DE CONTROL ESCALAR
% RESPUESTA AL ESCALON
g(1) = b1; g(2) = -a1*b1 + b1 + b2;
for k=3:N2
g(k) = -a1*g(k-1) -a2*g(k-2) + b1 + b2;
end
% CONDICIONES INICIALES
yf(1)=0; yf(2)=0; yf(3)=0; r(1)=0; r(2)=0; r(3) =0;
u(1) =0; u(2) =0; u(3) =0; w(1)=0; w(2)=0; w(3) =0;
q(1) =0; q(2) =0; q(3) =0;
alf = 0.01; lambda = 0.; frec = 0.0063; GW = 1;
MM = 2000;
% LAZO DE CONTROL
for t = 2:MM+2
for k = 1:N2
W(t+k) = GW*sign(sin(frec*(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 % yf: RESPUESTA LIBRE
% LEY DE CONTROL
du(t) = (g(1)*(r(t+1)-yf(t+1))+g(2)*(r(t+2)-yf(t+2)) + ...
g(3)*(r(t+3)-yf(t+3))+g(4)*(r(t+4)-yf(t+4)) + ...
g(5)*(r(t+5)-yf(t+5))+g(6)*(r(t+6)-yf(t+6)) + ...
g(7)*(r(t+7)-yf(t+7))+g(8)*(r(t+8)-yf(t+8)) + ...
g(9)*(r(t+9)-yf(t+9))+ g(10)*(r(t+10)-yf(t+10)) + ...
g(11)*(r(t+11)-yf(t+11))+ g(12)*(r(t+12)-yf(t+12)))/...
(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 + ...
g(11)^2 + g(12)^2 + lambda);
u(t) = u(t-1) + du(t); % LEY DE CONTROL ACTUAL
% LIMITANDO LA FUERZA DE CONTROL
308 Control Predictivo
fu = 1.4;
if(u(t) > 0 & u(t) > fu)
u(t) = fu;
elseif(u(t) < 0 & u(t) < -fu)
u(t) = -fu;
end
% PROCESO LINEAL
q(t+1) = -a1*q(t) -a2*q(t-1) + b1*u(t) + b2*u(t-1);
end
% GRAFICOS
ejex = (3:MM); ejex = ejex*T;
subplot(2,1,1)
plot(ejex,W(3:MM),ejex,q(3:MM)); grid
ylabel(’Posicion q(t) (rad)’)
xlabel(’Tiempo en segundos’)
subplot(2,1,2)
plot(ejex,u(3:MM)); grid
ylabel(’Control u(t) (voltios)’)
xlabel(’Tiempo en segundos’)
print -f -deps dispred1
2
Posición q(t) (rad)
−1
−2
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
2
Control u(t) (voltios)
−1
−2
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
Segunda Simulación
El programa dispred3.m también simula el sistema de control predictivo
empleando la ley de control descrita en la subsección 6.7.4 y un modelo
no lineal de segundo orden del proceso. La carga no lineal a posicionar es
máxima. En esta simulación se emplea restricción en la fuerza de control
diseñada para no saturar el amplificador de potencia. También se emplea
compensación para minimizar el efecto de la fuerza de fricción de Coulomb
en la señal de control y restricción del tipo y(t) = r(t) (la salida iguala a
la referencia). El resultado de esta simulación se muestra en la figura 6.12.
Notar que la fuerza de control generada no sobrepasa el rango de ± 1,4 volts,
por lo que su implementación no va a saturar al amplificador de potencia a
emplear. Esta es la configuración que se va a implementar.
% dispred3.m
clear all
% PARAMETROS DEL PROCESO NO LINEAL (TABLA 3.3)
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.035e-3; RR = 7.38; m = 0.06377;
Kact = 14.9; cc = 0.25; Mo = 0.045; % tambi’en 0,.01,.020
K = 31.071e-3; n = 19.741; L = 4.64e-3;
B = n^2*bm + bL;
Jeff = n^2*Jm +JL;
M = Jeff + (1/3)*m*Lo^2 + Mo*Lo^2 + (2/5)*Mo*Ro^2;
N = g*Lo*(Mo+m/2);
% MODELO NO LINEAL CONTINUO DEL PROCESO DE SEGUNDO ORDEN
Ac = [0 1;-N/M -(B + n^2*K*E/RR)/M];
Bc = [0;n*K*Kact/(RR*M)];
Cc = [1 0]; Dc = [0];
% MODELO LINEAL DISCRETO DEL PROCESO DE SEGUNDO ORDEN
T = 0.01; % PERIODO 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);
b1 = num(2); b2 = num(3);
% HORIZONTES
N1 = 1; N2 =12; Nu =1; % LEY DE CONTROL ESCALAR
% RESPUESTA AL ESCALON
g(1) = b1; g(2) = -a1*b1 + b1 + b2;
for k=3:N2
g(k) = -a1*g(k-1) -a2*g(k-2) + b1 + b2;
end
310 Control Predictivo
% CONDICIONES INICIALES
yf(1)=0; yf(2)=0; yf(3)=0; r(1)=0; r(2)=0; r(3) =0;
u(1) =0; u(2) =0; u(3) =0; w(1)=0; w(2)=0; w(3) =0;
q(1) =0; q(2) =0; q(3) =0;
alf = 0.01; lambda = 0.; frec = 0.0063; GW = 1;
MM = 2000;
% BUCLE DE CONTROL *********************************
for t = 2:MM+2
% REFERENCIAS, SALIDA LIBRE Y RESPUESTAS AL ESCALON
for k = 1:N2
W(t+k) = GW*sign(sin(frec*(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 % yf: RESPUESTA LIBRE
% RESTRICCION A LA SALIDA
q(t) = r(t);
% LEY DE CONTROL
du(t) = (g(1)*(r(t+1)-yf(t+1))+g(2)*(r(t+2)-yf(t+2)) + ...
g(3)*(r(t+3)-yf(t+3))+g(4)*(r(t+4)-yf(t+4)) + ...
g(5)*(r(t+5)-yf(t+5))+g(6)*(r(t+6)-yf(t+6)) + ...
g(7)*(r(t+7)-yf(t+7))+g(8)*(r(t+8)-yf(t+8)) + ...
g(9)*(r(t+9)-yf(t+9))+g(10)*(r(t+10)-yf(t+10)) + ...
g(11)*(r(t+11)-yf(t+11))+g(12)*(r(t+12)-yf(t+12)))/...
(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 + ...
g(11)^2 + g(12)^2 + lambda);
u(t) = u(t-1) + du(t); % ley de control actual
% COMPENSANDO LA FRICCION DE COULOMB
TN = cc*sign(w(t)); % TORQUE DE FRICCION DE COULOMB
if(w(t) > 0)
u(t) = u(t) + (RR/(n*K*Kact))*TN;
elseif(w(t) < 0)
u(t) = u(t) - (RR/(n*K*Kact))*TN;
end
% LIMITANDO LA FUERZA DE CONTROL
fu = 1.4;
if(u(t) > 0 & u(t) > fu)
u(t) = fu;
elseif(u(t) < 0 & u(t) < -fu)
u(t) = -fu;
end
% MODELO NO LINEAL DISCRETIZADO DEL PROCESO DE SEGUNDO ORDEN
q(t+1) = q(t) + T*w(t);
6.7 Control de Posición de un Servomotor 311
1
Posición q(t) (rad)
0.5
−0.5
−1
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
2
Control u(t) (voltios)
−1
−2
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
INICIO
INICIALIZACION DE VARIABLES
INICIALIZACION DE LA TARJETA LabPC+
DETECTAR FLANCO
DE SUBIDA
NO
k MENOR QUE n FIN
SI
DETECTAR FLANCO
DE SUBIDA NO
SI
LEER POSICION Pk
CALCULAR POSICION Y VELOCIDAD
APLICAR RESTRICCIONES EN Pk
~ DE CONTROL
GENERAR SENAL
GENERAR SALIDA COMPENSADA
~
RESTRINGIR LA SENAL DE CONTROL
~
ENVIAR LA SENAL COMPENSADA
ACTUALIZAR VARIABLES
El Programa Principal
El programa principal (programa PREDI4.CPP) realiza lo siguiente:
void Inicializa_Sistema()
{
/* Con Varilla*/
a1 = -1.9614; a2 = .9631;
b1 = .0044; b2 = .0043;
/* Sin Varilla */
6.7 Control de Posición de un Servomotor 317
/* Y la velocidad angular */
*vel = (5.*(*y - yant) + *vel)/(1. + 5.*T);
}
void main()
{
int ant = 0, act = 0, k, n;
FILE *out;
float *yb, *ub, *wb, *rb, vel, y, u, w, r;
float yant;
Inicializa_Sistema();
clrscr();
assert(tsimul < 120);
N = tsimul/T;
n = (int)N;
t = vel = 0.;
assert(NULL!=(ub= (float *)calloc(n/5,sizeof(float))));
assert(NULL!=(yb= (float *)calloc(n/5,sizeof(float))));
assert(NULL!=(wb= (float *)calloc(n/5,sizeof(float))));
assert(NULL!=(rb= (float *)calloc(n/5,sizeof(float))));
for(k = 0; k < n;)
{
act = NivelClock();
if ((ant == 0)&&(act == 1))
{
Mide_Variables(&y, &w, &r, &vel, t);
/* Se~nal de Control */
//u = q0*(b1*uant + b2*uantant + e + a1*eant + a2*eantant);
u=(landa+q0*b1*(1-landa))*uant+q0*(1-landa)
*(b2*uantant + e + a1*eant + a2*eantant);
uantant = uant; uant=u;
u = Aplica_Control(u, vel);
if(!(k%5))
{
yb[k/5] = y*180./M_PI; wb[k/5] = w*180./M_PI;
rb[k/5] = r*180./M_PI; ub[k/5] = u;
}
k++;
t+=T;
gotoxy(15,5); printf("*****************************************");
gotoxy(18,7); printf("Control Predictivo de un Servomotor D.C.");
gotoxy(15,9); printf("*****************************************");
gotoxy(21,11);printf("tiempo: t=%+5.3f",t);
gotoxy(21,13);printf("setpoint: w=%+5.3f",w*180./M_PI);
6.7 Control de Posición de un Servomotor 319
/* R1LLIB.H ****************************************************
* Archivo de declaraciones de funciones definidas en R1LLIB.CPP
* Estas funciones permiten facilitar el manejo de la tarjeta de
* Adquisicion Lab-PC+: Digital input (16 bits), Analog Output,
* Timer generator, Polling. Tambien usa funciones de lecto/
* escritura de registros (inportb, outport).
*/
/* R1LLIB.CPP **************************************************
* Archivo de definiciones de funciones declaradas en R1LLIB.H
* Estas funciones permiten facilitar el manejo de la tarjeta de
* Adquisicion Lab-PC+: Digital input (16 bits), Analog Output,
* Timer generator, Polling. Tambien emplea funciones de
* lecto/escritura de registros (inportb, outport).
*/
#include "r1llib.h"
#include "nidaq.h" // Libreria de Programas
#include <dos.h>
//
static unsigned R1LLSBPort; // direccion puerto dig. de entrada
static unsigned R1LMSBPort; // direccion puerto dig. de control
static unsigned R1LPollPort; // direccion puerto dig. de polling
static unsigned R1LAOPort; // direccion de la salida analogica
static int R1LFS; // frecuencia de muestreo en Hertz
//
void ConfigurarHardware (unsigned pollPort, unsigned lPort,
unsigned hPort, unsigned salPort, int frec)
{
int cuentaTimer, deviceCode;
cuentaTimer = (int)(2000000/frec);
R1LPollPort = pollPort;
R1LLSBPort = lPort;
R1LMSBPort = hPort;
R1LAOPort = salPort;
R1LFS = frec;
USE_LAB();
Init_DA_Brds(1,&deviceCode);
ICTR_Setup(1,0,3,cuentaTimer,1); // clock de muestreo = timer0
DIG_Prt_Config(1,(int)(pollPort - 0x270),0,0);
DIG_Prt_Config(1,(int)(lPort-0x270),0,0);
DIG_Prt_Config(1,(int)(hPort-0x270),0,0);
}
int NivelClock ()
{
unsigned char bytePoll;
bytePoll = inportb (R1LPollPort);
return (bytePoll&1);
}
60
− −:y
− :w
50
Posición (grados)
40
30
20
10
0
0 10 20 30 40 50 60 70 80 90 100
t(seg)
Figura 6.14: Salida controlada y (curva en trazos) para una carga inercial
de JT = J kg-m2 .
60
− −:y
− :w
50
Posición (grados)
40
30
20
10
0
0 10 20 30 40 50 60 70 80 90 100
t(seg)
Figura 6.15: Salida controlada y (curva en trazos) para una carga inercial
de JT = 1,42J kg-m2 .
6.7 Control de Posición de un Servomotor 323
60
− −:y
− :w
50
Posición (grados)
40
30
20
10
0
0 10 20 30 40 50 60 70 80 90 100
t(seg)
Figura 6.16: Salida controlada y (curva en trazos) para una carga inercial
de JT = 1,84J kg-m2 .
60
− −:y
− :w
50
u(t):voltios
40
30
20
10
0
0 10 20 30 40 50 60 70 80 90 100
t(seg)
Figura 6.17: Salida controlada y (curva en trazos) para una carga inercial
de JT = 2,98J kg-m2 .
324 Control Predictivo
Problema 6.1
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
Problema 6.2
y: Inclinación (rad) 1
−1
−2
0 100 200 300 400 500 600 700
2
u: Angulo del deflector (rad)
−1
−2
0 100 200 300 400 500 600 700
TIEMPO : SEG
% 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)
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) ...
328 Control Predictivo
+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
3
y: Inclinación (rad)
−1
0 200 400 600 800 1000 1200
0.3
u: Angulo del deflector (rad)
0.2
0.1
−0.1
−0.2
0 200 400 600 800 1000 1200
TIEMPO : SEG
Problema 6.3
% HORIZONTES
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;
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)...
6.8 Problemas Resueltos 331
+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
40
Y1: Velocidad (m/s)
30
20
10
0
0 50 100 150
150
Control u (volt)
100
50
−50
0 50 100 150
Tiempo (segundos)
Problema 6.4
20
Velocidad (m/s)
15
10
0
0 50 100 150 200 250 300
60
Control u (volt)
40
20
−20
0 50 100 150 200 250 300
Tiempo (Segundos)
Problema 6.5
La figura 3.22 muestra el proceso ascensor que fue tratado en el problema
3.6. El problema a resolver es posicionar suavemente el ascensor en un piso
determinado, lo que significa sobreimpulso nulo (para que no se pase de piso)
y tiempo de estabilización menor que 10 s. Para no saturar al actuador (un
amplificador de potencia), la señal de control debe estar dentro del rango
de ± 200 volt. Diseñar un sistema de control de posición predictivo con
fuerza de control escalar que cumpla las especificaciones pedidas. Con el
objeto de cumplir tales especificaciones, también se puede usar restricción
a la salida; es decir, para cada tiempo de muestreo, hacer que la posición
controlada iguale la señal de referencia. Es interesante anotar, que dicha
restricción origina en la simulación una respuesta que sigue perfectamente
a la referencia. Lógicamente, los resultados de la implementación en tiempo
real con tal restricción, no son tan perfectos como lo son en la simulación,
tal como sucede en el caso del control predictivo del servomotor con carga
no lineal (subsección 6.7.8).
% 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
6.8 Problemas Resueltos 333
40
20
10
0
0 50 100 150
100
50
u: control
−50
0 50 100 150
Tiempo (segundos)
% 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
334 Control Predictivo
20
Velocidad v1 (m/s)
15
10
0
0 100 200 300 400 500 600 700 800 900 1000
15
u: Fuerza de control
10
−5
0 100 200 300 400 500 600 700 800 900 1000
Tiempo (Segundos)
% 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;
% 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)) + ...
6.8 Problemas Resueltos 335
Problema 6.6
Problema 6.7
POSICION (m)
2
−2
−4
0 50 100 150 200 250 300
TIEMPO EN SEGUNDOS
200
VOLTAJE DE CONTROL
100
−100
−200
0 50 100 150 200 250 300
TIEMPO EN SEGUNDOS
−2
−4
0 100 200 300 400 500 600
200
VOLTAJE DE CONTROL
100
−100
0 100 200 300 400 500 600
TIEMPO EN SEGUNDOS
Problema 6.8
Problema 6.9
El proceso electromecánico mostrado en la figura 3.26 se describe en el pro-
blema 3.8. Se pide diseñar un sistema de control predictivo con fuerza de
6.8 Problemas Resueltos 339
2.5
NIvel H2 (m)
1.5
0.5
0
0 50 100 150 200 250 300 350 400 450
Tiempo en segundos
3
Flujo de control (m^3/s)
−1
−2
0 50 100 150 200 250 300 350 400 450
Tiempo en segundos
2.5
2
NIvel H2 (m)
1.5
0.5
0
0 50 100 150 200 250 300 350 400 450
Tiempo en segundos
2
Flujo de control (m^3/s)
−1
0 50 100 150 200 250 300 350 400 450
Tiempo en segundos
control escalar, para controlar la velocidad angular del eje del motor me-
diante el voltaje de entrada que puede variar entre ± 100 volt. El tiempo de
estabilización de la señal controlada (la velocidad) debe ser menor que 6 s
y dicha respuesta debe presentar un sobrepico máximo de 5 %, con error en
estado estable nulo.
% 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
yf(k) = 0; y(k) = 0; r(k) = 0; u(k) = 0;
end
du(1) = 0;
alf = 0.85; lambda = 0;
% LAZO DE CONTROL
6.8 Problemas Resueltos 341
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
Problema 6.10
Velocidad (rad/s)
0
−5
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
100
Voltaje de control
50
−50
−100
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
15
Velocidad (rad/s)
10
−5
0 20 40 60 80 100 120 140 160 180 200
Tiempo en segundos
2
Voltaje de control
−1
−2
0 20 40 60 80 100 120 140 160 180 200
Tiempo en segundos
2.12):
num(s) 1 − Tt s/2 + (Tt s)2 /10 − (Tt s)3 /120
e−T s ≈ =
den(s) 1 + Tt s/2 + (Tt s)2 /10 + (Tt s)3 /120
Las especificaciones de diseño para ambos sistemas de control son: tiempo de
estabilización menor que 40 s, error en estado estacionario nulo y porcentaje
de sobreimpulso menor al 5 %. La selección del tiempo de muestreo y de los
horizontes de control es a conveniencia del diseño.
Problema 6.12
Las ecuaciones del modelo linealizado para controlar la posición del cañón
montado en la torreta de un tanque (ver figura 3.28) empleando un actuador
hidráulico se detallan en el problema 3.9.
(b) Lo mismo que (a) pero empleando fuerza de control matricial. La se-
lección de los horizontes de control es a conveniencia del problema
planteado.
(c) Lo mismo que (a), pero en este caso para controlar el ángulo azimutal.
Problema 6.13
(b) Lo mismo que (a) pero empleando una fuerza de control matricial. La
selección de los horizontes de control y del tiempo de muestreo es a
conveniencia del problema planteado.
Problema 6.14
(b) Lo mismo que (a) pero empleando una fuerza de control matricial.
La selección de los horizontes de control y del tiempo de muestreo es
a conveniencia del problema planteado.
Problema 6.15
La figura 3.33 muestra el proceso doble grúa puente no lineal, el cual es una
extensión del proceso grúa puente escrito en la sección 3.2. El acoplamiento
entre las dos secciones iguales de la varilla no es flexible. Las ecuaciones que
describen la dinámica del sistema son materia del problema propuesto 3.14.
Considerar que la carga esférica es de 0.02 kg.
(a) Diseñar un sistema de control predictivo basado en modelos para con-
trolar simultáneamente las posiciones θ y τ con mı́nimo tiempo de
estabilización y mı́nimo sobreimpulso empleando para ello una fuerza
de control escalar, de modo tal que la grúa-puente doble permanezca
en posición vertical.
(b) Lo mismo que (a) pero empleando para ello una fuerza de control
matricial. La selección de los horizontes de control y del tiempo de
muestreo es a conveniencia del problema planteado.
Problema 6.16
Problema 6.17
(b) Repetir (a) pero en este caso empleando una fuerza de control matri-
cial. La selección de los horizontes de control y del tiempo de muestreo
es a conveniencia del problema planteado.
Capı́tulo 7
Control Robusto
d
∗
r u ? y
- m - c(z) - hr0 (s) - p(s) - m -
− 6
yγ∗ @ yγ
@ γ(s)
T
Notar que hemos usado la relación básica z = esT . También es útil recordar
que la transformada Z de yγ (t) se puede expresar como:
Una función racional y periódica posee la propiedad de que sus valores para
frecuencias mayores que π/T se pueden determinar a partir de aquellos va-
lores correspondiente al intervalo 0 ≤ w ≤ π/T . Además, si yγ (z) es
periódica, también es hermitiana; es decir:
d
r u ? y
- m - q - p - m -
− 6
?
- p̃ - m
−
A
c
d
r ?
- m - m - q - p - m -
− 6 6
p̃
B
q
d
r u ? y
- m - m - c - p - m -
−
6 − 6
?
p̃ - p̃ - m
1 − e−sT 1 − z −1
hr0 (s) = = ; z = esT (7.9)
s s
Por otra parte, el bloque γ(s) representa un filtro que sirve para cortar las
componentes de alta frecuencia de las señales continuas antes del muestreo,
cuando sea necesario. Su función de transferencia debe ser estable; es decir,
las raı́ces de su ecuación caracterı́stica deben poseer parte real negativa. Las
relaciones siguientes son válidas para la estructura CMI:
d
r∗ u ? y
- m - q(z) - hr0 (s) - p(s) - m -
6
− ?
γ(s)
- p̃γ (z) - m @
@
− T
A
d
r∗ u ? y
- m - q(z) - hr0 (s) - p(s) - m -
6
−
?
- p̃(s) - m
−
@
@ γ(s)
T
B
d
r u ?
- m - q(z) - p(s) - m -
6 yγ
−
ỹγ ?
- p̃(s) - m
−
una región circular acotada de radio conocido ¯a (ω), o de modo equivalente:
y(s)−r(s) = e(s) = hr0 (s)p̃(s)q(esT )r∗ (esT )−r(s); r(s) = hr0 (s)r∗ (esT )
(7.24)
y luego:
y(s) −e(s)
= p̃(s)q(esT ) η̃r (s) = 1 − ˜r (s); ˜r (s) = (7.25)
hr0 (s)r∗ (esT ) r(s)
donde η̃r es la función de sensitividad y ˜r es la función de sensitividad
complementaria.
Ejemplo 7.1
Kn 91,4375
p̃(s) = = 2
s2 + an s + bn s + 3,8133s + 17,9220
Observando las respuestas al escalón en la figura 7.4, podemos concluir que
un tiempo de muestreo de T = 0.05 s es suficiente para poder capturar la
7.2 Formulación del Problema CMI 355
4
Respuesta del proceso
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
8
Respuesta del modelo
0
0 0.5 1 1.5 2 2.5 3
Tiempo en segundos
dn
lı́m (1 − γ(s)) = 0, 0≤n<m (7.27)
s→0 dsn
con:
cm−1 sm−1 + · · · + c1 s + 1
γm (s) = (7.29)
(τ s + 1)m−1
en donde γ1 (s) es un prefiltro apropiado para m=1. Entonces, para un τ
especı́fico, podemos usar (7.27) para calcular los coeficientes c1 , . . . , cm−1 .
358 Control Robusto
ω02
γ1 (s) =
s2 + 2ω0 ζs + ω02
donde:
(1 − (ζjH )−1 )(z − ζj )
p̃A (z) = z −N Πhj=1 (7.33)
(1 − ζj )(z − (ζjH )−1 )
y ζj , j = 1, . . . , h son los ceros de p̃(z) que están fuera del cı́rculo unitario.
El entero positivo N se selecciona de modo tal que p̃M (z) sea semipropio; es
decir, que el numerador y el denominador de p̃M (z) posean el mismo grado,
lo que es equivalente a decir que z N p̃(z) sea semipropio.
7.3 Control Robusto para Procesos Estables 359
con:
H )−1 )(z − ζ )
(1 − (ζvj vj
vA (z) = z −Nv Πhj=1
v
H )−1 )
(7.35)
(1 − ζvj )(z − (ζvj
donde ζvj , j = 1, . . . , hv son los ceros de v(z) que están fuera del cı́rculo
unitario y el entero positivo Nv se selecciona de modo tal que z Nv v(z) sea
semipropio. Notar que q̃H (z) debe ser estable y causal. Sin embargo, debido
a su carácter discreto, este controlador puede presentar problemas de com-
portamiento en las intermuestras (entre puntos de muestreo) causadas por
los polos de q̃H (z) cercanos al punto (−1, 0). Por consiguiente, es necesario
realizar una modificación del controlador q̃H (z).
La tabla 7.1 muestra la expresión del controlador q̃H (z) para algunas
entradas tı́picas.
1
s
z
z−1 (p̃M (z))−1
1
τ s+1
z/τ
z−e−T /τ
(p̃M (z))−1 (p̃A (e−T /τ ))−1
1 z(1−eT /τ ) (1−p̃−1
A (e
−T /τ )e−T /τ )z+(p̃−1 (e−T /τ )−1)e−T /τ
1
s2
Tz
(z−1)2
(p̃M (z))−1 (N +Ω+1)z−N
z
−Ω
−1 −N )|
donde: Ω d
dz (p̃A (z)z z=1
Ejemplo 7.2
Determinar el controlador óptimo cuadrático q̃H (z) para el proceso p(z) del
ejemplo 7.1, asumiendo que la entrada v(s) es un escalón.
Solución: Del ejemplo 7.1 conocemos p̃(z) para T = 0.05 s:
b1 z + b2
p̃(z) =
z 2 + a1 z + a2
Además, se debe cumplir que p̃(z) = p̃A (z)p̃M (z), de modo tal que z N p̃(z)
sea semipropio y por consiguiente, N = 1. El cero −b2 /b1 = -0.9874 de p̃(z)
se ubica dentro del cı́rculo unitario; entonces ζj = 0 y:
p̃(z) z(b1 z + b2 )
p̃A (z) = z −1 ; p̃M (z) = = 2
p̃A (z) z + a1 z + a2
z
Empleando ahora la tabla 7.1 para v(z) = z−1 obtenemos:
z 2 + a1 z + a2
q̃H (z) = (p̃M (z))−1 =
z(b1 z + b2 )
donde q̃− (z) cancela todos los polos de q̃H (z) que posean parte real negativa
y los sustituye con polos en el origen con el propósito de que el sistema tienda
a controlarse con mı́nimo tiempo de estabilización. B(z) se selecciona para
preservar el tipo m del sistema.
Sean κi , i = 1, . . . , ρ, los polos de q̃H (z) con parte real negativa. Entonces
podemos escribir:
z − κi
q̃− (z) = z −ρ Πρi=1 (7.37)
1 − ki
m−1
B(z) = bi z −i (7.38)
i=0
q̃H (z) también cumple con la ecuación (7.26). Por consiguiente, q̃(z) debe
satisfacer la ecuación (7.26) sı́ y sólo si:
dn
lı́m (1 − q̃− (z)B(z)) = 0, n = 0, 1, . . . , m − 1 (7.39)
z→1 dz n
m−1
B(z) = bi z −i = b0 + b1 z −1 , m=2 (7.41)
i=0
ρ
κi
b0 = 1 − b1 ; b1 = (7.42)
1 − κi
i=1
Ejemplo 7.3
Determinar el controlador CMI q̃(z) sabiendo que el proceso p(z) del ejemplo
7.1 es del tipo m = 1. Tener en cuenta que la entrada v(s) es un escalón.
Solución: Sabemos que q̃(z) = q̃H (z)q̃− (z). Para m = 1, B(z) = 1. Los
polos de q̃H (z) son z = 0 y z = −b2 /b1 = -0.9874. Entonces, ρ = 1 (un polo
con parte real negativa que hay que sustituir con un polo en el origen), i =1
y κi = κ1 = −b2 /b1 , de modo que:
z − κj z − κ1
q̃− (z) = z −ρ Πρj=1 = z −1
1 − kj 1 − k1
Luego:
z 2 + a1 z + a2
q̃(z) = q̃H (z)q̃− (z) =
(b1 + b2 )z 2
(1 − α)z
f (z) = (7.43)
z−α
362 Control Robusto
El filtro f (z) debe preservar las propiedades asintóticas del sistema de lazo
cerrado; es decir, la ecuación (7.26). Por consiguiente, para que el sistema
sea del tipo m, el filtro f (z) debe satisfacer:
dn
n
(1 − f (z)) = 0; 0≤n<m (7.44)
dz z=1
modo tal que se satisfaga la ecuación (7.47). Esta ecuación pone una cota
inferior α∗ a α. Dicha cota también se puede obtener del gráfico de Bode de:
α∗ = e−T w (7.49)
Para que la condición anterior resulte una función propia (requerimiento que
también es necesario para cualquier W (w)), se deben cumplir las condiciones
siguientes para m ≥ 1:
W (∞)−1 ≥ 1; W (0)−1 ≥ 0 (7.53)
Ejemplo 7.4
Determinar una función de peso adecuada para el proceso servomotor D.C.
sujeto a cargas no lineales (ver ejemplos 7.1, 7.2 y 7.3).
Solución: Podemos seleccionar la siguiente función de peso:
0,5s + 1
W (s)−1 = 0,4 ; s = jω
0,1s + 1
que cumple las condiciones establecidas en la ecuación (7.53). Sin embargo,
se recomienda emplear la forma general dada en la ecuación (7.52), debido a
que nos permite cambiar la magnitud de la función de peso usando un factor
multiplicativo, siempre que no se sobrepase la condición dada en (7.52).
Esta forma de variar la función de peso proporciona mayor flexibilidad en
el proceso de verificación del rendimiento robusto, tal como veremos más
adelante.
Ejemplo 7.5
Diseñar el filtro f (z) para el proceso servomotor D.C. usando los resultados
de los ejemplos 7.1 al 7.4. Verificar que se cumplan las condiciones de estabil-
idad y rendimiento robustos. Asumir: ¯m (ω) ≈ |m (eiω )| y ¯a (ω) ≈ |a (ω)|.
W = 0.5/abs(1-pn*qt);
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 2
30 0
−2
20
−4
Magnitud de M en dB
10
Magnitudes en dB
−6
0
−8
−10
−10
−20
−12
−30 −14
−40 −16
0 1 2 0 1 2
10 10 10 10 10 10
Frecuencia angular (rad/s) Frecuencia angular (rad/s)
Ejemplo 7.6
Mux
+ z2+a1.z+a2 (1−alfa)z Kp
− (b1+b2)z2 z−alfa u s2+ap.s+bp q Gráfico
Sum1 Mux
Controlador q~(z) Filtro Proceso p(s)
u_ej7_6 q_ej7_6
control Kn posición
referencia s2+an.s+bn
.
Modelo nominal pn(s) − + Sum2
0.8
Posición en rad
0.6
0.4
0.2
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
0.3
Control en voltios
0.2
0.1
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
Asumamos ahora sin pérdida de generalidad, que los polos inestables de v(z)
ubicados fuera del CU son los primeros κ1 polos πj del proceso, y definamos:
q̃H (z) = zbp (z)(pM (z)bv (z)vM (z))−1 {(zbp (z)pA (z))−1 bv (z)vM (z)}∗ (7.59)
donde el operador {.}∗ denota que luego de una expansión en fracciones par-
ciales del operando, sólo serán retenidos los términos que sean estrictamente
propios, exceptuando aquellos correspondiente a los polos de pA (z)−1 .
Notar que para procesos estables: bp = bv = 1. Si todos los polos inesta-
bles del proceso p(s) se ubican en el origen, se puede usar la tabla 7.1.
7.4 Control Robusto para Procesos Inestables 371
donde q̃− (z) cancela todos los polos κi , i = 1, . . . , ρ de q̃H (z) que posean
parte real negativa, y los sustituye con polos en el origen. De esta forma, el
sistema tiende a controlarse con mı́nimo tiempo de estabilización. El con-
trolador q̃− (z) se formula como:
z − κi
q̃− (z) = z −ρ Πρi=1 (7.61)
1 − ki
M −1
B(z) = bj z −j (7.63)
j=0
ξ
M= mi (7.64)
i=1
Dado que q̃(z) cumple los requerimientos anteriores para f (z) = 1, en-
tonces:
k
d
(1 − f (z)) = 0, k = 0, . . . , mi − 1; i = 1, . . . , ξ (7.67)
dz k z=πi
donde:
ω
φ(z) = βj z −j (7.69)
j=0
donde:
q̂(s) = q̃(esT )f (esT )Z[hr0 γ(s)] (7.72)
El diseño del prefiltro γ(s) se trató en la subsección 7.3.1
Kn
Referencia s2+an.s+bn
u_disrob Saturación 2
Modelo nominal pn(s) − + S2
Control
Kact + n*K 1 w 1 q
− +
R Ms+B s
gan5 −
S3 Subsistema Subsistema Integrador
eléctrico S4 mecánico q_disrob
n*E
MATLAB Salida
gan2 N Function
gan3 Seno
Posición en rad
0.5
0
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
0.25
0.2
Control en voltios
0.15
0.1
0.05
0
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
#include "r1llib.h"
#include <stdio.h>
#include <math.h>
#include <assert.h>
#include <alloc.h>
#include <conio.h>
const float ESCALA= 2.*M_PI/(512.*19.7);
/* Con Varilla*/
a1=-1.7858; a2= .8264;
b1= .1070; b2= .1004;
/* ATENCION: LOS VALORES DE a1, a2, b1, b2 DEPENDEN DE LA Fs */
VcFC= .15;
Ofst= 2.3;
Fs= 20.; T= 1./Fs;
tsimul= 100.;
alfa=0.955;
/* Inicializacion de variables */
x1p=0.;
xn1p=0.; xn1pp=0.;
ep=0.; epp=0.;
up=0.; upp=0.;
ConfigurarHardware(0x272, 0x270, 0x271, 0x264, Fs);
EnviarVoltage(Ofst);
p0 = LeerPosicion();
} void Mide_Variables(
float *x1, float *xn1, float *r, float *vel, float t)
{
/* referencia: r= r(t)*/
*r = M_PI/4;
/* Ahora leo la posicion */
pk = LeerPosicion();
*x1 = x1p + ((float)(abs(pk-p0)>8000?0:pk-p0))*ESCALA;
p0 = pk;
/* Modelo nominal */
*xn1 = - a1*xn1p - a2*xn1pp + b1*up + b2*upp;
/* error */
e = *r - (*x1-*xn1);
w =(e+a1*ep+a2*epp)/(b1+b2);
/* velocidad angular */
*vel= (5.*(*x1-x1p)+ *vel)/(1.+5.*T);
}
7.6 Control Robusto de un Servomotor No Lineal 379
void main()
{
int ant = 0, act = 0, k, n;
FILE *out;
float *x1b, *xn1b;
float *ub, *rb, *wb, u, r, w;
float vel;
float x1p, xn1p;
Inicializa_Sistema();
clrscr();
assert(tsimul<120);
N= tsimul/T;
n= (int)N;
t= vel= 0.;
assert(NULL!=(ub = (float *)calloc(n/5,sizeof(float))));
assert(NULL!=(x1b = (float *)calloc(n/5,sizeof(float))));
assert(NULL!=(xn1b= (float *)calloc(n/5,sizeof(float))));
assert(NULL!=(rb = (float *)calloc(n/5,sizeof(float))));
assert(NULL!=(wb = (float *)calloc(n/5,sizeof(float))));
for(k = 0; k<n;)
{
act = NivelClock();
if ((ant==0)&&(act==1))
{
Mide_Variables(&x1, &xn1, &r, &vel, t);
u=alfa*up+(1-alfa)*(w);
upp=up; up=u;
u= Aplica_Control(u, vel);
if(!(k%5))
{
x1b[k/5] = x1*180./M_PI; rb[k/5]=r*180./M_PI;
wb[k/5] = w*180./M_PI; ub[k/5]=u;
}
k++;
t += T;
gotoxy(15,5); printf("****************************************");
gotoxy(18,7); printf("Control robusto del servomotor no lineal");
gotoxy(15,9); printf("****************************************");
gotoxy(21,11);printf("tiempo : t=%+5.3f",t);
gotoxy(21,13);printf("referencia : r=%+5.3f",r*180./M_PI);
gotoxy(21,15);printf("control : u=%+5.3f",u);
gotoxy(21,17);printf("posicion : x1=%+5.3f", x1*180./M_PI);
gotoxy(21,19);printf("posic. nominal : xn1=%+5.3f",x1*180./M_PI);
380 Control Robusto
Problema 7.1
50
(grados)
40
30
Posición
20
10
0
0 5 10 15 20 25 30 35 40 45 50
Tiempo en segundos
0.2
Señal de control (voltios)
0.15
0.1
0.05
0
0 5 10 15 20 25 30 35 40 45 50
Tiempo en segundos
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];
% 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)
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 5
30 Magnitud de M en dB 0
Magnitudes en dB
20 −5
10 −10
0 −15
−10 0 1 2
−20 0 1 2
10 10 10 10 10 10
Frecuencia angular (rad/s) Frecuencia angular (rad/s)
Problema 7.2
+ (1−alfa)z u ap.s+bp
− Mux
z−alfa s3+cp.s2+dp.s
S1 Graph
Filtro Proceso p(s)
Referencia Mux
an.s+bn
z4+(a1−k1)z 3+(a2−a1*k1)z
. 2+(a3−a2*k1)z−a3*k1 s3+cn.s 2+dn.s
(1−k1)*b1z +(1−k1)*b2z3+(1−k1)*b3z2
4 Modelo nominal pn(s) − + S2
Controlador q~ y_p4rob1
u_p4rob1
Control u Salida y
0.25
0.2
Inclinación (rad)
0.15
0.1
0.05
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
1.5
Deflector (rad)
0.5
−0.5
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
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
% 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
Problema 7.3
(a) (b)
15 2
10
0
5
0 −2
Magnitud de M en dB
Magnitudes en dB
−5
−4
−10
−6
−15
−20 −8
−25
−10
−30
−35 0 −12 0
1 1
10 10 10 10
Frecuencia angular (rad/s) Frecuencia angular (rad/s)
+ (1−alfa)z u K
− Mux
z−alfa s2+as+b
S1 Tp Graph
Filtro Proceso p(s)
Referencia Mux
K y_p10rob
z20
+a1.z 19+a2.z 18. z−k1 s2+as+b
Salida y
b1.z 20
+b2.z19 (1−k1)z Modelo nominal pn(s) Tn − + S2
Controlador q~H Controllador q~_ u_p10rob
Control u
Humedad
0.5
0
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
0.06
0.04
Flujo calorífico
0.02
−0.02
0 10 20 30 40 50 60 70 80 90 100
Tiempo en segundos
% (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 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=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_=
7.7 Problemas Resueltos 393
% (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);
(a) (b)
40 0
−1
30
−2
−3
20
Magnitud de M en dB
Magnitudes en dB
−4
10 −5
−6
0
−7
−8
−10
−9
−20 0 −10 0
1 2 1 2
10 10 10 10 10 10
Frecuencia angular (rad/s) Frecuencia angular (rad/s)
+ numc(z) u nump(s) y
Mux
r − denc(z) denp(s)
S1 Controlador c(z) Proceso Graph
p(s) Mux
u_p7rob1
y_p7rob1
Control u
. Salida y
15
Velocidad (m/s)
10
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
300
250
Fuerza (N)
200
150
100
50
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
Problema 7.4
% 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
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)/...
398 Control Robusto
% (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
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);
7.8 Problemas Propuestos 399
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
−1
5
Magnitud de M en dB
Magnitudes en dB
−1.5
0 −2
−2.5
−5
−3
−3.5
−10
−4
−15 0 −4.5 0
1 1
10 10 10 10
Frecuencia angular (rad/s) Frecuencia angular (rad/s)
+ numc(z) u nump(s) y
Mux
r − denc(z) denp(s)
S1 Controlador c(z) Proceso Graph
p(s) Mux
u_p8rob1 y_p8rob1
. Control u Salida y
2.5
Posición (m)
1.5
0.5
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
200
150
Voltaje de control
100
50
−50
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
Problema 7.6
Problema 7.7
Problema 7.8
Problema 7.9
Las ecuaciones del modelo linealizado para controlar la posición del cañón
montado en la torreta de un tanque (ver figura 3.28) empleando un actuador
hidráulico se detallan en el problema 3.9.
(a) Diseñar un sistema de control robusto con modelo interno para con-
trolar el ángulo de elevación θ con las especificaciones siguientes: tiem-
po de estabilización menor que 8 s, mı́nimo sobreimpulso y error en
estado estacionario nulo. Los disturbios tipo escalón pueden actuar
simultáneamente o no y pueden ser positivos o negativos. Para cada
caso, el sistema de control diseñado debe ser capaz de minimizar sus
efectos. Realizar el cálculo del controlador para una entrada v escalón.
El sistema diseñado debe ser del tipo m = 1 y la selección del tiempo
de muestreo es a conveniencia del diseño. Considerar que todos los
parámetros poseen incertidumbre de ± 5 %.
(b) Lo mismo que (a), pero en este caso para controlar el ángulo azimutal.
Problema 7.10
Problema 7.11
La figura 3.32 muestra el proceso péndulo doble no lineal que es una ex-
tensión del péndulo simple descrito en la sección 3.1. El acoplamiento entre
los dos péndulos de igual longitud no es flexible. Las ecuaciones que des-
criben la dinámica del sistema son materia del problema propuesto 3.13.
Diseñar un sistema de control robusto con modelo interno para controlar
7.8 Problemas Propuestos 403
Problema 7.12
La figura 3.33 muestra el proceso doble grúa-puente no lineal que es una ex-
tensión del proceso grúa-puente descrito en la sección 3.2. El acoplamiento
entre los dos péndulos de igual longitud no es flexible. Las ecuaciones que
describen la dinámica del sistema son materia del problema propuesto 3.14.
Diseñar un sistema de control robusto con modelo interno para controlar
simultáneamente las posiciones θ y τ con mı́nimo tiempo de estabilización y
mı́nimo sobreimpulso, de modo tal que la doble grúa puente permanezca en
posición vertical cuando el carro realiza un recorrido predeterminado. Con-
siderar que la carga adicional esférica de 0.02 kg varı́a en ± 6 %. Realizar el
cálculo del controlador para una entrada v escalón. El sistema diseñado debe
ser del tipo m = 1 y la selección del tiempo de muestreo es a conveniencia
del diseño.
Problema 7.13
dv
mv̇(t) + bv(t) = u(t); v̇ =
dt
Diseñar un sistema de control robusto con modelo interno para controlar la
velocidad del móvil con mı́nimo tiempo de estabilización y mı́nimo sobreim-
pulso. Considerar una incertidumbre de ± 5 % en todos los parámetros.
Realizar el cálculo del controlador para una entrada v escalón. El sistema
diseñado debe ser del tipo m = 1 y la selección del tiempo de muestreo es a
conveniencia del diseño.
404 Control Robusto
Problema 7.14
(a) Diseñar un sistema de control robusto con modelo interno para esta-
bilizar la velocidad angular del eje del motor con las especificaciones
siguientes: tiempo de estabilización menor que 4 s, error en estado es-
table menor al 1 % y sobreimpulso de la salida menor al 5 %. Considere
variaciones de ± 7 % en los parámetros b y J. Realizar el cálculo del
controlador para una entrada v escalón. El sistema diseñado debe ser
del tipo m = 1 y la selección del tiempo de muestreo es a conveniencia
del diseño.
Problema 7.15
Repetir los problemas 7.1 al 7.14 cuando la entrada v toma las formas:
1 z/τ
v(s) = ; v(z) = ; τ = 100T
τs + 1 z − e−T //tau
donde T es el tiempo de muestreo.
Problema 7.16
Repetir los problemas 7.1 al 7.14 cuando la entrada v toma las formas:
1 Tz
v(s) = ; v(z) =
s2 (z − 1)2
y el tipo del sistema es m=2. Tomar como señal de referencia una rampa de
pendiente unitaria.
Capı́tulo 8
Control No Lineal
L0f h = ∇h f 0 = h
Lif h = Lf (Lf i−1 h) = ∇(Li−1
f h) f , i = 1, 2, . . . (8.4)
Ejemplo 8.1
Determinar las dos primeras derivadas de Lie de la salida y para el proceso
siguiente:
ẋ = f (x), y = h(x)
Ejemplo 8.2
Determinar [f , g] para el proceso no lineal ẋ = f (x) + gu, donde:
−2x1 + ax2 + senx1 0
f= ; g=
−x2 cosx1 cos(2x1 )
Solución:
0 0 −2x1 + ax2 + senx1
[f , g] =
−2sin(2x1 ) 0 −x2 cosx1
−2 + cosx1 a 0
−
x2 sinx1 −cosx1 cos(2x1 )
acos(2x1 )
=
cosx1 cos(2x1 ) − 2sen(2x1 )(−2x1 + ax2 + senx1 )
408 Control No Lineal
1. Bilinealidad:
[f , α1 g1 + α2 g2 ] = α1 [f , g1 ] + α2 [f , g2 ]
2. Anticonmutatividad:
[f , g] = −[g, f ]
3. Identidad de Jacobi:
Ladf g h = Lf Lg h − Lg Lf h
Lema 8.2 Sea φ(x) una función suave definida en una región Ω en Rn .
Si el jacobiano ∇φ es no singular en un punto x = x̄ de Ω, entonces φ(x̄)
define un difeomorfismo local en una región de Ω.
Ejemplo 8.3
donde u(t) = [u1 (t), . . . , um (t)]T es el vector de control (la variable manipu-
lada) del proceso de orden m, x(t) = [x1 (t), . . . , xn (t)]T es el vector de estado
del proceso de orden n, y(t) = [y1 (t), . . . , yp (t)]T es el vector de salida del
proceso (la variable controlada) de orden p y las funciones f = [f1 , . . . , fn ]T ],
g = [g1 , . . . , gm ]T ] y h = [h1 , . . . , hp ]T corresponden a campos vectoriales in-
finitamente diferenciables.
Asumamos la siguiente transformación no lineal de estados:
φ1 (x1 , . . . , xn )
..
z = φ(x) = . (8.7)
φn (x1 , . . . , xn )
donde la función de transformación φ es invertible y tanto φ como su inversa
φ−1 son infinitamente diferenciables. Notar que la transformación dada en la
ecuación (8.7) es un difeomorfismo. Mientras que la propiedad de inversión
de φ permite un retorno a los estados originales, la propiedad de diferen-
ciación garantiza que la descripción del proceso con las nuevas coordenadas
sea también infinitamente diferenciable, tal como lo es el proceso original.
Empleando la transformación z = φ(x) en la ecuación (8.6) obtenemos:
∂φ
ż = ẋ(t)
∂x x̄(t)
m
∂φ ∂φ
= f (x(t)) + gj (x(t))uj (t) (8.8)
∂x x̄(t) ∂x x̄(t)
j=1
410 Control No Lineal
Lg Lr−1
f h(x) = 0 (8.12)
y = z1 (8.14)
414 Control No Lineal
ż1 = z2
ż2 = z3
..
.
żr−1 = zr
żr = Lrf h(φ−1 (z)) + Lg Lr−1
f h(φ−1 (z))u = b(z) + a(z)u
żr+1 = w1 (z)
..
.
żn = wn−r (z)
y = z1 (8.15)
donde w1 , w2 , . . . , wn−r son funciones suaves que dependen del nuevo estado
z y no de la entrada manipulada u.
ż1 = z2
ż2 = z3
..
.
żn−1 = zn
żn = Lnf h(φ−1 (z)) + Lg Lfn−1 h(φ−1 (z))u = b(z) + a(z)u
y = z1 (8.16)
ż1 = z2
ż2 = z3
..
.
żv = v
y = z1 (8.18)
Observar que la nueva entrada del proceso lineal es v. La figura 8.1 mues-
tra el proceso de linealización descrito hasta ahora. El proceso lineal de la
ecuación (8.19) es completamente controlable y completamente observable,
416 Control No Lineal
v u x
- × - + - ẋ = f (x) + g(x)u
6 − 6
z
b(.) z = φ(x)
a(.)
1 y
a(.) ? - C -
ẋ = f (x) + g(x)u
2. El conjunto:
[g, adf g, . . . , adfn−2 g]
es involutivo en Ω.
Luego, por extensión (ver ecuación (8.31)), la dinámica del observador para
el sistema forzado:
tiene la forma:
dẑ
= Aẑ + BLnf h(φ−1 (ẑ)) + Lg Lfn−1 h(φ−1 (ẑ))u + L[y − Cẑ] (8.34)
dt
que debe cumplir con los requerimientos siguientes: que el proceso posea
grado relativo r = n, que su matriz de observabilidad sea invertible y que
la entrada u sea uniformemente acotada. La ecuación del observador para el
sistema original toma la forma siguiente:
dx̂
= f (x̂) + g(x̂)u + O−1 L[y(t) − h(x̂)] (8.35)
dt
para una condición inicial x̂(0).
an−1 an−2 · · · a1 1
an−2 an−3 ··· 1 0
.. .. .. ..
W = . . . .
a1 1 ··· 0 0
1 0 ··· 0 0
Los parámetros ai , i = 1, . . . , n, se obtienen de la ecuación:
(s − µ1 ) · · · (s − µ1 ) = sn + α1 sn−1 + · · · + αn−1 s + αn
y deben tener parte real negativa para garantizar la estabilidad del obser-
vador no lineal.
9) Implementar el hardware.
donde:
x2
f (x) = −( M
N
)senx1 − MB
x2 + nK
M x3
− L x2 − L x3
nE R
0
g(x) = 0 ; h(x) = x1 (8.38)
Kact
L
donde:
x2 0
f (x) = BR+n2 KE ; g(x) = nKact K
− M R x2 − TMN − N
M senx1 MR
adf g = [f , g] = ∇g f − ∇f g
0 1 0 0 0
= −MN
cosx1 − M B nK
M 0 = −M
nK
L
1
0 − nEL − R
L L
R
L2
nK
0 1 0 0 ML
= −MN
cosx1 − M
B nK
M
nK
− ML = − M 2 L − nKR
nKB
M L22
0 − nE −R R n2 KE
L L L 2 − ML 2 + R
L3
nK
0 0 ML
[g adf g ad2f g] = 0 − M L − M 2 L − nKR
nK nKB
M L22
1 n2 KE
L
R
L2
− M L2 + L3R
Dado que:
n2 K 2
det[g adf g ad2f g] =
M 3 L3
entonces tal conjunto está conformado por campos vectoriales linealmente
independientes. Por otra parte, el conjunto:
[g adf g]
es involutivo porque es constante.
(8.46)
426 Control No Lineal
y = h(x)(8.50) = x1
que de hecho ya se encuentra en su forma normal.
8.7 Control No Lineal de un Servosistema 427
v Realimentacion Proceso y
no lineal no
u = u(z,v) lineal
z x
z = φ (x )
v 1 y
Proceso lineal s3
equivalente
#
NR n2 KE BR B R
+ senz1 + + z2 + + z3 (8.56)
ML ML ML M L
ẋ1 = x2
ẋ2 = v
y = x1 (8.58)
d2 y
=v
dt2
La señal v debe diseñarse de modo tal que y = x1 siga una trayectoria de
referencia r(t). La siguiente señal v:
d2 r d(r − y)
v= 2
− K1 − K2 (r − y)
dt dt
logra que el sistema de lazo cerrado tenga la forma:
d2 (r − y) d(r − y)
+ K1 + K2 (r − y) = 0
dt2 dt
donde K1 y K2 determinan la dinámica del error (r − y). Si se desea que
y → r cuando t → ∞, entonces los eigenvalores de la ecuación anterior deben
poseer parte real negativa. Por ejemplo, si deseamos que los eigenvalores
sean s1 = s2 = −4, entonces la ecuación del sistema de lazo cerrado resulta
s2 +8s+16, de donde se obtiene: K1 = 8 y K2 = 16 y K3 = 64. La expresión
de v en función de la trayectoria de referencia resulta entonces:
d2 r dr
v= + K1 + K2 r − Kx (8.59)
dt2 dt
430 Control No Lineal
donde:
y
K= K2 K1 ; z=
ẏ
Finalmente, la señal de control u puede obtenerse reemplazando (8.59) en
(8.57), lo que resulta en:
2
MR d r dr
u = + K1 + K2 r − Kx
nKact K dt2 dt
2
BR + n KE N
+ x2 + senx1 (8.60)
MR M
dx̂
= f (x̂) + g(x̂)u + O−1 L[y(t) − h(x̂)]
dt
ŷ = h(x̂) (8.64)
Cabe anotar que en este caso el observador es útil para estimar la veloci-
dad angular x2 . Sin embargo, por software podemos también estimar x2 ,
sabiendo que es la derivada de x1 .
(s − s1 )(s − s2 )(s − s3 ) = s3 + K1 s2 + K2 s + K3
de donde resulta:
√ √
K1 = 40 + 20 2; K2 = 300 + 800 2; K3 = 12000
432 Control No Lineal
z z x
z = φ (x)
disnl1_u disnl1_x
u x
Mux
Referencia
r Conversión disnl1_r
de x a z referencia r
(s − s1 )(s − s2 )(s − s3 ) = s3 + K1 s2 + K2 s + K3
434 Control No Lineal
1.5
Posición (radianes)
1
0.5
−0.5
−1
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
1.5
Señal de control (voltios)
0.5
−0.5
−1
−1.5
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
^
z ^
z ^
x
z^ = φ (x)
^ Observador
no lineal
de donde resulta:
√ √
K1 = 40 + 20 2; K2 = 300 + 800 2; K3 = 12000
disnl2_u
u
Mux
gráfico
Señal u Proceso Mux
Señal v no lineal
disnl2_x1
x1
Referencia disnl2_r
r Conversión Observador r
de x a z no lineal
Figura 8.7: Simulación del sistema de control no lineal de tercer orden con
observador.
Posición (radianes)
0.5
−0.5
−1
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
3
Señal de control (voltios)
−1
0 2 4 6 8 10 12 14 16 18 20
Tiempo en segundos
dr ∼ 1
= [r(k) + 3r(k − 1) − 3r(k − 2) − r(k − 3)]
dt 6T
1
r̄ = [e(k) + e(k − 1) + e(k − 2) + e(k − 3)]
4
438 Control No Lineal
Posición (radianes)
1
−1
−2
0 5 10 15 20 25 30 35 40 45 50
Tiempo en segundos
0.4
Señal de control (voltios)
0.2
−0.2
−0.4
0 5 10 15 20 25 30 35 40 45 50
Tiempo en segundos
N = g*Lo*(Mo + m/2);
/* Inicializacion de variables */
yp =0.; x2p = 0.;
rp =0.; rpp = 0.; rppp = 0.;
drp =0.; drpp = 0.; drppp = 0.;
up =0.;
√
Los polos√del sistema lineal equivalente se ubicaron en p1 = −10 2 − 10i y
p2 = −10 2 + 10i. La ecuación caracterı́stica correspondiente a tales polos
es:
s2 + 28,2843s + 300 = 0
de donde obtenemos: K1 = 28,2843 y K2 = 300. Podemos observar en la
figura 8.10 que la respuesta presenta sobreimpulso nulo, tiempo de estabi-
lización menor que 0.4 s y error en estado estable nulo.
300
Posición (grados)
200
100
−100
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Tiempo en segundos
1.5
Señal de control (voltios)
0.5
−0.5
−1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Tiempo en segundos
Problema 8.1
Ẋ1 = X2
g Bp 1
Ẋ2 = − senX1 − X2 + U
Lo Mo L2o Mo L2o
Y = X1 = h
U = BX2 + M LgsenX1 + M L2 V
V = r̈ + K1 ė + K2 ë = Ẋ2
ë + K1 ė + K2 e = 0; (s2 + K1 s + K2 )e(s) = 0
446 Control No Lineal
V = r̈ + K1 ṙ + K2 r − K1 X1 − K2 X2 ; Y = X1 = Θ
subplot(2,1,1)
plot(ejex,r(4:MM),ejex,X1(4:MM)); grid
ylabel(’Posicion (radianes)’)
xlabel(’Tiempo en segundos’)
subplot(2,1,2)
plot(ejex,U(4:MM)); grid
ylabel(’Se~nal de control (N)’)
xlabel(’Tiempo en segundos’)
print -f -deps p8_1 % CREA EL ARCHIVO p8_1.eps
4
Posición (radianes)
−2
−4
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
400
Señal de control (N)
200
−200
−400
−600
0 1 2 3 4 5 6 7 8 9 10
Tiempo en segundos
Problema 8.2
Ḣ = f + gU ; Y = h(H) = H2 ; U = Qo
c2
Lg L2f h(H) = ∇(L2f h(H)) g =4A H1 H2
1
El nuevo conjunto de variables de estado resulta:
z1 = φ1 (H) = h(H) = H2 ; z2 = φ2 (H) = Lf h(H) = c H1 − c H2
ż1 = z2
z˙2 = L2f h(φ−1 (z)) + Lg L2f h(φ−1 (z)) = b(φ−1 (z)) + a(φ−1 (z))U
donde:
−1 c2 cz2 c2
b(φ (z)) = √ −1 ; a(φ−1 (z)) = √ √
2 z1 4A z1 (z2 /c + z1 )
8.8 Problemas Resueltos 449
V = Ÿ = r̈ + K1 ė + K2 e; e=r−Y
V = r̈ + K1 ṙ + K2 r − K2 z1 − K1 z2
Problema 8.3
3.5
Nivel (m)
2.5
2
0 5 10 15 20 25 30 35 40 45 50
Tiempo en segundos
5
Flujo de control (m^3/s)
−5
0 5 10 15 20 25 30 35 40 45 50
Tiempo en segundos
h(x) = x4
Problema 8.5
Problema 8.6
[15] Gene H. Hostetter, Digital Control System Design, Holt, Rinehart and
Winston, Inc., New York, Chicago, San Francisco, Philadelphia, Mon-
treal, Toronto, London, Sydney, Tokyo, 1988.