Está en la página 1de 53

Matlab ® Toolbox de control

 Matlab posee una completa librería para analizar y diseñar sistemas de control lineales
invariantes en el tiempo (Control Systems Toolbox)
 Para ello posee un tipo de datos llamado sistema LTI (lineal invariante en el tiempo)
 Ese tipo de datos es un objeto y como tal admite funciones de creación, modificación,
extracción de datos, conversión de tipo de modelo, etc
 Pude usar modelos definidos por funciónes de transferencia (externo) asi como modelos
en variable de estados (internos)
 Son funciones de Matlab en el sentido que pueden opcionalmente devolver valores, es
decir usar la sintaxis
[lista de valores de salida]=función(lista de parámetros) Si devuelve escalares no son
necesarios los corchetes
 Tanto los valores de salida como los parámetros pueden ser escalares, vectores o matrices
y van separados por coma
 Puede manejar funciones de transferencia matriciales, es decir sistemas MIMO
 Se accede a la ayuda con help control o doc control (mas detallada)

Funciones de creación y conversion


Creacion de sistemas (objetos) según su representación (clase)
 Sys=tf([numerador],[denominador]) Crea sistema a través de vectores de coeficientes
numerador y denominador (forma fraccional), debe tenerse en cuenta que deben estar
completos, es decir si falta algún coeficiente debe ir un 0
 Sys=zpk([ceros],[polos],[ganancia]) Crea sistema a través de vectores de ceros, polos y
ganancia (forma factorizada), , hay que tener en cuenta el signo, para sistemas estables
los polos deben ser negativos
 Sys=ss(A,B,C,D]) Crea sistema a través de las matrices del sistema dinamico en VE (forma
matricial)
 Si se tiene la forma factorizada y se quiere usar tf() se puede usar la orden
conv([],[]) ) (producto de polinomios) la cual puede anidarse y si esta en forma
fraccional y se desea poner como polo cero se usa roots(pol) que da las raíces de
un polinomio
Ejemplo
Hallar la representación en función de transferencia polo cero y fraccional del sistema en forma
factorizada
5
G( s ) 
s( s  3)( s  2)
Gpc=zpk([],[0 -3 -2],5)
Gpc =
5
-------------
s (s+3) (s+2)
Para obtener los coeficientes del denominador se hace el producto de los factores
conv([1 0],conv([1 2],[1 3]))
1 5 6 0
Luego
Gtf=tf([5],[1 5 6 0])
Gtf =
5
-----------------
s^3 + 5 s^2 + 6 s

Ejemplo
Si se tuviera un sistema en forma racional donde falta un coeficiente debe ir 0 en su ubicacion
2s  3
G( s ) 
s  2s3  5s  10
3

Gtf=tf([2 3],[1 2 0 5 10])


Gtf =
2s+3
----------------------
s^4 + 2 s^3 + 5 s + 10
Se hallan las raices
roots([2 3])
ans =
-1.5000

roots([1 2 0 5 10])
ans =
0.8550 + 1.4809i
0.8550 - 1.4809i
-2.0000 + 0.0000i
-1.7100 + 0.0000i

Gpc=zpk([-3/2],[0.855+j*1.4809 0.855-j*1.4809 -2 -1.71],2)


Gpc =
2 (s+1.5)
------------------------------------
(s+1.71) (s+2) (s^2 - 1.71s + 2.924)

 Falta verificar que sean iguales, lo cual se hara mas adelante

Ejemplo
Hallar la representación en variables de estado del sistema
0 1 0
x(t )    x ( t )    u (t )
 1 2  5 
y(t )  1 0 x(t )  0 u (t )
A=[0 1;-1 -2], B=[0;5],C=[1 0],D=0
Gss=ss(A,B,C,D)
Gss =
a=
x1 x2
x1 0 1
x2 -1 -2
b=
u1
x1 0
x2 5
c=
x1 x2
y1 1 0
d=
u1
y1 0

Conversion de representacion
Las mismas órdenes anteriores sirven para convertir formatos de sistema poniendo como
parámetro el sistema original
 FT=tf(Sys) Convierte a función de transferencia
 ZP= zpk(Sys) Convierte a polo, cero, ganancia
 SS=ss(Sys) Convierte a Variable de estados,
 Debe tenerse en cuenta que al no haber un única representación en VE, Matlab
toma una representación llamada "companion", que en general no coincide con
las formas canónicas controlable u observable
 Smin=minreal(Sys) Realizacion minima: elimina estados no controlables ni observables en
VE o cancela polos y ceros en funciones de transferencia
Ejemplo
Verificar que sean iguales las representaciones de
2s  3
G( s ) 
s  2s 3  5s  10
4

Gpc=zpk([-3/2],[0.855+j*1.4809 0.855-j*1.4809 -2 -1.71],2)


Gtf1=tf(Gpc)
Gtf1 =
2s+3
--------------------------------------
s^4 + 2 s^3 - 1.019e-05 s^2 + 5 s + 10
2
Solo difieren en que el termino de s no es exactamente 0 pero es un valor muy pequeño 105
Ejemplo
Sea el sistema
Y (s) 5
G( s )   2
U ( s ) s  2s  1

Las forma canonia controlable es


0 1 0
x(t )    x ( t )    u (t )
 1 2  5 
