Upload
elelefanterozado
View
297
Download
8
Tags:
Embed Size (px)
Citation preview
LUIS ALFREDO RODRIGUEZ UMAÑA
INGENIERO ELECTRONICO
ESPECIALISTA EN AUTOMATICA E INFORMATICA INDUSTRIAL
MatlabSimulink
para Control
Usar Matlab y Simulink como
herramientas auxiliares para el
análisis y solución de
problemas de Ingenieria de
Control
Objetivo:
Iniciando problemas de control
Creando funciones de transferencia:
Para crear funciones de transferencia se usa el comando ‘tf(num,den)’, por ejemplo la función de transferencia
1503914.40
36018
)(
)(23
sss
s
sF
sX
Se puede definir como
num=[18 360];den=[1 40.4 391 150]; sys=tf(num,den);
Se listan los coeficientes del los polinomios en ‘s’, en potencias decrecientes.
O bien, directamente en la función ‘tf’
sys=tf([18 360], [1 40.4 391 150])
Resultando,
Transfer function:
18 s + 360----------------------------s^3 + 40.4 s^2 + 391 s + 150
La variable ‘sys’ representa entonces a una funciónde transferencia.
En el caso de la siguiente función de transferencia
102)(
)(3
2
ss
s
sF
sX
Podemos definirla como
sys=tf([1 0 0], [1 0 2 10])
Resultando,
Transfer function: s^2--------------s^3 + 2 s + 10
Los coeficientes iguales a cero que estan a la derecha de coeficientes distintos de cero deben ser listados.
En el estudio de sistemas LTI (linear Time-Invariant), es muy común el análisis de sistemas de segundo orden de la forma
22
2
2)(
)(
nn
n
sssU
sY
Estos sistemas pueden ser definidos con la función ‘ord2’,por ejemplo:
>> [num,den]=ord2(10,1)
num =1
den = 1 20 100
Matlab puede generar funciones de transferencia aleatorias con la funcion ‘rmodel’, por ejemplo:
>> [num,den]=rmodel(3)
num = 0 0 0 1.1909
den = 1.0000 1.6154 1.1551 0.2360
>> [num,den]=rmodel(3)
num = 0 0 0 0.7258
den = 1.0000 7.3984 24.5843 15.8755
Las funciones de transferencia generadas con ‘rmodel’son siempre estables.
Para sistemas con tiempo de retraso, con representacion en
‘s’ dada por , Matlab no provee un medio exacto para
describirlo. Sin embargo la funcion ‘pade’ puede ser usado
para generar una funcion de transferencia que puede
aproximar el tiempo de retraso. Por ejemplo:
>> [num,den]=pade(5,2)
num = 1.0000 -1.2000 0.4800
den = 1.0000 1.2000 0.4800
>> sys=tf(num,den)
Transfer function:
s^2 - 1.2 s + 0.48
------------------
s^2 + 1.2 s + 0.48
sTe
Matlab impone una restricción muy importante a
la definición de sistemas a tráves de funciones de
transferencia. Esta es que los sistemas deben ser
propios, es decir, el orden del numerador debe ser
igual o menor al orden del denominador.
Creando modelos con variables de estado
Para definir el sistema:
)(
0
0
1
)(
)(
)(
010
001
1503914.40
)(
)(
)(
3
2
1
3
2
1
tu
tx
tx
tx
tx
tx
tx
)(
)(
)(
360180)(
3
2
1
tx
tx
tx
ty
Matlab provee la funcion ‘ss’, por ejemplo:
>> a=[-40.4 -391 -150; 1 0 0; 0 1 0];
>> b=[1 0 0]';
>> c=[0 18 360];
>> d=0;
>> sys=ss(a,b,c,d)
a = x1 x2 x3
x1 -40.4 -391 -150
x2 1 0 0
x3 0 1 0
b = u1
x1 1
x2 0
x3 0
c = x1 x2 x3
y1 0 18 360
d = u1
y1 0
Continuous-time model.
De manera similar que con funciones de transferencia,
podemos usar la función ‘ord2’ para definir sistemas de
segundo orden, especificando y .
>> wn=2;
>> zeta=.707;
>> [a1,b1,c1,d1]=ord2(wn,zeta)
a1 = 0 1.0000
-4.0000 -2.8280
b1 = 0
1
c1 = 1 0
d1 = 0
n
Cambiando de Espacio de Estado a Función de Transferencia
La función ‘ss2tf’ puede ser usada para cambiar un sistema con
definición en espacio de estado a función de transferencia.
>> [numcss,dencss]=ss2tf(a1,b1,c1,d1)
numcss = 0 0 1
dencss = 1.0000 2.8280 4.0000
>> tf(numcss,dencss)
Transfer function: 1
-----------------
s^2 + 2.828 s + 4
Cambiando de Función de Transferencia a Espacio de Estado
La función ‘tf2ss’ puede ser usada para cambiar un sistema
definido con función de transferencia, a espacio de estado.
>> [actf,bctf,cctf,dctf]=tf2ss(numcss,dencss)
actf = -2.8280 -4.0000
1.0000 0
bctf = 1
0
cctf = 0 1
dctf = 0
Construyendo Sistemas
Matlab provee funciones para la construccion de sistemas
complejos. Por ejemplo, para las siguientes configuraciones:
SERIE
PARALELO
REALIMENTACION UNITARIA
REALIMENTACION
Conección Serie
Para la conección serie, Matlab provee la función ‘series’,
por ejemplo:
>> G=tf(4,[1 2])
Transfer function:
4
-----
s + 2
>> H=tf([10 0.5],[1 2 4])
Transfer function:
10 s + 0.5
-------------
s^2 + 2 s + 4
>> sys_serie=series(G,H)
Transfer function:
40 s + 2
---------------------
s^3 + 4 s^2 + 8 s + 8
Conección Paralelo
Para la conección paralelo, Matlab provee la función ‘parallel’,
por ejemplo:
>> sys_paralelo=parallel(G,H)
Transfer function:
14 s^2 + 28.5 s + 17
---------------------
s^3 + 4 s^2 + 8 s + 8
Conección con Realimentación
Para la conección con realimentación, Matlab provee la
función ‘feedback’. Con realimentación unitaria:
>> sys_realim_uni=feedback(G,1)
Transfer function:
4
-----
s + 6
Con realimentación:
>> sys_realim=feedback(G,H)
Transfer function:
4 s^2 + 8 s + 16
-----------------------
s^3 + 4 s^2 + 48 s + 10
Sistemas complejos:
Para construir sistemas mas complejos, Matlab provee el
archivo m ‘blkbuild.m’. Por ejemplo para el sistema
G0(s) G1(s) G2(s) G3(s)
H1(s)
H2(s) H3(s)
+ + +
1 2 3 4
6 7
5
- - -R(s) Y(s)
sistema_complejo.m
%Usando blkbuild para construir un sistema complejo
n1=1; d1=1;
n2=1; d2=[1 1];
n3=1; d3=[1 2];
n4=1; d4=[1 3];
n5=4; d5=1;
n6=8; d6=1;
n7=12; d7=1;
nblocks=7;
blkbuild
q=[2 1 -5 0 0
3 2 -6 0 0
4 2 -6 3 -7
5 3 0 0 0
6 3 0 0 0
7 4 0 0 0];
inpt=1;
output=4;
[aa,bb,cc,dd]=connect(a,b,c,d,q,inpt,output);
[num,den]=ss2tf(aa,bb,cc,dd);
tf(num,den)
Calculando Polos y Ceros
Para calcular los polos y ceros de un sistema, a partir de los
polinomios del numerador y denominador, Matlab provee la función
‘tf2zp’. Por ejemplo para el sistema:
27243
64523)(
2345
234
sssss
sssssG
Corremos el siguiente código:
>> num=[3 2 5 4 6];>> den=[1 3 4 2 7 2];>> [z,p,]=tf2zp(num,den)
Resultando
>> [z,p,k]=tf2zp(num,den)
z = 0.4019 + 1.1965i
0.4019 - 1.1965i
-0.7352 + 0.8455i
-0.7352 - 0.8455i
p = -1.7680 + 1.2673i
-1.7680 - 1.2673i
0.4176 + 1.1130i
0.4176 - 1.1130i
-0.2991
k = 3
Los polos y ceros tambien pueden ser calculados a partir de un
sistema descrito en espacio de estado. Por ejemplo:
usando_ss2zp.m
vec=[1 2 5 3 6 1];
A=compan(vec);
c=[1 0 0 0 0];
b=[0;0;0;0;1];
[z,p,k]=ss2zp(A,b,c,0)
Resultando
z = 1.0e-005 *
0.8792
-0.4396 + 0.7614i
-0.4396 - 0.7614i
p =
-1.0433 + 1.6215i
-1.0433 - 1.6215i
0.1323 + 1.2217i
0.1323 - 1.2217i
-0.1781
k = -1
Mapa de polos y ceros
Para visualizar el mapa de polos y ceros, Matlab provee la
función ‘pzmap’. Al correr esta función se crea una figura
mostrando en forma gráfica la ubicación de polos y ceros.
Al correr el código,
>> pzmap(p,z)
Resulta en la siguiente gráfica
Creando Funciones de Transferencia a partir de Polos y Ceros
Es posible definir funciones de transferencia a partir del listado explicto de polos, ceros y ganancia.
polocero2ft.m
z=[0;0;0;-1];p=[-1+i –1-i -2 -3.15+2.63i -3.15-2.63i];k=2;[num,den]=zp2f(z,p,k);tf(num,den)
Transfer function: 2 s^4 + 2 s^3 -------------------------------------------------------------------- s^5 + 10.3 s^4 + 48.04 s^3 + 109.2 s^2 + 126.2 s + 67.36
Creando sistemas en Espacio de Estado a partir de Polos y Ceros
usandozp2ss.m
[a,b,c,d]=zp2ss( [-1] , [-2 –1+i –1-i ], 2);pausepoles=eig(a)pauseceros=tzero(a,b,c,d)pausek=dcgain(a,b,c,d)
a = -2.0000 0 0 -1.0000 -2.0000 -1.4142 0 1.4142 0b = 1 1 0
c = 0 0 1.4142
d = 0
poles = -1.0000 + 1.0000i -1.0000 - 1.0000i -2.0000
ceros = -1
k = 0.5000
Análisis de respuesta transitoria
Matlab provee funciones para la aplicación de estímulos a
sistemas LIT definidos a tráves de funciones de transferencia
o variables de estado.
Las funciones mas comunes son: la entrada escalón (step),
el impulso (impulse), condición inicial (initial), y señal
arbitraria (lsim).
Ejemplo: Un sistema con no ceros, polos en s=-1±3i, y
ganancia 3, tiene la siguiente respuesta a una estrada
escalon.
>> [num,den]=zp2tf([ ],[-1+3i -1-3i],3)
num = 0 0 3
den = 1 2 10
>> sys=tf(num,den) Transfer function: 3 --------------s^2 + 2 s + 10
>> step(sys)
La función step puede ser invocada con argumentos de salida,
>> [y,t]=step(num,den);
Donde ‘y’ es el vector de la respuesta del sistema, y ‘t’ es el
vector del tiempo de simulación.
Ejercicio: Crear un archivo ‘m’ que obtenga: El valor de pico,
tiempo de pico, tiempo de crecimiento, tiempo de
establecimiento y frecuencia natural.
Respuesta al Impulso
>> [num,den]=zp2tf([ ],[-1+3i -1-3i],3)
num = 0 0 3
den = 1 2 10
>> sys=tf(num,den) Transfer function: 3--------------s^2 + 2 s + 10 >> impulse(sys)
Ingeniería Eléctrica y Electrónica
Respuesta a la Rampa
Matlab no provee una función para una entrada rampa. Sin embargo,
provee la función ‘lsim’ que permite definir una señal arbitaria.
La sintaxis de ‘lsim’ es lsim(sys,u,t) donde t es el vector de tiempo y
u es la señal de entrada para cada instante de tiempo en t.
Entonces, una rampa con pendiente unitaria y duración de 10
segundos pude ser definida como,
>> t=0:.01:10;
>> u=t;
Respuesta a la Rampa
>> lsim(sys,u,t)
>> hold
Current plot held
>> plot(t,u)
Respuesta a una Condición Inicial
Una de las ventajas de la representacion de sistemas LIT con variables de estado es la respuesta a condiciones iniciales. Matlab provee la función ‘initial’ para simular la respuesta a una condición inicial.
>> [a,b,c,d]=zp2ss([ ],[-1+6i -1-6i],10);>> sys=ss(a,b,c,d);>> [y,t,x]=initial(sys,[-10 10]');>> subplot(1,2,1), plot(t,x(:,1),t,x(:,2))>> subplot(1,2,2), plot(x(:,1),x(:,2))
Respuesta a una Condición Inicial
>> [a,b,c,d]=zp2ss([ ],[6i -6i],10);>> sys=ss(a,b,c,d);>> [y,t,x]=initial(sys,[-10 10]‘,5);>> subplot(1,2,1), plot(t,x(:,1),t,x(:,2))>> subplot(1,2,2), plot(x(:,1),x(:,2))
Respuesta a una Condición Inicial
>> [a,b,c,d]=zp2ss([ ],[1+6i 1-6i],10);>> sys=ss(a,b,c,d);>> [y,t,x]=initial(sys,[-10 10]‘,5);>> subplot(1,2,1), plot(t,x(:,1),t,x(:,2))>> subplot(1,2,2), plot(x(:,1),x(:,2))