Tutorial MATLAB Regul

34
Tutorial para MATLAB Control System Toolbox y Simulink

Transcript of Tutorial MATLAB Regul

Tutorial para MATLAB

Control System Toolbox

y Simulink

ÍNDICE 1.- Introducción 2.- Modelos LTI (Linear Time-Invariant)

2.1.- Creación de modelos 2.2.- Conversión entre modelos 2.3.- Conversión entre tiempo continuo y tiempo discreto

3.- Herramientas de análisis

3.1.- Simulación (respuesta temporal) 3.2.- Polos, valores propios y ceros 3.3.- Respuesta frecuencial 3.4.- Aproximación de Pade 3.5.- La función visor de modelos LTI

4.- Herramientas de diseño de control

4.1.- Lugar de las raíces 4.2.- Recolocación de los polos

4.3.- Control óptimo 4.4.- Estimador de Kalman (o filtro)

5.- Obtención de la respuesta temporal

5.1.- Raíces reales 5.2.- Raíces complejas

6.- Overview over functions in Control System Toolbox 7.- SIMULINK: Diagramas de bloques y simulación

1.- Introducción El programa MATLAB (MATrix LABoratory) es una herramienta cuya finalidad es facilitar el cálculo, pudiendo ser útil en cualquier campo de trabajo. Una de las virtudes de este programa está en la posibilidad de uso sin requerir grandes conocimientos del mismo, únicamente se deben conocer las funciones que se van a necesitar. Permite dos maneras de trabajar, una de forma inmediata, en la que se introducen los datos y la función en el Command Window y automáticamente aparece la respuesta, o bien, se puede trabajar mediante programas de usuario que se almacenan en ficheros .m. Se presenta un breve recordatorio de las funciones más habituales de MATLAB. Si mientras se está programando aparece alguna duda sobre una función, basta teclear en el Command Window la función help seguida del nombre de la función, para que aparezca un texto de ayuda. % Definición de vectores, matrices y operaciones más comunes » v1=[1,0,1] % v1 = 1 0 1 » v2=[2,0,2] % v2 = 2 0 2 » v3=[0 3 3] % v3 = 0 3 3 » v1t=v1' % v1t = 1 % 0 % 1 » m1=[v1,v2,v3] % m1 = 1 0 1 2 0 2 0 3 3 » m2=[v1',v2',v3'] % m2 = 1 2 0 % 0 0 3 % 1 2 3 » m2t=m2' % m2t = 1 0 1 % 2 0 2 % 0 3 3 » size(m1) % ans = 1 9 » size(m2) % ans = 3 3 » m2inv=inv(m2) % Warning: Matrix is singular to working precision. » m=[1,1.1,0;0,2,2.2;3,0,3.3] % m = 1.0000 1.1000 0 % 0 2.0000 2.2000 % 3.0000 0 3.3000 » inv(m) % ans = 0.4762 -0.2619 0.1746 % 0.4762 0.2381 -0.1587 % -0.4329 0.2381 0.1443 » a=inv(m) % a = 0.4762 -0.2619 0.1746 % 0.4762 0.2381 -0.1587 % -0.4329 0.2381 0.1443 » ide=a*m % ide = 1.0000 0 0.0000 % 0.0000 1.0000 0.0000 % 0 0 1.0000 % Análogamente, otras operaciones sobre matrices: % det, rank, svd, eig, cond...... % % Información sobre las variables que están en la memoria

» who % Your variables are: % a m m2inv v1t % ans m1 m2t v2 % ide m2 v1 v3 » whos % Name Size Bytes Class % a 3x3 72 double array % ans 1x2 16 double array % ide 3x3 72 double array % m 3x3 72 double array % m1 1x9 72 double array % m2 3x3 72 double array % Grand total is 77 elements using 616 bytes % » clear % --> Borra todas las variables en la memoria % Nota: punto y coma (;) elimina la respuesta inmediata; Programación de lazos: Al igual que todos los lenguajes de programación, MATLAB, permite la realización de bucles repetitivos sujetos a una condición y bifurcaciones. FOR-NEXT » for k=1:20 --- » end WHILE » while expression --- » end IF THEN ELSE » if condition --- » else --- » end

2.- Modelos LTI (Linear Time-Invariant)

Los sistemas o modelos se representan como objetos LTI (Linear Time-Invariant) y se consideran como una variable MATLAB, como sys1. La utilización de objetos LTI simplifica la sintaxis de las funciones. Por ejemplo, ejecutando "bode(sys1)" se obtiene el diagrama de Bode del proceso sys1.

Los modelos soportados son tanto continuos como discretos, y tanto funciones de transferencia como en espacio de estado. 2.1.- Creación de modelos Funciones de transferencia continuas