y(t )  1 0 x(t )  0 u (t )
Obtener una representacion con Matlab
Gtf=tf([5],[1 2 1])
Gtf =
5
-------------
s^2 + 2 s + 1
Gss=ss(Gtf)
Gss =
a=
x1 x2
x1 -2 -1
x2 1 0
b=
u1
x1 2
x2 0
c=
x1 x2
y1 0 2.5
d=
u1
y1 0
La matriz A esta rotada y la ganancia 5 se divide entre 2 en B y 2.5 en C, se puede verificar que son
equivalentes haciendo
Gtf1=tf(Gss)
Gtf1 =
5
-------------
s^2 + 2 s + 1

Ejemplo
Realización mínima, sea la función
s 1
G( s ) 
s  6s 2  11s  6
3

La cual en realidad tiene una cancelación polo y cero que no se ve a simple vista, y se puede
simplificar con minreal()
den=[1 6 11 6], num=[1 1]
G=tf(num,den)
zpk(G)
Gmin=minreal(G)
zpk(Gmin)

Extracción de datos
 [numerador,denominador]=tfdata(Sys) Obiene numerador y denominador de la FT de un
sistema
 [ceros,polos,ganancia]=zpkdata(Sys) Idem con polos, ceros y ganancia
 (A,B,C,D]=ssdata(Sys) Idem con las matrices en VE
 Devuelven los datos como estructura (struct) si se desea tenerlos como vectores
debe agregarse el parámetro opcional 'v'
Ejemplo
Hallar numerador y dernominador de la FT y polos, ceros y ganancia de la representación en
variables de estado del sistema
0 1 0
x(t )    x ( t )    u (t )
 1 2  5 
y(t )  1 0 x(t )  0 u (t )
A=[0 1;-1 -2], B=[0;5],C=[1 0],D=0
Gss=ss(A,B,C,D)
[n,d]=tfdata(Gss,'v') % devuelve como vectores
n=
0 0 5
d=
1 2 1
[z,p,k]=zpkdata(Gss,'v') % devuelve como vectores
z=
Empty matrix: 0-by-1
p=
-1
-1
k=
5

Funciones de análisis en el dominio temporal


Obtencion de caracteristicas
 P=pole(Sys) Devuelve los polos de un sistema
 Z=zero(Sys) Devuelve los ceros de un sistema, de no haberlos devuelve un vector vacio
 damp(Sys) Muestra los polos, el amortiguamiento (damping) y la frecuencia natural de
cada uno de ellos, además la constante de tiempo asociada
 pzmap(Sys) Dibuja el mapa de polos y ceros
 isstable(Sys) Devuelve 1 si el sistema es estable y 0 si no lo es
 Kc=dcgain(Sys) Devuelve la ganancia estatica es decir Kc  lim Sys( s )
s 0
 No confundir la ganancia estatica Kc con la del formato polo cero K , además
puede dar infinita (inf) si el sistema tiene integradores puros
Ejemplo
Obtener polos, ceros, damping, frecuencias, constantes de tiempo y ganancia estatica del sistema
con polos complejos conjugados, además dibujar el mapa de polos y ceros
5( s  1)
G( s ) 
s  8s 2  30s  36
3

Gtf=tf([5 5],[1 8 30 36])


Gtf =
5s+5
-----------------------
s^3 + 8 s^2 + 30 s + 36
pole(Gtf)
-3.0000 + 3.0000i
-3.0000 - 3.0000i
-2.0000 + 0.0000i
zero(Gtf)
-1
pzmap(Gtf)

damp(Gtf)
Pole Damping Frequency Time Constant
(rad/seconds) (seconds)

-2.00e+00 1.00e+00 2.00e+00 5.00e-01


-3.00e+00 + 3.00e+00i 7.07e-01 4.24e+00 3.33e-01
-3.00e+00 - 3.00e+00i 7.07e-01 4.24e+00 3.33e-01

dcgain(Gtf)
0.1389
 Observese que K  5 , en tanto que Kc  0.139
Ejemplo
Obtener damping, frecuencias, constantes de tiempo, estabilidad y ganancia estatica del sistema
tipo 1
2
G( s ) 
s ( s  2)
Gzp=zpk([],[0 -2],2)
Gzp =
2
-------
s (s+2)

damp(Gzp)
Pole Damping Frequency Time Constant
(rad/seconds) (seconds)

0.00e+00 -1.00e+00 0.00e+00 Inf


-2.00e+00 1.00e+00 2.00e+00 5.00e-01

isstable(Gzp)
0
dcgain(Gzp)
Inf
 Observese que la constante de tiempo asociada al polo en el origen es infinita, al
igual que la ganancia Kc y que el sistema es inestable

Graficacion dominio temporal


 impulse(Sys ) Dibuja la respuesta al impulso unitario
 step(Sys ) Dibuja la respuesta al escalón unitario
 stepinfo(Sys ) Devuelve los parámetros de respuesta al escalón unitario
 lsim=(Sys,u,t) Dibuja la respuesta a una entrada u y un tiempo t arbitrarios, dados como
vectores, ambos vectores tienen que tener el mismo tamaño
 Las ordenes de dibujo se pueden llamar con parámetros de entrada y almacenan
en vectores las salidas y y los tiempos t ,para ser dibujados con la orden plot() o
analizados mediante Matlab, la sintaxis es por ejemplo [y,t]=step(Sys), plot(t,y)
 También permiten superponer las respuestas de varios sistemas con distintos
colores por ejemplo step(Sys1,Sys2,…)
 Además es posible acotar el valor de tiempo con parámetros adicionales, como
por ejemplo agregando el tiempo final por ejemplo step(Sys1,tfinal)
 Admiten todas las opciones de formato de la orden plot()
 Haciendo click derecho -> Characteristics se pueden obtener gráficamente los
