Matlab Control

Preview:

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))