La función "tf" genera funciones de transferencia a partir del polinomio numerador y del polinomio denominador, pudiendo incorporar también tiempo muerto (consulte “help tf”). % Construcción de F.d.T. y operaciones elementales: num,den,ft; *,+-,/ % Ejemplo: » a=2; b=1;num=[a b];den= [4 1 1];sys=tf(num,den) Transfer function: 2 s + 1 ------------- 4 s^2 + s + 1 % Otras operaciones sobre la FdT: » p1=tf(1,[1 1]); % p1=1/(s+1) » p2=tf(1,[2 1]); % p2=1/(2s+1) » p3=p1*p2 % producto de dos FdT en serie Transfer function: 1 --------------- 2 s^2 + 3 s + 1 » p4=p1-p2; % diferencia de dos FdT Transfer function: s --------------- 2 s^2 + 3 s + 1 » p5=p1/p2 % cociente de dos FdT Transfer function: 2 s + 1 ------- s + 1 » p6=feedback(p1,p2) % realimentación p1/(1+p1.p2) Transfer function: 2 s + 1 --------------- 2 s^2 + 3 s + 2

% Nota: se pueden utilizar números o variables definidas previamente Presencia de tiempo muerto Cuando hay tiempo muerto se especifica el valor precedido por la palabra clave ‘iodelay’. % Ejemplo: » a=2; b=1;num=[a b];den= [4 1 1]; % tiempo muerto de 5 » sys=tf(num,den,'iodelay',5) Transfer function: 2 s + 1 exp(-5*s) * ------------- 4 s^2 + s + 1 Modelos continuos en espacio de estado

La función "ss" crea modelos lineales en espacio de estado de la forma: dx/dt=Ax + Bu y=Cx + Du donde A, B, C y D son matrices, x(t) es el vector de estado, u(t) es la variable manipulada y y(t) es la variable medida (estas variables son generalmente vectores). % Ejemplo: % dx1/dt=x2 % dx2/dt=-4*x1 -2*x2 + 2*u % y=x1 » A=[0,1;-4,-2]; B=[0;2]; C=[1,0]; D=[0]; » ss1=ss(A,B,C,D) a = x1 x2 x1 0 1 x2 -4 -2 b = u1 x1 0 x2 2 c = x1 x2 y1 1 0 d = u1 y1 0 Continuous-time model.

Funciones de transferencia discretas

Las funciones de transferencia discretas (en z) y los modelos en espacio de estado discretos se construyen de la misma manera que los modelos continuos. % Ejemplo: % Hdis(z)=(z+0.5)/(z2+1.5*z+2) % sampling time 0.4 (unidades de tiempo) » numdis=[1,0.5]; dendis=[1,1.5,2]; Tsdis=0.4; » Hdis=tf(numdis,dendis,Tsdis) Transfer function: z + 0.5 --------------- z^2 + 1.5 z + 2 Sampling time: 0.4

También se puede trabajar con funciones de transferencia en z-1. >> Hdis=tf(numdis,dendis,Tsdis,'variable','z^-1') Transfer function: 1 + 0.5 z^-1 --------------------- 1 + 1.5 z^-1 + 2 z^-2 Sampling time: 0.4 NOTA: darse cuenta que las dos últimas funciones de transferencia son diferentes. Modelos discretos en espacio de estado

Estos modelos se suponen de la forma: x(k+1)=P*x(k) + Qd*u(k) y(k)=C*x(k) + D*u(k) donde P, Q, C y D son matrices, x(k) es el vector de estado, u(k) es la variable manipulada y y(k) es la variable medida (estas variables son generalmente vectores). » ssdis=ss(P, Q, C, D, Ts) donde Ts es el periodo de muestreo 2.2.- Conversión entre modelos De espacio de estado a función de transferencia

La función "tf" convierte los modelos en espacio de estado a las correspondientes funciones de transferencia de acuerdo con las siguientes expresiones:

H(s) = C(sI-A) -1B + D (tiempo continuo) Hd(z) = C(zI-P) -1P + D (tiempo discreto) » A=[0,1;-4,-2]; B=[0;2]; C=[1,0]; D=[0]; » ss1=ss(A,B,C,D); » tfss1=tf(ss1) Transfer function: 2 ------------- s^2 + 2 s + 4

También se puede utilizar la función “ss2tf” que proporciona el numerador y el denominador de la función de transferencia. >> [NUM,DEN] = SS2TF(A,B,C,D) NUM = 0 -0.0000 2.0000 DEN = 1.0000 2.0000 4.0000 De función de transferencia a espacio de estado "ss" convierte la función de transferencia a espacio de estado. Pero como esta conversión no es única, porque hay infinitas representaciones en espacio de estado, por lo que "ss" escoge la “controller-canonical form”. >> n=2;d=[1 2 4]; >> g=tf(n,d) Transfer function: 2 ------------- s^2 + 2 s + 4 >> ss(g) a = x1 x2 x1 -2 -0.5 x2 8 0 b = u1 x1 0.5 x2 0 c = x1 x2 y1 0 0.5

d = u1 y1 0 Continuous-time model. También se puede utilizar la función “tf2ss” que necesita el numerador y el denominador de la función de transferencia. >> [A,B,C,D]=tf2ss(n,d) A = -2 -4 1 0 B = 1 0 C = 0 2 D = 0 2.3.- Conversión entre tiempo continuo y tiempo discreto De tiempo discreto a tiempo continuo

Un modelo de tiempo continuo se puede discretizar utilizando la función "c2d", utilizando la sintaxis: » sysdis=c2d(syscont,Ts,metodo)