valores principales como etiquetas emergentes
Ejemplo
Obtener la respuesta al escalón en rojo del sistema ya visto y determinar sus parámetros gráfica y
analíticamente
5( s  1)
G( s ) 
s  8s 2  30s  36
3

Gtf=tf([5 5],[1 8 30 36])


step(Gtf,'r'), grid on

stepinfo(Gtf)
RiseTime: 0.2612
SettlingTime: 2.1411
SettlingMin: 0.1260
SettlingMax: 0.2022
Overshoot: 45.5997
Undershoot: 0
Peak: 0.2022
PeakTime: 0.7599
Ejemplo
Superponer las repuestas del anterior en azul (color por defecto) y el sistema con ganancia en
continua unitaria en rojo, verificar la ganancia en continua
2
G( s ) 
s  2s  2
2

Ggu=tf([2],[1 2 2])
dcgain(Ggu)
1
step(Gtf,Ggu,'r'), grid on
legend('Sistema Ganancia NO unitaria','Sistema Ganancia unitaria')

Ejemplo
Obtener y dibujar el error en la respuesta a la rampa del sistema con ganancia en continua unitaria
2
G( s ) 
s  2s  2
2

t1=0:0.01:10; % genera tiempo


u=t1; % entrada 0 tiempo (rampa)
[y,t]=lsim(Ggu,u,t1); % simula y no dibuja
e=u-y' % error
ess=e(end);
1.0000
plot(t,e) , grid on
title('Error a la rampa')
Retardos de tiempo puros y aproximaciones racionales
 Sys = tf(num,den,'InputDelay',retardo) Define una función de transferencia con retardo a
la entrada
 Sys = tf(num,den,'OutputDelay',retardo) Idem a la salida
 Sys.outputdelay=retardo Agrega o modifica el retardo a la salida
 Sys.inputdelay=retardo Idem a la entrada
 Sys.outputdelay Devuelve el retardo a la salida
 Sys.inputdelay Idem a la entrada
 hasdelay(Sys) Devuelve 1 si tiene retardo y 0 si no lo tiene
 [num,den] = pade(T,N) Devuelve el numerador y denominador de la aproximación de
racional de Pade de orden N del retardo T

 En sistemas SISO es indistinto el retardo a la entrada o a la salida


Ejemplo
Crear un sistema con retardo de la forma
e2s
Gr ( s ) 
4s  1
Dibujar su respuesta y comparala con la aproximación de pade de orden 1

Gret=tf([1],[4 1],'InputDelay',2)
1
exp(-2*s) * -------
4s+1
hasdelay(Gret)
1
Gret.inputdelay
2
[n,d]=pade(2,1)
Gpade=tf(n,d)
-s + 1
------
s+1
step(Gret)
hold on
G=tf([1],[4 1])
step(G*Gpade,'r')
step(Gpade,'g')
legend('FT con retardo puro','FT con aproximacion de Pade','Aproximacion de Pade')
Conexión de sistemas
 Sys = series(Sys1,Sys2,….SysN) o Sys = Sys1*Sys2*…. *SysN) Conexión en serie
 Sys = parallel(Sys1,Sys2,… SysN) o Sys = Sys1+Sys2+… +SysN) Conexión en paralelo

 Ambas pueden incluir constantes

 F = feedback(G,H) Conexión de lazo cerrado por realimentacion negativa de la rama


G( s )
directa G con la rama realimentación H, equivale a F ( s ) 
1  G( s ) H ( s )
 Para realimentacion positiva se hace F = feedback(G,-H) equivale a
G( s )
F ( s) 
1  G( s ) H ( s )
 Sysc = connect(sys1,...,sysN,operación,entradas,salidas) Conexión general (puede
buscarse en la documentación), generalmente con las anteriores basta y no será tratada
aquí, operación puede definirse con la orden operación=sumblk(formula)
Ejermplo
Hallar Y (s) / R(s) del sistema de lazos anidados

Se definen las FT
G1=tf([1],[1 1])
1
-----
s+1
G2=tf([1],[1 0])
1
--
s
Se resuelve el lazo interno

G3=feedback(G1,1)
1
-----
s+2

El producto es
G4=10*G3*G2
10
---------
s^2 + 2 s
F=feedback(G4,1)
F=
10
--------------
s^2 + 2 s + 10

Ejemplo
Hallar Y (s) / R(s) del sistema con bloques en paralelo, verificar estabilidad y hallar la ganancia
estatica

Se definen las FT y constantes


Kp=5
Cd=zpk([0],[],2)
G=zpk([],[0 -10],1)
H=3

Se resuelve el paralelo
C=Kp+Cd
Se resuelve la serie y la realimentación
F=feedback(C*G,H)
2 (s+2.5)
-------------------
(s+1) (s+15)
isstable(F)
1
dcgain(F)
0.3333

Lugar de raices
 rlocus(Sys) Dibuja el Lugar de Raíces de un sistema K*Sys para K positiva en una ventana
interactiva que permite desplazarse sobre el mismo, hacer zoom, cambiar el trazo, etc.
 rlocus(Sys,k) Idem con un vector de ganancias k definido por el usuario
 rlocus( Sys1,Sys2….,SysN) Dibuja el Lugar de Raíces de varios sistemas (pueden usarse
colores y tipos de línea definidos para cada uno como en plot())
 K = rlocfind(Sys,P) Obtiene el valor de ganancia K para la ubicación de un polo en P
 [K,Polos] = rlocfind(Sys) Superpone un cursor sobre el lugar de raíces y devuelve las
ganancias y los polos correspondientes
 Aquí la sentencia grid o sgrid produce una grilla con lugares de amortiguamiento y
