Está en la página 1de 84

-

?
Bienvenido a los Manuales de Matlab para Control Automtico. Le invitamos a
leer ms en la presentacin. Estos manuales han sido diseados para
ayudarle a aprender a usar Matlab, para analizar y disear sistemas de
control. Los manuales cubren los fundamentos del Matlab, las tcnicas de
control clsico ms comunes (PD, el lugar de las races y la respuesta en
frecuencia), as como algunas tcnicas de diseo de control moderno (espacio
de estado). Un lineamiento de estos manuales se esboza en el grfico
anterior: cada manual est representado por una caja. Adems, hay cuatro
ejemplos que se siguen a lo largo de los manuales (cada pgina de cada
ejemplo se indica en el grfico con un punto azul). A lo largo de los manuales,
al final de cada pgina, encontrar enlaces a todos los dems manuales as
como a ejemplos relacionados. Tambin habr enlaces de vuelta a esta
pgina (Portada), al ndice y a la lista de funciones de Matlab.
Le aconsejamos que siga estos manuales ejecutando Matlab en un ventana y
los manuales en otra. Podr ejecutar la mayora de los programas en Matlab
copiando el cdigo de una ventana a la otra. Estos manuales pueden serle
tiles como ayuda interactiva mientras resuelve ejercicios o repasa conceptos
antes del eamen. Eisten formularios annimos al final de cada manual y
ejemplo; estamos interesados en escuchar como usa estos manuales as
como sugerencias para mejorarlo.
Si no posee eperiencia previa con Matlab, le recomendamos el primer
manual: Fundamentos de Matlab.
Estas pginas de los Manuales de Matlab para Control Automtico son una
traduccin de las originales "Controls Tutorials for Matlab".
Propiedad intelectual:
(C) 1996 Regentes de la Universidad de Michigan.
(C) 1999 respecto a la versin en espaol Vctor Torres.
-

?
ndice de Ios ManuaIes de MatIab
Presentacin:
Convenios usados en los manuales
Acerca de los autores
Ms acerca del control automtico
Propiedad intelectual
Fundamentos deI MatIab:
Vectores
Funciones
Grficos
Polinomios
Matrices
Usando archivos de comandos en Matlab
La ayuda de Matlab
ModeIado:
El tren
Diagrama de fuerzas del cuerpo libre y leyes de Newton
Ecuaciones de estado y salida
Representacin en Matlab
PID:
ntroduccin
Los tres trminos del controlador
Caractersticas de los controladores P, y D
Respuesta escaln en bucle abierto
Control Proporcional
Control PD
Control P
Control PD
Directrices para el diseo de un controlador PD
EI Iugar de Ias races:
Polos de bucle cerrado
Trazando el lugar de las races de una funcin de transferencia
Eligiendo el valor de K
Respuesta en bucle cerrado
Respuesta en frecuencia:
Diagrama de Bode
Mrgenes de ganancia y fase
Ancho de banda
Comportamiento en bucle cerrado
Diagrama de Nyquist
Espacio de estados:
Ecuaciones del espacio de estados
Diseo de un controlador usando la ubicacin de los polos
ntroduccin a la entrada de referencia
Diseo del observador
ControI DigitaI:
ntroduccin
Mantenedor de orden cero equivalente
Conversin usando c2dm
Estabilidad y respuesta transitoria
El lugar de las races discreto
EjempIos:
Velocidad de crucero
Control de velocidad
Control de posicin
Suspensin de un autobs
Pndulo invertido
Control de elevacin
La bola y la balanza
Animaciones:
Suspensin de un autobs
Pndulo invertido
Control de elevacin
La bola y la balanza
Comandos etras:
Conversiones
y escalones
Ecuaciones en diferencias y representacin de sistemas
Redes digitales de adelanto y atraso
Error en rgimen permanente en sistemas digitales
Ubicacin de los polos discretos y respuesta transitoria
Funciones
| | | | | |
Efectos de retraso asociados a un mantenedor
Adelanto / atraso
Archivos de instrucciones
Filtro trampa
Grficos
Aproimacin bi-lineal a un PD
Cancelacin de Polos y ceros
Error en rgimen permanente
-

?
Presentacin
Matlab es un programa interactivo para el clculo numrico y la representacin grfica
de datos. Su uso est muy etendido entre los ingenieros en el mbito del anlisis y
diseo de sistemas de control. Hay muchas colecciones de funciones diferentes
disponibles que aumentan la capacidad de Matlab para diferentes reas de aplicacin.
En este manual se usa frecuentemente la coleccin denominada "Control System
Toolbo". Matlab funciona en los entornos Uni, Macintosh y Windows; eiste una
versin para estudiantes disponible para ordenadores personales. Para obtener ms
informacin acerca de Matlab contactar con Mathworks.
- -- - -
En estos manuales se usan las siguientes convenciones para las entradas y salidas de
Matlab.
Las entradas Matlab se muestran de forma que sea fcil copiarlas
en la ventana de Matlab.
Las instrucciones nativas de Matlab se muestran en rojo.
Las salidas generadas por Matlab se muestran as.
- -
Estos manuales han sido desarrollados por el Profesor Bill Messner del Departamento
de ngeniera Mecnica de la Universidad de Carnegie Mellon y la Profesora Dawn
Tilbury del Departamento de ngeniera Mecnica y Mecnica Aplicada de la
Universidad de Michigan. La National Science Foundation ha proporcionado la
financiacin a travs de la subvencin nmero DUE 9554819. La mayor parte del
trabajo de desarrollo lo llevaron a cabo los estudiantes Luis Oms (CMU), Joshua Pagel
(UM), Yanjie Sun (UM) y Munish Suri (CMU) en el verano de 1996 y Christopher
Caruana (UM), Dai Kawano (UM), Brian Nakai (CMU) y Pradya Prempraneerach (CMU)
en el verano de 1997. Tambin contribuy el licenciado Jonathon Luntz (CMU). Un
prototipo de estos manuales desarrollados por la Profesora Tilbury gan el premio
Undergraduate Computational Science Award del Proyecto UCES patrocinado por el
Departamento de Energa de los Estados Unidos a travs de los Laboratorios Ames.
Estos manuales han sido traducidos por el profesor Vctor Torres del Departamento de
ngeniera de Sistemas y Automtica de la Universidad de Mlaga en 1999.
?- - ?
Si est interesado en aprender ms acerca del control automtico, hay una gran
cantidad de recursos bibliogrficos y en la red WWW. El Profesor Dennis Bernstein de
la Universidad de Michigan ha escrito A Student's Guide to Classical Control. Hay una
Biblioteca Virtual sobre ingeniera de control y eiste un grupo de noticias
sci.engr.control dedicado a la teora y la prctica del control.
Tambin hay una gran cantidad de libros que versan sobre este tema y que cubren la
totalidad de lo abarcado en estos manuales, entre los que se incluyen:
1. Modern ControI Systems
Richard C. Dorf and Robert M. Bishop
Addison-Wesley
Seventh Edition, Massachusetts, 1995
2. Feedback ControI of Dynamic Systems
Gene F. Franklin, J. David Powell, and Abbas Emani-Naeini
Addison-Wesley
Third Edition, Massachusetts, 1994
3. Automatic ControI Systems
Benjamin C. Kuo
Prentice Hall
Seventh Edition New Jersey, 1995
4. ControI Systems Engineering
Norman S. Nise
Benjamin-Cummings
Second Edition, California, 1995.

(C) Universidad de Michigan, 1998
Reservados todos los derechos por los regentes de la Universidad de Michigan. El usuario se
compromete a reproducir esta nota de reconocimiento de la propiedad intelectual en todas las copias del
software realizadas por el beneficiario. Todos los derechos reservados. Por la presente se concede
permiso al beneficiario para realizar copias y usar este software solamente para uso interno, con la
condicin de reproducir este mensaje de propiedad intelectual intacto y sin realizar ninguna modificacin
al software. Los beneficiarios de este software no pueden redistribuir este software fuera de su propia
institucin. Se prohbe de forma eplcita la venta de este software, incluir este producto como parte de
un producto comercial y la realizacin de trabajos derivados con propsito comercial. Cualquier otro uso
est prohibido a menos que lo autoricen por escrito los regentes de la Universidad de Michigan. Este
software se ofrece sin garanta. Los regentes de la Universidad de Michigan rechazan toda garanta,
eplcita o implcita, incluyendo garanta implcita de comercializacin y uso particular. En ningn caso los
regentes de la Universidad de Michigan sern responsables de ninguna clase prdida o dao, incluido
cualquier dao fortuito, indirecto, derivado o especial.
(C) Vctor Torres, 1999
Reservados todos los derechos de la versin en espaol de este software por Vctor Torres
-

?
Manual de Fundamentos de Matlab
Las funciones de Matlab usadas en este manual son:
plot, polyval, rotos, conv, deconv, polyadd, inv, eig, poly
Nota: Las funciones no estndar de Matlab usadas en este manual se muestran
resaltadas en verde.
Matlab es un programa interactivo para el clculo numrico y la representacin grfica
de datos. Su uso est muy etendido entre los ingenieros en el mbito del anlisis y
diseo de sistemas de control. Hay muchas colecciones de funciones diferentes
disponibles que aumentan la capacidad de Matlab para diferentes reas de aplicacin.
En este manual se usa frecuentemente la coleccin denominada "Control System
Toolbo". Matlab funciona en los entornos Uni, Macintosh y Windows; eiste una
versin para estudiantes disponible para ordenadores personales. Para obtener ms
informacin acerca de Matlab contactar con Mathworks.
La idea que subyace en estos manuales es que pueda verlos en una ventana mientras
ejecuta Matlab en otra. Usted debera ser capaz de reproducir todas las grficas y todos
los clculos realizados en estos manuales con slo copiar el teto desde el manual a
Matlab o a un archivo de instrucciones.
Vectores
Empecemos creando algo tan simple como un vector. ntroduzca cada elemento del
vector (separado por un espacio) entre corchetes y asgnelo a una variable. Por
ejemplo, para crear el vector a, introduzca en la ventana de instrucciones de Matlab
(para hacerlo ms fcil puede "copiar" y "pegar" desde el navegador a Matlab):
a = [1 2 3 4 5 6 9 8 7]
Matlab debera devolver:
a =
1 2 3 4 5 6 9 8 7
Digamos que desea crear un vector con elementos entre 0 y 20 separados a
incrementos de 2 (este mtodo se usa frecuentemente para crear un vector de tiempo):
t = 0:2:20
t =
0 2 4 6 8 10 12 14 16 18 20
Manipular vectores es casi tan fcil como crearlos. Primero, supongamos que desea
aadir 2 a cada elemento del vector 'a'. La instruccin que realiza este clculo es:
b = a + 2
b =
3 4 5 6 7 8 11 10 9
Supongamos ahora que desea sumar dos vectores. Si los dos vectores tienen la misma
dimensin es fcil. Sencillamente sume los dos vectores como se indica a continuacin:
c = a + b
c =
4 6 8 10 12 14 20 18 16
Restar vectores de la misma longitud funciona eactamente igual.
Funciones
Para facilitar las cosas Matlab incluye muchas funciones estndar. Cada funcin es un
bloque de cdigo que desempea una tarea especfica. Matlab incorpora todas las
funciones estndar tales como seno (sin), coseno (cos), logaritmo (log), eponencial
(ep), raz cuadrada (sqrt), as como muchas otras. Tambin incorpora constantes tales
como pi e i o j para la raz cuadrada de -1.
sin(pi/4)
ans =
0.7071
Para averiguar como se usa una funcin escriba help [nombre de funcion] en la
ventana de instrucciones de Matlab.
Matlab incluso le permite escribir sus propias funciones con la instruccin function; siga
el enlace para aprender a escribir sus propias funciones y para ver la lista de las
funciones creadas para este manual.
Grficos
Tambin es muy sencillo crear grficos en Matlab. Suponga que desea crear la grfica
de un seno en funcin del tiempo. Primero cree un vector de tiempo (el punto y coma al
final de una instruccin le indica a Matlab que no muestre la respuesta) y evalue el seno
para cada uno de esos valores de tiempo.
t=0:0.25:7;
y = sin(t);
plot(t,y)
El grfico contiene aproimadamente un periodo de una onda seno. Los fundamentos
de las representaciones grficas en Matlab son muy sencillos y la funcin plot
proporciona ciertas caractersticas adicionales. Le recomendamos que visite la pgina
grficos para aprender ms.
PoIinomios
En Matlab un polinomio se representa como un vector. Para crear un polinomio en
Matlab simplemente introduzca cada coeficiente del polinomio en un vector en orden
descendente. Por ejemplo, digamos que tenemos el siguiente polinomio:
Para introducirlo en Matlab basta con crear un vector de la siguiente manera
= [1 3 -15 -2 9]
=
1 3 -15 -2 9
Matlab interpreta un vector de longitud n+1 como un polinomio de orden n. As, si un
polinomio no posee algn coeficiente es preciso introducir un cero en el lugar apropiado
del vector que lo representa. Por ejemplo,
se representa en Matlab como:
y = [1 0 0 0 1]
Se puede evaluar el polinomio usando la funcin polyval. Por ejemplo para hallar el
valor del polinomio anterior en s = 2,
z = polyval([1 0 0 0 1],2)
z =
17
Tambin se pueden hallar las races de un polinomio. Esto es muy til cuando se tiene
un polinomio de orden superior como
Hallar las races es tan sencillo como introducir la siguiente instruccin:
roots([1 3 -15 -2 9])
ans =
-5.5745
2.5836
-0.7951
0.7860
Digamos que desea multiplicar dos polinomios. El producto de dos polinomios se
calcula realizando la convolucin de sus coeficientes. Matlab dispone de a funcin conv
para realizar esta tarea.
= [1 2];
y = [1 4 8];
z = conv(,y)
z =
1 6 16 16
Dividir dos polinomios es igual de sencillo. La funcin deconv devuelve el cociente y el
resto. As, al dividir z entre y obtendremos de nuevo .
[, R] = deconv(z,y)
=
1 2
R =
0 0 0 0
Como puede ver se obtiene el mismo polinomio / vector anterior. Si el polinomio y no
fuese un mltiplo de , el vector correspondiente al polinomio resto contendra algo
diferente a cero.
Si desea sumar dos polinomios del mismo orden basta con z = + y (los vectores e y
deben tener la misma longitud). En el caso ms general puede usarse la funcin
definida por el usuario polyadd. Para usar polyadd copie la funcin en un archivo de
instrucciones y sela como si fuese cualquier otra funcin Matlab. Si dispone de la
funcin polyadd almacenada en un archivo de instrucciones y desea sumar dos
polinomios cualesquiera e y puede realizar esta operacin escribiendo la siguiente
instruccin:
z = polyadd(,y)
=
1 2
y =
1 4 8
z =
1 5 10
Matrices
ntroducir matrices en Matlab es igual que introducir vectores ecepto en que cada fila
de elementos se separa de otra con un punto y coma o con un salto de lnea:
B = [1 2 3 4;5 6 7 8;9 10 11 12]
B =
1 2 3 4
5 6 7 8
9 10 11 12
B = [ 1 2 3 4
5 6 7 8
9 10 11 12]
B =
1 2 3 4
5 6 7 8
9 10 11 12
Las matrices en Matlab se pueden manipular de muchas maneras. Por ejemplo, se
puede obtener la traspuesta de una matriz utilizando la tecla de apostrofo.
C = B'
C =
1 5 9
2 6 10
3 7 11
4 8 12
Se debe hacer notar que si C hubiese sido compleja, el apostrofo realmente hubiese
dado la matriz compleja conjugada traspuesta. Para obtener la traspuesta, utilice .' (los
dos operadores realizan la misma operacin si la matriz no es compleja).
Se pueden multiplicar las dos matrices B y C. Recuerde que el orden de las matrices
afecta al resultado del producto.
D = B * C
D =
30 70 110
70 174 278
110 278 446
D = C * B
D =
107 122 137 152
122 140 158 176
137 158 179 200
152 176 200 224
Tambin es posible multiplicar dos matrices elemento a elemento utilizando el operador
.* (las dos matrices deben tener el mismo tamao).
E = [1 2;3 4]
F = [2 3;4 5]
G = E .* F
E =
1 2
3 4
F =
2 3
4 5
G =
2 6
12 20
Una matriz cuadrada, como la matriz E, puede multiplicarse por ella misma tantas veces
como se quiera elevando la matriz a una potencia dada.
E^3
ans =
37 54
81 118
Si se desea elevar al cubo cada elemento de la matriz basta con usar el operador
potencia elemento a elemento.
E.^3
ans =
1 8
27 64
Tambin puede hallarse el inverso de una matriz:
X = inv(E)
X =
-2.0000 1.0000
1.5000 -0.5000
o sus autovalores:
eig(E)
ans =
-0.3723
5.3723
ncluso eiste una funcin que calcula los coeficientes del polinomio caracterstico de
una matriz. La funcin "poly" crea un vector que contiene los coeficientes del polinomio
caracterstico.
p = poly(E)
p =
1.0000 -5.0000 -2.0000
Recuerde que los autovalores de una matriz son las races de su polinomio
caracterstico:
roots(p)
ans =
5.3723
-0.3723
Impresin
mprimir en Matlab es muy sencillo. Slo siga los siguientes pasos.
Macintosh
Para imprimir una grfica o un archivo de instrucciones desde un Macintosh haga
clic en la grfica o en el archivo de instrucciones y seleccione la opcin Print del
men File y pulse return.
Windows
Para imprimir una grfica o un archivo de instrucciones desde un ordenador con
Windows seleccione la opcin Print del men File en Ia ventana de Ia grfica o
deI archivo de instrucciones y pulse return.
Uni
Para imprimir una grfica desde una estacin de trabajo Uni escriba la
instruccin:
print -P<monbre de impresora>
Si desea guardar la grfica e imprimirla posteriormente introduzca la instruccin:
print grafica.ps
Despus podr imprimir la grfica utilizando la instruccin "lpr -P grafica.ps". Si
est usando una estacin de trabajo HP utilice en su lugar la instruccin "lpr -d
grafica.ps"
Los archivos de instrucciones se imprimen igual que los dems archivos usando
la instruccin "lpr -P <nombre de archivo>.m". Si est usando una estacin de
trabajo HP utilice en su lugar la instruccin "lpr -d <nombre de archivo>.m"
Usando archivos de instrucciones
Hay ligeras diferencias que debe conocer en cuanto al uso de los archivos de
instrucciones en las diferentes plataformas.
Macintosh
ncorpora un editor para editar archivos de instrucciones; elija "Edit M-File" en el
men File. Tambin se puede usar cualquier otro editor (pero hay que
asegurarse de guardar los archivos en formato teto y cargarlo cuando se active
Matlab).
Windows
Ejecutar Matlab en Windows es muy parecido a ejecutarlo en Macintosh. Sin
embargo, debe saber que los archivos de instrucciones se guardan en el
portapapeles. As, debe asegurarse de guardarlos como nombredearchivo.m.
Uni
Es preciso ejecutar un editor de forma separada a Matlab. La mejor estrategia es
destinar una carpeta para todos los archivos de instruciones e invocar la
ejecucin de Matlab desde esa carpeta. Para ejecutar Matlab desde una ventana
Xterm sencillamente escriba: matlab.
Es posible escribir las instrucciones directamente en Matlab o escribir todos las
instrucciones juntas en un archivo de instrucciones y ejecutarlo. Si se colocan todos los
archivos de instrucciones en la misma carpeta y se invoca la ejecucin de Matlab desde
esa carpeta, Matlab siempre los encontrar.
La ayuda de MatIab
Matlab dispone de una ayuda bastante buena; escriba
help monbredefuncin
para obtener informacin acerca de una funcin. Para obtener informacin acerca de
una funcin se necesita conocer su nombre. El siguiente es un enlace a una lista de
funciones con todas las funciones usadas en estos manuales. Encontrar un enlace a
esta pgina al final de cada manual y cada ejemplo.
Aqu tiene unas breves notas para finalizar este manual.
Se puede obtener el valor de una variable concreta en cualquier momento
escribiendo su nombre.
B
B =
1 2 3
4 5 6
7 8 9
Se pueden incluir ms de un instruccin en una sola lnea separando las
instrucciones con coma.
Ya habr notado que cuando no se asigna el resultado de un operacin a
ninguna variable Matlab lo almacena en una variable temporal denominada
"ans".
-

