En esta sección encontrarás algunos códigos de Matlab y enlaces a tutoriales y material de apoyo que pueden resultar de utilidad en este curso.
Enlace a material preparado por el prof. José Pittol como introducción al Matlab. Parte I.
Parte II material profesor José Pittol.
Enlace a material usado en otros cursos del prof. William Colmenares.
Listado usado en la clase del 18/02/2009.
********** Aproximación (ajuste) a sistemas de 1er Orden + Retardo *******************
>> s=tf('s') # definición de s como función de transferencia
>> gd=48/(s+1)/(s+2)/(s+3)/(s+4) # sistema que queremos aproximar
>> step(gd,10) # respuesta al escalón de la que salen datos para la aproximación
>> .28*2 # Cambio en la salida es 2 y acá se calcula el 28% del cambio
>> .63*2 # Cambio en la salida es 2 y acá se calcula el 63% del cambio
>> t1=1.3;t2=2.21; # valores de t1 y t2 sacados de la gráfica
>> tau=(t2-t1)*1.5 # constante de tiempo
>> theta=(t1+t2-4*tau/3)/2 # Retardo
>> k=2 # Ganancia k=cambio en la salida/cambio en la entrada
>> ga=k/(tau*s+1) # Función aproximada sin el retardo
>> set(ga,'iodelay',theta) # Añadiendo el retardo a la aproximación
>> step(gd,'k',ga,'b') # Comparación de las 2 respuesta. Real vs Aproximada
******************** Identificación de sistemas de 2do orden *********************
******************** Se genera el sistema a aproximar a partir de lazo realimentado ***************
*********************** NO TAN BUEN MÉTODO *****************************
>> gdep=1/(s+.1) # Planta G(s)
>> gi=1/s # Control (sin ganancia) C(s)
>> rlocus(gdep*gi) # Lugar de las raíces. Buscando la ganancia del controlador que nos conviene
>> L=gdep*gi # Ganancia del Lazo L (función de lazo abierto GH)
>> T=minreal(L/(1+L)) # Función de lazo cerrado. Observe que escogimos ganancia de control k=1 (aunque es una pésima selección)
>> step(T) # Respuesta del lazo al escalón. Para sacar los datos
>> tp=3.1;Mp=0.85 # tiempo de pico y máximo pico
>> zeta=-log(Mp)/(pi^2+(log(Mp))^2) # Coeficiente de amortiguación
>> wn=pi/tp/sqrt(1-zeta^2) # Frecuencia natural
>> gap=wn^2/(s^2+2*zeta*wn*s+wn^2) # Función aproximada
>> eig(T) # Polos de la función real
>> eig(gap) # Polos de la función aproximada
>> step(T,'k',gap,'b') # Comparación de las respuestas
>> gi=(s+1)/s # Mejorando el control con un PI
>> rlocus(gdep*gi) # Buscando la mejor de las ganancias del controlador con Lugar de las Raíces
>> L=gdep*gi # Nueva ganancia del Lazo
>> T=minreal(L/(1+L)) # Nuevo lazo cerrado
>> step(T) # Respuesta del lazo con un mejor control
>> Mp=0.24;tp=2.45; # Identificación del nuevo sistema de 2do orden
>> zeta=-log(Mp)/(pi^2+(log(Mp))^2) # Nueva amortiguación
>> wn=pi/tp/sqrt(1-zeta^2) # frecuencia natural
>> gap=wn^2/(s^2+2*zeta*wn*s+wn^2) # nueva función aproximada
>> step(T,'k',gap,'b') # comparación de las respuesta Real vs Aproximada
************************************** FIN 18/02/2009 **********************************
Para generación de Respuesta Temporal.
>> s=tf('s') # define a s como una función de transferencia
>> g=1/(s^2+s+1)/(s+5) # define a la función de transferencia G(s) con ganancia DC=1/5, ningún cero, dos polos en -1/2+-raíz(3)/2 y un polo en -5
>> step(g) # grafica la respuesta al escalón de G(s)
que se verá como:
No nos sorprende que el tiempo de establecimiento esté por el orden de los 8 segundos.
Para generación de expresión analítica - variables simbólicas:
También en el mismo ejemplo hubiéramos podido calcular la expresión analítica de la respuesta. En ese caso el código sería:
>>syms s t
>>Ys=1/s/(s^2+s+1)/(s+5) # Observe que estamos expresando Y(s) y NO G(s)
>>yt=ilaplace(Ys)
Esto último me daría la expresión analítica de y(t) (la respuesta al escalón de la G(s) que usamos en el ejemplo anterior). La respuesta de Matlab sería
yt =
-4/21*exp(-1/2*t)*cos(1/2*3^(1/2)*t)-2/21*3^(1/2)*exp(-1/2*t)*sin(1/2*3^(1/2)*t)+1/5-1/105*exp(-5*t)
Podemos graficar yt (que es una variable simbólica) con:
>>ezplot(yt,[0,12]) # grafica yt entre 0 y 12 s
Que resulta en (exactamente igual a la anterior)
Manipulación de Funciones de Transferencia
También podemos sumar o multiplicar funciones de transferencia, por ejemplo en el mismo sistema que hemos venido trabajando
>> s=tf('s'); g=1/(s^2+s+1)/(s+5)
ahora lo metemos en un lazo de control como el que se muestra en la figura:
donde:
>>c=(s+1)/s # un controlador PI
y sabemos que la función de transferencia entre y(t) y r(t) es:
>> t=minreal(g*c/(1+g*c) # función de transferencia de lazo cerrado
El comando minreal lo que hace es simplificar ceros y polos y dar una expresión pequeña para t.
Al igual que antes, podemos calcular la respuesta al escalón de t
>> step(t)
y obtenemos:
No nos sorprende que el valor final de y(t) sea 1 (igual que la entrada) debido a la presencia del integrador en el controlador C(s). No se ha hecho ningún esfuerzo por encontrar un controlador que mejore la respuesta transitoria. Quizás el estudiante pueda conseguir un controlador mucho mejor.