frecuencia natural constantes
 Si se desea LR con ganancia negativa se hace rlocus(-Sys)
Ejemplo
Dibujar el LR de la función sin y con grilla y hallar la ganancia y ubicación del polo doble
2 s 2  5s  1
G( s)  K 2
s  2s  3
G = tf([2 5 1],[1 2 3])
rlocus(G)
sgrid % dibuja grilla

[K,polos]=rlocfind(G) % seleccionar el punto de separacion


K=
0.9604
Polos=
-1.1644 + 0.0091i
-1.1644 - 0.0091i
Verificar los polos de lazo cerrado
F=feedback(K*G,1), pole(F)
-1.1644 + 0.0091i
-1.1644 - 0.0091i
Ejemplo
Dibujar el LR de la función y hallar ganancia y puntos de separación y Ganancia Critica de
estabilidad
1
G( s)  K
s( s  2)( s  3)
G=zpk([],[0 -2 -3],1), rlocus(G)

Aquí la ganancia critica de estabilidad Kcr=29 y la separación se produce con Ks=2.11 con un polo
doble en p=-0.785 y otro polo real menor a -3
Para hallar la ubicación del polo restante se hace
[K,P]=rlocfind(G,-0.785)
K=
2.1126
P=
-3.4305
-0.7850
-0.7845

Es decir el tercer polo para ganancia 2.11 se encuentra en -3.43 y su relación es


P(1)/P(2)
4.3701
Por lo que habría una leve dominancia
Ejemplo
Mediante el LR se puede diseñar un controldor proprcional, supóngase que el el ejemplo anterior
se desea ubicar los polos para que el Sobrepaso sea de 5%
G=zpk([],[0 -2 -3],1), rlocus(G), sgrid % moverse hasta encontrar ubicacion

Es necesaria una ganancia de 3.64 y los polos dominantes están ubicados en -0.69+j 0.721
Luego el tiempo de establecimiento estará dado por
K=3.64, P1=-0.69+j*0.721
tss=4/(-real(P1))
5.7971
El tiempo del primer pico se puede calcular como
tp=pi/imag(P1)
4.3573
El polo restante esta en
[k,p]=rlocfind(G,P1)
k=
3.6111
p=
-3.6173 + 0.0000i
-0.6914 + 0.7213i
-0.6914 - 0.7213i
Es decir será real y estará aproximadamente en -3.6173, se vera la relación de partes reales
real(p(1))/real(p(2))
5.2321
Por lo que puede ser considerado dominante, se verificara ahoa la función de lazo cerrado
F=feedback(K*G,1), step(F), grid on

Puede verse que los valores no difieren mucho de los esperados pero la diferencia se debe al
tercer polo real
Ejemplo
Contorno de raíces, cuando en el sistema varia un parámetro aparte de la Ganancia se pueden
superponer lugares de raíces para valores discretos de ese parámetro mediante un lazo for, sea la
función con un polo variable en -a
1
G(s)  K , a  1, 2,3
( s  5)( s  a)
n=1
for a=[ 1 2 3 ]
switch n
case 1
spec='b' % a=1 azul
case 2
spec='r' % a=2 rojo
case 3
spec='k' % a=3 negro

end
G=zpk([],[0 -5 -a],1)
rlocus(G,spec), hold on
n=n+1
end

Puede verse que la Kcr varia, para a=1 es 34.6, para a=2 es 70.2 y para a=3 es 119, es decir cuanto
mas alejado del origen esta el polo, mayor es la ganancia critica

Ejemplo
Dibujar el LR para ganancia negativa (en rojo) y positiva (en negro línea discontinua) en un solo
grafico de la función y hallar la ganancia Ks y ubicación del polo doble y la ganancia critica Kcr de
existir
s3
G( s) 
s  2s  2
2

G = tf([1 3],[1 2 2])


rlocus(-G,'r',G,'--k')
Se puede ver que los LR son complementarios para ganancia negativa la Ks=0.472 con polo doble
en P=-0.774 y la Kcr=0.665, para ganancia positiva la Ks=8.47 con polo doble en P=-5.24 siendo
incondicionalmente estable
Identificacion
Supongase que se tiene tabulados los valores de respuesta de un sistema a un escalon unitario, en
este caso en un archivo . mat que contiene las variables t e y
Se desea conocer el orden y los parámetros del sistema, esto se llama identificación

Sistema de segundo orden monótono con polo dominante


Es de la forma
KC
G( s) 
1s  1 2 s  1
Ejemplo
load ident_1 t y
Aparecen las variables en el workspace
plot(t,y)
Evidentemente es de 2do orden pues es en forma de "S" y KC  0.9 entonces el valor de tiempo
de establecimiento es y(tss )  0.9  0.98  0.88 lo cual se puede buscar con el cursor como se
muestra dando tss  2.1
Tambien se puede buscar por código usando indices haciendo
Kc=y(end) % Ganancia continua
erel=(Kc-y); % error relativo
its=find(abs(erel)<0.02,1,'first') % busca el índice donde el error relativo se hace <2%
84
tss=t(its) % saca el valor de tiempo de establecimiento
1.9111
erel(its) % verifica el valor
0.0199

taud=tss/4 % valor de tau dominante


0.4778
El sistema aproximado se puede poner entonces como
Ga=tf([Kc],[taud 1])
0.898
----------------
0.4778 s + 1
Y se comparan ambas respuestas no encontrando diferencias significativas, solo al inicio
[ya,ta]=step(Ga); plot(t,y,ta,ya,'r'), legend('Resp medida', 'Resp aproximada'),grid