Ts es el periodo de muestreo, método es el procedimiento de discretización a utilizar, a escoger entre los siguientes:

'zoh' for zero order hold. 'foh' for first order hold. 'tustin' for Tustin's method of bilinear transformation. 'prewarp' for Tustin's method with frequency prewarping. 'matched' for the matched pole-zero method.

% ejemplo » K=2; T=4; num=[K,0]; den=[T,1]; Tdelay=1; » Hcont4=tf(num,den,'ioDelay',Tdelay); » Ts=0.2; » Hdis4=c2d(Hcont4,Ts,'zoh') Transfer function:

0.5 z - 0.5 z^(-5) * ----------- z - 0.9512 Sampling time: 0.2

De tiempo discreto a tiempo continuo

Utilizar la función "d2c".

3.- Herramientas de análisis 3.1.- Simulación (respuesta temporal)

Se puede simular la respuesta al escalón unitario mediante la función "step". % Respuesta de LA de un sistema de primer orden a una entrada escalón % al variar la constante de tiempo Tau % % Secuencia de comandos; uso del escalón (default) % Tau=10 » k=1;d=[10,1];p1=tf(k,d) Transfer function: 1 -------- 10 s + 1 » step(p1) % Construcción de la primera curva del gráfico » hold % Current plot held % Tau=5 » T=5;d=[T,1];p1=tf(k,d) Transfer function: 1 ------- 5 s + 1 » step(p1) % Construcción de la segunda curva del gráfico % Tau=20 » T=20;d=[T,1];p1=tf(k,d) Transfer function: 1 -------- 20 s + 1 » step(p1) % Construcción de la tercera curva del gráfico % Ver gráfico siguiente; % para los otros comandos: --> help plot » title('Respuesta de un sistema de primer orden: Tau=5,10,20') » xlabel('tiempo') » ylabel('respuesta') » gtext('5') » gtext('10') » gtext('20')

0 20 40 60 80 100 1200

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Respuesta de un sistema de primer orden: Tau=5,10,20

tiempo

resp

uest

a

5 1020

Se puede fijar el tiempo total con el fin de mejorar la superposición de los gráficos o su comparación o también se puede definir el vector de tiempos, para saber cómo hacerlo, ejecutar “help step”.

Para obtener la respuesta al impulso se utiliza la función "impulse", también se puede utilizar para obtener la respuesta a otras entradas que tengan transformada de Laplace. % Respuesta temporal para otras entradas % % A) Impulso (TdL del impulso = 1) » n=1;T=2;d=[T,1];p1=tf(n,d) % def. proceso de orden 1 Transfer function: 1 ------- 2 s + 1 » A=1;om=1;nx=A*om;dx=[1 0 om^2];px=tf(nx,dx)% def. entrada sinusoidal en TdL Transfer function: 1 ------- s^2 + 1 % NOTA: se trata la señal de entrada como si fuera una función de transferencia y se calcula la respuesta a la entrada impulso (resultado correcto pero tratamiento incorrecto) » p1x=p1*px % proceso x entrada Transfer function: 1 --------------------- 2 s^3 + s^2 + 2 s + 1 » impulse(px) » hold; impulse(p1x) Current plot held

Time (sec.)

Amplitud

IRespuesta

0 5 10 15 20 25 30 35 40-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1x= entrada senoidal

respuesta y1

