Vous êtes sur la page 1sur 90

1

UNIVERSIDAD MICHOACANA DE SAN NICOLAS DE HIDALGO


FACULTAD DE INGENIERIA ELECTRICA

LABORATORIO DE TEORIA DE CONTROL I

Prctica 1: ~Introduccin a MATLAB I

Objetivo:
El objetivo de esta practica es dar una introduccion al ambiente de trabajo de
Matlab.

Introduccin:
Matlab (Matrix Laboratory) es un lenguaje de programacion amigable al usuario para
hacer calculos numericos o matematicos con caracteristicas mas avanzadas y mucho mas
Iacil de usar que los lenguajes de computadoras tales como Basic, Pascal o C,
proporcionando un entorno rico para la visualizacion de datos a traves de sus poderosas
capacidades graIicas.

Matlab es una plataIorma de desarrollo de aplicaciones, donde conjuntos de
herramientas inteligentes (archivos de matlab) para la resolucion de problemas en areas
especiIicas, a menudo llamadas toolboxes, se pueden desarrollar con Iacilidad relativa. Las
areas en que los toolboxes estan disponibles incluyen Procesamiento de seales, Diseo de
sistemas de control, Simulacion de sistemas dinamicos, IdentiIicacion de sistemas, Redes
neuronales y otras.

Desarrollo:
Durante el desarrollo de esta practica se vera el Iuncionamiento del ambiente de
trabajo de Matlab, en cada uno de las explicaciones se dan ejemplos del Iuncionamiento del
ambiente de Matlab, se recomienda al alumno realice dichos ejemplos para su mejor
entendimiento.

Iniciando Matlab
Matlab para Windows puede iniciarse seleccionandolo desde el icono de Windows. Al
ejecutarse Matlab crea una ventana, donde aparece el prompt del Matlab "~~" indicando
que esta en espera de algun comando. De estas, la ventana de orden es el lugar Iundamental
2
desde donde se interacciona con Matlab. Esta ventana se muestra en la siguiente Figura.


Ventana principal de Matlab
Matemtica sencilla:
De la misma Iorma que una calculadora, Matlab oIrece las siguientes operaciones
aritmeticas basicas:
Operacion Simbolo Ejemplo
Suma 5 3
Resta - 23 - 12
multiplicacion * 20.5 *1.5
division / o \ 56 / 8 8 / 56
Potencia ` 5`2

Las expresiones se evaluan de izquierda a derecha, con la operacion de potencia
teniendo la orden de precedencia mas alta, seguida por la multiplicacion y division que
tienen ambas igual precedencia y seguidas Iinalmente por suma y resta que tienen ambas
igual precedencia. Se pueden emplear parentesis para alterar esta usual ordenacion.

Formato de visualizacin de nmeros
Los Iormatos de visualizacion de numeros no cambian la representacion interna de un
numero cuando se escogen diIerentes Iormatos; solo se modiIica la visualizacion del
numero.

3
Los Iormatos numericos son:

Orden de Matlab Constante 35.833 Comentario
Iormat long 35.83 16 digitos
Iormat short e 3.5833e01 5 digitos mas exponente
Iormat long e 3.583333333333334e01 16 digitos mas exponente
Iormat hex 4041eaaaaaaaaaab Hexadecimal
Iormat bank 35.83 2 digitos decimales
Iormat positivo, negativo o cero
Iormat rat 215/6 aproximacion racional
Iormat short 35.83 visualizacion por deIecto

Expresiones Fundamentales.
Trabajar en el entorno MATLAB es muy simple ya que la mayoria de los comandos
son ingresados de la misma manera que se lo haria matematicamente. Por ejemplo,
escribiendo:

>> a4/3
Dara como resultado:

>> a 1.3333

Por medio de este comando se le ha asignado el valor 1.3333 a la variable 'a. MATLAB
reconoce los primeros 19 caracteres de los nombres de las variables requiriendo solamente
que el nombre comience con una letra. Otra Particularidad es que MATLAB es sensible a
las mayusculas. En el caso de estar interesado solamente en el resultado de la expresion y
no en la asignacion del mismo a alguna variable, escribiendo:

>> 4/3

genera el siguiente resultado:

ans
1.3333

donde la variable 'ans es una variable interna utilizada por MATLAB para almacenar
resultados que no han sido asignado a ninguna otra variable. Notar que el contenido de
'ans cambia cada vez que una operacion como la antes mencionada es realizada. Por lo
4
tanto si Ud. considera que un resultado puede ser utilizado en subsiguientes calculos, es
conveniente guardarlo en alguna otra variable.
MATLAB tiene algunas variables predeIinidas como ser:
i, j \-1 pi a inI NaN ( Magnitud no numerica Not a Number, ej. 0/0) Como estas
variables pueden ser sobrescritas, se recomienda usarlas con cuidado ya que por ejemplo si
i o j se usan como indices de elementos de un vector o matriz y luego se desea realizar la
siguiente asignacion:

>> z 1 + 2`i (notar la manera de ingresar un no. complejo)

el resultado no sera el numero complejo esperado. Para restablecer el valor de i se puede
usar el comando clear i.

Ayuda en Lnea
MATLAB tiene un comando llamado help muy bien documentado. Escribiendo help,
MATLAB despliega un indice con aclaraciones que sirve para orientarse a la hora de
buscar algun comando en particular. Veamos un ejemplo:
Supongamos que se desea evaluar la siguiente expresion e
1+ j
3
escribiendo help obtenemos:

help

HELP topics:

toolbox\tutorial - (No table of contents file)
bin\work - (No table of contents file)
..
matlab\lang - Programming language constructs.
matlab\elmat - Elementary matrices and matrix manipulation.
matlab\elfun - Elementary math functions.
matlab\specfun - Specialized math functions.
matlab\matfun - Matrix functions - numerical linear algebra.


De donde podemos inIerir que la inIormacion que estamos buscando pude estar dentro de
los comandos agrupados en elementary math functions:

help elfun
Elementary math functions.

Trigonometric.
sin - Sine.
sinh - Hyperbolic sine.


Exponential.
5
exp - Exponential.
log - Natural logarithm.


Complex.
abs - Absolute value.
angle - Phase angle.


Rounding and remainder.
fix - Round towards zero.
floor - Round towards minus infinity.


Donde hallamos la Iuncion exp. Para Iinalmente saber como usar dicha Iuncion uno puede
escribir help exp. Para culminar con el ejemplo, la expresion seria:

>> exp(1+3*i)

Hasta aqui ya se sabe como buscar inIormacion sobre como usar los comandos de
MATLAB. Si se desea realizar algun calculo para el cual MATLAB no contiene una
Iuncion especiIica, se pueden crear las propias Iunciones. (Se realizara mas adelante
Creating Script Files y Creating Functions.)

Matrices y Vectores.
Las Matrices son el principal tipo de datos que maneja MATLAB. Comenzaremos
escribiendo una matriz como una lista de elementos. Solamente hay que seguir unas
convenciones basicas:

Separa los elementos de una Iila con espacios o comas.
Usar un; (punto y coma) para indicar el Iin de cada renglon (Iila).
Encerrar la lista entera de elementos con parentesis cuadrados, | |.

Por ejemplo al entrar la siguiente matriz Matlab muestra:

>> a=[ 1 2; 3 4]

que da el siguiente resultado

a =
1 2
3 4

Por otra parte una matriz de una sola fila es un vector:
>> b= [5 6]
b=
5 6
6

Para suprimir la salida en la pantalla cada vez que se asigna una variable use el operador ; al
final de la expresin:
>> b=[5 6];

Los elementos de una matriz pueden ser alguna expresion; por ejemplo:

x|-1. 3 sqrt(2) (123)*4/5|
x
-1.3000 1.4142 4.8000

Se pueden juntar dos matrices con mismo numero de columnas en una solo matriz; por
ejemplo:

A|1 2 3; 4 5 6;7 8 9|;R|10 11 12|;

B|A;R| Junta dos matrices
B
1 2 3
4 5 6
7 8 9
10 11 12

o extraer una submatriz de la matriz; por ejemplo:

CB(2:3,2:3) Obtiene una submatriz C de la matriz B; de la Iila 2 a la 3
C y de la columna 2 a la 3
5 6
8 9

Matlab permite el manejo de numeros complejos, donde la i f. Existen dos Iormas
de insertar matrices de numeros complejos las cuales producen el mismo resultado que son:

A|1 2; 3 4|i*|5 6; 7 8|; o bien A|15j 26j; 37j 48j|;
B|15i 26i; 37i 48i|; o bien B|15j 26j; 37j 48j|;

Se puede obtener inIormacion en el area de trabajo con who o whos; por ejemplo:

who
Your variables are:
7
A B C R x

o bien:

whos
Name Size Bytes Class
A 3x3 72 double array Cada elemento de una matriz real requiere
B 4x3 96 double array 8 bytes de memoria
C 2x2 32 double array
R 1x3 24 double array
x 1x3 24 double array
Grand total is 31 elements using 248 bytes Todas las variable ocupan 248 bytes

El operador :

>> v= [1: 0.5:3] Genera un vector con elementos de 1 a 3 con incremento de 0.5
v=
1 1.5 2 2.5 3

Guardar variables y estados de una sesin: Comandos save y load
En muchas ocasiones puede resultar interesante interrumpir el trabajo con MATLAB y
poderlo recuperar mas tarde en el mismo punto en el que se dejo (con las mismas variables
deIinidas, con los mismos resultados intermedios, etc.). Hay que tener en cuenta que al salir
del programa todo el contenido de la memoria se borra automaticamente.

Para guardar el estado de una sesion de trabajo existe el comando save. Si se teclea:

save

Dicho estado puede recuperarse la siguiente vez que se arranque el programa con el
comando:

load

Se pueden guardar tambien matrices y vectores de Iorma selectiva y en Iicheros con
nombre especiIicado por el usuario. Por ejemplo, el comando (sin comas entre los nombres
de variables):

8
save Iilename A x y

guarda las variables A, x e y en un Iichero binario llamado filename.mat (o filename). Para
recuperarlas en otra sesion basta teclear:

load Iilename

Si no se tiene ninguna variable, se guardan todas las variables creadas en esa sesion.

Guardar sesin y copiar salidas: Comando diary
Los comandos save y load crean Iicheros binarios o ASCII con el estado de la sesion.
Existe otra Iorma mas sencilla de almacenar en un Iichero un texto que describa lo que el
programa va haciendo (la entrada y salida de los comandos utilizados). Esto se hace con el
comando diarv en la Iorma siguiente:

diary Iilename.txt
.
diary oII suspende la ejecucion
..
diary on reanuda la ejecucion
.

El simple comando diarv pasa de on a off y viceversa. Para poder acceder al Iichero
filename.txt con Notepad o Word es necesario que diarv este en off Si en el comando diarv
no se incluye el nombre del Iichero se utiliza por deIecto un Iichero llamado diarv (sin
extension).

Por ejemplo:
Si se tiene las variables antes deIinidas y se utiliza el comando save se tendra:

save Guarda las variables del area de trabajo en disco en el
archivo matlab.mat
Saving to: matlab.mat

load Carga desde el disco las variables almacenadas en el
archivo matlab.mat
9
Loading Irom: matlab.mat

X10;Y20;Z40;W60; Nuevas variables

save temp X W Guarda las variables X y W en el archivo temp.mat

load temp Carga desde el disco las variables almacenadas en el
archivo temp.mat
Operaciones con arrays
- Array arbitrarios se introducen como: variable [(lista de numeros separados por
espacios o comas)].
- Funciones de arrays aplican la Iuncion a los elementos individuales del array.
- Array que contienen elementos de datos espaciados linealmente se pueden Iormar usando
la notacion de dos puntos primero.incremento.ultimo o primero.ultimo. En la ultima
Iorma el incremento es de 1.
- Array que contienen elementos de datos espaciados logaritmicamente se pueden Iormar
usando la Iuncion linspace de Matlab.
- Valores almacenados en un array de datos se pueden acceder utilizando subindices.
- Operaciones matematicas basicas entre escalares y arrays aplican la operacion a todos los
elementos en el array.
- Operaciones matematicas basicas entre arrays son validas si los arrays tienen el mismo
tamao. El resultado se obtiene por la aplicacion elemento a elemento de la operacion.
Las operaciones elementales que se pueden hacer de elemento a elemento son: suma,
resta, multiplicacion, division y potencia se simbolizan por: , -, .*, ./ o . v ..
- La potencia de un array tiene multiples deIiniciones dependiendo de la Iorma de la
expresion.
- Se pueden construir array a partir de subconjuntos de otros arrays.
- Los arrays en Matlab pueden tener cualquier orientacion rectangular y se nombran como
array vector (Iila), array columna (columna) y matrices (multiples Iilas y columnas).
- Los vectores Iila se pueden convertir a vectores columna y viceversa usando la operacion
de transpuesta representada por (. ). Un apostroIe simple ( ) representa transpuesta
conjugada.


X|0 .1*pi .2*pi .3*pi .4*pi .5*pi .6*pi .7*pi .8*pi .9*pi pi|; Crea un array
Ysin(X); Crea un array
10
X(3); Acceso al tercer elemento del array
X(1:5); Se obtienen los elementos del primero al quinto de X
Y(3:-1:1); Se obtienen los elementos tercero, segundo y primero en este orden
X(2:2:7); Comienza a obtener desde el segundo elemento que se incremente
en 2 y para cuando alcance el 7
Y(|8 2 9|); Obtiene del array Y el octavo, segundo y noveno elemento en este
orden
X(0:0.1:1)*pi; Crea nuevamente el array X de otra Iorma; comienza en cero,
incremento de 0.1 hasta 1 y cada uno multiplicado por pi
A1:5;B1:2:9; Crea dos array uno con incremento de 1 y otro de 2
C|B A|; Junta los dos array anteriores en uno solo
D|A(1:2:5) 1 0 1| Crea una array que incluye desde el elemento uno en incremento
de dos hasta cinco del array A y adiciona otros elementos 1 0 1.
A-2; Resta dos a cada elemento de A
2*A-1; Multiplica cada elemento de A por 2 y le resta 1.
s'ABCDEF'; Crea un vector con cadena de caracteres o simplemente cadenas
ns'a'-'A' Cambia a caracteres en minuscula aadiendo la diIerencia entre a y
A
n Presenta resultado en Iorma de numeros correspondientes a cada
caracter
97 98 99 100 101 102
setstr(n) Presenta resultado en Iorma de caracteres
ans
abcdeI
Operaciones con Arrays
a|a1 a2 ... an|, b|b1 b2 ... bn| y cc es un escalar}
Suma escalar ac |a1c a2c ..... anc|
Multiplicacion escalar a*c |a1*c a2*c ..... an*c|
Suma de arrays ab |a1b1 a2b2 ..... anbn|
Multiplicacion de arrays a.*b |a1*b1 a2*b2 ..... an*bn|
Division a la derecha de arrays a./b |a1/b1 a2/b2 ..... an/bn|
Potencia de arrays a.`c |a1`c a2`c ..... an`c|
c.`a |c`a1 c`a2 ..... c`an|
a.`b |a1`b1 a2`b2 ..... an`bn|

11
Operaciones con matrices
- Los elementos de una matriciales se direccionan en la Iorma Iila, columna: A(fila,
columna).
- Valores internos a una matriz se acceden identiIicando los subindices de los elementos
deseados.
- Utilizar el simbolo dos puntos como la designacion de Iilas y columnas implica,
respectivamente, todas las Iilas o columnas; por ejemplo: A(. ,1) representa todas las
Iilas en la columna uno, A(2 ,.) representa todas las columnas en la Iila 2.
- Colocar datos Iuera del rango actual de una matriz rellena con ceros las zonas no
especiIicadas para mantener una Iorma de matriz rectangular.
- Fijar las Iilas o columnas de una matriz igual a la matriz vacia [ ] elimina estas Iilas o
columnas.
- Usar solo dos puntos, por ejemplo A(.), reagrupa una matriz en un vector columna,
tomando todas las columnas a un tiempo.
- Vectores logicos 0-1 pueden utilizarse tambien para direccionar partes de un vector. En
este caso, los vectores logicos 0-1 deben tener el mismo tamao que el vector que
direcciona. Los elementos Ialsos (0) se eliminan, los elementos verdaderos (1) se
retienen.

A|1 2 3; 4 5 6; 7 8 9|; Almacena la matriz A
A(3,3)0; Cambia un elemento de la matiz
A(2,6)1; Aumenta el tamao de la matriz con ceros para poner el
elemento
A|1 2 3; 4 5 6; 7 8 9|; Almacena la matriz A
BA(3:-1:1,:); Crea una matriz B tomando todas las Iilas A en orden
inverso
C|A B(:,|1 3|)|; Aade todas las Iilas en la 1 y 3 columna de B a la
derecha de A
BA(1:2,2:3); Extrae las primeras dos Iilas y las ultimas dos columnas de
A
C|1 3|; Crea un vector
BA(:); Dispone de A en un vector columna todas sus columnas a
un tiempo
BB.'; Operacion punto-transpuesta (transpone un vector)
BA; Asigna BA
B(:,2)||; Elimina todas las Iilas en la segunda columna de la original
12
B
BB.'; Transpone una matriz
B(2,:)||; Elimina la segunda Iila de B
A(2,:)B; Sustituye la segunda Iila de A con B
X-3:0.5:3; Crea un vector desde -3 a 3 con incrementos de 0.5
X-3:3; Crea un vector
yabs(X)~1; Retiene los elementos verdaderos (1) y se descartan los
Ialsos (0)
yX(abs(X)~1) Toma aquellos valores de X donde su valor absoluto ~ 1 si
X es matriz el resultado es un vector
YX(|1 1 1 1|); Crea Y tomando el primer elemento de X tres veces
X(abs(X)~2)|| Elimina valores de X donde abs(X)~2
v|'esto es una matriz, un renglon ' Almacena una matriz de caracteres
'debe tener el mismo numero de '
'columnas como las matrices '|;
v Despliega el valor de la matriz de caracteres
v
esto es una matriz, un renglon
debe tener el mismo numero de
columnas como las matrices

Funciones
Matlab tiene un numero grande de Iunciones. Algunas Iunciones son intrinsecas o
construidas en el propio proceso de Matlab. Otras estan disponibles en librerias externas
archivos-M distribuidos con Matlab (Toolbox). Y otras son adicionadas por los usuarios, o
grupo de usuarios, para alguna aplicacion especiIica en archivos-M.

Con la orden help Funcion~ Matlab despliega el contenido de la Iuncion asi como de los
parametros necesarios para su correcta ejecucion. Por ejemplo:

help sqrt Ayuda de la Iuncion de raiz cuadrada
SQRT Square root.
SQRT(X) is the square root oI the elements oI X. Complex
results are produced iI X is not positive.
See also SQRTM.

13
Se pueden combinar Iunciones de varias Iormas. Algunas Iunciones usan dos o mas
argumentos de entrada, donde cada argumento puede ser una expresion. Por ejemplo:

a3;b-4; Asigna a una variable un valor

thetasqrt(atan2(a,b)) Calcula la raiz cuadrada del arco tangente de un angulo
theta (coordenadas x, y)
1.5805

O tambien pueden usar dos o mas argumentos de salida, donde los argumentos estaran
encerrados por [ ] y separados por comas. Por ejemplo:

x|5 2 4 9 3 1|; Asigna un vector a la variable x

|y,i|max(x) Obtiene el valor maximo asi como el indice encontrado dentro
y del vector x
9
i
4

Grficas simples en 2-D
Los graIicos son una poderosa Iorma visual de interpretar los datos. Considerando un
proceso que se seguiria para realizar una graIica a mano de un Iuncion seno durante un
periodo, por ejemplo ysin(x) para 2 0 x . Se tendria que hacer:

- Escoger los valores para la variable independiente x (Iorman el eje horizontal de la
graIica).
- Calcular el seno para cada valor independiente (proporcionando los datos del eje vertical).
- Cada pareja de datos |x, y| se marca sobre un conjunto apropiado de ejes.

Para mejorar su vision, es comun dibujar una linea recta entre cada par de puntos marcados.

Utilizando array, Matlab sigue este mismo enIoque para hacer graIicas. Considerando la
misma tarea de dibujar una onda senoidal tal como la que acabamos de describir.

xlinspace(0,2*pi,30); Primero, se crean 30 puntos entre 0 y 2 .
14
ysin(x); Se calcula el seno de los puntos en x
plot(x,y); Genera la graIica conectando los puntos con una linea
recta.



zcos(x); Calcula el coseno de los puntos en x
plot(x,y,x,z); GraIica en la misma graIica el seno y coseno




plot(x,y,x,2*y.*z,'--'); GraIica la Iuncion seno con lineas conectado los puntos
y la Iuncion 2sin(x)cos(x)sin2(x) marcado con el
simbolo '--'



plot(x,y); GraIica la Iuncion seno
hold on Mantiene la graIica anterior para aadir la siguiente
curva
plot(x,2*y.*z,'--'); GraIica la Iuncion sin(2x) con linea de trazos
hold oII Permite que la proxima orden plot borre la graIica
15
grid Coloca rejilla en la graIica
xlabel('Variable independiente x') Coloca etiqueta sobre el eje x
ylabel('Variable dependiente') Coloca etiqueta sobre el eje y
title('2sin(x)cos(x)sin(2x)') Coloca titulo de la graIica



plot3(y,z,x),grid GraIica en 3-D



- La orden Plot crea una graIica de vectores o columnas de matrices. La Iorma de la orden
es plot(x1, v1, S1, x2, v2, S2, .....) donde (xn, vn) son conjuntos de arrays de datos y Sn
son cadenas opcionales que especiIican color, marcas, y/o estilos de linea.

Simbolo Color Simbolo Estilo de linea
y amarillo punto
m magneta O circulo
c cien X marca -x
r rojo mas
g verde * estrella
b azul - linea solida (deIault)
w blanco : linea punteada
k negro 0 linea punto-raya
-- linea de trazos

16
- grid coloca una rejilla en las marcas de la graIica.
- Se pueden aadir titulos y etiquetas en los ejes usando title, xlabel, vlabel.
- La orden text(x,v,S) aade cadena de caracteres S a la graIica actual en las coordenadas (x,
v)
- gtext permite colocar texto interactivamente en la graIica utilizando el raton.
- axis cambia los limites de los ejes o la apariencia de las graIicas (obtener ayuda con help
axis).
- Se pueden aadir graIicas a la graIica actual Iijando hold on. Haciendo hold off permite
que la proxima orden de plot borre la ventana de la Iigura antes de hacer una nueva
graIica.
- Se pueden generar multiples ventanas de Iiguras mediante la orden figure. figure(n)
escoge que ventana de Iigura n sea la ventana de la Iigura activa.
- Una ventana de Iigura se puede subdividir en un matriz m x n y cualquier subdivision
hacerse activa con la orden subplot (m,n,p) (escoge como activa el area p-esima).
- Si Iija :oom on, la ventana de la Iigura activa se puede expandir interactivamente usando
el raton, seleccionando el area de expansion o simplemente con un click del raton. :oom
off lo desactiva

xlinspace(0,2*pi,30); Crea 30 datos en el intervalo de 2 0 x
ysin(x); Calcula el seno de los datos
zcos(x); Calcula el coseno de los datos
w|y;z|; Crea una matriz con las Iunciones seno y coseno
plot(x,w),title('Figura 1) GraIica las columnas de w (eje y; seno y coseno) Irente a x
(eje x)
Iigure(2) Despliega otra ventana de graIica
plot(w,x),title('Figura 2') GraIica x (eje y) Irente a las columnas de w (eje x; seno y
coseno)



plot(x,y,'k-',x,z,'r--',x,y,'ko') GraIica la Iuncion seno dos veces una con linea
solida y color negro y la otra con circulos y color
17
negro, la Iuncion coseno con color rojo y linea de
trazos.
grid Activa rejilla
xlabel('Variable independiente x') Etiqueta del eje x
ylabel('Variable dependiente y z') Etiqueta del eje y
title('Curvas del seno y coseno') Titulo de la graIica
text(2.5,0.7,'sin(x)') Etiqueta de la curva en la localizacion (2.5, 0.7)
gtext('cos(x)') Etiqueta de la curva colocada con el raton



subplot(2,2,1) Seleciona la subgraIica superior izquierda
grid oII,plot(x,y),axis oII,title('sin(x)') Desecativa la rejilla, graIica Iuncion seno,
elimina los ejes de reIerencia, pone el titulo
subplot(2,2,2) Selecciona la subgraIica superior derecha
grid,plot(x,z),axis on,title('cos(x)') Activa la rejilla, graIica Iuncion coseno, pone
los ejes de reIerencia, pone el titulo
subplot(2,2,3) Selecciona la subgraIica inIerior izquierda
grid oII,plot(x,2*y.*z),axis ij Desecativa la rejilla, graIica Iuncion Sin(2x), el
eje vertical aumenta de arriba hacia abajo
subplot(2,2,4) Selecciona la subgraIica inIerior derecha
plot(x,y./z),axis ('xy','normal') GraIica Iuncion sin/cos, retorna a los valores
por deIecto
grid on,title('sin(x)/cos(x)') Activa la rejilla y pone le titulo de la subgraIica
(2,2,4)
subplot (2,2,2) Selecciona la subgraIica superior derecha
title('cos(x)') Pone titulo
subplot(2,2,3),grid Selecciona la subgraIica (2,2,3), activa rejilla
title('2sin(x)cos(x)') Pone titulo

18


subplot(1,1,1) Regresa a una sola graIica por pantalla
plot(x,y./z) GraIica la Iuncion sin(x)/cos(x)
grid,title('sin(x)/cos(x)') Activa rejilla y pone titulo
zoom on Activa modo expandido para seleccionar una porcion de la
graIica



zoom oII Desactiva modo expandido

Otra Caractersticas de los grficos de 2-D
- loglog es lo mismo que plot, excepto que se usan logaritmicas para ambos ejes.
- semilogx es lo mismo que plot excepto que usa una escala logaritmica en el eje x y escala
lineal en el eje y. semilogv es lo mismo solo que el eje y es el de la escala logaritmica y el
eje x es lineal.
- La secuencia de datos discretos se puede representar usando la Iuncion stem.

Ejercicio:
Realizar los ejercicios vistos en clase asi como en esta practica y entender su
Iuncionamiento.
19



UNIVERSIDAD MICHOACANA DE SAN NICOLAS DE HIDALGO
FACULTAD DE INGENIERIA ELECTRICA

LABORATORIO DE TEORIA DE CONTROL I

Prctica 2: ~Introduccin a MATLAB II

Objetivo:
El objetivo de esta practica es dar una introduccion a la programacion en Matlab.

Introduccin:
Los lenguajes de programacion de computadoras como Matlab oIrecen caracteristicas
que permiten controlar el Ilujo de ejecucion de ordenes basadas en estructuras de toma de
decisiones. El control de Ilujo es extremadamente poderoso ya que permite que calculos
pasados inIluyan sobre operaciones Iuturas.
Debido a que las estructuras de control de Ilujo a menudo contienen numerosas
ordenes de Matlab, suelen aparecer en archivos-M (M-Iiles), en lugar de escribirse
directamente en la linea de orden de Matlab.

Desarrollo:
Durante el desarrollo de esta practica se vera el Iuncionamiento de la programacion de
Matlab, en cada uno de las explicaciones se dan ejemplos del Iuncionamiento de la
programacion de Matlab, se recomienda al alumno realice dichos ejemplos para su mejor
entendimiento.

Tomando decisiones: Controles de flujo
Las caracteristicas de control de Ilujo de Matlab se pueden resumir como:

Estructura de control de Ilujo Descripcion
Ior x array
ordenes
end
Un bucle for que en cada iteracion asigna x a la
columna i-esima de arrav y ejecuta ordenes
20

while expresion
ordenes
end

Un bucle while que ejecuta ordenes mientras todos
los elementos de expresion son verdaderas o
distinto de cero
iI expresion
ordenes
end

Una simple estructura if-else-end donde ordenes se
ejecuta si todos los elementos en la expresion son
verdaderos
iI expresion1
ordenes evaluadas si la
expresion1 es verdadera
elseiI expresion2
ordenes evaluadas si la
expresion2 es verdadera
elseiI
:
:
else
ordenes evaluadas si la
expresion es verdadera
end

La estructura mas general if-else-end. Solo se
evaluan las ordenes asociadas con la primera
expresion verdadera.
break Termina la ejecucion de bucles for y while.

Los bucles deben evitarse siempre que haya un metodo de un array o matriz
equivalente que permita resolver el problema.

Ior n1:10 Asigna un array a n de 1 a 10 y comienza el bucle
p(n)sin(n*pi/10); Realiza el calcula de la operacion y lo almacena en un array p
n10; Un bucle Ior NO se puede terminar reasignando a la variable
end del bucle n un valor dentro del bucle Ior. Termina el bucle

n1:10; Vector n, para mostrar como hacer la operacion anterior sin bucle

psin(n*pi/10); Calcula el vector p sin necesidad de un bucle
21

Ior n1:5 Los bucles Ior se pueden anidar como se deseen (n va de 1 a 5)
Ior m5:-1:1 Vector de 5 a 1 con incrementos de -1
A(n,m)n`2m`2; Calcula operacion y almacena en matriz A
end Finaliza ciclo Ior interno
disp(n) Despliega el valor de n cada vez que se incrementa
end Finaliza ciclo Ior externo
manzanas10; Asigna el costo de las manzanas

costomanzanas*25; Costo total de 25 manzanas

iI manzanas ~ 5 Si el numero de manzanas ~ 5 aplicar el 20 de descuento
costo(1-20/100)*costo; Calcula costo de manzanas con el 20 de descuento
end Finaliza bucle

Funciones en archivos-M
- Los archibos-M se crean en un editor de texto o el editor de Matlab.
- El nombre de la Iuncion y el nombre del archivo deben de ser identicos. Por ejemplo la
Iuncion linspace se almacena en un archivo denominado linspace.m.
- Las primeras lineas de comentarios hasta la primera linea de no comentario en un archivo-
M de Iuncion son el texto de ayuda que se devuelve cuando se solicita esta, help linspace
retorna la ayuda de la Iuncion.
- La primera linea de ayuda, conocida como la linea H1, es la linea que examina la orden
lookfor.
- Todas las variables dentro de una Iuncion se aislan del espacio de trabajo de Matlab. Las
unicas conexiones entre las variables dentro de la Iuncion y el espacio de trabajo de
Matlab son las variables de entrada y salida. Si una Iuncion cambia el valor de cualquier
variable de entrada, los cambios aparecen solo dentro de la Iuncion y no aIecta a las
variables en el espacio de trabajo de Matlab.
- Cuando una Iuncion tiene mas de una variable de salida, estas se encierran entre
corchetes, p.e. |V,D| eig(A).
- El numero de variables de entrada pasadas a una Iuncion esta disponibles dentro de la
Iuncion en la variable nargin. El numero de variables de salida solicitadas cuando una
Iuncion se llama esta disponible dentro de la Iuncion en la variable nargout.
- El comando echo on causa que se visualice la ejecucion del archivo-M en el espacio de
trabajo de Matlab. El comando echo off deshabilita la visualizacion.
22
- La Iuncion input obtiene la entrada del usuario.
- El comando pause causa que se detenga la ejecucion y esperar un tiempo o que el usuario
presione una tecla para continuar con la ejecucion

Como ejemplo de las Iunciones abriremos una Iuncion de Matlab llamada linspace:
function y = linspace(d1, d2, n)
%LINSPACE Linearly spaced vector.
% LINSPACE(x1, x2) generates a row vector of 100 linearly
% equally spaced points between x1 and x2.
%
% LINSPACE(x1, x2, N) generates N points between x1 and x2.
%
% See also LOGSPACE, :.
% Copyright (c) 1984-98 by The MathWorks, Inc.
% $Revision: 5.6 $ $Date: 1997/11/21 23:29:09 $
if nargin == 2 %si no da ningn valor para n p.e.
x=linspace(0,pi), n = 100; %suministra un valor por
defecto de 100
end
if n~=1 %Si es diferente de 1 calcula la linea
y = d1:(d2-d1)/(n-1):d2;
else
y = d2;
end
Se pueden ver mas ejemplos abriendo los archivos-M de Matlab.

Archivos Scripts
Funcionan igual que los archivos-M, la diIerencia esta en que los archivos Scripts no
se le pueden ser pasar argumentos y las variables deIinidas y manipuladas dentro de los
archivos Scripts operan globalmente en el espacio de trabajo de Matlab y por lo tanto
pueden ser modiIicadas. Estos archivos no comienzan con el comando function de los
archivos de Iuncion.
Los archivos Scrip son tambien convenientes para introducir grandes array que
pueden, por ejemplo provenir de medidas de laboratorio. Utilizando un editor de texto para
introducir uno o mas array, las capacidades de edicion Iacilitan la correccion de errores sin
que se tenga necesidad de escribir otra vez todo el array.
23

%Ejemplo de como crear un archivo Script
%Ejemplo mostrado en los ciclos
%calculo de una operacin sin necesidad de un ciclo
%Archivo pru.m
%se debe de encontrar en el subdirectorio bin
echo on; %Visualiza ordenes que se van ejecutando del archivo-M en %el
espacio de trabajo
n=1:10; %Vector n, para mostrar como hacer la operacin anterior
%sin bucle
p=sin(n*pi/10); %Calcula el vector p sin necesidad de un bucle
Para ejecutarse simplemente se da el nombre del archivo en el espacio de trabajo de Matlab.
Para ejecutar un archivo o Iuncion hay que darle el directorio de trabajo en donde se
localiza el archivo o Iuncion desde el area de trabajo de Matlab darle:

cd c:\directoriodetrabajo

Con lo cual se ejecuta el archivo

%Ejecuta un archivo seleccionado
%Archivo Selec.m
echo off; %Elimina visualizacin del archivo
n=6; %Asigna numero para que entre al while
D=['1.- help input' %Asigna a una matriz letreros con el mismo
'2.- help eval ' %tamao de columnas
'3.- help echo '
'4.- help while']
while(n>4) %Mientras el n>4 pedir el numero al usuario
n = input('Selecionar un numero: '); %Pide numero al usuario
end %Termina el while
eval(D(n,5:14)); %Ejecuta la opcin seleccionada cargando el dato
de la matriz D desde el elemento 5 hasta el
elemento 14

Polinomios
- Los polinomios se representan en Matlab por vectores Iilas de sus coeIicientes en orden
24
descendente.

- roots (p) calcula las raices del polinomio

- polv (r) encuentra el polinomio asociado con las raices

- conv (a, b) multiplica los dos polinomios a y b

- deconv (c, d) divide el polinomio b entre c

- Matlab no tiene incorporada una Iuncion para sumar polinomios. Sin embargo, es Iacil
construir una rachivo-M de Iuncion que lo haga.
- polvvar (p, x) evalua el polinomio p en todos los valores de x

A|1 2 3; 4 5 6; 7 8 0|; Crea una matiz
ppoly(A); Obtiene la ecuacion caracteristica de la matriz A como un
polinomio de la Iorma s
3
-6s
2
-72s-27
rroots(p); Calcula las raices del polinomio (valores propios de la
matriz A)
p2poly(r); Regresa el polinomio original
p|1 -12 0 25 116|; Crea un polinomio de la Iorma x
4
-12x
3
0x
2
25x116
rroots(p); Obtiene las raices del polinomio (Resultado real
imaginario)
p2poly(r); Regresa el polinomio (Resultado real imaginario ya que
el polinomio es de la misma Iorma)
p2real(p2) Suprime la parte imaginaria ya que es cero
a|1 2 3|;b|4 5 6|; Crea dos polinomios a(s) s
2
2s3 y b(s) 4s
2
5s6
cconv(a, b); El producto de polinomios es la convolucion de los
coeIicientes
|q,r|deconv(c,a) Divide el polinomio a/c, donde el cociente queda en q y el
resto en r
dab; Suma de polinomios cuando son del mismo tamao
suma de vectores
ec|0 0 d|; Cuando son de diIerente grado, el que tiene menor grado
bebe de rellenarse con ceros al principio del polinomio
para tener el mismo grado
25

o bien realizar una Iuncion (archivo-M) en un editor de texto o el editor de Matlab, para la
suma de dos polinomios:

function p=polysuma(a, b)
%POLYSUMA suma de polinomios
%POLYSUMA (a, b) suma el polinomio a y b
%Resultado esta en el polinomio p
echo on; %Visualiza la ejecucin de la funcin,
% lo que no tenga ;
if nargin<2, %Checa el numero de argumentos de entrada
%error('No estn completos los argumentos'),
%Si se deje el mensaje de error no realizara nada
%solo presentara mensaje
b=a
end
a=a(:).' %Asegurarse que las entradas
b=b(:).' %son vectores rengln
na=length(a) %Encuentra la longitud de a y b
nb=length(b)
if nargin<2, %fue un polinomio regresa el mismo polinomio
p=[zeros(1,nb-na) a]+[zeros(1,na)] %pone ceros
else %En caso contrario suma los polinomios
p=[zeros(1,nb-na) a]+[zeros(1,na-nb) b] %pone ceros
end %Termina Funcin

Despues en el espacio de trabajo de Matlab se puede probar de la siguiente Iorma:

spolysuma(c,d); Llama a la Iuncion para sumar dos polinomios
(c y d anteriores)
spolysuma(c); Si Ialta un argumento devuelve el mismo polinomio
xlinspace(-1,3); Se generan 100 puntos de datos entre -1 y 3
p|1 4 -7 -10|; Se utiliza el polinomio x
3
4x
2
-7x-10
vpolyval(p,x); Evalua el polinomio en los valores de x y almacena el
resultado en v
plot(x,v),title ('x`34x`2-7x-10'),grid; GraIica resultado
26

Nota: para cambiar de directorio se hace igual que en el sistema operativo con cd (para
grabar en otro directorio o ver los archivos de otros directorios).

Ejercicios:
1. Crear una Iuncion Matlab que, a partir de una matriz dada, genere una matriz cuadrada
aadiendo Iilas o columnas de ceros, segun sea necesario. La Iuncion se llamara cuadra
y se guardara en el Iichero cuadra.m.

2. Crear una Iuncion Matlab que sea capaz de multiplicar dos matrices y obtener la matriz
inversa del resultado La declaracion de la Iuncion debe ser como la siguiente:

Iunction resultado calcula (matriz1, matriz2)
Nota. la funcion debe guardarse como calcula.m.

3. Crear una Iuncion Matlab que, tomando como entrada un vector V cualquiera,
represente en una misma ventana (subplot) los dos graIicos siguientes:
GraIico 1: valores de cada elemento de V, de cada elemento de V al cuadrado y de
cada elemento de V al cubo (eje y) con respecto al numero de orden (eje x).
GraIico 2: valores de V (eje y) con respecto a los valores de V
2
(eje x).
El vector de entrada se pueda insertar como el siguiente:
v |0:0.1:1.5| desde 0 hasta 1.5 en incrementos de 0.1
La declaracion de la Iuncion debe tener este aspecto:

Iunction dibuja (v)
Nota. la funcion debe guardarse como dibufa.m

4. Crear un menu desde donde se puedan llamar todas las Iunciones anteriores, asi como la
vista en clase para la suma de polinomios.







UNIVERSIDAD MICHOACANA DE SAN NICOLS DE HIDALGO
FACULTAD DE INGENIERA ELCTRICA

LABORATORIO DE TEORA DE CONTROL I

27
Prctica 3: Modelos Matemticos de Sistemas Lineales

Objetivo:
El objetivo de esta prctica es dar una introduccin a algunas funciones de Matlab encaminadas en
el rea de control.

Introduccin:
En el area de control automatico es muy utilizado la representacion de la planta en
Iuncion de transIerencia, asi como el uso de las Iracciones parciales, Matlab nos permite
realizar estas operaciones con una Iunciones especiIicas del mismo programa, las cuales se
veran dentro del desarrollo de esta practica.

Desarrollo:
Matlab tiene rdenes tiles para representar un modelo matemtico de un sistema lineal as
como la resolucin de fracciones parciales, las instrucciones de Matlab que se vern en el
transcurso de esta prctica son:

residue Representacin de una divisin de polinomios en fracciones parciales
ft Representacin de una Funcin de Transferencia (F.T.)
Zpk Representacin de una Funcin de Transferencia cuando el denominador y
numerador estn en forma factorizada.
tf2zp Convierte representacin de la F.T. a factorizada
zp2tf inverso de tf2zp

Para mejor entendimiento de cada una de las funciones utilizadas en la prctica se recomienda
utilizar la ayuda de Matlab.

Ejemplos:
Obtener la representacin de fracciones parciales de
( ) 32 12
32
) (
2
+ +
=
s s s
s F
En Matlab se utilizara:
[K, p, n] = residue (num,den);
donde:
K es el residuo
P son las races del denominador
n coeficiente directo
28
para este ejemplo se tendr que el resultado ser:
EDU num=32;
EDU den=poly([0 -4 -8]);
EDU [r,p,k]=residue(num,den);

As r = [1 -2 1], p = [-8 -4 0]' y n = 0;
cuya representacin ser en fracciones parciales
( ) ( ) s s s
s F
1
4
2
8
1
) ( +
+

+
+
=
Obtener la F.T.
( ) 4 5
) 7 2 ( 150
) (
2
2
+ +
+ +
=
s s s
s s
s F
Para crear esta Funcin de transferencia de dos polinomios que representan el numerador y el
denominador como F(s) = Num(s) / Den(s), se utiliza la funcin:
Syms = tf (num,den);
donde:
Syms representa la F.T. del sistema
num numerador del sistema
den denominador del sistema

para este ejemplo se tendr:
EDU K=150;
EDU num=K*[1 2 7];
EDU den=[1 5 4 0];
EDU 'F(s)' % despliega F(s) en la pantalla
EDU T=tf(num,den)
Transfer function:
150 s^2 + 300 s + 1050
---------------------- % Resultado de la F.T.
s^3 + 5 s^2 + 4 s

si el numerador y denominador estn expresados en forma factorizada se puede utilizar el
comando:
G = zpk (num, den, K)
donde:
num numerador factorizado
den denominador factorizado
K ganancia del numerador
Comprobar el resultado obtenido en el ejemplo anterior pero ahora con la representacin
factorizada.

Algunos otros ejemplos se dan a continuacin:
29
% Ejemplo 1
numf=[7 9 12]; % Define numerador de F(s).
denf=conv(poly([0 -7]),[1 10 100]); % Define denominador de F(s).
[K,p,k]=residue(numf,denf) % Encuentra residuos y los asigna a K;
% las races o polos del denominador y las asigna
% a p y el coeficiente directo lo asigna a k
% Ejemplo 2
numy=32;
deny=poly([0 -4 -8]);
[r,p,k] = residue(numy,deny) % Calcula residuos, polos y coeficiente

% Ejemplo 3
'Forma polinomial' % Despliega etiqueta.
numf=150*[1 2 7] % almacena 150(s^2+2s+7).
denf=[1 5 4 0] % almacena s(s+1)(s+4)
'F(s)' % Etiqueta.
F=tf(numf,denf) % F.T.
clear % Limpia variables del workspace.

% Ejemplo 4
'Forma Factorizada' % Despliega.
numg=[-2 -4] % almacena (s+2)(s+4)
deng=[-7 -8 -9] % almacena (s+7)(s+8)(s+9)
K=20 % Define K.
'G(s)' % Display label.
G=zpk(numg,deng,K) % F.T. G(s) .
clear % Limpia variables del workspace.

Conversin entere las formas de representar una F.T.
% Ejemplo 5
numftf=[10 40 60] % numerador de F(s) =(10s^2+40s+60)/(s^3+4s^2+5s+7).
denftf=[1 4 5 7] % denominador F(s)
'Roots for F(s)' % Despliega.
[numfzp,denfzp]=tf2zp(numftf,denftf)
% Convierte F(s) a forma factorizada.
'Raices para G(s)' % Despliega.
numgzp=[-2 -4] % numerador de
K=10 % G(s) = 10(s+2)(s+4)/[s(s+3)(s+5)].
dengzp=[0 -3 -5] % denominador
'Coeficientes para G(s)' % Despliega.
[numgtf,dengtf]=zp2tf(numgzp',dengzp',K)
% Convierte G(s) a forma de polinomio, donde numgzp y
% dengzp deben de ser columna.

% Ejemplo 6
'Fzpk1(s)' % Despliega.
Fzpk1=zpk([-2 -4],[0 -3 -5],10) % Fzpk1(s) = 10(s+2)(s+4)/[s(s+3)(s+5)].
'Ftf1' % Despliega.
Ftf1=tf(Fzpk1) % Convierte Fzpk1(s) a forma de coeficientes
'Ftf2' % Despliega.
Ftf2=tf([10 40 60],[1 4 5 7]) % Ftf2(s) = (10s^2+40s+60)/(s^3+4s^2+5s+7).
'Fzpk2' % Despliega.
Fzpk2=zpk(Ftf2) % Convierte Ftf2(s) a forma factorizada.


30


UNIVERSIDAD MICHOACANA DE SAN NICOLS DE HIDALGO
FACULTAD DE INGENIERA ELCTRICA

LABORATORIO DE TEORA DE CONTROL I

Prctica 4: Introduccin al toolbox de Symbolic de Matlab

Objetivo:
El objetivo de esta prctica es dar una introduccin a algunas funciones del toolbox de symbolic de
Matlab para poder realizar operaciones en forma simblica.

Introduccin:
MATLAB dispone en la actualidad de un amplio abanico de programas de apoyo
especializados, denominados Toolboxes, que extienden significativamente el nmero de funciones
incorporadas en el programa principal. Estos Toolboxes cubren en la actualidad prcticamente casi
todas las reas principales en el mundo de la ingeniera y la simulacin, destacando entre ellos el
toolbox de proceso de imgenes, seal, control robusto, estadstica, anlisis financiero,
matemticas simblicas, redes neuronales, lgica difusa, identificacin de sistemas, simulacin de
sistemas dinmicos, etc.

El Toolbox de Matemtica Simblica, aade a MATLAB la capacidad de realizar clculos
simblicos. Entre otros, los principales tipos de operaciones soportados son las siguientes:
Algebra simblica: Derivacin, integracin y simplificacin de expresiones matemticas.
Algebra lineal exacta: Inversas, determinantes, autovalores y formas cannicas de matrices
simblicas.
Aritmtica de precisin variable: Evaluacin de expresiones matemticas con diversos grados
de precisin.
Resolucin de ecuaciones: Resolucin numrica y simblica de ecuaciones algebraicas y
diferenciales.
Funciones matemticas especiales: Evaluacin de la mayora de las funciones utilizadas en
matemticas aplicadas.

Cabe destacar que en esta practica solo s vera un apequea introduccin del toolbox encaminado
al rea de control.
31

Para el uso de elementos simblicos, el nico requerimiento adicional es declarar las variables
simblicas antes de que stas puedan ser usadas con la declaracin syms xl x2 ...,, donde xi son
las variables simblicas.
Algunas de las ventajas de las Rutinas de Matemtica Simblica para el anlisis y diseo de
sistemas son:

1. Las funciones y ecuaciones se pueden ingresar de manera simblica. Por ejemplo: B =
x^2+3*x+7, en lugar de B = [1 3 7].

2. Se pueden manipular algebraicamente y simplificar expresiones simblicas.

3. Se pueden escribir las funciones de transferencia como si lo estuviera haciendo a mano.
Por ejemplo: La declaracin, G=(s+1)*(s+2)/[(s^2+3*s+10)*(s+4)] remplazara tres
declaraciones, numg=poly ([1 2]), deng=conv([1 3 10],[l 4]) y G=tf(numg, deny).

4. Las funciones se pueden imprimir con una mejor presentacin para mayor claridad en la
rea de trabajo de Matlab y entonces imprimirse en papel.

Estas son solo algunas de las ventajas de usar las Rutinas de Matemtica Simblica.

Desarrollo:
En el transcurso de esta practica se probaran algunos comandos utilizados del Toolbox de
Symbolic de Matlab (si se desea saber algunos otros comandos recurre a la ayuda de
Matlab) como son:

- ilaplace(X) Transformada inversa de Laplace para X(s).
- laplace(x) Transformada de Laplace de x(t)
- numden(G) Extrae numerador y denominador en forma simblica a partir de una G(s)
- pretty(x) Mejor impresin de x.
- simple(x) Determina la forma ms sencilla de un objeto simblico x
- simplify(x) Simplifica x.
- expand(x) Expande el objeto simblico.
- sym2poly(P) Convierte un polinomio simblico, P, a un vector.

Ejemplos del uso de las funciones simblicas:
32
1. Para la expansin de una seal o un polinomio se puede utilizar la funcin
>>syms x y
>>F=expand(cos(x+y))
que nos devuelve
F = cos(x)*cos(y)-sin(x)*sin(y)

2. Para simplificar una expresin matemtica se puede lograr con la funcin
>>simplify(sin(x)^2 + cos(x)^2)
que nos devuelve el valor 1.

3. La funcin simple() busca la forma ms simple de expresar la expresin que le
ingresamos como parmetros por ejemplo:
>>syms x y
>>F1=simple(cos(x)2 + sin(x)2)
>>F2 = simple(cos(x)+i*sin(x)
Y nos devuelve la misma expresin pero de una forma ms simple o simplificada.
F1=1
F2=exp(i*x)

4. Ejemplo del calculo de la Transformada de Laplace.
EDU syms t
EDU ft=3*exp(2*t);
EDU Llaplace(It)
Y nos devuelve
L 3/(s-2)
Mejorando la impresin
EDU pretty(L)
3
-----
s - 2

5 Calculo de la Antitransformada de Laplace se usa la siguiente funcin:
EDU F=ilaplace(L)
Y nos devuelve
F = 3*exp(2*t)
Mejorando la impresin
EDU pretty(F)

3 exp(2 t)

A continuacin se muestran algunos ejemplos ms completos:
1. Transformada inversa de Laplace
syms s % Define variable simblica s
'Transformada inversa de Laplace' % Despliega etiqueta
F=2/[(s+1)*(s+2)^2]; % Define F(s)
'F(s)' % Despliega etiqueta.
pretty(F) % Impresin de F(s).
f=ilaplace(F); % Encuentra la Transformada inversa de Laplace.
33
'f(t)' % Despliega etiqueta.
pretty(f) % Impresin de f(t).
F=3/[s*(s^2+2*s+5)]; % Define F(s).
'F(s)' % Despliega etiqueta.
pretty(F) %Impresin de F(s).
f=ilaplace(F); % Encuentra la Transformada inversa de Laplace.
'f(t)' % Despliega etiqueta.
pretty(f) % Impresin de f(t).

2. Transformada de Laplace
syms t % Variable 't'.
'Transformada de Laplace
'f(t)' % Despliega etiqueta.
f=2*exp(-t)-2*t*exp(-2*t)-2*exp(-2*t); % Define f(t).
pretty(f) % Impresin de f(t).
'F(s)
F=laplace(f); % Encuentra la Transformada de Laplace.
pretty(F) % Impresin de f(t).
F=simplify(F); % simplificar
pretty(F) % Impresin
'f(t)'
f=3/5-3/5*exp(-t)*[cos(2*t)+(1/2)*sin(2*t)]; % Define f(t).
pretty(f) % Imprime
'F(s)
F=laplace(f); % Encuentra la Transformada de Laplace.
pretty(F)
'F(s)'
F=vpa(F,3); % Convierte fracciones numricas simblicas a
%presentacin decimal de 3 cifras para F(s)
pretty(F) % Imprime.
F=simplify(F); % Simplifica.
pretty(F) % Imprime.

3. Obtiene numerador y denominador de un a F.T. simblica en forma de vector
syms s % Variable simblica
G=54*(s+27)*(s^3+52*s^2+37*s+73)...
34
/(s*(s^4+872*s^3+437*s^2+89*s+65)*(s^2+79*s+36)); % Forma simblica de G(s).
'Simblica G(s)'
pretty(G) % Imprime G(s).
[numg,deng]=numden(G); % Extrae numerador y denominador en forma simblica.
numg=sym2poly(numg); % Convierte numerador de G(s) a un vector.
deng=sym2poly(deng); % Convierte denominador de G(s) a un vector.
'LTI G(s) in Polynomial Form'
Gtf=tf(numg,deng) % Representa num y den en forma de F.T.
Gzpk=zpk(Gtf) % Convierte G(s) a forma factorizada.

4. Ejercicio Encontrar la F.T. G(s) = I
2
(s) / V(s) de:

(

=
(

(
(

+ +
+
0
) (
) (
) (
1
2
1
2
1
s J
s I
s I
Cs
R Ls Ls
Ls Ls R


(sugerencia utilizar la regla de Cramer para resolver I
2
y la funcin det que obtiene el determinante
de un funcin simblica).


35


UNIVERSIDAD MICHOACANA DE SAN NICOLS DE HIDALGO
FACULTAD DE INGENIERA ELCTRICA

LABORATORIO DE TEORA DE CONTROL I

Prctica 5: Reduccin de diagrama de bloques con Matlab

Objetivo:
Reducir diagramas de bloques con las utilerias de Matlab. Al Iinalizar la practica, el
estudiante estara en capacidad de:
Realizar operaciones del algebra de bloques para utilizarlos en la reduccion de diagramas
de bloques. Por medio de MATLAB, podemos manipular diagramas de bloques con el Iin
de simpliIicarlos o reducirlos.

Introduccin:
MATLAB dispone en la actualidad de un amplio abanico de programas de apoyo
especializados, Adicionalmente, existen comandos en MATLAB que facilitan la labor, tediosa en
ocasiones, de reducir una representacin en diagramas de bloques.
Se puede utilizar Matlab para la reduccin de diagrama de bloques. Se dispone de tres metodos 1.)
Solucin a travs de los comandos series, parallel y feedback, 2.) Solucin mediante operaciones
algebraicas y 3.) Solucin mediante los comandos append y connect.

Desarrollo:
Matlab tiene rdenes tiles para la reduccin de sistemas de control en diagramas de
bloques, las instrucciones de Matlab que se vern en el transcurso de esta prctica son:

series(G1, G2) Conexin en cascada de G
1
(s) y G
2
(s).
parallel(G1, G2) Conexin en paralelo de G
1
(s) y G
2
(s).
feedback(G, H, sing) Conexiones de lazo cerrado G(s) en la trayectoria directa y H(s) como
realimentacin y sing (signo) es -1 para realimentacin negativa o +1 para
retroalimentacin positiva.
append(G1, G2, , Gn) Agregacin de sistemas (juntar varios sistemas).
connect(G Q inputs, outputs) Interconexin de los argumentos donde G es la matriz de agregacin,
Q es una matriz de conexin de elementos, inputs son las entradas del
36
sistema y outputs son las salidas del seistema.
Para mejor entendimiento de cada una de las funciones utilizadas en la prctica se recomienda
utilizar la ayuda de Matlab.

Ejemplo:
Teniendo el diagrama de bloques de la figura se quiere reducir.



1. Solucin a travs de los comandos Series, Parallel y Feedback
'Solucin a travs de los comandos Series, Parallel, & Feedback'
numg1=[-1]; % Define numerador de G1(s).
deng1=[1]; % Define denominador de G1(s).
numg2=[0 2]; % Define numerador de G2(s).
deng2=[1 2]; % Define denominador de G2(s).
numg3=-0.125*[1 0.435]; % Define numerador de G3(s).
deng3=conv([1 1.23],[1 0.226 0.0169]); % Define denominador de G3(s).
numh1=[-1 0]; % Define numerador de H1(s).
denh1=[0 1]; % Define denominador de H1(s).
G1=tf(numg1,deng1); % Crea funcin de Transferencia G1(s).
G2=tf(numg2,deng2); % Crea funcin de Transferencia G2(s).
G3=tf(numg3,deng3); % Crea funcin de Transferencia G3(s).
H1=tf(numh1,denh1); % Crea funcin de Transferencia H1(s).
G4=series(G2,G3); % Calcula producto
G5=feedback(G4,H1); % Calcula retroalimentacin
Ge=series(G1,G5); % Calcula producto
'T(s) a travs de los comandos Series, Parallel, & Feedback'
T=feedback(Ge,1) % Calcula retroalimentacin

37
2.) Solucin a travs de operaciones algebraicas
' Solucin a travs de operaciones algebraicas '
clear % Limpia variables.
numg1=[-1]; % Define numerador de G1(s).
deng1=[1]; % Define denominador de G1(s).
numg2=[0 2]; % Define numerador de G2(s).
deng2=[1 2]; % Define denominador de G2(s).
numg3=-0.125*[1 0.435]; % Define numerador de G3(s).
deng3=conv([1 1.23],[1 0.226 0.0169]); % Define denominador de G3(s).
numh1=[-1 0]; % Define numerador de H1(s).
denh1=[0 1]; % Define denominador de H1(s).
G1=tf(numg1,deng1); % Crea funcin de Transferencia G1(s).
G2=tf(numg2,deng2); % Crea funcin de Transferencia G2(s).
G3=tf(numg3,deng3); % Crea funcin de Transferencia G3(s).
H1=tf(numh1,denh1); % Crea funcin de Transferencia H1(s).
G4=G3*G2; % Calcula producto.
G5=G4/(1+G4*H1); % Calcula realimentacin.
G5=minreal(G5); % Cancela trminos comunes.
Ge=G5*G1; % Multiplica las F.T. de los lazos internos.
'T(s) a travs de operaciones algebraicas'
T=Ge/(1+Ge); % F.T. de lazo cerrado.
T=minreal(T) % Cancela trminos comunes.

3.) Solucin de otro problema diferente con los comandos Append y Connect.
' Solucin a travs de los comandos Append y Connect'
'G1(s) = (-K1)*(1/(-K2s)) = 1/s' % Imprime etiqueta.
numg1=[-1]; % Define numerador de G1(s).
deng1=[1 0]; % Define denominador de G1(s).
G1=tf(numg1,deng1); % Crea funcin de Transferencia G1(s).
'G2(s) = (-K2s)*(2/(s+2)' % Imprime etiqueta.
numg2=[-2 0]; % Define numerador de G2(s).
deng2=[1 2]; % Define denominador de G2(s).
G2=tf(numg2,deng2); % Crea funcin de Transferencia G2(s).
'G3(s) = -0.125(s+0.435)/((s+1.23)(s^2+0.226s+0.0169))' % Imprime
numg3= - 0.125*[1 0.435]; % Define numerador de G3(s).
deng3=conv([1 1.23],[1 0.226 0.0169]); % Define denominador de G3(s).
38
G3=tf(numg3,deng3); % Crea funcin de Transferencia G3(s).
System=append(G1,G2,G3); % Unir todos los subsistemas.
input=1; % La entrada es el primer subsistema G
1
(s).
output=3; % La salida es el tercer subsistema, G
3
(s).
Q=[1 -3 0 % Subsistema 1, G1(s), obtiene su entrada del
% negative de la salida del subsistema 3, G3(s).
2 1 -3 % Subsistema 2, G2(s), obtiene su entrada del
% subsistema 1, G1(s), y el negativo de la salida
% del subsistema 3, G3(s).
3 2 0]; % Subsistema 3, G3(s), obtiene su entrada del
% subsistema 2, G2(s).
T=connect(System,Q,input,output); % Conecta los subsistemas.
'T(s) a travs de los comandos Append & Connect'
T=tf(T); % Crea F.T. de lazo cerrado.
T=minreal(T) % Cancela trminos comunes.

Ejercicios:
Hacer un programa general que funcione para resolver diferentes diagramas de bloques y probarlo
con la reduccin de los diagrama de bloques de las figuras, adems de utilizar otros dos diagramas
de bloques complejos para probarlo.



39


40
UNIVERSIDAD MICHOACANA DE SAN NICOLS DE HIDALGO
FACULTAD DE INGENIERA ELCTRICA

LABORATORIO DE TEORA DE CONTROL I

Prctica 6: Introduccin a Simulink
Objetivo:
Realizar operaciones y simulaciones sencillas con el uso grafico de Matlab llamado Simulink.

Introduccin:
MATLAB dispone de un entorno grafico para el desarrollo de las actividades que realiza en el
area de trabajo llamado Simulink. El uso de Simulink es para simular sistemas. ste utiliza una
interfaz grfica de usuario (GUI) para que el usuario interacte con los bloques que representan
subsistemas. Los bloques se pueden situar donde se requiera, modificar su tamao, etiquetarlos,
especificar sus parmetros, e interconectarlos para completar sistemas a partir de los cuales se
pueden correr las simulaciones.
Las caractersticas bsicas de Simulink son: Simulacin de sistemas dinmicos, entorno grfico, el
sistema se representa como una interconexin de bloques elementales, cada bloque lleva
asociado un modelo matemtico que representa su relacin entrada/salida.

Desarrollo:
Primero veremos un demo de Simulink y posteriormente se realizan modelos sencillos. Un ejemplo
de un sistema es el utilizado para demostrar el uso de la condicional if-then-else, que se muestra a
continuacin:

Iniciando Simulink
41
Para iniciar el programa Simulink, se puede realizar de diferentes formas, la ms sencilla teclear
desde la ventana de comandos de Matlab:

>> simulink
Tambin es posible acceder al programa desde el botn Simulink de la barra de botones de
Matlab.

Al iniciar Simulink, se presenta una ventana como la de la figura, que corresponde al Navegador de
libreras o Library browser de Simulink:




En esta ventana se muestran todas las libreras
disponibles; cada una de ellas contiene bloques
elementales con los que se pueden construir sistemas.
En funcin de la instalacin concreta de Simulink, el
nmero de libreras puede ser menor o mayor.




Ayuda en Simulink
Debido a que Simulink es un toolbox de Matlab, la ayuda se estructura del mismo modo:

- Ayuda en lnea
Se accede a travs de la ventana de comandos de Matlab. La ayuda se obtiene en modo texto. Por
ejemplo, al teclear
>> help simulink
se visualizar la ayuda que lista los comandos de Simulink. Si se requiere de algn bloque en
especial se le da el nombre del bloque como ya se ha visto.
- Navegador de ayuda
Se accede desde el men Help, seleccionando la opcin Simulink help.
Ejemplos de demostracin de Simulink
Simulink proporciona ejemplos y demostraciones de sus principales funcionalidades. Se accede a
42
ellos a travs del men Help (de Matlab) seleccionando la opcin Demos.

Ejecucin de un sistema ejemplo
Como primer paso, ejecutaremos el ejemplo ifsub, demostracin de bloques if-Then-Else.

Formas de abrir el sistema ejemplo:
Desde la ventana de comandos de Matlab, teclear ifsub.
Navegar en los ejemplos (demos) de Simulink y seleccionar, dentro de la carpeta Block
Diagramming Features, el modelo If-Then-Else Blocks

El ejemplo debe tener un aspecto parecido al que mostraba la primera imagen de esta prctica.

Forma de ejecutar la simulacin: Para la ejecucin de la simulacin se puede realizar desde el
men Simulation seleccionando la opcin Start o con el icono de la barra de tareas.
El sistema indica con un aviso acstico cuando se ha alcanzado el final de la simulacin; si
deseramos parar la ejecucin antes de llegar al final, bastara con seleccionar, dentro del men
Simulation, la opcin Stop. Esto es particularmente til en simulaciones lentas; una simulacin
rpida como la de este ejemplo puede durar menos de un segundo en un PC normal.
Ms adelante comprobaremos cules han sido los resultados de la simulacin: se han obtenido
tanto la evolucin de la temperatura en el interior de la casa como los costes de calefaccin.

Algunos detalles importantes sobre la simulacin:
Si no se han modificado los parmetros iniciales, Simulink habr simulado el
comportamiento del sistema durante los primeros 10 segundos.
Los instantes de comienzo y fin de simulacin se pueden cambiar dentro del men
Simulation eligiendo la opcin Simulation Parameters. Probaremos a relanzar la
simulacin con distintos tiempos de comienzo (Start time) y fin (Stop Time). El resto de
los parmetros no se modificarn por ahora.

Las ventanas de representacin grfica de resultados: Estas ventanas funcionan de un modo
similar a un registrador de seales o un osciloscopio digital. Sern bastante utilizadas en nuestras
simulaciones y, por tanto, conviene familiarizarse con su comportamiento. Son el elemento Scope
y en el ejemplo aparece una. Para visualizar los resultados deberemos hacer doble clic sobre este
elemento:
43

Una vez hecho doble clic sobre el elemento, aparecer una ventana grfica con los resultados de
la simulacin; es una imagen similar a la que se vera en un osciloscopio digital:

- La ventana de resultados permite ajustar la
zona a visualizar: los tres botones con forma de lupa,
sirven para hacer zoom sobre un rea de la grfica. El
primero de ellos permite definir un rectngulo sobre el
grfico y ampliar exactamente esa rea. Los otros dos
permiten definir una recta horizontal o vertical
respectivamente y hacen zoom slo en una dimensin.
Por ltimo, el siguiente botn, que presenta un dibujo
de unos prismticos, sirve para ajustar el tamao del
grfico a los datos disponibles.
- Si el tiempo de simulacin es muy elevado, la
grfica no retiene todos los datos, sino que descarta
los ms antiguos y conserva slo los ltimos. Para
modificar el nmero de datos a retener, se debe
pinchar sobre el segundo botn de la izquierda
(Parameters) y modificar, dentro de Data History el
valor indicado para el campo Limit data points to last... que, por defecto, debe tener un valor de
5000. Tambin es posible desactivar la opcin de forma que no se descarte ningn valor.

Tipos de bloques en Simulink
En el sistema elegido como ejemplo puede observarse como existen multitud de bloques distintos;
todos los bloques de Simulink se estructuran en diferentes categoras. La ventana que aparece al
arrancar Simulink permite comprobar cules son las categoras de bloques existentes. Basta con
hacer clic sobre el signo + que acompaa al elemento Simulink de la lista, para profundizar en las
opciones existentes. En la figura siguiente se muestra, en la ventana de la izquierda, el aspecto
inicial del navegador; y en la ventana de la derecha el resultado de pulsar sobre el signo + de la
categora Continuous. Los elementos que aparecen a la derecha son los bloques con los que se
puede construir un modelo.

44


A continuacin se indican algunos de los bloques que se usarn en esta prctica y las siguientes y
la categora a que pertenecen:
Sources: Entradas o fuentes de seales
Step (escaln)
Ramp (rampa)
Sine wave (senoidal)
Pulse generador (tren de pulsos)
From workspace (lectura de datos desde Matlab)
...
Sinks: Salidas o dispositivos de visualizacin/almacenamiento de variables del sistema
Scope (osciloscopio)
Display (indicador numrico)
To workspace (envo de datos a Matlab)

Continuous: Representan sistemas continuos por su relacin entrada-salida
45
Derivative (bloque derivador: la salida es la derivada de la entrada)
Integrator (bloque integrador: la salida es la integral de la entrada)
Transfer Fcn (funcin de transferencia en s expresada como cociente de polinomios)
Zero Pole (funcin de transferencia en s expresada en forma factorizada)

Math operators: Operaciones matemticas sobre seales
Sum (sumador de seales)
Gain (ganancia o multiplicacin de una seal por una constante)

Signal Routing: Permite realizar conexiones especiales entre seales
Mux: (multiplexor: agrupa distintas seales en un vector o bus)

El procedimiento de trabajo para la creacin de un modelo ser seleccionar los bloques adecuados
de entre los presentes en estas categoras, colocarlos sobre la ventana de diseo y establecer las
conexiones correspondientes entre ellos. A continuacin crearemos un modelo de ejemplo.
Creacin de un modelo sencillo
Como ejemplo, crearemos un modelo que nos permita generar una seal cualquiera (una funcin
del tiempo) y representar sus valores. Comenzaremos representando la funcin sen(t).
Primer paso: creacin del modelo.
Desde la ventana Simulink Library Browser, haremos clic sobre el botn Create a new model
(pgina en blanco). Automticamente se abrir una ventana en blanco que ser la ventana de
diseo para nuestro modelo.
Segundo paso: introduccin de bloques en el modelo.
Los elementos se introducen haciendo un arrastre con el ratn desde la ventana que contiene el
listado de todos los bloques hacia la ventana de diseo. En nuestro caso requeriremos los
siguientes bloques:
Dentro de la categora Sources, el bloque Sine Wave. Este elemento se corresponde
con una seal senoidal, que es la que deseamos generar.

Dentro de la categora Sinks, el
bloque Scope. Ser el que
utilicemos para visualizar la seal.

Una vez introducidos estos modelos, la ventana
de diseo presentara un aspecto como el que
se muestra en la Figura.
46

Tercer paso: modificacin de parmetros en los bloques introducidos.
Todos los bloques de Simulink permiten una cierta configuracin. En particular, el bloque
correspondiente a la funcin seno se puede configurar en cuanto a amplitud, frecuencia, fase, etc.
Para ello se debe hacer doble clic sobre el bloque, con lo que aparecer una ventana de
introduccin de parmetros.

Para nuestra primera simulacin, introduciremos los siguientes valores:
Sine type: time based (buscamos generar una seal continua y no discreta)
Amplitude: 4 (la seal tomar valores de -4 a +4)
Bias: 0 (componente contnua = 0, seal centrada)
Frequency: 3 rad/s (frecuencia de la seal seno)
Phase: 0 (desfase respecto del instante t = 0)
Sample time: 0 (tiempo de muestreo, ser cero para seales continuas)
Cuarto paso: interconexin de elementos.
Una vez situados los elementos en la ventana de diseo, es necesario establecer conexiones entre
ellos. Para conectar 2 elementos debe hacerse un arrastre con el ratn desde la salida de uno de
ellos hasta la entrada del elemento
correspondiente. Una vez establecidas las dos
conexiones necesarias para nuestro sistema,
deberamos obtener un resultado como el que
se muestra en la Figura.
Quinto paso: lanzamiento de la simulacin
y comprobacin de resultados.
Lanzaremos la simulacin con la opcin Start del men
Simulation y comprobaremos los resultados obtenidos
haciendo doble clic sobre el bloque Scope. Se mostrar una
ventana grfica como la vista en el primer ejemplo sobre la que
podremos hacer zoom para ajustar nuestra curva. Deber
aparecer algo similar a lo que se muestra a en la Figura.

Una vez creado el esquema, probaremos a representar otras
seales que nos ofrece Simulink dentro de la categora Sources. Para ello borraremos del
esquema el bloque Sine Wave y en su lugar insertaremos otro cualquiera. En particular,
probaremos uno a uno con los siguientes bloques:

47
Step (escaln)
Ramp (rampa)
Pulse generator (tren de pulsos)

En cada uno de los casos deberemos lanzar de nuevo la simulacin

Creacin de un segundo modelo
A continuacin crearemos un modelo algo ms complicado, en el que se realice alguna operacin
con las seales. Vamos a crear un sistema que nos permita calcular la integral de una seal.
El bloque que realiza la integral de una seal
se encuentra dentro de la categora
Continuous. Es el bloque denominado
Integrator. Con l, y con los bloques que
tenamos del esquema anterior, deberemos
realizar un montaje como el que se muestra en
la Figura.

Si ejecutamos la simulacin y visualizamos los resultados veremos cmo se obtiene la integral de
la seal de entrada. Podemos probar a cambiar la seal de entrada para comprobar como:

La integral de una seal escaln es una seal rampa
La integral de una seal rampa es una seal parbola
Etc.

A continuacin haremos un cambio en el esquema que nos permita ver en el mismo grfico las dos
seales: la original y su integral.

Para visualizar dos seales en el elemento Scope es necesario recurrir al bloque multiplexor
Mux de la categora Signals Routing. Este bloque tiene por finalidad agrupar dos o ms
seales para formar un vector. De este modo, se agruparn la seal de entrada y la seal de salida
y el conjunto ser lo que se enve al osciloscopio. Las conexiones se deben realizar tal y como se
muestra en la figura.

48
En este esquema hay algo nuevo que an no
sabemos hacer: cmo crear una rama nueva
sobre una conexin ya existente (la segunda
rama que llega al multiplexor no parte de la salida de un bloque, sino de un punto intermedio de
una conexin). La forma de crear este tipo de conexiones es pulsando el botn Ctrl al mismo
tiempo que se empieza a arrastrar con el ratn.

Lanzando una nueva simulacin, debemos comprobar que en la ventana del osciloscopio se
muestran las dos seales: la original y la integral, tal y como muestra la figura siguiente:


49
Simulacin de un sistema descrito por una ecuacin diferencial

En el ejemplo anterior se ha comprobado como es posible obtener la integral de una seal cualquiera.
Esta ser la herramienta que utilizaremos para representar una ecuacin diferencial.

En nuestro caso queremos representar un sistema fsico consistente en una masa M unida a un
muelle de constante elstica K, y con un rozamiento viscoso B, tal y como se describe en la figura:


El objetivo ser ver cmo afecta la fuerza aplicada
f(t) al movimiento de la masa, descrito por x(t)

La ecuacin diferencial que rige el comportamiento
de este sistema es:
) (
) ( ) (
) (
2
2
t x K
dt
t dx
B
dt
t x d
M t f + + =

Para representar este sistema en Simulink, veremos a continuacin unos ejemplos de utilizacin de
los bloques integrador, sumador y multiplicador por constante (se encuentran dentro de las categoras
Continuous y Math). Dado que no son ejemplos completos, no se deben introducir en Simulink, se
incluyen slo como ayuda para entender la forma de representar una ecuacin cualquiera:

Bloque integrador: permite obtener a partir de d
2
x(t)/dt
2
sus integrales dx(t)/dt y x(t):


Bloque sumador: permite sumar/restar seales (se muestra un ejemplo):


50


2
2
) (
dt
t x d

dt
t dx ) (
) (t x
dt
t dx
t x
) (
) ( +

Bloque multiplicador o ganancia: permite multiplicar un bloque por una constante:



2
2
) (
dt
t x d

dt
t dx ) (
) (t x
dt
t dx ) (
5
dt
t dx
t x
) (
5 ) ( +
Una vez vistos estos ejemplos pasaremos a representar la ecuacin diferencial propuesta. Para ello
despejaremos de la ecuacin inicial el trmino d
2
x(t)/dt
2
, obteniendo:

|
.
|

\
|
= ) (
) (
) (
1 ) (
2
2
t x K
dt
t dx
B t f
M dt
t x d



51

K = 10 B = 1 1
1
=
M

Analizando el diagrama podemos comprobar cmo responde exactamente a la ecuacin diferencial
planteada para el sistema. Otros sistemas de cualquier tipo (elctricos, trmicos, etc.) podran
representarse de la misma forma si se conoce su ecuacin diferencial.
Se han elegido los siguientes valores para las constantes y para f(t):
K: 10
B: 1
M:1
f(t): funcin escaln

Nota: en el diagrama que se muestra alguno de los bloques se encuentran girados para que sea ms
fcil realizar las conexiones. Esto se hace seleccionando el bloque y eligiendo la opcin Flip Block
del men Format.

Despus de comprender el funcionamiento del esquema
propuesto, se introduce en Simulink y observaremos cul es
el resultado obtenido en el elemento Scope (ver Figura).
Lo que se ve es el efecto que una fuerza en forma de
escaln (seal de entrada) produce sobre la posicin (seal
de salida). En el conjunto muelle-amortiguador, el
movimiento de la masa debe presentar oscilaciones que

52
poco a poco deben ir desapareciendo.
Una vez que hemos creado el esquema que permite simular un determinado sistema fsico, podemos
comprobar hasta qu punto es til disponer de una simulacin para comprobar el funcionamiento de
cualquier sistema. Realizaremos las siguientes pruebas:
Sobre el esquema anterior, aumentaremos el valor de la masa M cambiando la ganancia
(Gain) del elemento correspondiente. Realizaremos de nuevo la simulacin y comprobaremos
el efecto de las variaciones de este parmetro.
Haremos lo mismo con la constante elstica K y con el rozamiento viscoso B.
Por ltimo, probaremos la respuesta ante otros tipos de seal de entrada: senoidal, pulsos,
etc.

EJERCICIO SIMULINK
El objetivo es simular el comportamiento de un sistema elctrico del que conocemos su ecuacin
diferencial:

}
+ + = dt t i
C dt
t di
L t i R t v ) (
1 ) (
) ( ) (

F . C H L R 1 0 1 5 . 0 = = =


Se tomar como entrada la seal v(t) y como salida la seal i(t).
Se comprobarn los resultados obtenidos para dos tipos de entradas:
v(t) = escaln. (amplitud de 1V, tiempo de simulacin de 20 segundos). En este caso lo que
estamos haciendo es similar a un anlisis transitorio en continua. El tipo de respuesta depender
del coeficiente de amortiguamiento. Para modificarlo variaremos los valores R, L, C.
v(t) = senoidal. (amplitud 5V y frecuencia 1 rad/seg, tiempo de simulacin de 20 segundos).
Este caso corresponde al anlisis de un circuito en alterna. Para comprobar la salida en rgimen
permanente, que ser lo que nos interese en este caso, tendremos que fijar un tiempo de
simulacin lo suficientemente largo.
Nota: al igual que en el caso del muelle lo ms conveniente para la representacin en Simulink era
despejar d
2
x(t)/dt
2
, en este caso lo ms apropiado es despejar di(t)/dt. De este modo podemos
representar el sistema utilizando slo el operador integral; en otro caso deberamos utilizar el
operador derivada, que ofrece mayores dificultades para la simulacin.


53
UNIVERSIDAD MICHOACANA DE SAN NICOLS DE HIDALGO
FACULTAD DE INGENIERA ELCTRICA

LABORATORIO DE TEORA DE CONTROL I

Prctica 7: Aspectos avanzados Matlab/Simulink

Objetivo:
Realizar operaciones de transmisin de datos entre el rea de trabajo de Matlab y Simulink.

Introduccin:
En la prctica previa se ha utilizado el elemento Scope para representar los valores que toma
una seal cualquiera en un esquema Simulink. Sera interesante disponer, no slo de la
representacin de esas seales sino tambin de sus valores numricos, para poder trabajar
posteriormente sobre ellos (por ejemplo, para poder calcular el valor mximo y mnimo de una seal y
los instantes de tiempo en que se producen, etc).

El elemento Scope permite, al mismo tiempo que representa los resultados de una simulacin,
guardar esos resultados en una variable de Matlab, de modo que se puedan consultar sus valores
desde la ventana de comandos.

Desarrollo:
Como ejemplo volveremos a trabajar sobre el esquema utilizado en la prctica anterior para simular el
comportamiento de un conjunto muelle amortiguador. El aspecto del esquema es el que se muestra a
continuacin:



Se realizar la simulacin de este esquema con los siguientes parmetros:
Tiempo de simulacin: 10 segundos.
Amplitud del escaln de entrada: 5 unidades.

El resultado debera ser igual al que muestra la siguiente figura:

54


Nota: en caso de no obtener exactamente estos resultados es posible que la configuracin del bloque
escaln no sea la correcta. En la Figura siguiente se muestran los parmetros del bloque escaln y su
significado sobre la representacin grfica del mismo:



En general, el escaln se producir en el instante cero (no estar retrasado) con lo que el parmetro
step time deber ser siempre cero; el valor inicial del escaln (initial value) tambin ser cero; y el
valor final (parmetro final value) deber indicar la amplitud del escaln, que en este caso particular
es cinco.

Ahora haremos click sobre el botn Parameters del elemento Scope, para abrir la ventana de
configuracin:


55

En la ventana de configuracin deberemos seleccionar la solapa Data History y en ella marcaremos
la opcin Save data to workspace o, lo que es lo mismo, guardar los datos en el espacio de trabajo
de Matlab. Ser necesario indicar dos parmetros:

En primer lugar, tendremos que asignar un nombre a la variable en la que deseamos guardar
los datos. Por defecto, esta variable es ScopeData, pero nosotros cambiaremos ese nombre
por posicion (sin acento para evitar problemas) que es el dato que representa ese
osciloscopio en nuestro sistema (posicin del extremo del conjunto muelle-amortiguador).

En segundo lugar, ser necesario especificar un
formato para los datos. Simulink ofrece tres
posibilidades: Structure with time, Structure y
Array. Nosotros elegiremos este ltimo formato,
que quiere decir que los datos se guardarn en
forma de vector.


Una vez hecho esto, realizamos de nuevo la simulacin. El resultado sobre la ventana de Simulink
ser el mismo, pero en la ventana de comandos de Matlab podremos comprobar cmo se han creado
dos nuevas variables. Para ello bastar teclear el comando who:

>> who
Your variables are:
posicion tout
Se han creado dos variables: posicion y tout. La nica variable que nos interesa es la primera de
ellas. Si comprobamos el tamao de la variable con el comando size, veremos que se trata de un
vector de 2 columnas y 58 filas (este ltimo dato puede variar segn los ordenadores):


56
>> size(posicion)
ans =
58 2
La primera de las columnas contiene instantes de tiempo y la segunda contiene los valores que toma
la variable que se representa en el osciloscopio en cada instante. Si representamos las primeras 10
filas de la variable podremos comprobar esto (nota: se usa la instruccin format long para mostrar
ms cifras decimales):
>> format long
>> posicion (1:10,:)
ans =
0 0
0.00000000000000 0.00000000000000
0.00004019018290 0.00000000403807
0.00024114109742 0.00000014536088
0.00124589567003 0.00000387902391
0.00626966853305 0.00009806359195
0.03138853284814 0.00243553350653
0.13244976834872 0.04137887820543
0.31114891413343 0.20203969791657
0.51114891413343 0.44779711805874

La primera de las columnas, como se ha dicho,
corresponde a los instantes de tiempo; y podemos
comprobar cmo no estn separados uniformemente. La
segunda columna corresponde a los valores que toma la
seal, y podemos comprobar que los datos son correctos
haciendo zoom sobre el grfico que aparece en el
elemento Scope (por ejemplo, en el instante 0.511
segundos el valor de la seal es 0.448 aproximadamente).

Desde la ventana de comandos de Matlab, tambin ser
posible representar mediante la instruccin plot la seal
guardada en la variable posicin. Dado que la primera
columna contiene valores de tiempo y la segunda columna
contiene valores de posiciones, la forma correcta de la

57
instruccin plot debera ser:

>> plot(posicion(:,1), posicion(:,2))

Si lo que nos interesa calcular el valor mximo de la seal. Dado que los valores de la seal estn
contenidos en la segunda columna de la variable posicion, bastar con utilizar el comando max de
Matlab:
>> [maximo, indice] = max(posicion(:,2))
maximo = 0.78834718133495
indice = 12

Los valores pueden ser ligeramente distintos en diferentes ordenadores debido a las precisiones de
los clculos. En cualquier caso, el comando max recorre la segunda columna de la variable posicion y
nos devuelve su valor mximo y cul es la fila en la que se produce ese valor (lo que hemos
denominado ndice). Si queremos comprobar a qu instante de tiempo corresponde ese mximo,
bastar con comprobar el valor que toma la primera columna de la variable posicion para ese mismo
ndice (nota: se utiliza la instruccin format short para mostrar menos cifras decimales).

>> format short
>> posicion(indice, :)
ans =
0.9111 0.7883

En resumen, hemos obtenido como resultado que la posicin de la masa mvil (x) en el ejemplo del
sistema muelle-amortiguador alcanza un valor mximo de 0.7883 metros en el instante 0.9111
segundos.

Introduccin de seales arbitrarias en Simulink
En la prctica anterior se comprob como Simulink dispone de muchas seales de entrada, vlidas
para la mayor parte de las aplicaciones: se dispone de las seales escaln, rampa, senoidal, tren de
pulsos, etc.
No obstante, en algunas ocasiones se desea utilizar seales de forma arbitraria, no disponibles
directamente en Simulink. Por ejemplo, podramos desear utilizar una seal de entrada (fuerza
aplicada al conjunto muelle-amortiguador en el sistema sobre el que se est trabajando en esta
prctica) como la que se muestra a continuacin:

58

La forma ms sencilla de introducir una seal como la propuesta es mediante el bloque From
Workspace de la categora Sources. A continuacin se muestra el aspecto que debe tener el
esquema Simulink de la prctica una vez sustituido el bloque escaln por el bloque From workspace:


Gain1

Una vez modificado el esquema Simulink, haremos clic sobre el elemento From Workspace para
acceder a sus parmetros de configuracin. Aparecer una ventana como la que se muestra a
continuacin:

El nico parmetro que nos interesa por el momento es el
nombre de la variable de Matlab de la que Simulink tomar
los datos para utilizarlos como entrada. Por defecto, esta
variable es simin. Nosotros cambiaremos este nombre por
otro ms explicativo: dado que la entrada, en el sistema
considerado, es la fuerza aplicada sobre el conjunto
muelle-amortiguador, llamaremos a esta variable fuerza.
El formato que debe tener esta variable es similar al de
las variables guardadas en Matlab a travs del bloque
Scope: la primera columna debe contener los valores de
los instantes de tiempo y la segunda los valores de
la seal.

59

Un dato importante que hay que fijar es el intervalo entre cada dos instantes de tiempo. Cuanto ms
pequeo sea este intervalo, mejor ser la definicin de la seal. En este ejemplo utilizaremos un
intervalo de 0.1 segundos.

A continuacin pasaremos a definir la seal (vase el grfico anterior de x(t)). Lo ms cmodo ser
definirla por tramos, utilizando un tramo para cada trazo recto de la seal. Adems, y para simplificar
la creacin de la seal, se usarn variables distintas para el tiempo y para la seal. Los tiempos se
guardarn en la variable tmp y los valores de la seal (o datos) en la variable dat.

Primer tramo: entre 0 y 10 segundos. La variable tiempo (vector tmp1) deber tomar valores entre 0
y 10 a intervalos de 0.1; y la seal (vector dat1) deber responder a la ecuacin de la recta x=10t.
Esto lo conseguimos con las siguientes sentencias de Matlab:

>> tmp1 = [0:0.1:10]
>> dat1 = 10*tmp1

Segundo tramo: entre los instantes 10.1 segundos y 30 segundos. la variable tiempo (vector tmp2)
deber tomar valores entre 10.1 y 30 a intervalos de 0.1; y la seal (vector dat2) deber responder a
la ecuacin de la recta x=100. Esto lo conseguimos con las siguientes sentencias de Matlab:

>> tmp2 = [10.1:0.1:30]
>> dat2(1:200)=100

La segunda instruccin crea un vector de 200 elementos, tantos elementos como tiene el vector tmp2,
todos ellos con valor 100.

Tercer tramo: entre 30.1 y 35 segundos. La variable tiempo (vector tmp3) deber tomar valores entre
30.1 y 35 a intervalos de 0.1; y la seal (vector dat3) deber responder a la ecuacin de la recta
x=20t-500. Esto lo conseguimos con las siguientes sentencias de Matlab:

>> tmp3 = [30.1:0.1:35]
>> dat3 = 20*tmp3-500

El ltimo paso es crear las variables tmp y dat como concatenacin de las variables tmp1, tmp2,

60
tmp3 y dat1, dat2, dat3 disponibles. Dado que tanto tmp como dat deben ser vectores columna, se
debern combinar los vectores y trasponer el resultado, tal y como indican las siguientes sentencias
de Matlab (atencin a la comilla final que indica la operacin de trasposicin):
>> tmp = [tmp1, tmp2, tmp3]
>> dat = [dat1, dat2, dat3]

Para comprobar que la seal se ha generado correctamente, lo ms sencillo es utilizar el comando
plot de Matlab: la instruccin plot(tmp,dat) debera producir el siguiente resultado:

Una vez comprobado que las variables tmp y dat contienen valores correctos, generaremos a partir
de ellas la variable fuerza necesaria para el bloque From Workspace. La primera columna deber
contener los tiempos y la segunda los datos, con lo que las instrucciones Matlab a utilizar sern:

>> fuerza(:,1)=tmp
>> fuerza(:,2)=dat

Con la variable fuerza creada, es posible lanzar la simulacin. Dado que la seal est definida durante
35 segundos, el tiempo de simulacin se fijar exactamente en 35 segundos (desde la opcin
Simulation parameters del el men Simulation). El resultado sobre el osciloscopio se muestra en la
figura siguiente, y se debe apreciar cmo la salida del sistema (posicin) reproduce aproximadamente
los valores de la entrada (fuerza aplicada) con pequeas oscilaciones.

61

EJERCICIO SIMULINK
El objetivo es simular el comportamiento de un motor de CD cuyos parmetros se muestran en la hoja
anexa con el siguiente tipo de entradas:
Entrada escaln
Entrada senoidal
Con la siguiente entrada.





62


63
El grfico siguiente muestra la salida que debe producir el sistema ante una entrada en forma de
escaln de 10cm (la referencia aumenta bruscamente de 0 a 10cm). El sistema se ha simulado
durante los primeros 20 segundos de funcionamiento:

15

10

5

0
0 2 4 6 8 10 12 14 16 18 20

Debe comprobarse como la salida sigue a la entrada: una variacin de 10cm en la posicin de
referencia ocasiona en rgimen permanente una variacin de 10cm en la posicin del elemento mvil.
Las sobreoscilaciones que se producen en los instantes iniciales se analizarn posteriormente.
Una vez comprobado el funcionamiento del sistema se deber llevar la seal de salida a una variable
de Matlab, utilizando el bloque Scope, y crear un programa Matlab que se guardar como analiza.m y
que deber realizar los siguientes clculos sobre la seal de salida:
Clculo del valor final de la seal (valor en rgimen permanente)
Clculo del valor mximo (sobreoscilacin) y el instante en el que se produce.
Clculo del instante a partir del cual la salida se puede considerar estabilizada. Este instante
lo consideraremos como el punto a partir del cual la salida permanece dentro de una franja del 5%
del valor final, tal y como muestra el grfico siguiente:


La declaracin de la funcin debe ser como la siguiente:
function [xfin, xmax, tmax, testab] = analiza (posicion)
Como ltimo punto de la prctica, se comprobar la respuesta del sistema ante una seal como la
mostrada en el grfico siguiente, que deber ser introducida al sistema mediante el bloque From

64
Workspace:
x(t)

10



0 20 40 60 t(seg).

A incluir en el informe de la prctica:
Copia del esquema Simulink empleado.
Grfico Matlab de la respuesta ante entrada escaln de 10 unidades, en el que el ttulo del
grfico contendr el nombre y apellidos del alumno.
Listado del programa Matlab creado para el clculo de los valores caractersticos de la seal
de salida; y resultados obtenidos al ejecutar dicho programa.
Grfico Matlab mostrando la respuesta ante la entrada en forma de trapecio del ltimo
apartado; el ttulo tambin mostrar nombre y apellidos del alumno.



65
UNIVERSIDAD MICHOACANA DE SAN NICOLS DE HIDALGO
FACULTAD DE INGENIERA ELCTRICA

LABORATORIO DE TEORA DE CONTROL I

Prctica 8: Funcin de Transferencia y Variables de Estado

Objetivo:
Convertir la representacin de funcin de transferencia a variables de estado y viceversa.

Introduccin:
Matlab tiene comandos tiles para transformar un modelo matemtico de un sistema lineal a otro.
Tales transformaciones son tiles para resolver problemas de ingeniera de control, entre las ms
importantes estn:

Cambio de Funcin de Transferencia a Variable de estado.

[A,B,C,D]=tf2ss(num,den)

Convierte un sistema representado en variables de estado de la forma

( ) D B A sI C
den
num
s U
s Y
+ = =
1
) (
) (


a variables de estado de la forma
Du Cx v
Bu Ax x
+ =
+ =



Es importante notar que la representacin en variables de estado para un sistema no es nica. Hay
una infinidad de representaciones de un sistema en variables de estado. Matlab da una posible
representacin en variables de estado.

Tambin se puede utilizar el comando:

[A,B,C,D]=zp2ss(z,p,k)

Convierte un sistema representado en variables de estado de la forma

( ) D B A sI C
p s p s p s
: s : s : s
K
s U
s Y
m
n
+ =
+ + +
+ + +
=
1
) )...( 2 )( 1 (
) )...( 2 )( 1 (
) (
) (


a variables de estado de la forma
Du Cx v
Bu Ax x
+ =
+ =


Variables de estado a Funcin de Transferencia

66

Si el sistema tiene una entrada y una salida, el comando

[num,den]=ss2tf(A,B,C,D)

Obtiene la funcin de transferencia
) (
) (
s U
s Y


si el sistema involucra mas de una entrada, utilice el siguiente comando

[num,den]=ss2tf(A,B,C,D,iu)

este comando convierte al sistema de su representacin en espacio de estado
Du Cx v
Bu Ax x
+ =
+ =

a la funcin de transferencia

( ) D B A sI C
den
num
s U
s Y
i
+ = =
1
) (
) (


Note que el escalar iu es un ndice en las entradas del sistema y especfica cual de las entradas va a
ser usada para encontrar la funcin de Transferencia.

Tambin existe el comando
[z, p, k]=ss2zp(A,B,C,D,iu)

Obtiene la funcin de transferencia
) (
) (
s U
s Y
en representacin de polos y ceros.

Graficacin de polos y ceros de la funcin de transferencia.

Para graficar los polos y ceros de una Funcin de Transferencia se usa el comando:

[p , z] = pzmap(sistema)

Si solo se requiere la graficacin de polos y ceros, el que regresa la funcin [polos (p), ceros (z)] no
se pone puede ser opcional.

Representaciones alternas de modelos de sistemas

Un sistema representado como un solo objeto (cuando se utilizo el comando tf) se puede ahora
obtener su representacin en las diferentes formas que ya se han visto en las prcticas como son
funcin de transferencia, funcin de transferencia en polos y ceros, y variables de estado todo esto
con los comandos:

[p, z, k] = zpkdata (sistema, v)
[a, b, c, d] = ssdata (sistema)
[num, den] = tfdata (sistema, v)
Desarrollo:
Probar los siguientes ejemplos:

67
1.- Considere el siguiente sistema que contiene 2 entradas
2 1
, u u y dos salidas
2 1
, v v .
(

+
(


=
(
(

2
1
2
1
2
1
1 0
1 1
4 25
1 0
u
u
x
x
x
x


(

+
(

=
(

2
1
2
1
2
1
0 0
0 0
1 0
0 1
u
u
x
x
v
v


Como se puede observar, de este sistema se pueden obtener cuatro funciones de transferencia. La
primera relaciona la salida
1
v con la entrada
1
u , la segunda
2
v con
1
u , la tercera
1
v con
2
u y la
cuarta
2
v con
2
u (cuando se obtiene una de ellas se asume que la otra entrada es cero).

Para obtenerlas usamos en Matlab los comandos
A=[0 1;-25 -4];
B=[1 1;0 1];
C=[1 0;0 1];
D=[0 0;0 0];
[num,den]=ss2tf(A,B,C,D,1)
num =
0 1 4
0 0 -25
den =
1 4 25
[num,den]=ss2tf(A,B,C,D,2)
num =
0 1.0000 5.0000
0 1.0000 -25.0000
den =
1 4 25

Por lo que las funciones de transferencia son

25 4
4
) (
) (
2
1
1
+ +
+
=
s s
s
s U
s Y

25 4
25
) (
) (
2
1
2
+ +

=
s s s U
s Y


25 4
5
) (
) (
2
2
1
+ +
+
=
s s
s
s U
s Y

25 4
25
) (
) (
2
2
2
+ +

=
s s
s
s U
s Y


2.- De la Funcin de Transferencia

) 16 4 )( 10 ( ) (
) (
2
+ + +
=
s s s
s
s U
s Y


Obtener su representacin e variables de estado de la forma:

68
u
x
x
x
x
x
x
(
(
(

+
(
(
(

(
(
(


=
(
(
(
(
(

0
0
1
0 1 0
0 0 1
160 56 14
3
2
1
3
2
1
[ ] [ ]u
x
x
x
v 0 0 1 0
3
2
1
+
(
(
(

=

3.- De la Funcin de Transferencia

008 . 5 1026 . 25 03247 . 5
008 . 5 04 . 25
) (
) (
2 3
+ + +
+
=
s s s
s
s U
s Y


Obtener su representacin e variables de estado de la forma:

u
x
x
x
x
x
x
(
(
(

+
(
(
(

(
(
(


=
(
(
(
(
(

0
0
1
0 1 0
0 0 1
00 . 5 102 . 25 032 . 5
3
2
1
3
2
1
[ ] [ ]u
x
x
x
v 0 008 . 5 04 . 25 0
3
2
1
+
(
(
(

=

4.- Del sistema de ecuaciones de estado:

u
x
x
x
x
x
x
(
(
(

+
(
(
(

(
(
(


=
(
(
(
(
(

0 . 121
04 . 25
0
032 . 5 1026 . 25 032 . 5
1 0 0
0 1 0
3
2
1
3
2
1
[ ] [ ]u
x
x
x
v 0 0 0 1
3
2
1
+
(
(
(

=

Obtenindose la F.T. del ejemplo anterior.

Otros ejemplos
1. Utilice el comando adecuado para modelar los siguientes sistemas, observe el diagrama de polos y
ceros respectivo.

2. Obtenga las representaciones alternas de los modelos creados en el punto anterior, es decir
obtenga mediante transformacin, los modelos ZPK, TF y SS de cada uno de los sistemas.
3. Halle la funcin de transferencia G2/G3 mediante comandos de polinomios, obtenga su diagrama
de polos y ceros.

69
Ejercicio:

1. Pruebe de los ejemplos anteriores que tienen la representacin de variables de estado a
representacin de polos y ceros y compruebe los resultados con el mismo Matlab.

2. Obtenga la representacin en variables de estado de:
) 125 . 0 )( 5 . 0 (
) 25 . 0 ( 2
) (
) (

=
s s
s
s U
s Y


3. Grafique los polos y ceros de cada uno de los primeros ejemplos de la prctica.

4. Realizar un programa en Matlab que pueda cambiar de una forma de representacin de un sistema
a otro. La seleccin la debe de realizar el usuario por medio de un men que presente el Matlab. El
programa debe de funcionar para cualquier orden del sistema. As como la graficacin de polos y
ceros.



70
UNIVERSIDAD MICHOACANA DE SAN NICOLS DE HIDALGO
FACULTAD DE INGENIERA ELCTRICA

LABORATORIO DE TEORA DE CONTROL I

Prctica 9 y 10: Anlisis de Respuesta Transitoria de Sistemas de
Control I y II
Respuesta en el Tiempo de Sistemas de Primer y Segundo Orden

Objetivo:
Utilizar distintas herramientas de MATLAB y SIMULINK para simular sistemas de primer y segundo
orden.
Analizar como cambia la respuesta temporal de sistemas de primer y segundo orden segn cambian
sus parmetros.
Analizar el efecto en sistemas de aadir ceros e incrementar el orden del sistema.

Introduccin:
Las respuestas transitorias (tales como respuesta al escaln, al impulso y a la rampa) son usadas
frecuentemente para investigar las caractersticas en el dominio del tiempo de los sistemas de control.
Las caractersticas de respuesta transitoria, tales como rapidez, mximo sobreimpulso, tiempo de
establecimiento, error en estado estacionario pueden ser determinadas a partir de la respuesta al
escaln unitario.
Si se conoce el numerador y el denominador de la Funcin de Transferencia en lazo cerrado,
entonces se puede usar el comando

step(num,den)
o bien
step(num,den,t)

La cual genera los valores de la respuesta al escaln unitario (t se utiliza para especificar el tiempo).

Para un sistema de control definido en variables de estado el comando

step(A,B,C,D)

genera la grfica de la respuesta al escaln. Este vector es generado automticamente cuando t no
es incluido en el comando escaln.

Cuando existen argumentos a la izquierda del comando tales como

[y,x,t]=step(num,den,t)
[y,x,t]=step(A,B,C,D,iu)
[y,x,t]=step(A,B,C,D,iu,t)

con este comando no se grafica en la pantalla, sino que hay que usar el comando plot para ver las
curvas de la respuesta.

Las matrices y, x contienen la salida y la respuesta de estado del sistema respectivamente para los
puntos del intervalo t, la salida y tiene tantas columnas como salidas y un rengln por cada elemento

71
en t, x tiene tantas columnas como estados tenga el sistema y un rengln por cada elemento en t.

Adems iu es un ndice para las entradas del sistema y especfica cual entrada es utilizada para
obtener la respuesta y t es utilizada para especificar el tiempo. Si el sistema involucra mltiples
entradas y salidas, el comando step descrito anteriormente, produce una serie de grficas de
respuesta al escaln unitario, una por cada combinacin entrada salida del sistema.

Ejemplo.- Obtener la respuesta al escaln unitario del sistema

25 4
25
) (
) (
2
+ +
=
s s s R
s C


En Matlab usamos
% respuesta del sistema a una entrada escaln unitario
% funcin G(s)
num=25;
den=[1 4 25];
% comando para graficar
step(num,den);grid
title('Respuesta al escaln unitario');


Ejemplo. - Obtener la respuesta al escaln unitario de un
sistema descrito en variables de estado.
Du Cx v
Bu Ax x
+ =
+ =

donde

(
(
(
(


=
8 32 80 100
1 0 0 0
0 1 0 0
0 0 1 0
A
(
(
(
(

=
60
5
0
0
B [ ] 0 0 0 1 = C

El programa en Matlab es

% Respuesta al escaln unitario
% matrices A,B,C y D
A=[0 1 0 0;0 0 1 0;0 0 0 1;-100 -80 -32 -8];
B=[0;0;5;60];
C=[1 0 0 0];
D=[0];
% Se obtiene la respuesta al escaln unitario
step(A,B,C,D); grid;
title('Respuesta al escaln unitario');
si se desea graficar los valores de las variables de
estado se puede realizar de la siguiente forma en Matlab

% Calcula la respuesta al escaln obteniendo
% los resultados en matrices
[y,x,t]=step(A,B,C,D);
% Graficar todas las variables de estado
Time (sec.)
A
m
p
litu
d
e
Respuesta al escalon unitario
0 0.5 1 1.5 2 2.5 3
0
0.2
0.4
0.6
0.8
1
1.2
1.4
From: U(1)
T
o
: Y
(1
)
Time (sec.)
A
m
p
litu
d
Respuesta al escaln unitario
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
0
0.2
0.4
0.6
0.8
1
1.2
1.4
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
-14
-12
-10
-8
-6
-4
-2
0
2
4
t seg
x
1
,
x
2
,
x
3
curvas de la respuesta de x1,x2,x3 vs t

72
plot(t,x); gris on;
xlabel('t seg');ylabel('x1,x2,x3');
title('curvas de la respuesta de x1,x2,x3 vs t')

% En forma individual las variables de estado
% para x1 vs t
x1=[1 0 0 0]*x';subplot(221);plot(t,x1)
grid on;xlabel('t seg');
ylabel('x1');title('respuesta de x1 vs t');
% para x2 vs t
x2=[0 1 0 0]*x';subplot(222);plot(t,x2)
grid on;xlabel('t seg');
ylabel('x2');title('respuesta de x2 vs t');
% para x3 vs t
x3=[0 0 1 0]*x';subplot(223);plot(t,x3)
grid on;xlabel('t seg');
ylabel('x3');title('respuesta de x3 vs t');
% para x4 vs t
x4=[0 0 0 1]*x';subplot(224);plot(t,x4)
grid on;xlabel('t seg');
ylabel('x4');title('respuesta de x4 vs t');


Respuesta al impulso.
La respuesta al impulso de ) (s G es la misma que la respuesta al escaln unitario de ) (s sG .
Ejemplo, la respuesta al impulso unitario del sistema
1
1
) (
) (
) (
+
= =
s
s G
s R
s C

dado que 1 ) ( = s R para una entrada impulso, tenemos
s s
s
s C
1
1
) ( |
.
|

\
|
+
=
% La respuesta al impulso unitario de G(s)=1/(s+1)
% usando el comando de respuesta al escaln (step)
% numerador y denominador del sistema sG(s)
num=[1 0];
den=[1 1];
% Comando de la respuesta al escaln
[y,x,t]=step(num,den,'k');
plot(y,t,'k'); grid on;
title('respuesta al impulso unitario de G(s)=1/(s+1)');
xlabel('t seg');ylabel('Amplitud');
Para obtener la respuesta al escaln y al impulso de un
sistema de la forma

u
x
x
x
x
x
x
x
x
(
(
(
(

+
(
(
(
(

(
(
(
(


=
(
(
(
(

0166 . 0
0347 . 0
0878 . 0
0
4791 . 1 4791 . 0 0878 . 0 0073 . 0
1 0 0 0
0 1 0 0
0 0 1 0
4
3
2
1
4
3
2
1

0 2 4 6
0
0.5
1
1.5
t seg
x
1
respuesta de x1 vs t
0 2 4 6
-0.5
0
0.5
1
1.5
t seg
x
2
respuesta de x2 vs t
0 2 4 6
-4
-2
0
2
4
t seg
x
3
respuesta de x3 vs t
0 2 4 6
-15
-10
-5
0
5
t seg
x
4
respuesta de x4 vs t
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
1
2
3
4
5
6
respuesta al impulso unitario de G(s)=1/(s+1)
t seg
A
m
p
lit
u
d

73
[ ]
(
(
(
(

=
4
3
2
1
0 0 0 1
x
x
x
x
v
Para obtener la respuesta al escaln del sistema usamos

[y,x,t]=step(A,B,C,D);

debido a que la respuesta al impulso es la derivada de la respuesta al escaln, la derivada de la salida
) (
1
x v = proporciona la respuesta al impulso. Para las ecuaciones de estado, se puede ver que la
derivada de v es
2
x . Por lo tanto
2
x vs t dar la respuesta al impulso del sistema. Donde
2
x puede
ser obtenida de la forma

[ ] ' * 0 0 1 0
2
x x =

El programa en Matlab puede ser el siguiente

% Respuesta al impulso
% Entrada del sistema en variables de estado
A=[0 1 0 0;0 0 1 0;0 0 0 1;-0.0073 -0.0878 -0.4791 -1.4791];
B=[0;0.0878;-0.0347;0.0166];
C=[1 0 0 0];
D=[0];
% Calcula la respuesta al escaln
[y,x,t]=step(A,B,C,D);
% As la respuesta est dada por x2
x2=[0 1 0 0]*x';
plot(t,x2,'k');
grid on;title('Respuesta al impulso = x2');
xlabel('t seg');ylabel('Salida del impulso (x2)')


Respuesta a una entrada rampa.

Para obtener la respuesta de una rampa de la funcin de transferencia del sistema ) (s G , se divide
) (s G por s , y usamos el comando de respuesta al escaln.
Ejemplo, el sistema de lazo cerrado
1
1
) (
) (
2
+ +
=
s s s R
s C

Para una entrada rampa,
2
1
) (
s
s R = se tiene
s s s s s s s
s C
1
) 1 (
1 1
1
1
) (
2 2 2
+ +
=
+ +
=

Para obtener la respuesta de una rampa en Matlab el numerador y denominador del sistema se
convierte en

num=[0 0 0 1]; den=[1 1 1 0];
0 10 20 30 40 50 60
-0.05
0
0.05
0.1
0.15
0.2
Respuesta al impulso = x2
t seg
S
a
lid
a

d
e
l
im
p
u
ls
o

(
x
2
)

74

Con lo cual se puede utilizar el comando para la respuesta escaln (step)

% Respuesta a la rampa es obtenida como la respuesta al escaln de G(s)/s
% numerador y el denominador del sistema G(s)/s
num=[0 0 0 1];
den=[1 1 1 0];
% Especifica el tiempo de clculo (t=0:0.1:7)
% y el comando de respuesta al escaln
t=0:0.1:7;
c=step(num,den,t);
% Grafica la respuesta y la entrada de referencia
% La entrada de referencia es t
plot(t,c,'ko',t,t,'k-'); grid on;
title('Respuesta a una Rampa del sistema
G(s)=1/(s^2+s+1)');
xlabel('t seg');ylabel('Salida c');


La respuesta a la rampa de un sistema definido en variables de estado, descrita por el sistema
u
x
x
x
x
(

+
(


=
(

1
0
1 1
1 0
2
1
2
1
[ ]
(

=
2
1
0 1
x
x
v

Cuando las condiciones iniciales son cero, la respuesta a la rampa es la integral de la respuesta al
escaln. As la respuesta a la rampa puede escribirse como
}
=
t
vdt :
0

As
1
x v : = =
Definiendo
3
x : = entonces
1 3
x x =

Combinando la ecuacin anterior con la original del sistema, obtenemos

u
x
x
x
x
x
x
(
(
(

+
(
(
(

(
(
(

=
(
(
(

0
1
0
0 0 1
0 1 1
0 1 0
3
2
1
3
2
1
[ ]
(
(
(

=
3
2
1
1 0 0
x
x
x
:
que puede ser reescrita como
BBu AAx x + = DDu CCx : + =
donde
[ ]
[ ] [ ] (
(
(

=
(
(
(

=
0
0
0
0 0 1
0 1 1
0 1 0
C
A
AA
(

=
(
(
(

=
0
0
1
0
B
BB

[ ] 1 0 0 = CC [ ] 0 = DD

0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7
Respuesta a una Rampa del sistema G(s)=1/(s
2
+s+1)
t seg
S
a
lid
a

c

75
Note que
3
x es el tercer elemento de x . En matlab se puede obtener de la siguiente forma

% Respuesta a una Rampa
% La respuesta a una rampa es obtenida por la adicin de una nueva variable de
% estado, x3. La dimensin de las ecuaciones de estado es aumentada en uno.
% sistema en ecuaciones de estado
A=[0 1;-1 -1];
B=[0;1];
C=[1 0];
D=[0];
% nuevo sistema de ecuaciones AA,BB,CC,DD
AA=[A zeros(2,1);C 0];
BB=[B;0];
CC=[0 0 1];
DD=[0];
% Calcula la respuesta al escaln
[z,x,t]=step(AA,BB,CC,DD);
% grafica la respuesta a la rampa x3
x3=[0 0 1]*x';plot(t,x3,'k',t,t,'k-');
% adiciona etiquetas
grid on;title('Respuesta a una rampa de un sistema
en variables de estado');
xlabel('t seg');ylabel('Salida');
zoom on


Las Respuestas de los sistemas tambin se pueden obtener a partir de la ecuacin representada en
el tiempo como se muestra en los siguientes ejercicios:

Ejercicio: Calcula y representa grficamente la respuesta de un sistema de 1 orden con una
entrada en escaln unitario.
%Respuesta de un sistema de 1 orden con entrada en escaln unitario.
k=input('Introduce la ganancia del sistema:');
T=input('Introduce la constante de tiempo del sistema:');
t=0:0.1:20;
y=k-k*(exp((-t)/T)); %Definicin de la ecuacin de entrada en escaln unitario.
plot(t,y);

Ejercicio: Calcula y representa grficamente la respuesta de un sistema de 1 orden con una
entrada impulso.
%Respuesta de un sistema de 1 orden con entrada impulso.
k=input('Introduce la ganancia del sistema:');
T=input('Introduce la constante de tiempo del sistema:');
t=0:0.1:20; %Definicin del intervalo de representacin y del incremento.
y=(k/T)*exp((-t)/T); %Definicin de la ecuacin de 1 orden impulso.
plot(t,y); %Orden de dibujo de la grfica.

Ejercicio: Calcula y representa grficamente la respuesta de un sistema de 1 orden con una
entrada en rampa.
%Respuesta de un sistema de 1 orden con entrada en rampa.
k=input('Introduce la ganancia del sistema:');
T=input('Introduce la constante de tiempo del sistema:');
t=0:0.1:20;
y=k*(t-T)+k*T*(exp((-t)/T));
0 1 2 3 4 5 6 7 8 9 10
0
1
2
3
4
5
6
7
8
9
10
Respuesta a una rampa de un sistema en variables de estado
t seg
S
a
li
d
a

76
plot(t,y);

Otra forma de introducir seales de prueba a un sistema es como se muestra en el siguiente ejercicio:

Ejercicio: Simular y representar la respuesta a una entrada senoidal contaminada por ruido, siendo:
3 2
1 5 2
) (
) (
) (
2
2
+ +
+ +
= =
s s
s s
s R
s C
s G

En este caso, ser necesario utilizar una funcin universal que pueda ser utilizada para todas las
entradas y es lsim (ver ayuda de lsim).
A esta funcin, hay que especificarle la seal que le estamos aplicando, mediante la variable u que,
por ejemplo, para el caso de la rampa sera u=t y para el caso de una seal contaminada por otra
senoidal, ser: u=sin(t)+rand(size(t)), donde se sumarn una seal senoidal sobre el tiempo t y otra
seal aleatoria sobre el mismo tiempo, lo que dar lugar a una seal aleatoria que puede ser utilizada
como ruido, porque el ruido, en realidad, es eso, una seal aleatoria.

En Matlab el programa quedara:

% Parmetros del sistema.
t=0:0.1:10;
u=sin(t)+randn(size(t));
num=[2 5 1];
den=[1 2 3];
lsim(num,den,u,t);

Ejercicio:

1. El objetivo fundamental es el de observar como
un sistema de primer orden cambia su
respuesta de acuerdo al cambio de
parmetros.

1.1. - Anlisis de respuesta debida a cambios en parmetros
Realizar un programa (archivo .m) que calcule la respuesta al escaln, impulsiva y rampa de
un sistema de primer orden, donde (constante de tiempo) vara de 0 100 en pasos de 10 y los
visualice en una sola figura. Para ello utilice el comando step
Realizar un programa que calcule el tiempo de subida (Tr), establecimiento (Ts) y error de
posicin utilizando los datos generados por la funcin step.
Realizar una grfica del Tr vs. y Ts vs. .
Utilice el LTIVIEW para comprobar los resultados (use help LTIVIEW para ver como funciona).

1.2. - Anlisis en SIMULINK
Implemente el siguiente sistema de primer orden en SIMULINK,

1 5 . 0
2
) (
) (
) (
+
= =
s
s G
s R
s C


Utilizando como entrada una seal escaln y colocando un integrador y un derivador a la
salida, simule el modelo.
Analice las respuestas y comprelas con los resultados del ejercicio anterior.

2. Simulacin de sistemas de segundo orden
2.1. - Anlisis de respuesta debida a cambios en parmetros
Time (sec.)
A
m
p
l
i
t
u
d
e
Linear Simulation Results
0 2 4 6 8 10
-3
-2
-1
0
1
2
3


77
Implemente un programa que muestre la respuesta de un sistema de segundo orden con wn
=1 y donde (factor de amortiguamiento) vari desde 0 hasta 1.0 en pasos de 0.2.
Escriba un programa que le permita calcular el Mp, el tiempo de establecimiento en funcin de
los valores de los parmetros.
Haga un graco de Ts vs el Mp, para valores de y Wn entre 0 y 1.0.
Utilice el LTIVIEW para comprobar sus programas.

3. Sistemas de orden superior y efectos de adicin de ceros.
Implemente un programa que visualice la respuesta del siguiente sistema cuando wn =1 y
=0.55, variando desde 0 hasta 0.01 en pasos de 0.005.

2 2
2
2
) (
n n
n
s s
s G

+ +
=

Utilizando los mismos valores de parmetros anteriores, aada un cero z
o
=-1/a a la funcin de
transferencia

2 2
2
2
) 1 (
) (
n n
n
s s
as
s G

+ +
+
=

Comprobar el efecto de dicho cero para a = 10, 1, 0.5, 0.2, 0.1, 0.05.(comparar tambin en
una sola grafica la respuesta del sistema con el cero y sin el cero)
Para que valores de a puede despreciarse el efecto del cero?
Utilizando los mismos valores de parmetros anteriores, aada un polo p a la funcin de
transferencia

( )( ) p s s s
p
s G
n n
n
+ + +
=
2 2
2
2
) (



Comprobar el efecto de dicho polo para p = 10, 5, 1, 0.7, 0.2, 0.1, 0.05. .(comparar tambin en
una sola grafica la respuesta del sistema con el polo y sin el polo)
Para que valores de a puede despreciarse el efecto del polo?

4. Utilizando los anlisis expuestos en los ejercicios anteriores llegue a conclusiones especficas
sobre el comportamiento de los sistemas de segundo y primer orden. Presente un reporte completo
que incluya adems los programas y grficos realizados.

5. Identificacin de Sistemas de segundo orden.


78






79
UNIVERSIDAD MICHOACANA DE SAN NICOLS DE HIDALGO
FACULTAD DE INGENIERA ELCTRICA

LABORATORIO DE TEORA DE CONTROL I

Prctica 11 y 12: Diseo de Controladores

Objetivo:
Utilizacin del Matlab y Simulink para el diseo de controladores.

Introduccin:
La forma de utilizar un controlador en serie con la planta se muestra a continuacin:


Las acciones de controles automaticos se pueden clasiIicar basicamente en:
- Controlador on-oII
- Controlador proporcional (P)
- Controlador integral (I)
- Controlador proporcional - integral (PI)
- Controlador proporcional - derivativo (PD)
- Controlador proporcionalintegral- derivativo (PID)

ACCIN DE CONTROL ON-OFF.

Conecta o desconecta la entrada de la planta de acuerdo con el error actuante.


El comportamiento de este controlador queda descrito como.-

<
>
=
0 ) (
0 ) (
) (
2
1
t e para U
t e para U
t m

80

ACCIN DE CONTROL PROPORCIONAL.

u(t) = K
p
e(t) (1)

en el dominio de la frecuencia
p
K
s E
s U
=
) (
) (
(2)
donde K
p
es la ganancia proporcional.
El control proporcional esencialmente es un ampliIicador con ganancia ajustable y su
diagrama.

Sistema de nivel de liquido en lazo cerrado con control P.

La Iuncion de transIerencia de lazo cerrado es.-
KpR RCs
KpR
s R
s H
+ +
=
1 ) (
) (

Aplicando una entrada escalon unitario
s
s R
1
) ( =
s KpR RCs
KpR
s H
1
1
) (
+ +
=
Obteniendo h(t)
1 1
) (
1
+
+
+
=
|
.
|

\
| +

KpR
RKp
e
KpR
RKp
t h
t
RC
KpR

asi el valor Iinal de h(t).
1 1
lim
sH(s) lim
) (
0
0 s
+
=
+ +
=
=

KpR
KpR
KpR RCs
KpR
h
s

o bien por
( )
1 1 1
) (
1
+
=
+
+
+
=
|
.
|

\
| +

KpR
RKp
KpR
RKp
e
KpR
RKp
h
RC
KpR


81

En esta accion de control siempre existe un error en estado estacionario.
Suponiendo R100 s/m
2
, C2m
2
v Kp99. Entonces,

9998 . 0
1 ) 99 ( 100
) 100 ( 99
) ( =
+
= h

Respuesta del sistema ante una entrada escalon.

De la Figura, se ve que el hecho de tener una ganancia Kp grande, permite que el
error estacionario sea pequeo.

ACCIN DE CONTROL INTEGRAL.

dt t e
T
t m
i
}
= ) (
1
) ( (3)
donde:
Ti es la constante de tiempo Integral

en funcin de transferencia.


Ejemplo.- Para el sistema de nivel de lquido.


82
Sistema de nivel de lquido con accin integral.

la Iuncion de transIerencia en lazo cerrado es.-
R RCs s T
R
RCs
R
s T
RCs
R
s T
s R
s H
i
i
I
+ +
=
+
+
+
=
) 1 (
1
1
1
1
1
) (
) (

con una entrada escalon unitario
s
s R
1
) ( =
s R RCs s T
R
s H
i
1
) 1 (
) (
+ +
=
Por el teorema del valor Iinal

1
1
) 1 (
lim ) (
0
= =
+ +
=

R
R
s R RCs s T
R
s h
i
s


Graficando la respuesta del sistema con los mismos datos que el ejemplo anterior y
con Ti=0.001, tenemos una respuesta altamente oscilatoria, aunque el error en
estado estable sea cero ( 0 1 1 ) ( ) ( ) ( = = = h R e ).


Respuesta del sistema de nivel de lquido con accin integral.

ACCIN DE CONTROL DERIVATIVA.
dt
t de
T t m
d
) (
) ( = (4)
donde:
Td.- es la constante de tiempo derivativa


83

Accin de control derivativa.

ACCIN DE CONTROL PROPORCIONAL-INTEGRAL.
}
+ =
t
i
p
p
dt t e
T
K
t e K t u
0
) ( ) ( ) ( (5)
en funcin de transferencia:
|
|
.
|

\
|
+ =
s T
K
s E
s U
i
p
1
1
) (
) (
(6)

Diagrama del control proporcional integral.

donde 1/Ti recibe el nombre de Irecuencia de reposicion y es la cantidad de veces que se
repite la accion proporcional por minuto.

a) Entrada Escalon unitario b) Accion del control PI-ante un escalon unitario
Si
i p i
K K T =

s
K
Kp
s E
s M
I
+ =
) (
) (
(7)

ACCIN DE CONTROL PROPORCIONAL DERIVATIVA.
dt
t de
T K t e K t u
d p p
) (
) ( ) ( + = (8)
en funcin de transferencia:
( ) s
d
T
p
K
s E
s U
+ = 1
) (
) (
(9)
donde K
p
es la ganancia proporcional y T
d
es una constante denominada tiempo derivativo.

84

a) Entrada rampa unitaria b) Accion del control PD ante una entrada rampa unitaria.


Diagrama del control proporcional y derivativo.
ACCIN DE CONTROL PROPORCIONAL INTEGRAL DERIVATIVA.
}
+ + =
t
d p
i
p
p
dt
t de
T K dt t e
T
K
t e K t u
0
) (
) ( ) ( ) ( (10)
en Iuncion de transIerencia:

|
|
.
|

\
|
+ + = s T
s T
K
s E
s U
d
i
p
1
1
) (
) (
(11)
Donde:
- K
p
es la ganancia proporcional
- T
i
es el tiempo integral
- T
d
es el tiempo derivativo.

Diagrama del control proporcional y derivativo e integral

El PID tiene ventajas con respecto a las tres acciones de control anteriores; si no se eligen
adecuadamente sus parametros Kp, Ti y Td puede empeorar el comportamiento del sistema.

85
Respuesta del control PID ante una entrada rampa unitaria.

Consejos generales para el diseo de un controlador PID.
1. Obtener 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 K
p
, T
i
y T
d
para obtener la respuesta deseada. Puede
dirigirse a la tabla para averiguar qu controlador controla cada caracterstica.
6. Por ltimo, tenga en cuenta que, si no es necesario, no se tiene porqu implantar
los tres controladores (proporcional, derivativo e integral) en un nico sistema.
Por ejemplo, si un controlador PI proporciona una respuesta suficientemente
buena entonces no es necesario implantar el controlador derivativo en el sistema.
Mantenga el controlador tan sencillo como sea posible.

SINTONIZACIN DE PIDs.

Mtodo de Ziegler y Nichols.
Ziegler y Nichols encontraron que la mayora de los sistemas de control de procesos
proporcionan, como respuesta a una entrada escaln unitario, una curva en forma de
S, denominada Curva de Reaccin del Proceso. Dicha curva se puede generar
experimentalmente o a partir de la simulacin dinmica de la planta.


86

Curva S, respuesta de un proceso tpico a la entrada escaln unitario.
s
o
t
e
s
K
s G

+
=
1
) (

(12)
donde: K es la ganancia esttica.
es la constante de tiempo aparente.
t
o
es la constante de tiempo muerto.

Tabla 1.- Reglas para sintonizar controladores, por el Mtodo
de Respuesta Transitoria de Ziegler y Nichols.
Mtodo de la Respuesta
Transitoria de Ziegler y Nichols
Controlador K
C
T
I
T
D

P T/L
o
0
PI 0.9*T/L L/0.3 0
PID 1.2*T/L 2*L 0.5*L


Mtodo de Oscilaciones Sostenidas. o Mtodo de la Ganancia Lmite

Esquema de control para determinar la Ganancia Lmite y el Periodo ltimo.

Donde K
U
es la ganancia limite y esta definida como la ganancia del controlador
proporcional a la cual el sistema retroalimentado oscila de manera indefinida a la
frecuencia ltima (1/T
U
). De tal manera que el sistema tendr la respuesta mostrada
en la Figura.

87

Respuesta del Sistema Retroalimentado cuando la Ganancia del
Controlador es igual a la Ganancia Limite.

Tabla 2.- Frmulas de Sintonizacin para el Mtodo de la Ganancia Lmite.
Mtodo de la Ganancia Lmite
Controlador K
C
T
I
TD
P K
U
/2 0
PI K
U
/2.2 T
U
/1.2 0
PID K
U
/1.7 T
U
/2 T
U
/8

Ejercicio:

Para el sistema:


La funcin de transferencia que relaciona la entrada (ngulo theta) con la salida
(posicin de la bola) esta dada por:
2
2
1
) (
) (
s
m
R
J
L
mgd
s T
s R
|
.
|

\
|
+
=
Sustituyendo valores:
2
21 . 0
) (
) (
s s T
s R
=
REQUERIMIENTOS DE DISEO
Los requerimientos de diseo para el problema son:

88
-tiempo de establecimiento menor que 3 segundos
-sobrepaso mximo menor que 5%

RESPUESTA DEL SISTEMA EN LAZO ABIERTO
Recordamos la respuesta del sistema en lazo abierto a una entrada escalon de 0.25 rad.
Aadimos, para ello, el comando:
t=0:0.1:25;
num=0.21;
den=[1 0 0];
gs=tf(num,den);
step(0.25*gs,t,k)

Respuesta que hace evidente la necesidad de
un controlador para cumplir los requerimientos
de diseo especificados.


DISEO DEL CONTROLADOR
Comenzamos analizando la respuesta del sistema en
lazo cerrado a una entrada escalon de 0.25 rad.

Se propone el siguiente comando
[numc, denc]=feedback(num,den,1,1);
gsc=tf(numc,denc);
step(0.25*gsc,k)

-a que tipo de controlador equivale cerrar el lazo?
-que conclusiones se obtienen de la respuesta a la
entrada escalon- se hace el sistema estable? se cumplen los requerimientos de diseo?

Aadiendo un controlador proporcional con Kp10 y aplicando una entrada escalon:

Kp=10;
nump = Kp*num
[numc,denc]=feedback(nump,den,1,1)
gsp=tf(numc,denc);
step(0.25*gsp,k);

-se hace el sistema estable?
-qu ocurre al variar Kp? se obtienen mejores resultados?
-pueden cumplirse los requerimientos de diseo con un controlador proporcional
exclusivamente?
Time (sec.)
A
m
p
l
i
t
u
d
e
Step Response
0 5 10 15 20 25
0
2
4
6
8
10
12
14
16
18
From: U(1)
T
o
:
Y
(
1
)
Time (sec.)
A
m
p
li
t
u
d
e
Step Response
0 10 20 30 40 50 60
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
From: U(1)
T
o
:
Y
(
1
)
Time (sec.)
A
m
p
l
i
t
u
d
e
Step Response
0 5 10 15 20 25 30 35
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
From: U(1)
T
o
:

Y
(
1
)

89
El Lugar de las Raices permite observar la posicion
de los polos en lazo cerrado al variar la ganancia K el
cual se obtiene con el comando:

rlocus (num,den) %planta original

Si variando la ganancia K, es posible que el lugar de
las raices (LDR) pase por los polos deseados no haria
Ialta ningun otro tipo de regulador, el regulador
proporcional es suIiciente. Si aun variando la
ganancia no se consigue que el LDR pase por dichos
polos hay que introducir ceros y polos adicionales de Iorma que se modiIique el LDR hasta
que pase por los polos requeridos.

Aadiendo un controlador proporcional derivativo (para con el cero que inserta el derivador
elimine los polos de la planta que estan en el origen) con Kp10 y td1 y aplicando de nuevo
la entrada escalon anterior:

kp=10;
td=1;
numd=kp*[td 1];
numcd=conv(num,numd);
[numcd, dencd] = feedback(numcd,den,1,1)
siscd=tf(numcd,dencd)
step(0.25*siscd,k);

En simulink:

s+1
s
Transfer Fcn1
0.21s
s
2
Transfer Fcn
Sum
Step
Scope
10
Gain

Aadiendo un controlador proporcional - integral derivativo con Kp=10, td=10 y
ti=0.1 y aplicando de nuevo la entrada escaln anterior,

kp=10;
td=1;
ti=10;
numpid=kp*[td*ti ti 1];
denpid=[ti 0];
numcpid=conv(num,numpid);
dencpid=conv(den,denpid);
[numcpid, dencpid] =
feedback(numcpid,dencpid,1,1)
siscpid=tf(numcpid,dencpid)
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
-1.5
-1
-0.5
0
0.5
1
1.5
Real Axis
I
m
a
g

A
x
i
s
Time (sec.)
A
m
p
l
it
u
d
e
Step Response
0 1 2 3 4 5 6
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35

Time (sec.)
A
m
p
l
it
u
d
e
Step Response
0 1 2 3 4 5 6
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35


90
step(0.25*siscpid,k);


En simulink:
10s +10s+1
2
10s
2
Transfer Fcn1
0.21s
s
2
Transfer Fcn
Sum
Step
Scope
10
Gai n

MTODO ALTERNATIVO DE DISEO DEL REGULADOR
Partiendo de la siguiente tabla y utilizando un procedimiento de tanteo obtener un controlador
que cumpla los requerimientos especiIicados.

A la hora de determinar los valores de Kp, KD y Ki utilizar esta tabla tan solo como
reIerencia. Recordar que el cambio de uno de ellos condiciona el valor de los otros.

RESPUESTA TIEMPO SUBIDA SOBREIMPULSO
TIEMPO.
ESTABLECIMIENTO
ERROR
K
p
Disminuye Aumenta Poca variacin Disminuye
T
i
Disminuye Aumenta Aumenta Elimina
T
d
Poca variacin Disminuye Disminuye Poca variacin

Vous aimerez peut-être aussi