Sistema de segundo orden Subamortiguado


Ejemplo
load ident_2 t y
Aparecen las variables en el workspace
plot(t,y)

Es un sistema subamortiguado en el cual es difícil determinar gráficamente el tss que ronda los 3
seg, el tiempo de pico cerca de 2.2 seg y el máximo 1.255, se hara por codigo
yfin=y(end) % salida final
1.2001
ymax=max(y) %valor maximo
1.2551
S=(ymax-yfin)/ymax % sobrepaso
0.0439
ip=find(y==ymax) % indice del pico
34
tp=t(ip) % tiempo de pico
2.1792
wa=pi/tp % frecuencia amortiguqada
1.4416
zita=-log(S)/sqrt(pi^2+log(S)^2) % amortiguamiento
0.7054
Kc=yfin
erel=flipud((Kc-y)); % error relativo invertido en el tiempo
its=find(abs(erel)>0.02,1,'first') % busca el índice donde el error relativo se hace > 2%
61
tf=flipud(t) % tiempo invertido
tss=tf(its) % saca el valor de tiempo de establecimiento
3.03
w0=wa/sqrt(1-zita^2) % frecuencia natural
2.0339
4/(zita*w0) % debe ser parecido al tiempo de establecimiento obtenido antes
2.7878
Ga=tf([Kc*w0^2],[1 2*zita*w0 w0^2])
4.964
--------------------
s^2 + 2.87 s + 4.137
[ya,ta]=step(Ga); plot(t,y,ta,ya,'r'), legend('Resp medida', 'Resp aproximada'),grid

Son prácticamente iguales

Funciones de análisis en el dominio frecuencial


Diagramas de Bode (cartesiano)
 bode(Sys) Dibuja el diagrama de Bode de un sistema
 bode(Sys1,...SysN) Idem de varios sistemas
 bode(...,w) Idem con un vectorde frecuencias creado por el usuario
 [magnitud,fase,wout] = bode(sys) Devuelve vectores de magnitud, fase y frecuencia

Diagramas de Nyquist (polar)


 nyquist(Sys) Dibuja el diagrama de Nyquist
 nyquist(Sys1,...SysN) Idem de varios sistemas
 nyquist(….,w) Idem con un vector de frecuencias creado por el usuario
 [re,im,w] = nyquist(sys) Devuelve vectores de parte real, imaginaria y frecuencia
Valores de la respuesta y margenes estabilidad
 BW = bandwidth(Sys) Ancho de banda -3dB del sistema
 BW = bandwidth(Sys,dbdrop) Idem con frecuencia de corte definida por el usuario
 [Gm,Pm,Wgm,Wpm] = margin(sys) Margenes de ganancia (en veces, no en dB), de fase y
frecuencias correspondientes
 margin(sys) Margenes de ganancia y de fase de forma grafica en el Bode
 S = allmargin(sys) Devuelve un objeto struct con margenes de ganancia, de fase, retardo
y frecuencias correspondientes, muy útil para sistemas con retardo
Ejemplo
Hallar el Bode, el Nyquist , obtener los márgenes de fase y ganancia del sistema en forma grafica y
en forma de datos y además la ganancia estatica
5
G( s ) 
s( s  3)( s  2)
G=zpk([],[0 -3 -2],5)
figure(1)
bode(G,'r'), grid
figure(2)
nyquist(G,'r')
[MG,MF,Wmg,Wmf] = margin(G)
MG =
6
MF =
55.1540
Wmg =
2.4495
Wmf =
0.7559
Da un MG= 6 el cual se puede convertir a dB con Matlab
MGdB=20*log10(MG)
MGdB =
15.5630
Kc=dcgain(G)
Inf
Ejemplo
Hallar el diagrama de polos y ceros, el Bode, los márgenes de ganancia y fase, la ganancia estatica
en dB, el pico de resonancia y el ancho de banda -3dB y -6 dB del sistema
s4
G( s )  1000
s  14s  145s 2  1252s  2020
4 3

G=tf(1000*[1 4],[1 14 145 1252 2020])


figure(1)
pzmap(G)
figure(2)
bode(G), grid
KcdB=20*log10(dcgain(G))
5.9342
magnitud=bode(G);
PicodB=20*log10(max(magnitud))
11.4695
BW3 = bandwidth(G)
3.4405
BW6 = bandwidth(G,-6)
12.6687

Se observa que se cumplen los valores calculados, el ancho de banda se toma después del pico en
este caso
Ejemplo
Hallar el diagrama de Nyquist de la FT del ejemplo anterior, hallar la frecuencia y la amplitud de
los cruces por -180º y los márgenes de ganancia y estabilidad

Ejemplo
Para un sistema con retardo de la forma que se muestra, graficar el Nyquist y hallar el primer
cruce por 180º
e2s
Gr ( s )  10
4s  1
G=tf([10],[4 1])
G.outputdelay=2
nyquist(G)
Se observa que a escala real la parte de alta frecuencia se achica
Se puede aumentar la resolucion creando un vector de ganancias personalizado desde la
frecuencias 0.12 hasta 12 con 1000 valores logaritmicamente espaciados
w=1.2*logspace(-1,1,1000);
nyquist(G,w)

Se pueden calcular todos los márgenes mediante


M=allmargin(G)

M=
GainMargin: [1x9 double]
GMFrequency: [1x9 double]
PhaseMargin: 170.7712
PMFrequency: 2.4868
DelayMargin: 1.1985
DMFrequency: 2.4868
Stable: 0
Para crear los pares de vectores márgenes de ganancia y frecuencia se apilan en una matriz losl
campos GMFrequency y GainMargin transpuestos