?
Manual de Modelado
Se puede usar Matlab para representar un sistema fsico o un modelo. Antes de ver
como hacerlo repasemos como describir un sistema fsico con un conjunto de
ecuaciones diferenciales.
EI sistema: un tren
En este ejemplo, consideraremos un tren de juguete compuesto por una mquina y un
vagn. Suponiendo que el tren se desplaza solamente en una direccin, se desea
controlar el tren de manera que viaje a una velocidad constante, as como que el
arranque y la parada sean suaves.
Las masas de la mquina y del vagn se representarn por M1 y M2 respectivamente.
Ambos se mantienen unidos por un muelle con un coeficiente de rigidez k. F representa
la fuerza que aplica la mquina y la letra griega mu (que tambin se representar con la
letra u) representa el coeficiente de friccin por rodamiento.
Fotografa por cortesa de: Dr. Howard Blackburn
Diagramas de fuerzas deI cuerpo Iibre y Ieyes de
Newton
El sistema puede representarse con el siguiente diagrama de fuerzas de los cuerpos
libres.
Por las leyes de Newton sabemos que la suma de todas las fuerzas actuantes sobre
una masa es igual a la masa por la aceleracin. En este caso, las fuerzas que actan
sobre la masa M1 son la del muelle, la de friccin y la de la mquina. Las fuerzas que
actan sobre la masa M2 son la del muelle y la de friccin. En la direccin vertical, la
fuerza gravitatoria se cancela con la fuerza normal ejercida por el suelo, as que no hay
aceleracin en esta direccin. Las ecuaciones del movimiento en direccin horizontal
son las siguientes:
Ecuaciones de estado y de saIida
Este sistema de ecuaciones puede manipularse y epresarse en la forma de
ecuaciones de estado. Sabiendo que las variables de estado son X1, V1, X2, V2 y que
la variable de entrada es F, las ecuaciones de estado del sistema son:
Si consideramos la velocidad de la mquina como la salida del sistema. Entonces la
ecuacin de salida queda como:

1. Funcin de transferencia
Para obtener la funcin de transferencia del sistema, primero, hay que realizar la
transformada de Laplace de las ecuaciones de estado y de salida.
Usando estas ecuaciones se obtiene la relacin Y(s)/F(s) en trminos de constantes.
Cuando se caIcuIa una funcin de transferencia se consideran condiciones
iniciaIes nuIas. La funcin de transferencia as obtenida es:
2. Espacio de estado
Otro mtodo de resolver el problema es utilizar la forma de variable de estado. El
comportamiento del sistema queda caracterizado por cuatro matrices A, B, C y D que se
emplean para resolver el problema. La representacin matricial en forma de variable de
estado que se obtiene manipulando las ecuaciones de estado y salida del sistema son
las que se muestran a continuacin.
Representacin en MatIab
Ahora veremos como introducir las ecuaciones obtenidas previamente en un archivo de
instrucciones para Matlab. Como Matlab no permite clculo simblico, es preciso
asignarles un valor numrico a cada una de las variables. Establezcamos,
M1 = 1 kg
M2 = 0.5 kg
k = 1 N/m
F= 1 N
u = 0.002 s^2kg/m
g = 9.8 m/s^2
Cree un archivo de instrucciones con las siguientes instrucciones:
M1=1; M2=0.5; k=1; F=1; u=0.002; g=9.8;
Ahora tiene dos posibilidades: 1) Usar la funcin de transferencia o 2) usar la forma de
variable de estado para resolver el problema. Si elige utilizar la funcin de transferencia,
aada las siguientes lneas al final del archivo de instrucciones que acaba de crear.
num=[M2 M2*u*g 1];
den=[M1*M2 2*M1*M2*u*g M1*k+M1*M2*u*u*g*g+M2*k M1*k*u*g+M2*k*u*g];
Si elige usar la forma en variable de estado, aada las siguientes lneas al final del
archivo de instrucciones, utilizando las matrices mostradas anteriormente en lugar de
las variables num y den.
A=[ 0 1 0 0;
-k/M1 -u*g k/M1 0;
0 0 0 1;
k/M2 0 -k/M2 -u*g];
B=[ 0;
1/M1;
0;
0];
C=[0 1 0 0];
D=[0];
Dirjase al manual Fundamentos de Matlab para aprender como introducir matrices.
Continuar resoIviendo eI probIema
Ahora, ya est preparado para obtener la salida del sistema (con la ayuda de algunas
funciones adicionales). Se debe hacer notar que muchas operaciones se pueden
realizar usando tanto la funcin de transferencia como la representacin en variable de
estado. Ms an, si se precisa, es muy sencillo transformar las ecuaciones de una
forma de representacin a otra. Si desea conocer como convertir las ecuaciones de una
forma de representacin a la otra dirjase a Conversin.
Estos manuales contienen siete ejemplos que le permitirn aprender ms acerca del
modelado de sistemas. A continuacin se muestran los enlaces correspondientes a
cada uno de ellos.
-

?
Manual del PD
Las funciones de Matlab usadas en este manual son: stepcloop
Nota: Las funciones de la "control system toolbo" se muestran resaltadas en rojo.
Introduccin
Este manual le mostrar las caractersticas de los controles proporcional (P), integral ()
y derivativo (D). Y como usarlos para conseguir la respuesta deseada. En este manual
se considera el siguiente sistema con realimentacin unitaria:
Planta: Sistema objeto del control
Controlador: Proporciona la ecitacin a la planta; se disea para controlar el
comportamiento global del sistema.
Los tres trminos deI controIador
La siguiente epresin muestra la funcin de transferencia de un controlador PD:

= Ganancia proporcional

= Ganancia integral

= Ganancia derivativa
En primer lugar, veamos como funciona un controlador PD en un sistema en bucle
cerrado como el representado en el esquema anterior. La variable (e) representa el
error de seguimiento, la diferencia entre el valor de la entrada deseada (R) y la salida
efectiva (Y). Esta seal de error (e) se enva al controlador PD y el controlador evala
tanto la integral como la derivada de esta seal de error. La seal (u) a la salida del
controlador es igual a la magnitud del error por la ganancia proporcional (), ms la
magnitud de la integral del error por la ganancia integral (), ms la magnitud de la
derivada del error por la ganancia derivativa ().
Esta seal (u) se enva a la planta, con lo que se produce una nueva salida (Y). Esta
nueva salida (Y) se enva de nuevo al sensor para determinar la nueva seal de error
(e). Por ltimo, el controlador utiliza esta nueva seal de error para calcular nuevamente
su derivada y su integral. Este proceso se repite una y otra vez.
Caractersticas de Ios controIadores P, I y D
Un controlador proporcional () reduce el tiempo de subida pero no elimina nunca el
error en rgimen permanente. El control integral () elimina el error en rgimen
permanente pero empeora la respuesta transitoria. Un control derivativo ()
incrementa la estabilidad del sistema, reduce el sobreimpulso y mejora la respuesta
transitoria. En la siguiente tabla se resumen los efectos de cada controlador
sobre un sistema en bucle cerrado.
Respuest
a BC
Tiempo de
subida
SobreimpuIso
T.
EstabIecimiento
Error R-P
Disminuye Aumenta Poca variacin Disminuye
Disminuye Aumenta Aumenta Elimina
Poca variacin Disminuye Disminuye Poca variacin
Tenga en cuenta que estas relaciones puede que no sean demasiado precisas porque
los efectos de las ganancias y dependen los unos de los otros. De hecho, al
variar el valor de una de estas variables puede que se modifiquen los efectos
producidos por las otras dos. Por esta razn, a la hora de determinar los valores de
y slo deber usar esta tabla como una referencia.
ProbIema ejempIo
Consideremos el simple problema de un sistema masa, resorte y amortiguador.
La ecuacin que modela este sistema es
(1)
Tomando la transformada de Laplace de la ecuacin del modelo (1)
La funcin de transferencia del desplazamiento X(s) con respecto a la entrada F(s) ser
Establezcamos
M = 1kg
b = 10 N.s/m
k = 20 N/m
F(s) = 1
Sustituyendo estos valores en la anterior funcin de transferencia
El objetivo de este problema es mostrar como y contribuyen a obtener
Un tiempo de subida ms rpido
Un sobreimpulso mnimo
Un error en rgimen permanente nulo
Respuesta escaIn en bucIe abierto
Veamos, en primer lugar, la respuesta en bucle abierto del sistema ante una entrada
escaln. Cree un nuevo archivo de instrucciones con el siguiente cdigo:
num=1; den=[1 10 20]; step(num,den)
Al ejecutar este archivo en al ventana de instrucciones de Matlab se obtendr la
siguiente grfica.
La ganancia de la funcin de transferencia de la planta es 1/20, as, el valor final de la
salida ante un escaln unitario es 0'05, lo que corresponde a un error en rgimen
permanente de 0'95, en efecto, bastante grande. Ms an, el tiempo de subida es de
alrededor de un segundo y el tiempo de establecimiento es de aproimadamente 1'5
segundos. Diseemos un controlador que reduzca el tiempo de subida y el tiempo de
establecimiento y elimine el error en rgimen permanente.
ControI proporcionaI
En la tabla anterior se muestra que el controlador proporcional () reduce el tiempo de
subida, incrementa el sobreimpulso y reduce el error en rgimen permanente. La
funcin de transferencia de bucle cerrado del sistema anterior con un controlador
proporcional es:
Establezcamos 300 como valor de la ganancia proporcional () y modifiquemos el
archivo de instrucciones de la siguiente manera:
Kp=300; num=[Kp]; den=[1 10 20+Kp]; t=0:0.01:2; step(num,den,t)
Al ejecutar este archivo en la ventana de instrucciones de Matlab se deber obtener la
siguiente grfica.
:
La funcin Matlab denominada cloop puede usarse para obtener directamente la
funcin de transferencia de bucle cerrado a partir de la funcin de transferencia de
bucle abierto (en vez de obtener la funcin de bucle cerrado a mano). El siguiente
archivo de instrucciones en el que se usa el comando cloop generara una grfica
idntica a la mostrada anteriormente.
num=1;
den=[1 10 20];
Kp=300;
[numCL,denCL]=cloop(Kp*num,den);
t=0:0.01:2;
step(numCL, denCL,t)
El grfico anterior muestra como el controlador proporcional ha reducido tanto el tiempo
de subida como el error en rgimen permanente, ha incrementado el sobreimpulso y
disminuido, en una pequea cantidad el tiempo de establecimiento.
ControI proporcionaI y derivativo
Veamos ahora el control PD. En la tabla mostrada anteriormente se muestra que el
controlador derivativo (Kd) reduce tanto el sobreimpulso como el tiempo de
establecimiento. La funcin de transferencia de bucle cerrado del sistema propuesto
con un controlador PD es:
Establezcamos en 300 el valor de Kp y en 10 el de Kp. ntroduzca las siguientes
instrucciones en un archivo de instrucciones y ejectelo desde la ventana de
instrucciones de Matlab.
Kp=300; Kd=10; num=[Kd Kp]; den=[1 10+Kd 20+Kp]; t=0:0.01:2; step(num,den,t)
Esta grfica muestra como el controlador derivativo reduce el sobreimpulso y el tiempo
de establecimiento y tiene poco efecto sobre el tiempo de subida y el error en rgimen
permanente.
ControI proporcionaI e integraI
Antes de analizar el control PD, veamos el control P. En la tabla se muestra que un
control integral (Ki) disminuye el tiempo de subida, incrementa tanto el sobreimpulso
como el tiempo de establecimiento y elimina el error en rgimen permanente. Para el
sistema propuesto, la funcin de transferencia de bucle cerrado con un control P es:
Reduzcamos a 30 el valor de Kp y establezcamos en 70 el valor de Ki. Creemos un
nuevo archivo de instrucciones y introduzcamos las siguientes instrucciones.
Kp=30; Ki=70; num=[Kp Ki]; den=[1 10 20+Kp Ki]; t=0:0.01:2; step(num,den,t)
Si ejecuta este archivo desde la ventana de instrucciones de Matlab debera obtener el
siguiente grfico.
Se ha reducido el valor de la ganancia proporcional (Kp) porque el controlador integral
tambin reduce el tiempo de subida e incrementa el sobreimpulso tal y como hace el
controlador proporcional (efecto doble). La respuesta anterior muestra como el
controlador integral elimina el error en rgimen permanente.
ControI proporcionaI, integraI y derivativo
Veamos ahora el controlador PD. La funcin de transferencia de bucle cerrado del
sistema dado con un controlador PD es:
Tras varias pruebas se ha comprobado que los valores de las ganancias Kp=350,
Ki=300 y Kd=50 proporcionan una respuesta adecuada. Para confirmarlo, introduzca las
siguientes instrucciones en un archivo de instrucciones y ejectelo desde la ventana de
instrucciones. Obtendr la siguiente respuesta escaln
Kp=350;
Ki=300;
Kd=50;
num=[Kd Kp Ki];
den=[1 10+Kd 20+Kp Ki];
t=0:0.01:2;
step(num,den,t)
Ahora se ha obtenido un sistema sin sobreimpulso, con un tiempo de subida rpido y
sin error en rgimen permanente.
Consejos generaIes para eI diseo de un controIador
PID
Cuando est diseando un controlador PD para un sistema dado siga los siguientes
pasos para obtener el resultado deseado.
1. Obtenga la respuesta en bucle abierto y determine los parmetros que deben ser
mejorados
2. Aada un control proporcional para mejorar el tiempo de subida
3. Aada un control derivativo para mejorar el sobreimpulso
4. Aada un control integral para eliminar el error en rgimen permanente
5. Ajuste los valores de Kp, Ki y Kd para obtener la respuesta deseada. Puede
dirigirse a la tabla de este "Manual del PD" para averiguar qu controlador
controla cada caracterstica.
Por Itimo, tenga en cuenta que, si no es necesario, no tiene porqu implantar los tres
controladores (proporcional, derivativo e integral) en un nico sistema. Por ejemplo, si
un controlador P proporciona una respuesta suficientemente buena (como en el
ejemplo anterior) entonces no es necesario implantar el controlador derivativo en el
sistema. Mantenga el controlador tan sencillo como sea posible.
-