También se puede utilizar la función “lsim” que sirve para cualquier entrada, esta función requiere un vector de tiempos equiespaciados y un vector con los valores de la entrada. %B) Uso de lsim para entradas u(t). » t=... % definición del vector tiempo » u=... % definición del vector de entrada (analítico o datos numéricos) » p=... % definición del proceso » lsim(p,u,t) % grafica la respuesta del proceso p, a la entrada u, para un tiempo t » y=lsim(p,u,t) % calcula la """"

La función "initial" simula la respuesta libre desde el estado inicial para un modelo en espacio de estado. Utilización de ficheros m y realización de informes Los ficheros .M son útiles cuando se tiene una serie de comandos que pueden ser utilizados varias veces o bien para conservar las acciones relizadas al margen del Command History de MATLAB. % Activar el Editor de Matlab: File, Open file-M (New/Old). clf t=linspace(0,20,100); tau=[1 2 5]; % crea un vector con 3 val.para la constante de tiempo n=1 for i=1:3 i d=[tau(i) 1] p1=(tf(n,d) pause step(p1,t) hold on end title('Respuesta de un sistema de primer orden: Tau=1,2,5') % La serie de comandos for … end, constituyen un ciclo do.

Preparación del documento mediante WORD con integración del programa.M y de la figura MATLAB: Respuesta de un sistema de primer orden al variar la constante de tiempo τ. La ecuación se incluye de la forma siguiente:

- click sobre el punto de inserción - de la ToolBar de Word: Insertar, Objeto, Crear Nuevo Objeto,

Microsoft editor de ecuaciones 3.0… El fichero Fichero.m produce el gráfico:

Time (sec.)

Am

plitu

de

Step Response

0 5 10 15 200

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

sistema de orden 1, O.L., T=1,2,5

Para insertar el gráfico en el texto, primero se seleccionan las opciones de copia y luego se copia: - En el entorno Figure, Edit, Copy Options - En el entorno Figure, Edit, Copy Figure En WORD elija Pegado especial y escoja la selección que prefiera (evite copiar imágenes en mapa de bits, porque ocupan mucho espacio) 3.2.- Polos, valores propios y ceros

A partir del modelo se pueden obtener los polos (“pole”), los polos y ceros (“pzmap”), los ceros y la ganancia (“tzero”). En el caso de sistemas en espacio de estado se pueden calcular los valores propios con “eig”.

Con "[pol,zer]=pzmap" se calculan los polos y ceros. Si se ejecuta sólo “pzmap” aparece un gráfico de los polos y ceros en el plano complejo. » n=[2 1]; d=[10,5,1]; pro=tf(n,d) % define el proceso Transfer function: 2 s + 1 ---------------- 10 s^2 + 5 s + 1 » pole(pro) % calcula polos ans = -0.2500 + 0.1936i -0.2500 - 0.1936i » [poles,zeros]=pzmap(pro) % calcula polos y ceros (o grafica) poles =

-0.2500 + 0.1936i -0.2500 - 0.1936i zeros = -0.5000 » [zero,gain]=tzero(pro) % calcula ceros y ganancia (K’) zero = -0.5000 gain = 0.2000 Nota: - La ganancia (K’) es la constante de la expresión GPZ(s), no la

ganancia del sistema comúnmente entendida; ésta puede obtenerse con el comando: dcgain

>> dcgain(pro) %la ganancia del sistema ans = 1

La función "damp" calcula el coeficiente de amortiguamiento y la frecuencia de resonancia. >> damp(pro) Eigenvalue Damping Freq. (rad/s) -2.50e-001 + 1.94e-001i 7.91e-001 3.16e-001 -2.50e-001 - 1.94e-001i 7.91e-001 3.16e-001 Residuos y expansión en fracciones parciales >> [r,p,k]=residue(n,d) r = 0.1000 - 0.1291i 0.1000 + 0.1291i p = -0.2500 + 0.1936i -0.2500 - 0.1936i k = [] Nota: En este caso k es el término constante de la expansión en fracciones parciales (k=0: m=n). 3.3.- Respuesta frecuencial

La respuesta frecuencial (diagrama de Bode) se puede calcular con la función "bode". La ganancia en dB y el defase en grados frente a la frecuencia en rad/s. Con "bode(sys,w)" se utiliza el vector de frecuencia indicado, w.

También se puede obtener el diagrama de Nichols o el de Nyquist con "nichols" o "nyquist". » n=[2 1]; d=[10,5,1]; pro=tf(n,d) % define el proceso Transfer function: 2 s + 1 ---------------- 10 s^2 + 5 s + 1 >> bode(pro) >> protd=tf(n,d,'iodelay',2) Transfer function: 2 s + 1 exp(-2*s) * ---------------- 10 s^2 + 5 s + 1 >> bode(protd) La función “bode” soporta sistemas con tiempo muerto. Análisis de estabilidad basado en la respuesta frecuencial

La función "margin" calcula el margen de fase y el margen de ganancia y presenta también el diagrama de Bode. >> margin(pro) La función “margin” también soporta sistemas con tiempo muerto. 3.4.- Aproximación de Pade

Las aproximaciones de Pade son funciones de transferencia racionales que aproximan el comportamiento del tiempo muerto, son útiles para aquellas funciones que no soportan el tiempo muerto. % Retardo y Approximaciones de Padé % Ejemplo para el sistema FOPTD: T=D=10 » p1=tf(1,[10,1]) % primer orden con constante de tiempo T=10

-40

-30

-20

-10

0

Mag

nitu

de (d

B)

10-2

10-1

100

101

-90

-45

0

Phas

e (d

eg)

Bode Diagram

Frequency (rad/sec)

Transfer function: 1 -------- 10 s + 1 % construcción Pde.approx. de orden n=1 del retardo D=10; » [nd1,dd1]=pade(10,1); » pd1=tf(nd1,dd1) Transfer function: -s + 0.2 -------- s + 0.2 % costrucción Pde.approx. de orden n=3 del retardo D=10; » [nd3,dd3]=pade(10,3); » pd3=tf(nd3,dd3) Transfer function: -s^3 + 1.2 s^2 - 0.6 s + 0.12 ----------------------------- s^3 + 1.2 s^2 + 0.6 s + 0.12 % construcción Pde.approx. de orden n=5 del retardo D=10; » [nd5,dd5]=pade(10,5); » pd5=tf(nd5,dd5) Transfer function: -s^5 + 3 s^4 - 4.2 s^3 + 3.36 s^2 - 1.512 s + 0.3024 ---------------------------------------------------- s^5 + 3 s^4 + 4.2 s^3 + 3.36 s^2 + 1.512 s + 0.3024 % proceso FOPTD con Pde.approx. de orden n=1 » p11=p1*pd1 Transfer function: -s + 0.2 ------------------ 10 s^2 + 3 s + 0.2 % comparación de la respuesta al escalón unitario » p13=p1*pd3; % proceso FOPTD con Pde.approx. de orden n=3 » p15=p1*pd5; % proceso FOPTD con Pde.approx. de orden n=5 » step(p11) % respuesta al escalón Pde. n=1 » hold % Current plot held » step(p13) % respuesta al escalón Pde. n=3 » step(p15) % respuesta al escalón Pde. n=5 » p1del=tf(1,[10,1],'ioDelay',10) % Retardo exacto Transfer function: 1 exp(-10s)-------- 10 s + 1 » step(p1del) % respuesta al escalón exacta » grid » gtext('n=1') » gtext('n=3') » gtext('n=5') » gtext('exacto')

» title('Efecto de las approximaciones de Padé') » gtext('proceso: FOPTD; T=D=10') » gtext('proceso: FOPTD; T=D=10') % Nota: La aprox. de Pade de orden n=3 da precisión suficiente en general. %para otras funciones de Matlab (ej. Rlocus, fedback) es necesario usar Pade 3.5.- La función visor de modelos LTI

“ltiview” presenta en un solo gráfico compuesto, donde se puede seleccionar los gráficos que se deseen. >> ltiview(pro)

Time (sec.)

Amplitud

Step Response

0 14 28 42 56 70

0

0.2

0.4

0.6

0.8

1

Efecto de las aproximaciones de Padé

n=1

n=3n=5

exacto

proceso: FOPTD; T=D=10

4.- Herramientas de diseño de control 4.1.- Lugar de las raíces

A partir de un sistema de lazo cerrado con realimentación negativa y función de transferencia de lazo abierto kG(s), donde k es una constante. La función "rlocus" calcula los polos de lazo cerrado en función de k. Estos polos constituyen el lugar de las raíces del sistema de lazo cerrado.

La función “rlocus” no admite funciones de transferencia con tiempo

muerto por lo que será necesario utilizar una aproximación racional, como la aproximación de Pade. % Definición del proceso g(s) » n=1;t1=1;t2=1/2;t3=1/3; » d1=[t1 1];d2=[t2 1];d3=[t3 1]; » g1=tf(n,d1);g2=tf(n,d2);g3=tf(n,d3); » gtc=g1*g2*g3 Transfer function 1 ------------------------------ 0.1667 s^3 + s^2 + 1.833 s + 1 % Uso de Rlocus (default) » rlocus(gtc)

La función "rlocfind" permite calcular la ganancia para un determinado polo, situando los ejes sobre el valor, MATLAB devuelve el valor del polo y de la ganancia >> rlocfind(gtc) Select a point in the graphics window selected_point = -2.6576 + 1.8478i

-8 -7 -6 -5 -4 -3 -2 -1 0 1-5

-4

-3

-2

-1

0

1

2

3

4

5Root Locus

Real Axis

Imag

inar

y Ax

is

ans = 1.5250 NOTA: De hecho el punto seleccionado no tiene por qué estar exactamente en el lugar de las raíces, MATLAB encuentra el valor de k correspondiente al valor más cercano. Ejemplo de aplicación a un controlador PI % Respuesta en lazo cerrado; Proceso: FOPTD, T=D=10; Controlador PI % al variar la ganancia del controlador % comandos Matlab:num,den,tf,pade,feedback,step;plot % Definición del proceso np=1;dp=[10,1];p1=tf(np,dp); % proceso de orden 1, T=10; [nd,dd]=pade(10,3);del=tf(nd,dd); % retardo D=10; pade, n=3 pd=p1*del; % proceso FOPTD t=linspace(0,100,100); % definición del intervalo de t % % Controlador PI: CPI=Kc*(1+1/Ti*s)= (Kc*Ti*s+Kc)/(Ti*s+0); Ti=10;Kc=input('dar los valores de Kc= ') % Kc, Ti=10 nc=[Kc*Ti Kc]; dc=[Ti,0]; cpi=tf(nc,dc); g=cpi*pd % OL Function eta=feedback(g,1); % Yr=g/(1+g)*r step(eta,t) % gráfico y=step(eta,t); % file % la respuesta se puede salvar con yn=y y dibujada % % repetido para Kc=1, 1.25, 0.75, 0.50 % resultados salvados en y1,y125,y075,y05; % y dibujados con plot; ver instrucciones a continuación » plot(t,y1) » hold » plot(t,y125,'--') » grid » plot(t,y075,'-.') » plot(t,y05,':') » gtext('Kc=1') » gtext('Kc=1.25') » gtext('Kc=1.25') » gtext('Kc=0.75') » gtext('Kc=0.5') » title('Respuesta Yr; regulador PI; Proceso:FOPTD') » gtext('proceso:T=D=10; Regulador:Taui=10') » xlabel('tiempo') » ylabel('Yr')

4.2.- Recolocación de los polos

Suponga que el sistema a controlar tiene un modelo en espacio de estado (tiempo continuo) dx/dt=Ax+Bu. Se desea controlar por realimentación del vector de estado: u=-Kx donde K es la matriz de ganancia. El sistema en lazo cerrado tiene el siguiente modelo en espacio de estado dx/dt=Ax+B(-Kx)=(A-BK)x. La función "place" calcula K tal que los valores propios de (A-BG) sean los que se deseen.

Suponga que el sistema a controlar es dx/dt=u y que el valor propio de lazo cerrado deseado es = -4: » E=-4; » A=0;B=1; » K=place(A,B,E) K = 4 La función "place" trabaja de forma similar para sistemas en tiempo discreto. Suponga que el sistema a controlar tiene el modelo x(k+1)=Px(k)+Qu(k) y el controlador es u(k)=-Kx(k).

El sistema de lazo cerrado tiene el modelo en espacio de estado siguiente:

x(k+1)=(P-QK)x(k)

0 20 40 60 80 100-0.2

0

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

Kc=1

Kc=1.25

Kc=0.75

Kc=0.5

Respuesta Yr; regulador PI;P FOPTD

tiempo

Yr

"place" calcula K de modo que los valores propios de (P-QK) son los especificados en el vector E. "place" también se puede utilizar para calcular la ganancia de un estimador. 4.3.- Control óptimo

La función "dlqr" realiza el diseño de un regulador lineal-cuadrático para sistemas discretos. Esto significa que el vector de ganancia, K, en la realimentación es:

u(k)=-Kx(k)

para el sistema

x(k+1)=Px(k)+Qu(k)

se calcula tal que se minimiza la función de coste:

J=Sum {x'Wx + u'Tu + 2*x'Nu} La sintaxis es:

[K,S,E]=dlqr(P,Q,W,T,N)

La matriz N se pone a cero si se omite. S es la solución de la ecuación de Riccati, E contiene los valores propios de lazo cerrado (P-QK). » P=0.85;Q=0.15; » S=1;T=0.2; » W=1;T=0.2; » [G,S,E]=dlqr(P,Q,W,T) G = 1.1797 S = 2.3370 E = 0.6731 "lqr" trabaja de forma similar con sistemas continuos. "lqry" minimiza la función de coste J=Sum {y'Wy + u'Tu+ 2*y'Nu} en que interviene el vector de salida en lugar del vector de estado. [K,S,E] = LQRY(SYS,W,T,N) 4.4.- Estimador de Kalman (o filtro) "kalman" diseña filtros de Kalman tanto para sistemas continuos como discretos.

Se supone un sistema discreto tal que:

x(k+1)=Ax(k) + Bu(k) + Gw(k)

y(k)=Cx(k) + Du(k) + Hw(k) + v(k) donde w(k) es el ruido del proceso y v(k) es el ruido de medida. El modelo se genera mediante la expresión:

sys=ss(A,[B,G],C,[D,H]) Q, R y N son las matrices de covarianza del ruido:

E{ww'}=Q, E{vv'}=R, E{wv'}=N El estimador de Kalman es

x(k+1|k)=Ax(k|k-1) + Bu(k) + L[y(k) - y(k|k)] (Eq. 1) =Ax(k|k) + Bu(k) (Eq. 2)

x(k|k)=x(k|k-1) + M[y(k) - y(k|k)] (Eq. 3)

donde

y(k|k)=Cx(k|k) + Du(k)

En un estimador de Kalman "two-step" el estimado “a posteriori” o

"measurement update estimate" – que es la estimación que normalmente se necesita se consigue por la ecuación 3, mientras que el estimado “a priori” o "time update estimate” se consigue por la ecuación 2.

En un estimador de Kalman "one-step", la ecuación 1 proporciona el estimado.

La sintaxis de "kalman" es

[Kest,L,P,M,Z]=kalman(sys,Q,R,N)

N puede ser omitida. Kest es el estimador de Kalman en la forma de un objeto LTI con [u;yv] como entradas (yv es la medida), y [yest,xest] como salidas. M es la “innovation gain” o ganancia del estimador para un estimador "two-step". L es la “innovation gain” o ganancia del estimador para un estimador "one-step". P y Z son las covarianzas del error. P=E{[x - x(k|k-1)][x - x(k|k-1)]'} (Covarianza del error del estimado “a priori”) Z=E{[x - x(k|k)][x - x(k|k)]'} (Covarianza del error del estimado “a posteriori”) EJEMPLO: » A=0.85;B=0.15;C=1;D=1;Ts=0.1; » G=1;H=0;

» s1=ss(A,[B,G],C,[D,H],Ts); » Q=1; R=0.2; » [Kest,L,P,M,Z]=kalman(s1,Q,R) a = x1_e x1_e 0.1285 b = u1 y1 x1_e -0.5715 0.7215 c = x1_e y1_e 0.1512 x1_e 0.1512 d = u1 y1 y1_e 0.1512 0.8488 x1_e -0.8488 0.8488 I/O groups: Group name I/O Channel(s) KnownInput I 1 Measurement I 2 OutputEstimate O 1 StateEstimate O 2 Sampling time: 0.1 Discrete-time model. L = 0.7215 P = 1.1226 M = 0.8488 Z = 0.1698

5.- Obtención de la respuesta temporal 5.1.- Raíces reales Sea una función de transferencia:

s + 4 ----------------------------------- 60 s^3 + 47 s^2 + 12 s + 1

Se introducen el numerador (num) y el denominador (den) >>num=[1 4] >>den=[60 47 12 1] Se multiplica por la transformada de Laplace de la entrada. Suponiendo una entrada escalón de 12, su transformada es 12/s.

Se recalculan el numerador y el denominador >>num1=[12 48] >>den1=[60 47 12 1 0] A partir de la función residue se calcula la descomposición en fracciones simples >>[R,P,K]=residue(num1,den1) MATLAB responde: R = -198.0000 720.0000 -570.0000 48.0000 P = -0.3333 -0.2500 -0.2000 0 K = [] cociente = 0 Cada residuo va emparejado con su polo (raíz del denominador) correspondiente, por lo que el resultado corresponde a:

1s12s47s604s

s12)s(resp 23 +++

+⋅=

Cada una de las fracciones se encuentra en las tablas, por lo que la respuesta en función del tiempo será:

5.2.- Raíces complejas Sea una función de transferencia con alguna pareja de raíces complejas.

4 s + 1 ------------------------------ 4 s^3 + 3 s^2 + 2 s + 1

No hay que olvidarse de multiplicar por la entrada, suponiendo ahora una entrada escalón unitario, cuya transformada de Laplace es 1/s, >>num1=[4 1] >>den1=[4 3 2 1 0] A partir de la función residue se calcula la descomposición en fracciones simples >>[R,P,K]=residue(num1,den1) MATLAB responde: R = -0.9242 - 0.2982i -0.9242 + 0.2982i 0.8483 1.0000 P = -0.0721 + 0.6383i -0.0721 - 0.6383i -0.6058 0 K = [] Se puede comprobar que aparecen dos raíces complejas conjugadas, por lo que la descomposición que propone MATLAB es:

s000.1

0.6058 s 0.8483

0.6383i 0.0721s 0.2982i 0.9242-

0.6383i- 0.0721 s0.2982i - 0.9242-)s(resp +

++

+++

++

=

48e570e720e198)t(resp t20.0t25.0t333.0 +−+−= −−−

s48

20.0s570

25.0s720

333.0s198)s(resp +

+−

++

++−

=

En este momento se encuentra que las fracciones primera y segunda no aparecen en las tablas, se deben reducir a una única fracción con denominador de segundo orden. Esto se puede hacer manualmente o con la ayuda de MATLAB, utilizando la misma función residue, pero introduciendo los residuos, polos y cociente, la función responderá con el numerador y denominador. >> R1=R(1:2) R1 = -0.9242 - 0.2982i -0.9242 + 0.2982i >> P1=P(1:2) P1 = -0.0721 + 0.6383i -0.0721 - 0.6383i > [num2,den2]=residue(R1,P1,K) num2 = -1.8483 0.2475 den2 = 1.0000 0.1442 0.4127

que se puede transformar en:

donde todas las fracciones se encuentran en las tablas.

calculando:

s000.1

6058.0s8483.0

6383.0)0721.0s(3808.0

6383.0)0721.0s()0721.0s(8483.1)s(resp 2222 +

++

+++

+++−

=

s000.1

6058.0s8483.0

4127.0s1442.0s2475.0s8483.1)s(resp 2 +

++

+++−

=

00.1e8483.0t6383.0sine6383.03808.0t6383.0cose8483.1)t(resp t6058.0t0721.0t0721.0 +++−= −−−

00.1e8483.0t6383.0sine5966.0t6383.0cose8483.1)t(resp t6058.0t0721.0t0721.0 +++−= −−−

6.- Overview over functions in Control System Toolbox Generación de modelos LTI

ss - Create a state-space model. zpk - Create a zero/pole/gain model. tf - Create a transfer function model. dss - Specify a descriptor state-space model. filt - Specify a digital filter. set - Set/modify properties of LTI models. ltiprops - Detailed help for available LTI properties.

Data extraction

ssdata - Extract state-space matrices. zpkdata - Extract zero/pole/gain data. tfdata - Extract numerator(s) and denominator(s). dssdata - Descriptor version of SSDATA. get - Access values of LTI model properties.

Model characteristics

class - Model type ('ss', 'zpk', or 'tf'). size - Input/output dimensions. isempty - True for empty LTI models. isct - True for continuous-time models. isdt - True for discrete-time models. isproper - True for proper LTI models. issiso - True for single-input/single-output systems. isa - Test if LTI model is of given type.

Conversions

ss - Conversion to state space. zpk - Conversion to zero/pole/gain. tf - Conversion to transfer function. c2d - Continuous to discrete conversion. d2c - Discrete to continuous conversion. d2d - Resample discrete system or add input delay(s).

Overloaded arithmetic operations

+ and - - Add and subtract LTI systems (parallel connection). * - Multiplication of LTI systems (series connection). \ - Left divide -- sys1\sys2 means inv(sys1)*sys2. / - Right divide -- sys1/sys2 means sys1*inv(sys2). ' - Pertransposition. .' - Transposition of input/output map. [..] - Horizontal/vertical concatenation of LTI systems. inv - Inverse of an LTI system.

Model dynamics

pole, eig - System poles. tzero - System transmission zeros. pzmap - Pole-zero map. dcgain - D.C. (low frequency) gain.

norm - Norms of LTI systems. covar - Covariance of response to white noise.

damp - Natural frequency and damping of system poles. esort - Sort continuous poles by real part. dsort - Sort discrete poles by magnitude. pade - Pade approximation of time delays.

State-space models

rss,drss - Random stable state-space models. ss2ss - State coordinate transformation. canon - State-space canonical forms. ctrb, obsv - Controllability and observability matrices. gram - Controllability and observability gramians. ssbal - Diagonal balancing of state-space realizations. balreal - Gramian-based input/output balancing. modred - Model state reduction.

minreal - Minimal realization and pole/zero cancellation. augstate - Augment output by appending states.

Time response

step - Step response. impulse - Impulse response. initial - Response of state-space system with given initial state. lsim - Response to arbitrary inputs. ltiview - Response analysis GUI. gensig - Generate input signal for LSIM. stepfun - Generate unit-step input.

Frequency response

bode - Bode plot of the frequency response. sigma - Singular value frequency plot. nyquist - Nyquist plot. nichols - Nichols chart. ltiview - Response analysis GUI. evalfr - Evaluate frequency response at given frequency. freqresp - Frequency response over a frequency grid.

margin - Gain and phase margins. System interconnections

append - Group LTI systems by appending inputs and outputs. parallel - Generalized parallel connection (see also overloaded +). series - Generalized series connection (see also overloaded *). feedback - Feedback connection of two systems. star - Redheffer star product (LFT interconnections). connect - Derive state-space model from block diagram description.

Classical design tools

rlocus - Evans root locus. rlocfind - Interactive root locus gain determination. acker - SISO pole placement. place - MIMO pole placement. estim - Form estimator given estimator gain. reg - Form regulator given state-feedback and estimator gains.

LQG design tools

lqr,dlqr - Linear-quadratic (LQ) state-feedback regulator. lqry - LQ regulator with output weighting. lqrd - Discrete LQ regulator for continuous plant. kalman - Kalman estimator. kalmd - Discrete Kalman estimator for continuous plant. lqgreg - Form LQG regulator given LQ gain and Kalman estimator.

Matrix equation solvers

lyap - Solve continuous Lyapunov equations. dlyap - Solve discrete Lyapunov equations. care - Solve continuous algebraic Riccati equations. dare - Solve discrete algebraic Riccati equations.

Demonstrations

ctrldemo - Introduction to the Control System Toolbox. jetdemo - Classical design of jet transport yaw damper. diskdemo - Digital design of hard-disk-drive controller. milldemo - SISO and MIMO LQG control of steel rolling mill. kalmdemo - Kalman filter design and simulation.

7.- SIMULINK: Diagramas de bloques y simulación

1. Activación: comando simulink => abre la ventana de simulink y crea un modelo vacío

2. Iconos predefinidos simulink (para los bloques más comunes) Sources: Step, Sine Wave, Clock Sinks: To Workspace, To File, Scope Linear: Transfer function, Sum, Gain, Integrator Non linear: Transport Delay, Saturation Connections: Mux Blocksets & Toolboxes => Simulink Extras => Additional Linear: PID controller

3. Construcción del diagrama de bloques Menu File => New => Model Abre una nueva ventana y la ventana de los bloques simulink Copia de un bloque de una ventana a otra Arrastrar con el botón izquierdo del ratón Copia de un bloque en el interior de la propia ventana Arrastrar con el botón derecho del ratón Traslado de un bloque en el interior de la propia ventana Arrastrar con el botón izquierdo del ratón Eliminación de un bloque Seleccionar el bloque con el botón izquierdo y borrarlo Conexión de bloques Dibujar la línea de conexión con el ratón (botón izquierdo)

4. Modificación de los parámetros de un bloque Hacer doble click sobre el bloque para seleccionarlo (botón derecho) y elegir Parameters

5. Simulación Definir los parámetros (Menu Simulation => Parameters) Solver => tiempo de inicio y fin, método de integración, paso de integración Workspace I/O => cargar o salvar las variables del workspace Ejecución de la simulación (Menu Simulation => Start, Stop, Pause, Restart)

6. Visualización de los resultados de la simulación Utilizar el bloque Scope: visualización en tiempo real de las variables seleccionadas (es posible modificar las dimensiones de los ejes y zoomare); utilizar el bloque Mux (Sygnals &Systems) para dibujar más curvas sobre el mismo gráfico

7.- Creación de gráficos para insertar en documento

Transferir los resultados de la simulación al workspace (bloque To Workspace, no olvidar modificar “structure” por “array”) y desde MATLAB utilizar el comando plot o similar para hacer el dibujo y con el Copy Figure copiarlo en el documento.

8.- Almacenamiento de los resultados Utilizar el bloque To File: indicar el nombre del file y de la variable Desde el workspace, con el comando save: salvar todas las variables:

save nomefile o salvar sólo las variables especificadas

save nomefile variable1 variable2 ... Se crea el fichero “nomefile.mat” en el directorio corriente

9.- Reagrupamiento de bloques Seleccionar varios bloques con el mouse (con el botón izquierdo) Utilizar el comando Edit => Create Subsystem Haciendo doble clic sobre el sistema se pueden modificar todavía los parámetros

10.- Creación de una máscara Seleccionar el subsistema y utilizar el comando Edit => Mask Subsystem Mask type: nombre para el tipo de máscara

1

s+1Transfer FcnStep Scope

PID

PID Controller