MGF=[M.GainMargin' M.GMFrequency']
0.3807 0.9183
1.5866 3.9585
2.8362 7.0862
4.0900 10.2219
5.3454 13.3611
6.6011 16.5009
7.8572 19.6413
9.1134 22.7820
10.3677 25.9181

Funciones de diseño
Sisotool
Es una herramienta interactiva de diseño que permite ajustar los polos, ceros y ganancias de un
compensador y moverlos con el mouse y/o ajustarlos escribiendo sus valores, la sintxis es
 sisotool() Abre un diseño en blanco
 sisotool(Sys) Abre un diseño tomado como proceso a Sys
Se ejecuta y abre 2 ventanas, la de trabajo que contiene el LR y el Bode, y la principal que tiene las
opciones, esta nunca se debe cerrar ya que intenta cerrar la herramienta, al hacerlo pide si se
desea guardar la tarea para después continuar, ello se guarda en Design History
sisotool()
Si se llamó sin argumentos se deben importar la Planta G, el sensor H y el prefiltro F, los cuales
deben estar definidos previamente, por defectos toma a todos como 1
En la ventana System Data se selecciona el elemento a importar, hacer click en browse y abre la
ventana Model Import que permite elegir un modelo
Diseño en el dominio temporal
Se ilustrara mediante un ejemplo, sea el proceso de tercer orden y tipo 1 (con integrador puro)
280
G( s) 
s  23,3s 2  92, 6s
3

Las especificaciones son


 Sobrepasamiento:
S  5%,
 Tiempo de asentamiento al 2%:
te2%  1seg
 Error de régimen Nulo ante entrada escalon
Se comienza definiendo la Planta en Matlab y llamando la librería con ella como argumento
G=tf([280],[1 23.3 92.6 0])
G=
280
-----------------------
s^3 + 23.3 s^2 + 92.6 s
sisotool(G)

Por comodidad se quitara el Bode haciendo View -> Design configuration y poniendo None en el
grafico del Bode
Ahora se agregan las especificaciones (Design Constraints) verificando que el tiempo de
establecimiento que se desea sea para el 2 % y que muestre el controlador en forma de polo cero
y ganancia, Matlab permite elegir estos parámetros en Edit-> Toolbox preferences

Las especificaciones se agregan haciendo Click derecho -> Design requirements ->new
Ahora la ventana muestra en color la zona que cumple los requerimientos

Los polos deseados deben estar en la intersección de las líneas, como el lugar de raíces no pasa
por ese punto un controlador P no bastara
A continuación se elegirá y diseñara el controlador que será un control de adelanto ya que no hace
falta acción integral al ser el sistema tipo 1
El controlador será
sc
C (s)  K
s p
Y de modo que el cero cancele el polo dominante de la planta, para ello se hace
pole(G)
0
-18.2168
-5.0832
Luego se deberá ubicar el cero fijo en -5.0832, ello se hace con Click derecho -> Add Pole/Zero ->
Real Zero o con el icono del cero O , se toma el cero y se lo coloca cerca del polo, luego se ajusta
con Click derecho -> Edit Compensator y en la otra ventana se selecciona y escribe el valor dando
Enter

A continuación resta agregar el polo móvil con el icono X y moverlo para que el LR pase por el
lugar deseado

Por ultimo se ajusta la ganancia (cuadrado magenta) moviéndola hasta que este sobre el lugar
deseado como se muestra
Se puede previsualizar la respuesta y la acción de control en la ventana de control haciendo en la
pestaña Analisis Plot y chequear lo siguiente, r es la entrada, y es la salida y u la señal de control
Con Show Analysis Plot se abre el LTI viewer que muestra en azul la salida y en verde la acción de
control

Por ultimo se exporta el controlador a Matlab con File -> Export

Se selecciona Compensator C y con Export to Workspace se pasa a Matlab, si existiera la variable


pide sobreescibir o cambiando Export As se le pone otro nombre
C
2.3962 (s+5.083)
------------------------
(s+10.9)
Por ultimo se realiza en Matlab la verificación de la función de lazo cerrado haciendo
F=feedback(C*G,1)
step(F)

Se aprecia que el sobrepaso es levemente menor (4.42) y el tiempo de establecimiento levemente


mayor (1.11), la razón se encuentra en el tercer polo el cual se muestra con
pzmap(F)

Diseño en el dominio frecuencial


Cuando hay sistemas con retardo el LR no funciona bien ya que aproxima por Pade el retardo, aquí
es mas conveniente diseñar en el dominio de la frecuencia sea el sistema con retardo de la forma
e2s
Gr ( s )  10
4s  1
Haciendo
G=tf([10],[4 1])
G.outputdelay=2
sisotool(G)

Las especificaciones son


 Sobrepasamiento:
S  5%,
 La respuesta más rápida que se pueda encontrar con el error acotado a 5%
Luego el sobrepaso corresponde a  0.707 y conlleva a un margen de fase de
2
MF  t g 1
1   4  2 2
psita=0.707
MF=atand(2*psita/(sqrt(sqrt(1+4*psita^4)-2*psita^2)))
65.5246
Entonces como antes se quita esta vez el LR y se deja el Bode
Se observa que los márgenes son negativos por ende el sistema es inestable a lazo cerrado
Se planteara un controlador de atraso
sc
C (s)  K
s p
Como antes se puede poner un cero que cancele el polo de la planta
pole(G)
-0.2500