?

Manual del Lugar de las Races
Las funciones de Matlab usadas en este manual son: cloop, rlocfind, rlocus, sgrid, step
Nota: Las funciones de la "control system toolbo" se muestran resaltadas en rojo.
PoIos de bucIe cerrado
El lugar de las races de una funcin de transferencia (bucle abierto) H(s) es el grfico
de las ubicaciones (lugar) de todos los posibles polos de bucle cerrado con una
ganancia k y realimentacin unitaria:
La funcin de transferencia en bucle cerrado es:
y por lo tanto los polos de sistema de bucle cerrado son los valores tales Zue hacen
1 + K H(s) = 0.
Si H(s) = b(s)/a(s), entonces esta ecuacin tiene la forma:
Sea n = orden de a(s) y m = orden de b(s) [el orden de un polinomio es el valor de la
mayor potencia de s Zue contiene].
Consideremos todos los valores positivos de k. En el lmite k -> 0 los polos de bucle
cerrado del sistema son las races de a(s) = 0 o los polos de H(s). En el lmite k ->
infinito los polos de bucle cerrado del sistema son las races de b(s) = 0 o los ceros de
H(s).
Para cualZuier valor de k Zue se seleccione eI sistema en bucIe cerrado tendr
siempre n poIos, siendo n el nmero de polos de H(s). EI Iugar de Ias races tiene n
ramas, cada rama empieza en un polo de H(s) y se dirige hacia un cero de H(s). Si H(s)
tiene ms polos Zue ceros (como es frecuentemente el caso) m < n se dice Zue H(s)
tiene ceros en eI infinito. En este caso, el lmite de H(s) cuando s -> infinito es cero. El
nmero de ceros en el infinito es n-m, el nmero de polos menos el nmero de ceros, y
es el nmero de ramas del lugar de las races Zue tienden al infinito (asntotas).
Como el lugar de las races es realmente las ubicaciones de todos los posibles polos de
bucle cerrado, del lugar de las races se puede seleccionar una ganancia tal Zue el
sistema de bucle cerrado se comporte de forma adecuada. Si alguno de los polos
seleccionados estn en el semiplano derecho el sistema en bucle cerrado ser
inestable. Los polos cercanos al eje imaginario son los Zue ejercen mayor influencia en
la respuesta del sistema en bucle cerrado, de tal forma Zue aunZue el sistema tenga
tres o cuatro polos actuar como si fuese un sistema de segundo o incluso de primer
orden dependiendo de la ubicacin de los polos dominantes.
Trazando eI Iugar de Ias races de una funcin de
transferencia
Considere un sistema en bucle abierto cuya funcin de transferencia sea
Cmo se puede disear un controlador para este sistema usando el mtodo del lugar
de las races? Digamos Zue nuestros criterios de diseo son un 5% de sobreimpulso y
un segundo de tiempo de subida. Cree un archivo de instrucciones denominado rl.m.
Escriba la funcin de transferencia y el comando para trazar el lugar de las races:
num=[1 7]; den=conv(conv([1 0],[1 5]),conv([1 15],[1 20]));
rlocus(num,den) ais([-22 3 -15 15])
SeIeccionar eI vaIor de K en eI Iugar de Ias races
El grfico anterior muestra las ubicaciones de todos los posibles polos de bucle cerrado
para un controlador proporcional. Obviamente no todos los polos de bucle cerrado
satisfacen los criterios de diseo. Para determinar Zue parte del lugar es aceptable
usamos el comando sgrid(Zeta,Wn) Zue traza las lneas de razn de amortiguamiento
y de frecuencia natural constante. Sus dos argumentos son la razn de
amortiguamiento (Zeta) y la frecuencia natural (Wn) [estos deben ser vectores si se
desea ver un rango de valores aceptables]. En nuestro problema, se necesita un
sobreimpulso del 5% (lo Zue representa un factor de amortiguamiento Zeta mayor de
0'7) y un tiempo de subida de un segundo (lo Zue representa una frecuencia natural Wn
mayor de 1'8). Escriba lo siguiente en la ventana de instrucciones de Matlab:
zeta=0.7; Wn=1.8; sgrid(zeta, Wn)
En la grfica anterior las dos lneas discontinuas de un ngulo de aproimadamente 45
grados indican la ubicacin de los polos con Zeta = 0.7; entre estas dos lneas, los
polos tienen Zeta > 0.7 y fuera de las lneas Zeta < 0.7. El semicrculo indica la
ubicacin de los polos con una frecuencia natural Wn = 1.8; dentro del crculo Wn < 1.8
y fuera del crculo Wn > 1.'8.
Volviendo a nuestro problema, para hacer el sobreimpulso menor Zue el 5% los polos
deben estar entre las dos lneas discontinuas y para hacer el tiempo de subida menor
Zue un segundo los polos deben estar fuera del semicrculo. As, ahora conocemos Zue
slo es aceptable la parte del lugar de las races comprendida entre las dos lneas y
fuera del semicrculo. Como todos los polos comprendidos en esta zona estn en el
semiplano izZuierdo, el sistema ser estable en bucle cerrado.
En el grfico anterior se observa como hay parte del lugar de las races en la regin
deseada. As en este caso slo se necesita un controlador proporcional para situar los
polos en la regin deseada. Se puede usar el comando Matlab rlocfind para elegir la
ubicacin de los polos deseados:
[kd,poles] = rlocfind(num,den)
Pulse en la grfica el punto en el Zue desee ubicar los polos de bucle cerrado. Debe
seleccionar aZuellos puntos del grfico anterior Zue satisfacen los criterios de diseo.
Tenga en cuenta Zue como el lugar de las races tiene ms de una rama, cuando se
selecciona un polo, se muestran donde estn los otros polos. Recuerde Zue ellos
tambin influyen en la respuesta. En el grfico anterior se observa Zue todos los polos
seleccionados (todas las marcas "+") estn en posiciones razonables. Continuemos y
usemos la ganancia kp seleccionada en nuestro controlador proporcional.
Respuesta de bucIe cerrado
Para obtener la respuesta ante una entrada en escaln se necesita conocer la funcin
de transferencia de bucle cerrado. Se puede hallar utilizando las reglas del lgebra de
bloZues o dejar Zue Matlab lo haga por nosotros:
[numCL, denCL] = cloop((kd)*num, den)
Los dos argumentos de la funcin cloop son el numerador y el denominador del sistema
en bucle abierto. Se debe incluir la ganancia proporcional Zue previamente se ha
elegido. Se supone realimentacin unitaria.
Si tiene un esZuema de realimentacin no unitaria puede usar la funcin Matlab
feedback Zue calcula la funcin de transferencia de bucle cerrado con una ganancia en
el bucle de realimentacin.
Comprobemos la respuesta del sistema en bucle cerrado ante un escaln unitario:
step(numCL,denCL)
Como se esperaba, esta respuesta tiene un sobreimpulso menor del 5% y un tiempo de
subida menor de 1 segundo.
-

?

Manual de Anlisis y Diseo de la
Respuesta en Frecuencia
Las funciones de Matlab usadas en este manual son: bode, nyZuist, nyZuist1, lnyZuist, margin, lsim,
step, y cloop
El mtodo de la respuesta en frecuencia puede Zue sea menos intuitivo Zue los otros
mtodos estudiados anteriormente. Sin embargo, presenta ciertas ventajas, sobre todo
en situaciones de la vida cotidiana tales como cuando se desea modelar una funcin de
transferencia a partir de datos eperimentales.
La respuesta en frecuencia de un sistema puede verse de dos formas distintas:
utilizando el diagrama de Bode o utilizando el diagrama de NyZuist. Ambos mtodos
muestran la misma informacin; la diferencia reside en la distinta forma de mostrarla.
Ambos mtodos se estudiarn en este manual.
La respuesta en frecuencia es una representacin de la respuesta del sistema ante
entradas sinusoidales de frecuencias variadas. La salida de un sistema lineal ante una
entrada sinusoidal es una sinusoide de la misma frecuencia pero con diferente
magnitud y fase. La respuesta en frecuencia se define como la diferencia de magnitud
y la fase entre las entradas y las salidas sinusoidales. En este manual, veremos como
se puede usar la respuesta en frecuencia de bucle abierto de un sistema para predecir
su comportamiento en bucle cerrado.
Para representar grficamente la respuesta en frecuencia, se utiliza un vector de
frecuencias (Zue varia en frecuencia desde cero o "DC" hasta infinito) y se calcula el
valor de la funcin de transferencia de la planta en esas frecuencias. Si G(s) es la
funcin de transferencia del sistema en bucle abierto y w es el vector de frecuencias, se
representa G(j*w) en funcin de w. Como G(j*w) es un nmero complejo, se puede
representar su magnitud y su fase (diagrama de Bode) o su posicin en el plano
complejo (diagrama de NyZuist). Dispone de ms informacin en trazando la respuesta
en frecuencia.
Diagrama de Bode
Como se mencion anteriormente, el diagrama de Bode es una representacin de la
magnitud y la fase de G(j*w) (en el Zue el vector de frecuencias w slo contiene
frecuencias positivas). Para obtener el diagrama de Bode de una funcin de
transferencia, podemos usar la funcin bode de Matlab. Por ejemplo:
bode(50,[1 9 30 40])
muestra el diagrama de Bode de la funcin de transferencia:
50
-----------------------
s^3 + 9 s^2 + 30 s + 40
Observe los ejes de la grfica. La frecuencia se epresa en escala logartmica, la fase
en grados y la magnitud en decibelios.
Nota: Un decibeIio se define como 20*Iog
10
( |G(j*w| )
Margen de ganancia y de fase
Supongamos Zue tenemos el siguiente sistema:
donde K es una ganancia variable (constante) y G(s) es la planta en consideracin. El
margen de ganancia se define como el cambio reZuerido en la ganancia de bucle
abierto para llevar al sistema a la inestabilidad. Sistemas con mrgenes de ganancia
grande pueden soportar grandes cambios en los parmetros del sistema antes de
alcanzar la inestabilidad en bucle cerrado.
Tenga en cuenta que una ganancia unitaria en magnitud equivaIe a cero dB.
El margen de fase se define como el cambio en el desplazamiento de
fase en bucle abierto necesario para Zue el sistema de bucle cerrado se
haga inestable. El margen de fase tambin mide la tolerancia del sistema
a un retraso en el tiempo. Si se produce un retraso mayor Zue 180/Wpc en
el bucle (donde Wpc es la frecuencia a la Zue el desplazamiento de fase
es 180 grados), el sistema ser inestable en bucle cerrado. Este retraso
temporal puede verse como un bloZue adicional en la lnea directa del
diagrama de bloZues Zue aade fase al sistema sin alterar la magnitud. Es
decir, un retraso en el tiempo se puede epresar como un bloZue con
magnitud unitaria y una fase de w*retraso (en radianes/segundo).
Por ahora, no nos preocuparemos de donde viene todo esto y nos concentraremos en
identificar los valores de los mrgenes de ganancia y fase en un diagrama de Bode:
El margen de fase es la diferencia en fase entre la curva de fase y -180 en el punto
correspondiente a la frecuencia Zue nos proporciona una ganancia de 0 dB (frecuencia
de corte de la ganancia, Wgc). Del mismo modo, el margen de ganancia es la diferencia
entre la curva de magnitud y 0 dB en el punto correspondiente a la frecuencia Zue nos
proporciona una fase de -180 (frecuencia de corte de fase, Wpc).
El margen de fase tiene la ventaja de Zue no es necesario volver a trazar el diagrama
de Bode para calcularlo cuando se varia la ganancia. Ya Zue aadir ganancia slo
implica elevar la grfica de magnitud. Lo Zue eZuivale a desplazar el eje de la grfica de
magnitud. Hallar el margen de fase es sencillamente encontrar la nueva frecuencia de
corte y leer el nuevo margen a esa frecuencia. Por ejemplo, suponga Zue se ha
introducido la funcin bode(50,[1 9 30 40]). Y se ha obtenido la siguiente grfica:
Se puede ver Zue el margen de fase es aproimadamente 100. Suponga Zue se aade
una ganancia de 100, introduciendo la funcin bode(100*50,[1 9 30 40]). Se obtendr
la siguiente grfica (tenga en cuenta Zue se han cambiado los ejes para Zue la escala
sea la misma Zue el grfico anterior, el diagrama de Bode Zue usted obtenga puede no
tener eactamente la mismo forma, dependiendo de la escala Zue se est usando):
Como puede ver la grfica de la fase es idntica a la anterior, y la grfica de la
magnitud est desplazada hacia arriba 40 dB (una ganancia de 100). El margen de fase
es ahora de aproimadamente -60. Este es el mismo resultado Zue hubisemos
obtenido si hubiramos desplazado 40dB hacia abajo el eje y. ntntelo, eamine el
primer diagrama de Bode, encuentre la frecuencia a la Zue la magnitud corta a -40 dB, y
calcule el margen de fase. Debera de ser aproimadamente -60, la misma cantidad
obtenida del segundo diagrama de Bode.
Se pueden hallar directamente los mrgenes de fase y de ganancia utilizando la funcin
margin. Esta funcin Matlab devuelve los mrgenes de fase y de ganancia las
frecuencias de corte de fase y de ganancia y su representacin en un diagrama de
Bode.
margin(50,[1 9 30 40])
Frecuencia de ancho de banda
La frecuencia de ancho de banda se define como la frecuencia a la Zue la magnitud de
la respuesta de bucle cerrado es igual a -3 dB. Sin embargo, cuando se disea
utilizando la respuesta en frecuencia, se est interesado en predecir el funcionamiento
de bucle cerrado a partir de la respuesta de bucle abierto. As, se usar una
aproimacin a un sistema de segundo orden y diremos Zue el ancho de banda es la
frecuencia a la Zue la magnitud de la respuesta de bucle abierto est entre -6 y -7,5 dB,
considerando Zue la fase de la respuesta en frecuencia de bucle abierto est
comprendida entre -135 y -225.Para una demostracin ehaustiva de esta afirmacin
consulte un libro de teto.
Si desea ver como el ancho de banda de un sistema puede deducirse
matemticamente a partir del factor de amortiguamiento y la frecuencia natural no
amortiguada del sistema en bucle cerrado en la pgina Frecuencia de Ancho de banda
puede encontrar tanto las ecuaciones como algunos grficos significativos.
Para ilustrar la importancia del ancho de banda, se mostrar como la salida vara
dependiendo de la frecuencia de la seal de entrada. Se ver como el sistema es capaz
de seguir "razonablemente bien" las entradas sinusoidales con frecuencias menores
Zue Wbw (ancho de banda). Y como las entradas sinusoidales con frecuencias mayores
Zue Wbw son atenuadas (en magnitud) en un factor de 0,707 o mayor (y por supuesto
desplazadas en la fase).
Supongamos Zue la siguiente funcin de transferencia de bucle cerrado representa un
sistema:
1
---------------
s^2 + 0.5 s + 1
En primer lugar, hallemos el ancho de banda a partir de diagrama de Bode:
bode (1, [1 0.5 1 ])
Como esta es la representacin de la respuesta en frecuencia de la funcin de
transferencia en bucle cerrado, el ancho de banda ser la frecuencia correspondiente a
un ganancia de -3dB. De la grfica Zue es aproimadamente 1,4 rad/s. Tambin se
observa en la grfica Zue para una frecuencia de 0,3 rad/s, la salida sinusoidal tiene
una magnitud de uno y un retraso de fase de unos pocos grados respecto de la entrada.
Para una frecuencia de entrada de 3 rad/s, la magnitud de la salida es
aproimadamente -20 dB (o lo Zue es lo mismo 1/10 el valor de la entrada) y un desfase
de -180 (casi eactamente en el lmite de la fase). Usaremos la funcin lsim para
simular la respuesta del sistema ante entradas sinusoidales.
Primero, consideremos una entrada sinusoidal con una frecuencia menor que Wbw.
Debemos tener en mente Zue lo Zue pretendemos ver es el error en rgimen
estacionario. As, se modificarn los ejes para ver con claridad la respuesta en rgimen
estacionario (ignorando la respuesta transitoria).
w= 0.3;
num = 1;
den = [1 0.5 1 ];
t=0:0.1:100;
u = sin(w*t);
[y,] = lsim(num,den,u,t);
plot(t,y,t,u)
ais([50,100,-2,2])
Observe como la salida (azul) sigue bastante bien la entrada (morado); Zuizs, como se
esperaba, con unos pocos grados de retraso.
Sin embargo, si se establece la frecuencia de entrada a un valor mayor que Ia
frecuencia deI ancho de banda del sistema, se obtiene una salida muy distorsionada
(con respecto a la entrada):
w = 3;
num = 1;
den = [1 0.5 1 ];
t=0:0.1:100;
u = sin(w*t);
[y,] = lsim(num,den,u,t);
plot(t,y,t,u)
ais([90, 100, -1, 1])
Observe, de nuevo, como la magnitud es 1/10 el valor de la entrada, como se predijo, y
Zue est casi eactamente fuera de fase (retrasada 180 grados) de la entrada.
Eperimente representando respuestas para diferentes frecuencias w, y compruebe
como se corresponden con el diagrama de Bode.
Comportamiento en bucIe cerrado
Para predecir el comportamiento en bucle cerrado a partir de la respuesta en frecuencia
de bucle abierto, se necesita tener claro algunos conceptos:
El sistema debe ser estable en bucle abierto si se va a disear utilizando el
diagrama de Bode.
Si la frecuencia de corte de la ganancia es menor Zue la frecuencia de corte de
la fase (Wgc < Wpc), entonces el sistema en bucle cerrado ser estable.
Para sistemas de segundo orden, la razn de amortiguamiento en bucle cerrado
es igual al margen de fase dividido por 100 si el margen de fase est entre 0 y 60
grados. Se debe usar con cuidado esta regla si el margen de fase es mayor de
60 grados.
Para sistemas de segundo orden, eiste una relacin entre el factor de
amortiguamiento, ancho de banda y tiempo de establecimiento Zue se describe
en la pgina del ancho de banda.
Se puede aproimar muy groseramente la frecuencia natural con el ancho de
banda.
Utilicemos estos conceptos para disear un controlador para el sistema representado
en el siguiente diagrama:
En el Zue Gc(s) es el controlador y G(s) es:
10
----------
1.25s + 1
El diseo debe satisfacer los siguientes reZuisitos:
Error en rgimen estacionario nulo.
Sobreimpulso mimo menor del 40%.
Tiempo de establecimiento menor de 2 segundos.
Hay dos maneras de plantear el problema: grficamente o analticamente. Con Matlab
el enfoZue grfico es el ms adecuado. En primer lugar echemos un vistazo al
diagrama de Bode. Cree un archivo de instrucciones con el siguiente cdigo:
num = 10;
den = [1.25,1];
bode(num, den)
Hay algunas caractersticas del sistema Zue se pueden leer directamente en el
diagrama de Bode. En primer lugar, se puede ver Zue el ancho de banda es
aproimadamente 10 rad/s. Como el valor del ancho de banda es aproimadamente el
valor de la frecuencia natural (para un sistema de segundo orden de este tipo), el
tiempo de subida es 1,8/BW=1,8/10=1,8 segundos. Como esto es una aproimacin
grosera, podemos decir Zue el tiempo de subida es aproimadamente 2 segundos.
El margen de fase de este sistema es aproimadamente 95 grados. Esto corresponde a
un amortiguamiento de PM/100=95/100=0.95. Sustituyendo este valor en la epresin
Zue relaciona el sobreimpulso y el amortiguamiento (o consultando la grfica de esta
relacin), encontramos Zue el sobreimpulso correspondiente a este factor de
amortiguamiento es 1%. El sistema est cerca de ser sobreamortiguado.
El ltimo punto de inters es el error en rgimen estacionario. El error en rgimen
estacionario tambin puede leerse directamente del diagrama de Bode. Las constantes
(Kp, Kv y Ka) se localizan en la interseccin de la asntota de bajas frecuencias con la
lnea w=1. Slo etendiendo la lnea de bajas frecuencias hasta la lnea w=1. La
magnitud en este punto es la constante. Como el diagrama de Bode de este sistema a
bajas frecuencias es una lnea horizontal (pendiente cero), sabemos Zue el sistema es
de tipo cero. As, la interseccin es fcil de localizar. La ganancia es 20 dB (magnitud
10). Lo Zue significa Zue la constante de error tiene un valor de 10. Pulse aZu para ver
la tabla de los tipos de sistemas y las funciones de error. El error en rgimen
estacionario es 1/(1+Kp)= 1/(1+10)=0.091. Si nuestro sistema hubiese sido de tipo uno
en lugar de ser de tipo cero, la constante para el error en rgimen estacionario se
habra hallado de la siguiente manera.
Comprobemos nuestras predicciones observando la grfica de la respuesta ante un
escaln. Esto lo podemos hacer escribiendo las siguientes dos lneas de cdigo en la
ventana de instrucciones de Matlab.
[numc,denc] = cloop(num,den,-1);
step(numc,denc)
Como puede ver, nuestras predicciones eran bastante buenas. El sistema tiene un
tiempo de subida de aproimadamente 2 segundos, es sobreamortiguado y tiene un
error en rgimen estacionario de aproimadamente un 9%. Ahora necesitamos elegir un
controlador Zue nos permita alcanzar los reZuisitos. Elegimos un controlador P porZue
proporciona un error nulo en rgimen permanente para una entrada escaln. Tambin,
el controlador P tiene un cero. Lo cual aporta cierta fleibilidad al diseo para cumplir
los reZuisitos. Recuerde Zue un controlador P viene dado por:
K*(s+a)
Gc(s) = -------
s
Lo primero Zue tenemos Zue hacer es encontrar la razn de amortiguamiento
correspondiente a un 40% de sobreimpulso. Sustituyendo este valor en la ecuacin Zue
relaciona el sobreimpulso y la razn de amortiguamiento (o consultando una grfica de
esta relacin), se obtiene Zue la razn de amortiguamiento correspondiente a ese
sobreimpulso es 0.28. As, el margen de fase debe ser de aproimadamente 30. De la
grfica de Ts*Wbw en funcin de la razn de amortiguamiento, se obtiene Zue Ts*Wbw
es aproimadamente 21. Se necesita un ancho de banda mayor o igual a 12 para
conseguir un tiempo de establecimiento menor Zue 1,75 segundos como indican los
reZuisitos del diseo.
Ahora Zue conocemos el margen de fase y el ancho de banda deseados, podemos
empezar el diseo. Recuerde Zue estamos trabajando con el diagrama de Bode de
bucle abierto. As, Zue el ancho de banda reZuerido ser la frecuencia a
aproimadamente -7 dB.
Veamos como la parte integral del controlador P afecta a la respuesta. ModifiZuemos el
archivo de instrucciones de la siguiente manera (esto aade el trmino integral pero no
el trmino proporcional):
num = [10];
den = [1.25, 1];
numPI = [1];
denPI = [1 0];
newnum = conv(num,numPI);
newden = conv(den,denPI);
bode(newnum, newden, logspace(0,2))
El margen de fase y el ancho de banda son muy peZueos. Hay Zue aadir ganancia y
fase con el cero. Situemos el cero en 1 por ahora y veamos lo Zue sucede.
ModifiZuemos el archivo de instrucciones como sigue:
num = [10];
den = [1.25, 1];
numPI = [1 1];
denPI = [1 0];
newnum = conv(num,numPI);
newden = conv(den,denPI);
bode(newnum, newden, logspace(0,2))
Resulta Zue el cero en 1 con una ganancia unitaria proporciona una resultado
satisfactorio. El margen de fase es mayor de 60 grados (incluso un sobreimpulso menor
de lo esperado) y un ancho de banda de aproimadamente 11 rad/s, con lo Zue se tiene
una respuesta satisfactoria. An siendo satisfactoria, la respuesta no es tan buena
como desearamos. As, Zue trataremos de aumentar el ancho de banda sin cambiar
demasiado la fase. ncrementemos la ganancia a 5 y veamos lo Zue ocurre. Esto har
Zue la magnitud se desplace y la fase permanezca igual.
num = [10];
den = [1.25, 1];
numPI = 5*[1 1];
denPI = [1 0];
newnum = conv(num,numPI);
newden = conv(den,denPI);
bode(newnum, newden, logspace(0,2))
Esto parece realmente bueno. Echemos un vistazo a la respuesta a un escaln y
comprobemos los resultados. Aada las siguientes dos lneas al archivo de
instrucciones:
[clnum,clden] =cloop(newnum,newden,-1);
step(clnum,clden)
Como puede ver, la respuesta es mejor de la Zue hubiramos esperado. Sin embargo,
no siempre se es tan afortunado y normalmente es necesario jugar con la ganancia y la
posicin de los polos y los ceros para conseguir los reZuisitos del diseo.
EI Diagrama de Nyquist
El diagrama de NyZuist permite predecir la estabilidad y el comportamiento del sistema
de bucle cerrado eaminando el comportamiento del sistema en bucle abierto. El criterio
de estabilidad de NyZuist puede usarse en el diseo sin tener en cuenta la estabilidad
del sistema en bucle abierto (tenga en cuenta Zue el mtodo de diseo de Bode supone
Zue el sistema es estable en bucle abierto). As, Zue usaremos este criterio para
determinar la estabilidad del sistema en bucle cerrado cuando el diagrama de Bode
muestre una informacin confusa. La siguiente animacin le ayudar a comprender la
relacin entre los diagramas de Bode y NyZuist.
Nota:
El comando de Matlab nyquist no proporciona una representacin adecuada
cuando el sistema tiene polos de bucle abierto en el eje imaginario. Es por lo Zue le
sugerimos Zue copie en su sistema el archivo de instrucciones nyZuist1.m . Este
archivo genera diagramas de NyZuist ms precisos, ya Zue tiene en cuenta los
polos y ceros en el eje jw.
El diagrama de NyZuist es bsicamente una grfica de G(j*w) donde G(s) es la funcin
de transferencia de bucle abierto y w es un vector de frecuencias Zue incluye
completamente el semiplano derecho. Al trazar el diagrama de NyZuist se tienen en
cuenta tanto las frecuencias positivas como las negativas (desde cero a infinito) El
vector de frecuencias utilizado para trazar el diagrama de NyZuist se puede representar
de la siguiente manera (debe imaginar Zue el diagrama se etiende hasta el infinito):
La animacin muestra como el vector de frecuencias contribuye al
diagrama de NyZuist.
Sin embargo, si se tienen polos o ceros de bucle abierto en el eje jw, G(s) no est
definida en esos puntos, y es preciso rodearlos cuando trazamos el contorno. Este
contorno se representa de la siguiente manera:
Por favor, tenga en cuenta Zue el contorno rodea al polo en el eje jw. Como se
mencion anteriormente, el comando nyquist de Matlab no tiene en cuenta los polos y
ceros en el eje jw por lo Zue genera diagramas incorrectos. Para corregir este
inconveniente utilice el archivo nyZuist1.m. Si hay polos o ceros en el eje jw,
utilizaremos nyquist1. Si no hay polos o ceros en el eje jw o si hay cancelacin de polos
y ceros, se pueden utilizar tanto el comando nyquist como el comando nyZuist1.m.
EI criterio de Cauchy
El criterio de Cauchy (para anlisis complejo) establece Zue si se toma un contorno
cerrado en el plano complejo y se transforma utilizando la funcin compleja G(s),
entonces el nmero de rodeos alrededor del origen de la grfica de G(s) es igual al
nmero de ceros menos el nmero de polos de la funcin G(s) Zue estn incluidos
dentro del contorno. Los rodeos en torno al origen se consideran positivos si tienen el
mismo sentido Zue el contorno original y negativos si tienen sentido contrario.
En el estudio de sistemas de control no es de inters el estudio de G(s) sino el estudio
de la funcin de transferencia de bucle cerrado:
G(s)
---------
1 + G(s)
Si 1+G(s) rodea el origen, G(s) rodea el punto -1. Como estamos interesados en el
estudio de la estabilidad del sistema en bucle cerrado, Zueremos conocer si hay algn
polo de bucle cerrado (ceros de 1+G(s)) en el semiplano derecho. Esto se analizar
ms detalladamente posteriormente.
As, el comportamiento del diagrama de NyZuist en torno al punto -1 del eje real es muy
importante; sin embargo, los ejes estndar de la grfica obtenida con la funcin nyquist
puede llegar a hacer muy difcil observar Zu ocurre en torno a este punto. La funcin
lnyZuist.m muestra la grfica del diagrama de NyZuist usando una escala logartmica lo
cual corrige este defecto manteniendo las caractersticas de su comportamiento en
torno al punto -1.
Para ver un diagrama de NyZuist sencillo, definamos la siguiente funcin de
transferencia y veamos la grfica:
0.5
-------
s - 0.5
nyquist (0.5,[1 -0.5])
Veamos ahora, el diagrama de NyZuist de la siguiente funcin de transferencia:
s + 2
-----
s^2
Tenga en cuenta Zue esta funcin tiene un polo en el origen. Veamos las diferencias
entre utilizar las funciones nyquist, nyquist1 y lnyquist en el caso de esta funcin.
nyquist([1 2], [1 0 0])
nyquist1([1 2], [1 0 0])
lnyquist1([1 2], [1 0 0])
Tenga en cuenta Zue la grfica correspondiente al comando nyquist no es correcta. La
correcta es la grfica correspondiente al comando nyquist1, pero en ella resulta difcil
determinar Zue ocurre en torno al punto -1. Por ltimo, en la grfica correspondiente al
comando lnyquist se muestra el diagrama de NyZuist correctamente y en una escala
apropiada.
EstabiIidad en bucIe cerrado
Considere el siguiente sistema con realimentacin negativa:
Recuerde Zue como establece el criterio de Cauchy el nmero N de veces Zue la
grfica G(s)H(s) rodea a -1 es igual al nmero de ceros Z menos el nmero de polos P
de la funcin 1+G(s)H(s) incluidos en el contorno de frecuencias (N=Z-P). Si analiza
cuidadosamente los numeradores y denominadores de las funciones de transferencia
de bucle abierto y bucle cerrado llegar a la conclusin de Zue:
Los ceros de 1+G(s)H(s) son los polos de la funcin de transferencia en bucle
cerrado.
Los polos de 1+G(s)H(s) son los polos de la funcin de transferencia en bucle
abierto.
El criterio de NyZuist establece Zue:
P = nmero de polos (inestables) de bucle abierto de G(s)H(s).
N = nmero de veces Zue el diagrama de NyZuist rodea a -1
los rodeos a -1 en el sentido de las agujas del reloj se consideran positivos
los rodeos en el sentido contrario a las agujas del reloj se consideran negativos
Z = nmero de polos en el semiplano derecho (positivos, reales) de bucle
cerrado del sistema.
Esta es la importante ecuacin Zue relaciona estas cantidades:

Nota:
Debe tener en cuenta Zue esto es slo un convenio del criterio de NyZuist.
Otro convenio establece Zue el nmero de rodeos al punto -1 en sentido
contrario al de las agujas del reloj se considere positivo. Como P y Z
permanecen inalterados, la ecuacin Zueda Z=P-N. En este manual se
usar el signo positivo para rodeos en el sentido de las agujas del reloj.
Es muy importante (y en cierto sentido un poco complicado) aprender a contar el
nmero de rodeos del diagrama a -1. As Zue analicemos esto con cierto detalle. La
siguiente animacin es un ejemplo.
Otra forma de verlo es imaginar Zue estamos situados encima del punto -1 y estamos
siguiendo el recorrido desde el principio al final. Entonces nos debemos preguntar
cuantas veces hemos girado la cabeza una vuelta completa. De nuevo, si el
movimiento es en el sentido de las agujas del reloj, N es positivo y si el movimiento es
en sentido contrario, N es negativo.
Sabiendo el nmero de polos de bucle abierto (P) en el semiplano derecho (inestables)
y el nmero de rodeos (N) del diagrama de NyZuist en torno al punto -1 se puede
determinar la estabilidad del sistema en bucle cerrado. Si Z = P + N es positivo el
sistema en bucle cerrado es inestable.
Tambin se puede utilizar el criterio de NyZuist para determinar el rango de la ganancia
de bucle abierto para el Zue el sistema en bucle cerrado con realimentacin unitaria es
estable. Comprobmoslo para el siguiente sistema:
donde G(s) es :
s^2 + 10 s + 24
---------------
s^2 - 8 s + 15
Este sistema dispone de una ganancia K Zue puede variarse para modificar la
respuesta del sistema de bucle cerrado. Sin embargo, si se desea asegurar la
estabilidad del sistema en bucle cerrado slo es posible modificar el valor de la
ganancia dentro de unos lmites. Esto es el Zue pretendemos hallar: el rango de
ganancias Zue hace Zue es sistema sea estable en bucle cerrado.
Lo primero Zue debemos hacer es hallar el nmero de polos reales positivos de la
funcin de transferencia de bucle abierto:
roots([1 -8 15])
-


Los polos de la funcin de transferencia en bucle abierto son ambos positivos. Por lo
tanto, se necesitan dos rodeos en sentido contrario a las agujas del reloj (N=-2) para
Zue el sistema sea estable (Z=P+N). Si el nmero de rodeos es menor Zue dos o son
en sentido de las agujas del reloj el sistema ser inestable.
Veamos el diagrama de NyZuist para una ganancia 1:
nyquist([ 1 10 24], [ 1 -8 15])
Hay dos rodeos al punto -1 en sentido contrario a las agujas del reloj por lo tanto el
sistema es estable para ganancia 1. Ahora, veamos como se comporta el sistema
cuando se incrementa la ganancia a 20:
nyquist(20*[ 1 10 24], [ 1 -8 15])
El diagrama se epande. As, sabemos Zue el sistema permanecer estable
independientemente de lo aumente el valor de la ganancia. Sin embargo, si
disminuimos la ganancia, el diagrama se comprimir y puede llegar a ser inestable.
Veamos Zue ocurre con ganancia 0.5:
nyquist(0.5*[ 1 10 24], [ 1 -8 15])
El sistema es ahora inestable. Por prueba y error se puede determinar Zue este sistema
es inestable para ganancias menores de 0.80. Se puede verificar este hecho ampliando
la grfica del diagrama de NyZuist as como observando la respuesta ante un escaln
del sistema para las ganancias 0.79, 0.80 y 0.81.
Si tiene problemas a la hora de contar los rodeos en el diagrama de NyZuist le
sugerimos use el comando nyquist1. El nmero de rodeos contrario a las agujas del
reloj se muestra en la pantalla. (Recuerde Zue este nmero representa realmente el
valor de N cambiado de signo, por ejemplo, si nyZuist1 muestra 2, N=-2) as como el
nmero de polos de bucle abierto con parte real positiva.
Margen de ganancia
Se ha definido previamente el margen de ganancia como el cambio de la ganancia de
bucle abierto, epresado en decibelios (dB), necesario para hacer al sistema inestable.
Ahora veamos de donde viene. En primer lugar, digamos Zue tenemos un sistema es
estable si no rodea a -1, como:
50 ----------------------- s^3 + 9 s^2 + 30 s + 40
Eaminando sus races, encontramos Zue no tiene ningn polo de bucle abierto en el
semiplano derecho por lo tanto ningn polo de bucle cerrado en el semiplano derecho si
no rodea al punto -1. Pero, Cunto se puede variar la ganancia antes de Zue el
sistema se vuelva inestable? Fijmonos en la siguiente figura:
El sistema de bucle abierto representado en esta grfica ser inestable en bucle
cerrado si la ganancia se eleva por encima de cierto valor. La distancia del eje real
negativo entre -1/a (definido como el punto en el Zue el desplazamiento de fase alcanza
180, es decir donde el diagrama corta al eje real) y -1 representa la cantidad de
incremento de ganancia Zue puede tolerar el sistema antes de llegar a la inestabilidad
en bucle cerrado.
Si refleionamos sobre esto, nos damos cuenta Zue si la ganancia es
eactamente a, el diagrama toca el punto -1:
G(jw) = -1/a = a*G(jw) = a* -1/a => a*G(jw) = -1
Es por lo Zue decimos Zue el margen de ganancia es 'a' unidades. Sin embargo,
anteriormente dijimos Zue el margen de ganancia se epresa normalmente en
decibelios. Por lo tanto el margen de ganancia es:
GM = 20*log10(a) [dB]
Ahora podemos averiguar el margen de ganancia de la anterior funcin de transferencia
estable en bucle abierto:
50 ----------------------- s^3 + 9 s^2 + 30 s + 40
y el diagrama de NyZuist se puede hallar escribiendo:
nyquist (50, [1 9 30 40 ])
Como se discuti anteriormente, todo lo Zue se tiene Zue hacer para hallar el margen
de ganancia es encontrar a, definida en la figura anterior. Para encontrar a, hay Zue
encontrar el punto eacto en el Zue el desplazamiento de fase es 180 grados. Lo Zue
significa Zue el valor de la ganancia en ese punto es real (sin parte imaginaria). El
numerador es siempre real, as Zue miremos en el denominador. Cuando s=j*w, los
nicos trminos en el denominador Zue tienen parte imaginaria son aZuellos Zue tienen
potencia impar de s. As, Zue para Zue G(j*w) sea real, tenemos Zue:
-j w^3 + 30 j w = 0
lo Zue Zuiere decir Zue w=0 (este es el punto ms a la derecha del diagrama de
NyZuist) o w=sZrt(30). Podemos hallar el valor de G(jw) en este punto usando la funcin
polyval:
polyval(50,j*w)/polyval([1 9 30 40],j*w)
La respuesta es: -0.2174 +0i. La parte imaginaria es cero, por lo Zue sabemos Zue la
respuesta es correcta. Podemos verificarlo mirando de nuevo el diagrama de NyZuist.
La parte real tambin tiene sentido. Ahora podemos hallar el margen de ganancia.
Hemos hallado Zue el desplazamiento de fase 180 grados ocurre en el punto -0.2174 +
0i. Este punto fue definido previamente como -1/a. Por lo tanto, ahora tenemos a. Sin
embargo, necesitamos epresarlo en decibelios,
-1/a = -0.2174 => a = 4.6 => GM = 20*log10( 4.6) = 13.26 dB
Ahora ya hemos calculado el margen de ganancia. Veamos como es de preciso usando
una ganancia de 4,6 y ampliando la imagen de la grfica del diagrama
a = 4.6
nyquist(a*50,[1 9 30 40])
La grfica parece pasar eactamente por -1. Podemos verificar la precisin del
resultado representando de forma ampliada los diagramas de NyZuist para las
ganancias 4.5, 4.6 y 4.7.
Margen de fase
Ya hemos mostrado la importancia del margen de fase, as Zue slo mencionaremos de
donde viene. Se ha definido el margen de fase como la variacin de fase en bucle
abierto necesaria para llevar al sistema a la inestabilidad. Echemos un vistazo al
siguiente grfico para tener una idea un poco mejor de lo Zue decimos.
Analicemos esta figura y pensemos acerca de lo Zue ocurre. Por el anlisis del ejemplo
anterior sabemos Zue este sistema ser inestable en bucle cerrado si el diagrama de
NyZuist rodea el punto -1. Sin embargo, nos podemos dar cuenta Zue si el diagrama se
desplaza theta grados tocar el punto -1 en el eje real, haciendo al sistema
marginalmente estable. As, el ngulo necesario para hacer un sistema marginalmente
estable es el margen de fase (epresado en grados). Para establecer el punto a partir
del cual se mide este ngulo, se traza un crculo de radio 1 para encontrar el punto del
diagrama de NyZuist con magnitud 1 (ganancia cero en dB) y se mide la fase necesaria
para Zue el ngulo de este punto sea 180 grados.
-

?
Lista de Funciones de Matlab
La siguiente lista de funciones puede serle muy til como referencia. Para obtener ms
informacin acerca de como se utilizan estas funciones utilice la ayuda "help" de
Matlab.
En estos manuales se utilizan tanto las funciones de Matlab como las funciones de
coleccin de funciones "Control Systems Toolbo", as como algunas funciones que
nosotros mismos hemos escrito. Se ofrecen enlaces a pginas con la descripcin de
aquellas funciones no estndar. Para obtener ms informacin sobre como escribir
funciones Matlab vea la pgina ntroduccin a las funciones.
Nota: Las funciones Matlab de la coleccin de funciones "Control System Toolbo" se
muestran resaltadas en color rojo.
Las funciones Matlab no estandar se muestran resaltadas en color verde.
Funcin Descripcin
abs Valor absoluto
acker Calcula la matriz K con los polos de A-BK, ver place
ais Establece la escala del grfico actual, ver plot, figure
bode Traza un diagrama de Bode, ver logspace, margin, nyquist1
c2dm De sistema continuo a discreto
clf Borrar figura (use clg para Matlab 3.5)
cloop Funcin de transferencia de bucle cerrado
conv Convolucin (til para multiplicar polinomios), ver deconv
ctrb Matriz de controlabilidad, ver obsv
deconv Deconvolucin y divisin de polinomios, ver conv
det Halla el determinante de una matriz
dimpulse Respuesta impulsiva de un sistema lineal de tiempo discreto, ver dstep
dlqr
Disea un controlador lineal-cuadrtico para un sistema de tiempo
discreto, ver lqr
dlsim Simulacin de sistemas lineales de tiempo discteto, ver lsim
dstep Respuesta escaln de sistemas lineales de tiempo discreto, ver stairs
eig Calcula los autovalores de una matriz
eps Tolerancia numrica de Matlab
figure Crea una nueva figura o redefine la figura actual, ver subplot, ais
for For, ver loop
format Formato numrico (digitos significativos, eponente)
function Crea una funcin en un archivo de instrucciones
grid Dibuja una cuadrcula en la grfica actual
gtet Aade un teto al grfico actual, ver
help AYUDA!
hold Mantiene el grfico actual, ver figure
if Sentencia de ejecucin condicional
imag Devuelve la parte imaginaria de un nmero complejo, ver real
impulse
Respuesta impulsiva de un sistema lineal en tiempo continuo, ver step,
lsim, dlsim
input Solicita una entrada de usuario
inv Halla el inverso de una matriz
jgrid
Traza una cuadrcula de lneas de razn de amortiguamiento (zeta) y
tiempo de establecimiento (sigma) constantes, ver sgrid, sigrid, zgrid
legend Leyenda de un grfico
length Longitud de un vector, ver size
linspace Devuelve un vector espaciado linealmente
lnyquist Genera un diagrama de Nyquist en escala logarmica, ver also nyquist1
log logaritmo natural, tambin log10: logaritmo comn
loglog
Representacin grfica usando escala logarmica para ambos ejes, ver
semilog/semilogy
logspace Devuelve un vector espaciado logarmicamente
lqr Disea un regulador lineal cuadrtico para un sistema continuo, ver dlqr
lsim Simula un sistema lineal, ver step, impulse, dlsim.
margin
Devuelve el margen de ganancia, el margen de fase y las frecuencias
de corte, ver bode
norm Normaliza un vector
nyquist1
Traza un diagrama de Nyquist, ver lnyquist. Tenga en cuenta que este
comando se ha escrito para reemplazar el comando estandar de Matlab
nyquist para obtener diagramas de Nyquist ms precisos.
obsv Matriz de observabilidad, ver ctrb
ones Devuelve una matriz de unos, ver zeros
place Calcula la matriz K con los polos de A-BK, ver also acker
plot Traza un grfico, ver figure, ais, subplot.
poly Devuelve el polinomio caracterstico
polyadd Suma dos polimonios
polyval Evalua un polinomio
print mprime el grfico actual (en la impresora o en un archivo postscript)
pzmap Mapa de polos y ceros de un sistema lineal
rank Halla el nmero de filas o columnas independientes de una matriz
real Devuelve la parte real de un nmero complejo
rlocfind Halla el valor de k y los polos de un punto seleccionado
rlocus Traza un lugar de las races
roots Halla las races de un polinomio
rscale
Halla el factor de escala para un sistema con realimentacin del vector
de estado
set
Establece (gca, 'Xtick', ticks, 'Ytick', yticks) para controlar el nmero y
el espaciado de las marcas en los ejes
series
nterconein en serie de sistemas lineales temporalmente
independientes
sgrid
Genera una cuadrcula de lneas de razn de amortiguamiento (zeta) y
frecuencia natural (Wn) constantes, ver jgrid, sigrid, zgrid
sigrid
Genera una cuadrcula de lneas de tiempo de establecimiento (sigma)
constante, ver jgrid, sgrid, zgrid
Size Halla la dimensin de un vector o una matriz, ver length
Sqrt Raz cuadrada
ss2tf
De la representacin en espacio de estado a funcin de transferencia,
ver tf2ss
ss2zp De la representacin en espacio de estado a polo-cero, ver zp2ss
stairs Representacin grfica de un sistema discreto, ver dstep
step Traza la respuesta ante un escaln, ver impulse, lsim, dlsim.
subplot Divide una ventana grfica en partes, ver plot, figure
Tet Aade un teto al grfico actual, ver title, label, ylabel, gtet
tf2ss
De la representacin en funcin de transferencia a espacio de estado,
ver ss2tf
tf2zp De la representacin en funcin de transferencia a polo-cero, ver zp2tf
Title Aade un ttulo al grfico actual
wbw
Devuelve la frecuencia de ancho de banda partiendo de la razn de
amortiguamiento y el tiempo de subida o de establecimiento.
label/ylabel
Aade una etiqueta a los ejes horizontal/vertical del grfico actual, ver
title, tet, gtet
zeros Devuelve un vector o una matriz de ceros
zgrid
Traza una cuadrcula de lneas de razn de amortiguamiento (zeta) y
frecuencia natural (Wn) constantes, ver sgrid, jgrid, sigrid
zp2ss De la representacin en polo-cero a espacio de estado, ver ss2zp
zp2tf De la representacin en polo-cero a funcin de tranferencia, ver tf2zp
-

?
Convirtiendo entre Sistemas de
Representacin
Un sistema dinmico se describe normalmente en una de las siguientes tres maneras:
con un conjunto de ecuaciones de estado y sus correspondientes matrices, con una
funcin de transferencia con polinomios en el numerador y denominador o en trminos
de polos y ceros con una ganancia asociada. De vez en cuando es til pasar de una a
otra forma de representacin. Matlab puede hacer estas conversiones de forma rpida y
sencilla.
De espacio de estado a funcin de transferencia:
Para empezar suponga que tiene un conjunto de ecuaciones de estado y desea
convertirlas en una funcin de transferencia equivalente. Esto lo realiza la instruccin
[num,den] = ss2tf(A,B,C,D,iu)
Esta instruccin crea el numerador y el denominador de la funcin de transferencia para
la entrada iu-esima. Tenga en cuenta que en la mayora de los sistemas en este manual
slo hay una nica entrada y que por lo tanto no es necesario incluir el trmino "iu". Por
ejemplo, suponga que tiene el siguiente conjunto de ecuaciones de estado:
m=1000
b=50
u=500
Si desea convertir esto en una funcin de transferencia, slo necesita ejecutar el
siguiente archivo de instrucciones:
A = [0 1
0 -0.05];

B = [0;
0.001];

C = [0 1];

D = 0;

[num,den]=ss2tf(A,B,C,D)
La respuesta de Matlab en la ventana de instrucciones ser la siguiente:
num =

0 0.0010 0
den =

1.0000 0.0500 0
Esta es la manera en la que Matlab representa
0.001s + 0
------------------
s^2 + 0.05s + 0
Ahora ya tiene la funcin de transferencia que describe al sistema. Como puede ver
esta funcin es muy fcil de usar. Aqu tiene algunas notas acerca de ss2tf:
El numerador, num, tendr tantas filas como salidas (o filas de la matriz C).
El numerador y el denominador estn en orden descendentes de potencias de s.
Debe tener especial cuidado en comprobar el numerador y el denominador; los
ceros en el infinito pueden producir funciones de transferencia errneas.
Ceros en eI infinito
Este ltimo punto necesita alguna eplicacin adicional. Se dice que un sistema tiene
ceros en eI infinito si el lmite cuando s->infinito del valor de la funcin de transferencia
es cero; esto ocurre cuando se tienen ms polos que ceros. Puede ver esto en el lugar
de las races como asntotas que tienden a infinito (el nmero de asntotas es igual al
nmero de ceros en el infinito). Algunas veces Matlab trata estos ceros en sus clculos
como nmeros finitos de gran valor. Cuando esto ocurre, algunos de los coeficientes en
el numerador que deberan ser ceros terminan siendo nmeros muy pequeos. Esto no
bebera ser un gran inconveniente, pero puede causar errores al usar posteriormente la
funcin de transferencia. Debe comprobar sus funciones de transferencia y si incluye
trminos tales como 0.0000 que se suponen cero, volver a escribir el numerador en
Matlab.
Un buen ejemplo de esto es el siguiente conjunto de ecuaciones de estado:
Si introduce el siguiente cdigo en Matlab usando un archivo de instrucciones:
A = [0 1 0 0
0 -0.1818 2.6727 0
0 0 0 1
0 -4.545 31.1818 0];
B = [0
1.8182
0
4.5455];

C = [1 0 0 0
0 0 1 0];

D = [0 0];

[num,den]=ss2tf(A,B,C,D)
Obtendr la siguiente funcin de transferencia:
num =
0 0.0000 1.8182 -0.0000 -44.5460
0 0.0000 4.5455 0.0000 0
den =

1.0000 0.1818 -31.1818 -4.4541 0
Si observa el numerador, el primer y el ltimo elemento de cada fila es cero, mientras
que el segundo y el cuarto elemento de cada fila es 0.0000. Si nos fijamos
detenidamente en estos elementos veremos que no son eactamente cero sino
nmeros muy pequeos. Para ver esto, introduzca las siguientes instrucciones en la
ventana de instrucciones de Matlab: num(1,2), num(1,4), num(2,2) o num(2,4).
Obtendr una respuesta similar a la siguiente: 7.1054e-15, -6.2172e-15, 1.2434e-14, o
4.4409e-15. Observe las races de los polinomios del numerador usando
roots(num(1,:)) y ver como las races del numerador son casi infinito.
Esta inconsistencia numrica puede eliminarse aadiendo la siguiente lnea tras el
comando ss2tf para deshacerse de los nmeros que se supone no deberan aparecer:
num = [num(1,3) 0 num(1,5)
num(2,3) 0 num(2,5)];
Ahora se han reemplazado todos los nmeros pequeos por ceros. Asegurese siempre
de observar su funcin de transferencia y trate de comprender lo que significa antes de
usarla en el proceso de diseo.
De funcin de transferencia a espacio de estado:
La funcin inversa a ss2tf es la funcin tf2ss, que convierte una funcin de
transferencia de un sistema a su forma de variable de estado. La funcin se utiliza de la
siguiente manera:
[A,B,C,D] = tf2ss(num,den)
Un hecho importante a tener en cuenta es que aunque sea una nica funcin de
transferencia la que describe un sistema, puede haber mltiples ecuaciones de estado
para describir un sistema. La funcin tf2ss devuelve las matrices de la forma de variable
de estado en forma cannica. As, si se toma un conjunto de ecuaciones de estado, se
convierten a funcin de transferencia y se vuelven a convertir a la forma original, no se
obtendrn las mismas ecuaciones originales a menos que estuvieran inicialmente en
forma cannica.
Como ejemplo, tome el numerador y el denominador creado anteriormente y convirtalo
de nuevo a forma de variable de estado. Esto puede realizarlo con el siguiente cdigo
Matlab:
[A,B,C,D] = tf2ss(num,den)
Matlab debera mostrar como salida las siguientes matrices:
A =
-0.1818 31.1818 4.4541 0
1.0000 0 0 0
0 1.0000 0 0
0 0 1.0000 0

B =
1
0
0
0

C =
0 1.8182 0 -44.5460
0 4.5455 0 0
D =
0
0
Obviamente, esto no es el mismo conjunto de matrices que se usaron inicialmente, pero
el comportamiento entrada-salida del sistema si es el mismo. Hay infinitas maneras de
representar en la forma de variable de estado una funcin de transferencia dada;
Matlab elije la forma cannica. Los estados no tendrn el mismo significado que tenan
originalmente.
De espacio de estado y de funcin de transferencia a
poIos/ceros:
Adems hay otra tercera forma de representar un sistema dinmico, el modelo de polos
y ceros. Este modelo es bsicamente el mismo que el modelo de la funcin de
transferencia ecepto en que los polinomios se han factorizado y as todos los polos
estn en el denominador y los ceros estn en el numerador. La forma bsica se
asemeja a la siguiente:
Recuerde que para una funcin de transferencia tpica, el nmero n de polos es mayor
o igual que el nmero m de ceros. Matlab puede transformar tanto desde la forma de
variable de estado como desde la funcin de transferencia a la representacin en polos
y ceros. La funcin para obtener la representacin de un sistema en forma de polos y
ceros es:
[z,p,k] = tf2zp(num,den)
si tiene una funcin de transferencia, y:
[z,p,k] = ss2zp(A,B,C,D,iu)
si tiene un modelo en variable de estado.
De las dos maneras la funcin devuelve tres variables: z, p, k. La variable z contiene
todos los ceros en columnas. Habr una columna por cada fila en el numerador de la
funcin de transferencia o por cada salida y (filas en la matriz C). La variable p contiene
todos los polos en una columna. La variable k contiene en una columna los valores de
las ganancias. Las columnas tendrn tantas filas como filas tenga el numerador o
salidas y. Por ejemplo, use el modelo en variable de estado o la funcin de
transferencia anterior, introduzca uno de los siguientes archivos de instrucciones:
num = [1.8182 0 -44.5460;
4.5455 -7.4373 0];

den = [1 0.1818 -31.1818 6.4786 0];

[z,p,k] = tf2zp(num,den)
or
A = [0 1 0 0
0 -0.1818 2.6727 0
0 0 0 1
0 -4.545 31.1818 0];
B = [0
1.8182
0
4.5455];
C = [1 0 0 0
0 0 1 0];
D = [0
0];
[z,p,k]=ss2zp(A,B,C,D,1)
y obtenedr la siguiente salida:
z =
4.9498 1.6362
-4.9498 0
p =
0
0.2083
-5.7753
5.3851
k =
1.8182
4.5455
Hay dos columnas de ceros y por eso la matriz k tiene dos filas (una por cada columna).
De poIos/ceros a espacio de estado y funcin de
transferencia
Como ya habr supuesto si se tiene un sistema descrito en trminos de polos y ceros
se puede convertir a un modelo en variable de estado o a una funcin de transferencia.
Para obtener el modelo en variable de estado introduzca la siguiente instruccin:
[A,B,C,D] = zp2tf(z,p,k)
De nuevo es importante tener en cuenta que ms de un conjunto de matrices de
variable de estado puede describir un sistema. Las matrices que devuelve esta funcin
tambin estan en su forma cannica. Por ejemplo, tome las matrices z, p y k que acaba
de crear y convirtalas de nuevo a variable de estado:
[A,B,C,D] = zp2tf(z,p,k)
Debera obtener las siguientes matrices de espacio de estado:
A = -0.1818 31.1818 -6.4786 0
1.0000 0 0 0
0 1.0000 0 0
0 0 1.0000 0
B = 1
0
0
0
C = 0 1.8182 0 -44.5460
0 4.5455 -7.4373 0
D = 0
0
Dese cuenta de que estas matrices son las mismas que obtuvo al utilizar la funcin
tf2ss.
Para obtener la descripcin del sistema mediante una funcin de transferencia a partir
de su modelo de polos y ceros utilice la siguiente instruccin:
[num,den] = zp2tf(z,p,k)
Al convertir el mismo modelo de polos y ceros que anteriormente, debe obtener la
siguiente funcin de transferencia:
num = 0 0 1.8182 0 -44.5460
0 0 4.5455 -7.4373 0
den = 1.0000 0.1818 -31.1818 6.4786 0
Dese cuenta que esta es la misma funcin de transferencia con la que comenzamos.
-

?
ntroduccin a las Funciones Matlab
Cuando se introduce una funcin como roots, plot, o step en Matlab lo que se est
realmente haciendo es ejecutando un archivo de instrucciones con entradas y salidas
que se escribi para realizar una tarea especfica. Este tipo de archivo de instrucciones
es parecido a una rutina de un lenguaje de programacin en la que hay entradas
(parmetros que se le pasan al archivo de instrucciones) y salidas (valores que
devuelve el archivo de instrucciones) y un cuerpo con instrucciones que puede contener
variables locales. A estos archivos de instrucciones se les denomina en Matlab
funciones. Puede escribir sus propias funciones usando la funcin function.
La nueva funcin debe guardarse en un archivo con etensin '.m'. Este archivo debe
residir en el mismo directorio que el software de Matlab o en un directorio incluido en el
camino de bsqueda de Matlab. La primera lnea del archivo debe tener la siguiente
sintais:
function [salida1,salida2] = nombredearchivo(entrada1,entrada2,entrada3)
Una funcin puede tener tantas entradas, salidas y variables como necesite. Las lneas
siguientes contienen el teto que aparece cuando se invoca el comando help
nombredearchivo. Estas lneas son opcionales pero deben empezar por el carcter % de
la misma manera que las lneas de comentario de cualquier archivo de instrucciones.
Finalmente, tras el teto de ayuda se incluye el teto correspondiente a los
instrucciones de la funcin. Le sugerimos que comience con la lnea:
error(nargchk(,y,nargin));
Los parmetros e y representan el nmero mnimo y mimo de entradas que acepta
la funcin; si se introducen ms o menos entradas se produce un error.
Resulta un poco complicado escribir funciones y es necesario algo de prctica para
escribir una que logre el objetivo deseado. A continuacin se presenta como ejemplo la
funcin add.m.
function [var3] = add(var1,var2)
%add es una funcion Zue suma dos numeros
var3 = var1+var2;
Si guarda estas tres lneas como un archivo denominado "add.m" en el directorio de
Matlab, podr utilizarla escribiendo la siguiente lnea de comando:
y = add(3,8)
Obviamente, la mayora de las funciones son ms complicadas que esta mostrada aqu.
Este ejemplo slo muestra el aspecto bsico que debe tener una funcin. Eche un
vistazo a las funciones creadas para este manual que se enumeran a continuacin.
Para ver ejemplos ms sofisticados busque en la carpeta que contiene el software de
Matlab o obtenga ms informacin ejecutando help function.
Funciones creadas para estos manuaIes
jgrid.m | lnyquist.m | nyquist1.m | polyadd.m | rscale.m | sigrid.m | wbw.m
Function jgrid:
Plotting the damping and sigma requirements on the root locus
Below is the function jgrid.m. This function will plot the damping and sigma
requirements on the same graph as another plot, such as an rlocus. To use jgrid.m in
matlab enter jgrid(zeta,sigma). Copy the following tet into a file jgrid.m, and put it in
the same directory as the Matlab software, or in a directory which is contained in
Matlab's search path.
function[ ] = jgrid(zeta,sigma)
%JGRID Generate s-plane grid lines for a root locus or pole-zero map.
%
% JGRID generates a grid over an eisting continuous s-plane root
% locus or pole-zero map. Lines of constant damping ratio (zeta)
% and sigma are drawn in.
%
% See also: RLOCUS, ZGRID, SGRID, and PZMAP.
error(nargchk(2,2,nargin));
status = ishold;
hold on
%Plot sigma line
limits = ais;
for i = 1:30*ma(limits(:)),
sl(i) = 1;
end
[w,z] = meshgrid(sigma,sl);
re = -w.*z;
[mcols, nrows] = size(z);
im = 0.1:0.1:3*ma(limits(:));
plot(re,im,'w:',re,-im,'w:');
hold on
%Plot damping lines
[w,z] = meshgrid([0;sigma(:);2*ma(limits(:))]',zeta);
re = -w.*z;
[mcols, nrows] = size(z);
im = w.*sZrt( ones(mcols,nrows) -z.*z);
plot(re',im','w:',re',-im','w:');
if (~status), hold off, end
Funcin lnyquist:
Traza el diagrama de Nyquist en una escala logartmica en base 2
A continuacin se muestra la funcin lnyquist1.m. Esta funcin es una versin
modificada del comando Matlab nyquist; tiene los mismos argumentos que la funcin
original con algunas mejoras. Lnyquist.m traza
(log2(1 + |G(jw)|), angle(G(jw)))
en coordenadas polares. Tomando el logaritmo de la magnitud, la escala de la magnitud
se comprime con lo que el diagrama de Nyquist es ms sencillo de leer en la pantalla.
Se usa el logaritmo en base 2 y se suma uno a la magnitud para mantener las
caractersticas del diagrama de Nyquist en torno al punto clave -1.
Lnyquist tambin tiene en cuenta los polos en el eje imaginario cuando genera el
diagrama de Nyquist y los redea. Ms an, esta funcin escribe en la pantalla el nmero
de polos de bucle abierto en el semiplano derecho, el nmero de rodeos en sentido
contrario a las agujas del reloj y el nmero de polos de bucle cerrado en el semiplano
derecho.
Copie el siguiente teto en un archivo denominado nyquist1.m abriendo el documento
original (Hemos teniodo algunos errores curiosos al copiar el teto desde la ventana del
navegador), colquelo en la misma carpeta que la aplicacin Matlab o en una carpeta
incluida en el camino de bsqueda de Matlab.
function [reout,imt,w] = lnyZuist(a,b,c,d,iu,w)
%LNYQUIST NyZuist freZuency response for continuous-time linear systems.
%
% This Versin of the LNYQUIST Command takes into account poles at the
% jw-ais and loops around them when creating the freZuency vector in
order
% to produce the appropriate NyZuist Diagram (The NYQUIST command does
% not do this and therefore produces an incorrect plot when we have
poles in the
% jw ais). As an added feature, this function outputs the number of
open loop right
% hand plane poles, the number of anti-clockwise encirclements, and the
number of
% closed loop right half plane poles on your screen.
%
% NOTE: This version of LNYQUIST does not account for pole-zero
% cancellation. Therefore, the user must simplify the transfer function
before using
% this command.
%LNYQUIST NyZuist freZuency response for continuous-time linear systems.
% NYQUIST(A,B,C,D,IU) produces a NyZuist plot from the single input
% IU to all the outputs of the system:
% . -1
% = A + Bu G(s) = C(sI-A) B + D
% y = C + Du RE(w) = real(G(jw)), IM(w) = imag(G(jw))
%
% The freZuency range and number of points are chosen automatically.
%
% LNYQUIST(NUM,DEN) produces the NyZuist plot for the polynomial
% transfer function G(s) = NUM(s)/DEN(s) where NUM and DEN contain
% the polynomial coefficients in descending powers of s.
%
% LNYQUIST(A,B,C,D,IU,W) or LNYQUIST(NUM,DEN,W) uses the user-supplied
% freZ. vector W which must contain the freZuencies, in radians/sec,
% at which the NyZuist response is to be evaluated. When invoked
% with left hand arguments,
% [RE,IM,W] = LNYQUIST(A,B,C,D,...)
% [RE,IM,W] = LNYQUIST(NUM,DEN,...)
% returns the freZuency vector W and matrices RE and IM with as many
% columns as outputs and length(W) rows. No plot is drawn on the
% screen.
% See also: LOGSPACE,MARGIN,BODE, and NICHOLS.
% J.N. Little 10-11-85
% Revised ACWG 8-15-89, CMT 7-9-90, ACWG 2-12-91, 6-21-92,
% AFP 2-23-93
% WCM 8-30-97
%
% ********************************************************************
% Modifications made to the nyZuist - takes into account poles on jw ais.
% then goes around these to make up freZuency vector
%
if nargin==0, eval('eresp(''nyZuist'')'), return, end
% --- Determine which synta is being used ---
if (nargin==1),
error('Wrong number of input arguments.');
elseif (nargin==2), % Transfer function form without freZuency vector
num = a; den = b;
w = freZint2(num,den,30);
[ny,nn] = size(num); nu = 1;
elseif (nargin==3), % Transfer function form with freZuency vector
num = a; den = b;
w = c;
[ny,nn] = size(num); nu = 1;
elseif (nargin==4), % State space system, w/o iu or freZuency vector
error(abcdchk(a,b,c,d));
w = freZint2(a,b,c,d,30);
[iu,nargin,re,im]=mulresp('nyZuist',a,b,c,d,w,nargout,0);
if ~iu, if nargout, reout = re; end, return, end
[ny,nu] = size(d);
elseif (nargin==5), % State space system, with iu but w/o freZ. vector
error(abcdchk(a,b,c,d));
w = freZint2(a,b,c,d,30);
[ny,nu] = size(d);
else
error(abcdchk(a,b,c,d));
[ny,nu] = size(d);
end
if nu*ny==0, im=[]; w=[]; if nargout~=0, reout=[]; end, return, end
% *********************************************************************
% depart from the regular nyZuist program here
% now we have a freZuency vector, a numerator and denominator
% now we create code to go around all poles and zeroes here.
if (nargin==5) | (nargin ==4) | (nargin == 6)
[num,den]=ss2tf(a,b,c,d)
end
tol = 1e-6; %defined tolerance for finding imaginary poles
z = roots(num);
p = roots(den);
% ***** If all of the poles are at the origin, just move them a tad to the
left***
if norm(p) == 0
length_p = length(p);
p = -tol*ones(length_p,1);
den = den(1,1)*[1 tol];
for ii = 2:length_p
den = conv(den,[1 tol])
end
end
zp = [z;p]; % combine the zeros and poles of the system
nzp = length(zp); % number of zeros and poles
ones_zp=ones(nzp,1);
%Ipo = find((abs(real(p))=0)) %inde poles with zero real part + non-neg imag
part
Ipo = find((abs(real(p)) < tol) & (imag(p)>=0)); %inde poles with zero real
part + non-neg imag part
if ~isempty(Ipo) %
% **** only if we have such poles do we do the
following:*************************
po = p(Ipo); % poles with 0 real part and non-negative imag part
% check for distinct poles
[y,ipo] = sort(imag(po)); % sort imaginary parts
po = po(ipo);
dpo = diff(po);
idpo = find(abs(dpo)>tol);
idpo = [1;idpo+1]; % indees of the distinct poles
po = po(idpo); % only distinct poles are used
nIpo = length(idpo); % # of such poles
originflag = find(imag(po)==0); % locate origin pole
s = []; % s is our freZuency response vector
w = sZrt(-1)*w; % create a jwo vector to evaluate all freZuencies with
for ii=1:nIpo % for all Ipo poles
[nrows,ncolumns]=size(w);
if nrows == 1
w = w.'; % if w is a row, make it a column
end;
if nIpo == 1
r(ii) = .1;
else % check distances to other poles and zeroes
pdiff = zp-po(ii)*ones_zp % find the differences between
% poles you are checking and other poles and zeros
ipdiff = find(abs(pdiff)>tol) % ipdiff is all nonzero
differences
r(ii)=0.2*min(abs(pdiff(ipdiff))) % take half this difference
r(ii)=min(r(ii),0.1) % take the minimum of this diff.and .1
end;
t = linspace(-pi/2,pi/2,25);
if (ii == originflag)
t = linspace(0,pi/2,25);
end; % gives us a vector of points around each Ipo
s1 = po(ii)+r(ii)*(cos(t)+sZrt(-1)*sin(t)); % detour here
s1 = s1.'; % make sure it is a column
% Now here I reconstitute s - comple freZuency - and
% evaluate again.
bottomvalue = po(ii)-sZrt(-1)*r(ii); % take magnitude of imag part
if (ii == originflag) % if this is an origin point
bottomvalue = 0;
end;
topvalue = po(ii)+sZrt(-1)*r(ii); % the top value where detour stops
nbegin = find(imag(w) < imag(bottomvalue)); %
nnbegin = length(nbegin); % find all the points less than encirclement
if (nnbegin == 0)& (ii ~= originflag) % around jw root
sbegin = 0
else sbegin = w(nbegin);
end;
nend = find(imag(w) > imag(topvalue)); % find all points greater than
nnend = length(nend); % encirclement around jw root
if (nnend == 0)
send = 0
else send = w(nend);
end
w = [sbegin; s1; send]; % reconstituted half of jw ais
end
else
w = sZrt(-1)*w;
end
%end % this ends the loop for imaginary ais poles
% *************************************************************
% back to the regular nyZuist program here
% Compute freZuency response
if (nargin==2)|(nargin==3)
gt = freZresp(num,den,w);
else
gt = freZresp(a,b,c,d,iu,w);
end
% ***********************************************************
nw = length(gt);
mag = abs(gt); % scaling factor added
ang = angle(gt);
mag = log2(mag+1); % scale by log2(mag) throughout
for n = 1:nw
h(n,1) = mag(n,1)*(cos(ang(n,1))+sZrt(-1)*sin(ang(n,1)));
end; % recalculate G(jw) with scaling factor
gt = h;
% ***********************************************************
ret=real(gt);
imt=imag(gt);
% If no left hand arguments then plot graph.
if nargout==0,
status = ishold;
plot(ret,imt,'r-',ret,-imt,'g--')
% plot(real(w),imag(w))
% modifications added here
% ****************************************
% modifications added here to count encirclements
[numc,denc] = tfchk(num,den);
% create the + and - reflection of G(jw) on imag ais
gw = [(ret + j*imt); numc(1)/denc(1); (flipud(ret) - j*flipud(imt))];
%
%look at G(jw)
[Ngw,Mgw] = size(gw); % size of evaluated G(jw)
gwp1 = gw + ones(Ngw,Mgw);
% moves origin from 0 to -1, so we
% can count encirclements around -1 now
initial_angle = rem(180/pi*angle(gwp1(1)) + 360, 360);
% define initial angle
angle_gwp1 = rem(180/pi*angle(gwp1) - initial_angle + 720,360);
% angle from origin for all points
dagw = diff(angle_gwp1);
% subtract off initial angle find degrees of encirclement
tolerance = 180;
% define tolerance - where encirclement counter "flips" over
Ipd = find(dagw < -tolerance);
% number of anti-clockwise encirclements
Ind = find(dagw > tolerance);
% number of clockwise encirclemtents
Nacw = ma(size(Ipd)) - ma(size(Ind)); % number of encirclements
% NyZuist Criterion says Z = P - N
P = length(find(p>0))
disp('P = number of Open loop poles in rhp');
N = Nacw
disp('N = number of anti-clockwise encirclements')
Z = P - N %
disp('Z = number of closed loop poles in rhp')
%*******************************************
set(gca, 'YLimMode', 'auto')
limits = ais;
% Set ais hold on because net plot command may rescale
set(gca, 'YLimMode', 'auto')
set(gca, 'XLimMode', 'manual')
hold on
% Make arrows
for k=1:size(gt,2),
g = gt(:,k);
re = ret(:,k);
im = imt(:,k);
s = limits(2) - limits(1);
[sy,sample]=ma(abs(2*im));
arrow=[-1;0;-1] + 0.75*sZrt(-1)*[1;0;-1];
sample=sample+(sample==1);
reim=diag(g(sample,:));
d=diag(g(sample+1,:)-g(sample-1,:));
% Rotate arrow taking into account scaling factors s and sy
d = real(d)*sy + sZrt(-1)*imag(d)*s;
rot=d./abs(d); % Use this when arrow is not horizontal
arrow = ones(3,1)*rot'.*arrow;
scale = (ma(real(arrow)) - min(real(arrow)))*s/50;
scaley = (ma(imag(arrow)) - min(imag(arrow)))*sy/50;
arrow = real(arrow)*scale + sZrt(-1)*imag(arrow)*scaley;
y =ones(3,1)*reim' + arrow;
y2=ones(3,1)*reim' - arrow;
[m,n]=size(g);
hold on
plot(real(y),-imag(y),'r-',real(y2),imag(y2),'g-')
end
label('Real Ais'), ylabel('Imag Ais')
limits = ais;
% Make cross at s = -1 + j0, i.e the -1 point
if limits(2) >= -1.5 & limits(1) <= -0.5 % Only plot if -1 point is not
far out.
line1 = (limits(2)-limits(1))/50;
line2 = (limits(4)-limits(3))/50;
plot([-1+line1, -1-line1], [0,0], 'w-', [-1, -1], [line2, -line2], 'w-
')
end
% Ais
plot([limits(1:2);0,0]',[0,0;limits(3:4)]','w:');
if ~status, hold off, end % Return hold to previous status
return % Suppress output
end
%reout = ret;
% plot(real(p),imag(p),'',real(z),imag(z),'o');
Funcin nyquist1:
Traza la respuesta en frecuencia de Nyquist para sistemas lineales de
tiempo continuo
A continuacin se muetra la funcin nyquist1.m. Esta funcin es una versin modificada
del comando nyquist; tiene los mismos argumentos que la funcin original con algunas
mejoras. Nyquist1.m tiene en cuenta los polos en el eje imaginario cuando genera el
diagrama de Nyquist y los rodea. Ms an esta funcin escribe en la pantalla el nmero
de polos de bucle abierto en el semiplano derecho, el nmero de rodeos en sentido
contrario a las agujas del reloj y el nmero de polos de bucle cerrado en el semiplano
derecho.
Copie el siguiente teto en un archivo denominado nyquist1.m y colquelo en la misma
carpeta que la aplicacin Matlab o en una carpeta incluida en el camino de bsqueda
de Matlab. Asegrese de copiarlo desde el documento fuente. Hemos observado
algunos errores curiosos al copiar el teto desde la ventana del navegador.
function [reout,imt,w] = nyZuist1(a,b,c,d,iu,w)
%NYQUIST1 NyZuist freZuency response for continuous-time linear systems.
%
% This Verison of the NYQUIST Command takes into account poles at the
% jw-ais and loops around them when creating the freZuency vector in
order
% to produce the appropriate NyZuist Diagram (The NYQUIST command does
% not do this and therefore produces an incorrect plot when we have
poles in the
% jw ais). As an added feature, this function outputs the number of
open loop right
% hand plane poles, the number of anti-clockwise encirclements, and the
number of
% closed loop right half plane poles on your screen.
%
% NOTE: This version of NYQUIST1 does not account for pole-zero
% cancellation. Therefore, the user must simplify the transfer function
before using
% this command.
%NYQUIST1 NyZuist freZuency response for continuous-time linear systems.
% NYQUIST(A,B,C,D,IU) produces a NyZuist plot from the single input
% IU to all the outputs of the system:
% . -1
% = A + Bu G(s) = C(sI-A) B + D
% y = C + Du RE(w) = real(G(jw)), IM(w) = imag(G(jw))
%
% The freZuency range and number of points are chosen automatically.
%
% NYQUIST1(NUM,DEN) produces the NyZuist plot for the polynomial
% transfer function G(s) = NUM(s)/DEN(s) where NUM and DEN contain
% the polynomial coefficients in descending powers of s.
%
% NYQUIST1(A,B,C,D,IU,W) or NYQUIST(NUM,DEN,W) uses the user-supplied
% freZ. vector W which must contain the freZuencies, in radians/sec,
% at which the NyZuist response is to be evaluated. When invoked
% with left hand arguments,
% [RE,IM,W] = NYQUIST(A,B,C,D,...)
% [RE,IM,W] = NYQUIST(NUM,DEN,...)
% returns the freZuency vector W and matrices RE and IM with as many
% columns as outputs and length(W) rows. No plot is drawn on the
% screen.
% See also: LOGSPACE,MARGIN,BODE, and NICHOLS.
% J.N. Little 10-11-85
% Revised ACWG 8-15-89, CMT 7-9-90, ACWG 2-12-91, 6-21-92,
% AFP 2-23-93
% WCM 8-31-97
%
% ********************************************************************
% Modifications made to the nyZuist - takes into account poles on jw ais.
% then goes around these to make up freZuency vector
%
if nargin==0, eval('eresp(''nyZuist'')'), return, end
% --- Determine which synta is being used ---
if (nargin==1),
error('Wrong number of input arguments.');
elseif (nargin==2), % Transfer function form without freZuency vector
num = a; den = b;
w = freZint2(num,den,30);
[ny,nn] = size(num); nu = 1;
elseif (nargin==3), % Transfer function form with freZuency vector
num = a; den = b;
w = c;
[ny,nn] = size(num); nu = 1;
elseif (nargin==4), % State space system, w/o iu or freZuency vector
error(abcdchk(a,b,c,d));
w = freZint2(a,b,c,d,30);
[iu,nargin,re,im]=mulresp('nyZuist',a,b,c,d,w,nargout,0);
if ~iu, if nargout, reout = re; end, return, end
[ny,nu] = size(d);
elseif (nargin==5), % State space system, with iu but w/o freZ. vector
error(abcdchk(a,b,c,d));
w = freZint2(a,b,c,d,30);
[ny,nu] = size(d);
else
error(abcdchk(a,b,c,d));
[ny,nu] = size(d);
end
if nu*ny==0, im=[]; w=[]; if nargout~=0, reout=[]; end, return, end
% *********************************************************************
% depart from the regular nyZuist program here
% now we have a freZuency vector, a numerator and denominator
% now we create code to go around all poles and zeroes here.
if (nargin==5) | (nargin ==4) | (nargin == 6)
[num,den]=ss2tf(a,b,c,d)
end
tol = 1e-6; %defined tolerance for finding imaginary poles
z = roots(num);
p = roots(den)
% ***** If all of the poles are at the origin, just move them a tad to the
left***
if norm(p) == 0
length_p = length(p);
p = -tol*ones(length_p,1);
den = den(1,1)*[1 tol];
for ii = 2:length_p
den = conv(den,[1 tol])
end
end
zp = [z;p]; % combine the zeros and poles of the system
nzp = length(zp); % number of zeros and poles
ones_zp=ones(nzp,1);
%Ipo = find((abs(real(p))=0)); %inde poles with zero real part + non-neg imag
part
Ipo = find((abs(real(p))< tol) & (imag(p)>=0)); %inde poles with zero real
part + non-neg imag part
if ~isempty(Ipo) %
% **** only if we have such poles do we do the
following:*************************
po = p(Ipo); % poles with 0 real part and non-negative imag part
% check for distinct poles
[y,ipo] = sort(imag(po)); % sort imaginary parts
po = po(ipo);
dpo = diff(po);
idpo = find(abs(dpo)> tol);
idpo = [1;idpo+1]; % indees of the distinct poles
po = po(idpo); % only distinct poles are used
nIpo = length(idpo); % # of such poles
originflag = find(imag(po)==0); % locate origin pole
s = []; % s is our freZuency response vector
w = sZrt(-1)*w; % create a jwo vector to evaluate all freZuencies with
for ii=1:nIpo % for all Ipo poles
[nrows,ncolumns]=size(w);
if nrows == 1
w = w.'; % if w is a row, make it a column
end;
if nIpo == 1
r(ii) = .1;
else % check distances to other poles and zeroes
pdiff = zp-po(ii)*ones_zp % find the differences between
% poles you are checking and other poles and zeros
ipdiff = find(abs(pdiff)> tol)
% ipdiff is all nonzero differences
r(ii)=0.2*min(abs(pdiff(ipdiff))) % take half this difference
r(ii)=min(r(ii),0.1) % take the minimum of this diff.and .1
end;
t = linspace(-pi/2,pi/2,25);
if (ii == originflag)
t = linspace(0,pi/2,25);
end; % gives us a vector of points around each Ipo
s1 = po(ii)+r(ii)*(cos(t)+sZrt(-1)*sin(t)); % detour here
s1 = s1.'; % make sure it is a column
% Now here I reconstitute s - comple freZuency - and
% evaluate again.
bottomvalue = po(ii)-sZrt(-1)*r(ii); % take magnitude of imag part
if (ii == originflag) % if this is an origin point
bottomvalue = 0;
end;
topvalue = po(ii)+sZrt(-1)*r(ii); % the top value where detour stops
nbegin = find(imag(w) < imag(bottomvalue)); %
nnbegin = length(nbegin); % find all the points less than encirclement
if (nnbegin == 0)& (ii ~= originflag) % around jw root
sbegin = 0
else sbegin = w(nbegin);
end;
nend = find(imag(w) > imag(topvalue)); % find all points greater than
nnend = length(nend); % encirclement around jw root
if (nnend == 0)
send = 0
else send = w(nend);
end
w = [sbegin; s1; send]; % reconstituted half of jw ais
end
else
w = sZrt(-1)*w;
end
%end % this ends the loop for imaginary ais poles
% *************************************************************
% back to the regular nyZuist program here
% Compute freZuency response
if (nargin==2)|(nargin==3)
gt = freZresp(num,den,w);
else
gt = freZresp(a,b,c,d,iu,w);
end
% ***********************************************************
% nw = length(gt);
% mag = abs(gt); % scaling factor added
% ang = angle(gt);
% mag = log2(mag+1); % scale by log2(mag) throughout
% for n = 1:nw
% h(n,1) = mag(n,1)*(cos(ang(n,1))+sZrt(-1)*sin(ang(n,1)));
% end; % recalculate G(jw) with scaling factor
% gt = h;
% ***********************************************************
ret=real(gt);
imt=imag(gt);
% If no left hand arguments then plot graph.
if nargout==0,
status = ishold;
plot(ret,imt,'r-',ret,-imt,'g--')
% plot(real(w),imag(w))
% modifications added here
% ****************************************
% modifications added here to count encirclements
[numc,denc] = tfchk(num,den);
% create the + and - reflection of G(jw) on imag ais
gw = [(ret + j*imt); numc(1)/denc(1); (flipud(ret) - j*flipud(imt))];
%
%look at G(jw)
[Ngw,Mgw] = size(gw); % size of evaluated G(jw)
gwp1 = gw + ones(Ngw,Mgw);
% moves origin from 0 to -1, so we
% can count encirclements around -1 now
initial_angle = rem(180/pi*angle(gwp1(1)) + 360, 360);
% define initial angle
angle_gwp1 = rem(180/pi*angle(gwp1) - initial_angle + 720,360);
% angle from origin for all points
dagw = diff(angle_gwp1);
% subtract off initial angle find degrees of encirclement
tolerance = 180;
% define tolerance - where encirclement counter "flips" over
Ipd = find(dagw < -tolerance);
% number of anti-clockwise encirclements
Ind = find(dagw > tolerance);
% number of clockwise encirclemtents
Nacw = ma(size(Ipd)) - ma(size(Ind)); % number of encirclements
% NyZuist Criterion says Z = P - N
P = length(find(p>0))
disp('P = number of Open loop poles in rhp');
N = Nacw
disp('N = number of anti-clockwise encirclements')
Z = P - N %
disp('Z = number of closed loop poles in rhp')
%*******************************************
set(gca, 'YLimMode', 'auto')
limits = ais;
% Set ais hold on because net plot command may rescale
set(gca, 'YLimMode', 'auto')
set(gca, 'XLimMode', 'manual')
hold on
% Make arrows
for k=1:size(gt,2),
g = gt(:,k);
re = ret(:,k);
im = imt(:,k);
s = limits(2) - limits(1);
[sy,sample]=ma(abs(2*im));
arrow=[-1;0;-1] + 0.75*sZrt(-1)*[1;0;-1];
sample=sample+(sample==1);
reim=diag(g(sample,:));
d=diag(g(sample+1,:)-g(sample-1,:));
% Rotate arrow taking into account scaling factors s and sy
d = real(d)*sy + sZrt(-1)*imag(d)*s;
rot=d./abs(d); % Use this when arrow is not horizontal
arrow = ones(3,1)*rot'.*arrow;
scale = (ma(real(arrow)) - min(real(arrow)))*s/50;
scaley = (ma(imag(arrow)) - min(imag(arrow)))*sy/50;
arrow = real(arrow)*scale + sZrt(-1)*imag(arrow)*scaley;
y =ones(3,1)*reim' + arrow;
y2=ones(3,1)*reim' - arrow;
[m,n]=size(g);
hold on
plot(real(y),-imag(y),'r-',real(y2),imag(y2),'g-')
end
label('Real Ais'), ylabel('Imag Ais')
limits = ais;
% Make cross at s = -1 + j0, i.e the -1 point
if limits(2) >= -1.5 & limits(1) <= -0.5 % Only plot if -1 point is not
far out.
line1 = (limits(2)-limits(1))/50;
line2 = (limits(4)-limits(3))/50;
plot([-1+line1, -1-line1], [0,0], 'w-', [-1, -1], [line2, -line2], 'w-
')
end
% Ais
plot([limits(1:2);0,0]',[0,0;limits(3:4)]','w:');
if ~status, hold off, end % Return hold to previous status
return % Suppress output
end
%reout = ret;
% plot(real(p),imag(p),'',real(z),imag(z),'o');
Funcin Polyadd:
Adicin de dos vectores de diferente tamao
A continuacin se muestra la funcin polyadd.m. Esta funcin suma dos polinomios
incluso si no tienen el mismo tamao. Para usar polyadd.m en Matlab escriba
polyadd(poly1,poly2). Copie el siguiente teto en un archivo denominado polyadd.m y
gurdelo en el misma carpeta de la aplicacin Matlab o en una carpeta incluida en el
camino de bsqueda de Matlab. Esta funcin la escribi Justin Shriver de la Universidad
de Michigan.
function[poly]=polyadd(poly1,poly2)
%Copyright 1996 Justin Shriver
%polyadd(poly1,poly2) adds two polynominals possibly of uneven length
if length(poly1)<length(poly2)
short=poly1;
long=poly2;
else
short=poly2;
long=poly1;
end
mz=length(long)-length(short);
if mz>0
poly=[zeros(1,mz),short]+long;
else
poly=long+short;
end
Function rscale:
Finding the scale factor to eliminate the steady-state error
Below is the function rscale.m. This function will find the scale factor for a full-state
feedback system to eliminate the steady-state error. Copy the following tet into a file
rscale.m, and put it in the same directory as the Matlab software.
function[Nbar]=rscale(A,B,C,D,K)
% Given the single-input linear system:
% .
% = A + Bu
% y = C + Du
% and the feedback matri K,
%
% the function rscale(A,B,C,D,K) finds the scale factor N which will
% eliminate the steady-state error to a step reference
% using the schematic below:
%
% /---------\
% R + u | . |
% ---> N --->() ---->| X=A+Bu |--> y=C ---> y
% -| \---------/
% | |
% |<---- K <----|
%
%8/21/96 Yanjie Sun of the University of Michigan
% under the supervision of Prof. D. Tilbury
%
s = size(A,1);
Z = [zeros([1,s]) 1];
N = inv([A,B;C,D])*Z';
N = N(1:s);
Nu = N(1+s);
Nbar=Nu + K*N;
Function Sigrid
Plotting the sigma requirement on the root locus
Below is the function sigrid.m. This function will plot the sigma requirement on the
same graph as another plot, such as an rlocus. To use sigrid.m in Matlab enter
sigrid(sigma). Copy the following tet into a file sigrid.m, and put it in the same
directory as the Matlab software, or in a directory which is contained in Matlab's search
path.
function[ ] = sigrid(sig)
%SIGRID Generate s-plane grid lines for a root locus or pole-zero map.
%
% SIGRID generates a grid over an eisting continuous s-plane root
% locus or pole-zero map. Lines of constant sigma are drawn in.
% To be used with SGRID if sigma, zeta, and Wn reZuirements are reZuired
% simultaneously. Can also be used by itself.
%
% See also: RLOCUS, ZGRID, SGRID, JGRID, and PZMAP.
error(nargchk(1,1,nargin));
hold on
%Plot sigma line
limits = ais;
m=limits(1,4);
mn=limits(1,3);
stz=abs(m)+abs(mn);
st=stz/50;
im=mn:st:m;
lim=length(im);
for i=1:lim
re(i)=-sig;
end
re(:);
plot(re,im,'.')
hold off
return
Function wbw:
Finding the bandwidth frequency from the damping ratio and peak or
settling time
Below is the function wbw.m. This function will return the approimate bandwidth
frequency, given the damping ratio and the rise or settling time. To use wbw.m in Matlab,
enter wbw at the command line. You will be prompted for a damping ratio. You will then
be asked to enter 0 if you are using a settling time or 1 if you are using a peak time.
Finally you will be asked for the desired settling or peak time, and the bandwidth
frequency will be returned. Copy the following tet into a file wbw.m, and save it where
Matlab will be able to find it (such as in the directory that you run Matlab from).
function[] = wbw()
DR = input('Damping Ratio? ');
n = 0;
n = input('Settling Time(0) or Peak Time(1)? ');
if n == 0
ts = input('Settling Time? ');
temp1 = sZrt((4*DR^4) - (4*DR^2) +2);
temp2 = 1- (2*DR^2);
temp3 = 4/(ts*DR);
Wbw = temp3*sZrt(temp1 + temp2)
end
if n ==1
ts = input('Peak Time? ');
temp1 = sZrt((4*DR^4) - (4*DR^2) +2);
temp2 = 1- (2*DR^2);
temp3 = ts*sZrt( 1- DR^2);
temp4 = pi/temp3;
Wbw = temp4*sZrt(temp1 + temp2)
end

También podría gustarte