También se agrega un polo real negativo 10 veces menor, p=-0.025


Se tiene la siguiente situación
Se ajusta la ganancia hasta llegar a un MF=65º, ello se hace haciendo drag sobe el bode y
levantando o bajando

Con Menú-> Analysis -> Response to Step Command se puede visualizar la salida, la cual es

Tiene un error de 10%, subiendo la ganancia y alejando hacia la izquierda el polo se puede reducir
el error manteniendo el MF y viendo la respuesta al escalon, quedando al final
Y la respuesta al escalon tiene un error de 4%

Luego se exporta el controlador a Matlab según se vio resultando


C=
0.096853 (s+0.25)
--------------------------
(s+0.009556)
El cual resulta un compensador de atraso ya que el polo esta a la izquierda del cero y se muestran
los Bodes de ambos en azul y rojo
bode(G,C,'r')

Se observa que aporta -67 º a 0.04 rad/seg, se vera el sistema de lazo cerrado
F=feedback(C*G,1); % lo muestra en VE
step(F)

bode(F)
Sistemas Digitales
Muchas de las funciones sirven para sistemas discretos, solo hay que especificar en las ordenes de
creación el periodo de muestreo Ts como parámetro
 Sys=tf([numerador],[denominador],Ts) Crea sistema a través de vectores de coeficientes
numerador y denominador (forma fraccional), debe tenerse en cuenta que deben estar
completos, es decir si falta algún coeficiente debe ir un 0
 Sys=zpk([ceros],[polos],[ganancia], Ts) Crea sistema a través de vectores de ceros, polos
y ganancia (forma factorizada), , hay que tener en cuenta el signo, para sistemas estables
los polos deben ser negativos
 Sys=ss(A,B,C,D],Ts) Crea sistema a través de las matrices del sistema dinamico en VE
(forma matricial)
 A Partir de aquí Matlab ya lo trata como un objeto sistema LTI de tempo discreto

Diferencias
En el lugar de raíces aparece la grilla con los valores de amortiguamiento y frecuencia natural en el
plano z con la orden grid o zgrid
2
En el Bode se muestra la respuesta hasta la mitad de la frecuencia de muestreo s 
Ts
En las ordenes de dibujo de respuesta temporal se muestra la respuesta en formato retenida de
orden cero, si se desea verla en forma de barras se puede usar la orden stem
Si el sistema tiene retardo puro, es conveniente que el tiempo de muestreo sea un múltiplo entero
del mismo y no mas de 2 veces el retardo
Funciones de conversión
 Sysd=c2d(Sysc,Ts, 'metodo') Convierte de continuo a discreto
 Sysc=c2d(Sysd,Ts, 'metodo') Convierte de discreto a continuo
 Sysd1=d2d(Sysd,Ts, 'metodo') Convierte de discreto a discreto con otro periodo de
muestreo
El parámetro opcional método indica de que forma se convierte, los mas usados son
 'zoh' Con retentor de orden 0 a la entrada, es el método por default y el mas usado
 'foh' Idem de orden 1
1  sTs / 2
 'tustin' Aproximacion Bilineal z 
1  sTs / 2
 pT cT
 'matching' Mapea los polos y ceros en z e i
,z e i
pi ci
 Los 2 primeros sirven para discretizar procesos continuos y los 2 ultimos para
controladores diseñados en dominio analogico

Digitalización de Procesos continuos


En general la entrada al proceso debe ser analógica y por ello se utilizan los retentores de orden 0
y algunas veces el de orden 1

Ejemplo
Hallar el sistema discretizado y dibujar los polos y ceros con Ts  0.1 del sistema
5
G( s ) 
s( s  3)( s  2)
Con los métodos zoh y foh

G=zpk([],[0 -3 -2],5)
5
-------------
s (s+3) (s+2)
Gzoh=c2d(G,0.1)
0.00073665 (z+3.3) (z+0.236)
-------------------------------------------
(z-1) (z-0.8187) (z-0.7408)

Sample time: 0.1 seconds


Puede verse que los polos se mapean en z  e sTs y aparecen ceros que no estaban
Gfoh =
0.00018876 (z+8.979) (z+0.9049) (z+0.09118)
------------------------------------------------------------------
(z-1) (z-0.8187) (z-0.7408)
Sample time: 0.1 seconds
Aquí aparece un cero mas y los polos se mantienen
Ejemplo
Hallar el sistema discretizado, la gancia estatica y dibujar las respuestas al escalon con Ts  0.1
del sistema
5
G( s ) 
( s  3)( s  2)
Con zoh, foh
G=zpk([],[-3 -2],5), dcgain(G)
5
-----------------
(s+3) (s+2)
0.8333
Gzoh=c2d(G,0.1), dcgain(Gzoh)
0.021203 (z+0.8465)
------------------------------
(z-0.8187) (z-0.7408)
0.8333
Gfoh=c2d(G,0.1,'foh'), dcgain(Gfoh)
0.0073665 (z+3.3) (z+0.236)
----------------------------------------
(z-0.8187) (z-0.7408)
0.8333
Puede verse que la ganancia estatica y los polos no varian
Ejemplo
Para el sistema anterior dibujar las respuestas al escalon, los diagramas de Bode (en Hz) y los
lugares de raices del sistema continuo y del discretizado con Retentor de orden 0 y Ts  0.1
step(G,Gzoh,'r'), grid on, legend('Sistema Continuo', 'Sistema discreto')

Puede verse que coinciden en los instantes de muestreo


bode(G,Gzoh,'r'), grid on, legend('Sistema Continu o', 'Sistema discreto')

Puede observarse que a baja frecuencia coinciden y se alejan conforme se aproxima a la mitad de
la frecuencia de muestreo, en este caso 5 Hz
Ademas la fase del sistema discreto cruza por -180º a una frecuencia de1.6 Hz dando un margen
de ganancia de MG=26.8 dB, indicando estabilidad condicional a lazo cerrado relativa, el continuo
es incondicionalmente estable

Para poner la frecuencia en Hz click derecho -> properties

rlocus(G,Gzoh,'r'), grid on, legend('Sistema Continuo', 'Sistema discreto')


Mientras el sistema continuo es incondicionalmente estable, el discreto tiene una Ganancia critica
(cruce con el circulo unitario) de Kcr=22.9
Ejemplo
Comparar los lugares de raíces discretos del ejemplo anterior con zoh y foh
rlocus(Gzoh,Gfoh)

El foh tiene una ganancia critica Kcr=245 y el zoh es el menos estable con Kcr=21.7
Ello es debido a los ceros extra que introducen el segundo
Ejemplo
Comparar los Bodes del ejemplo anterior del sistema continuo, y con foh
bode(Gfoh,G)

Se observa que el foh aproxima mejor al sistema continuo en frecuencia que el zoh

Sisotool discreta
Se usa de la misma manera que en tiempo continuo, solo cambia en el LR que trabaja en el plano z
y el Bode es hasta la mitad de la frecuencia de muestreo
Ejemplo
Para el sistema
5
G( s ) 
( s  3)( s  2)

Digitalizar con Retentor de orden cero y Ts  0.01

Diseñar un controlador con las especificaciones


 Sobrepasamiento:
S  5%,
 Tiempo de asentamiento al 2%:
te2%  2seg
 Error de régimen Nulo ante entrada escalon
G=zpk([],[-3 -2],5)
T=0.01
Gd=c2d(G,T)
Gd =
0.00024587 (z+0.9835)
---------------------------------
(z-0.9802) (z-0.9704)
sisotool(Gd)
Lanza la herramienta y como antes se quita el bode quedando

La cual esta fuera de escala, hay que hacer zoom en la zona del 1 y entrando las especificaciones
como antes se tiene

A continuación se elegirá y diseñara el controlador que será un control PID ya que hace falta
acción integral al ser el sistema tipo 0
El controlador será de forma que un cero cancele el polo no dominante de la planta
( z  c)( z  0.9704)
CD ( z )  K
z ( z  1)
Para ello agrega ese cero y los 2 polos fijos en z=0 y z=1

A continuación se mueve el cero restante y se ajusta la ganancia para ubicar las raíces

Se exporta el controlador como Cd resultando


Cd
42.808 (z-0.9704) (z-0.9594)
----------------------------------------
z (z-1)
Esta en forma polo cero, se puede llevar a Ganancias con
Cpid=pid(Cd)
Ts 1
Kp + Ki * ------ + Kd * --------------------
z-1 Tf+Ts/(z-1)

with Kp = 2.95, Ki = 5.15, Kd = 0.399, Tf = 0.01, Ts = 0.01

Se hace el sistema de lazo cerrado y se comprueba la respuesta


F=feedback(Cpid*Gd,1); step(F)

El sobrepaso resulta levemente mayor de lo esperado y el tiempo de establecimiento un poco


menor, ello es debido a la presencia del cero del controlador circulado
Digitalizacion controladores
Si se tiene un controlador diseñado en tiempo continuo y se desea pasarlo a discreto se hace con
c2d() y se usan las opciones
 pT cT
 'matching' Mapea los polos y ceros en z e i
,z e i
es ideal para
pi ci
controladores en el dominio del tiempo
1  sTs / 2
 'tustin' Hace la transformación bilineal z  y es conveniente para el diseño en
1  sTs / 2
el dominio frecuencial

Ejemplo
Se diseño mediante Sisitool para el proceso y especificaciones
280
G( s) 
s  23,3s 2  92, 6s
3

 Sobrepasamiento:
S  5%,
 Tiempo de asentamiento al 2%:
te2%  1seg
 Error de régimen Nulo ante entrada escalon
Se obtuvo el controlador
2.4( s  5)
C ( s) 
( s  11)
Se define el proceso
G=tf([280],[1 23.3 92.6 0])
G=
280
-----------------------
s^3 + 23.3 s^2 + 92.6 s
Luego el controlador
C=zpk([-5],[-11],2.4)
2.4 (s+5)
--------------
(s+11)
Se discretizara el proceso con zoh y el controlador con matching para T=0.01
T=0.01
0.0100
Gd=c2d(G,T)
4.405e-05 z^2 + 0.0001663 z + 3.921e-05
----------------------------------------------------------
z^3 - 2.784 z^2 + 2.576 z - 0.7922
Ahora el controlador
Cd=c2d(C,T,'matching')
2.33 (z-0.9512)
----------------------
(z-0.8958)
Los sistemas de lazo cerrado y sus respuestas son
F=feedback(C*G,1);
Fd=feedback(Cd*Gd,1);
step(F,Fd,'r')

Las respuestas son prácticamente indistinguibles

Octave
Es la versión GNU (gratuita) de Matlab y es levemente diferente, puede encontrarse en
https://www.gnu.org/software/octave/
La mayoría de los comandos funcionan , a veces con modificaciones y no tiene (al momento) la
herramienta sisotool y el comando rlocfind entre otros
Para usar las herramientas de control hay que instalar la librería (Pakage) control
pkg Install –forge control
Y cargarla en cada sesión con pkg load control

También podría gustarte