Você está na página 1de 29

ESCUELA POLITCNICA

NACIONAL
MAESTRA EN SISTEMAS DE

DEBER DE
CONTROL
AUTOMTICO

TRANSPORTE DE PETRLEO Y
DERIVADOS

ING. RICARDO TORRES T.

ESCUELA POLITECNICA NACIONAL


MAESTRA EN SISTEMAS DE TRANSPORTE DE
PETRLEO Y DERIVADOS

ALUMNO: RICARDO TORRES

DEBER DE CONTROL AUTOMTICO

USO DE LA HERRAMIENTA INFORMTICA MATLAB


El programa MATLAB se utiliza para la resolucin de una amplia gama de tpicos de
ingeniera, entre ellos se encuentran los problemas de control automtico, para lo cual se
debe tener conocimiento de los principales comandos y las funciones bsicas que se
requieren para introducirlos en el programa y generar las soluciones y grficas que
ayudan a un anlisis de los sistemas estudiados:
syms

who

clear

ezplot

diff

sin( )

int

cos( )

simplify

tan( )

vpa

e( ) = exp( )

solve

ln( ) = log( )

log10 = log10( )

eval( )

20

Ejemplo 1:
>> syms x y deriv integ raices
>> y=5*x^2-3.2*x+8.73
y=
5*x^2 - (16*x)/5 + 873/100
>> ezplot(y)
5 x 2 - (16 x)/5 + 873/100

200

150

100

50

0
-6

-4

-2

>> deriv=diff(y)
deriv =
10*x - 16/5
>> integ=int(y)
integ =
(x*(500*x^2 - 480*x + 2619))/300
>> raices=solve(y)
raices =
8/25 - (4109^(1/2)*i)/50
(4109^(1/2)*i)/50 + 8/25
>> vpa(raices,2)
ans =
0.32-1.3*i
1.3*i+0.32
Ejemplo 2:
>> syms x y deriv integ raices
>> y=-37*x^3-4*x^2+8.714*x-5

0
x

y=
(4357*x)/500 - 4*x^2 - 37*x^3 - 5
>> ezplot(y)
(4357 x)/500 - 4 x 2 - 37 x 3 - 5
8000
6000
4000
2000
0
-2000
-4000
-6000
-8000
-10000

-6

>> ezplot(y,0,3)

-4

-2

0
x

(4357 x)/500 - 4 x 2 - 37 x 3 - 5
0
-100
-200
-300
-400
-500
-600
-700
-800
-900
-1000
0

0.5

1.5
x

2.5

>> deriv=diff(y)
deriv =
4357/500 - 8*x - 111*x^2
>> integ=int(y)
integ =
(4357*x^2)/1000 - (4*x^3)/3 - (37*x^4)/4 - 5*x
>> simplify(integ)
ans =
-(x*(27750*x^3 + 4000*x^2 - 13071*x + 15000))/3000
>> raices=solve(y)
raices =
- 491627/(6160500*(12284378/170953875 (29446276522159^(1/2)*6325293375000000^(1/2))/6325293375000000)^(1/3)) (12284378/170953875 1/6325293375000000*29446276522159^(1/2)*6325293375000000^(1/2))^(1/3) - 4/111
491627/(12321000*(12284378/170953875 (29446276522159^(1/2)*6325293375000000^(1/2))/6325293375000000)^(1/3)) +
(12284378/170953875 (29446276522159^(1/2)*6325293375000000^(1/2))/6325293375000000)^(1/3)/2 (3^(1/2)*i*(491627/(6160500*(12284378/170953875 (29446276522159^(1/2)*6325293375000000^(1/2))/6325293375000000)^(1/3)) (12284378/170953875 1/6325293375000000*29446276522159^(1/2)*6325293375000000^(1/2))^(1/3)))/2 4/111

491627/(12321000*(12284378/170953875 (29446276522159^(1/2)*6325293375000000^(1/2))/6325293375000000)^(1/3)) +
(12284378/170953875 (29446276522159^(1/2)*6325293375000000^(1/2))/6325293375000000)^(1/3)/2 +
(3^(1/2)*i*(491627/(6160500*(12284378/170953875 (29446276522159^(1/2)*6325293375000000^(1/2))/6325293375000000)^(1/3)) (12284378/170953875 1/6325293375000000*29446276522159^(1/2)*6325293375000000^(1/2))^(1/3)))/2 4/111
Para esta caso se simplifica con vpa:
>> vpa(raices,2)
ans =
-0.71
0.3-0.32*i
0.32*i+0.3
Ejemplo 3:
>> syms x y deriv integ raices
>> y=(5.7*x^2-3*x+8)/(3*x-4)
y=
((57*x^2)/10 - 3*x + 8)/(3*x - 4)
>> ezplot(y)
((57 x 2)/10 - 3 x + 8)/(3 x - 4)
30

20

10

-10

-20

-30

-6

>> deriv=diff(y)

-4

-2

0
x

deriv =
((57*x)/5 - 3)/(3*x - 4) - (3*((57*x^2)/10 - 3*x + 8))/(3*x - 4)^2
>> integ=int(y)
integ =
(23*x)/15 + (212*log(x - 4/3))/45 + (19*x^2)/20
>> raices=solve(y)
raices =
5/19 - (17*3^(1/2)*5^(1/2)*i)/57
(17*3^(1/2)*5^(1/2)*i)/57 + 5/19
>> vpa(raices,2)
ans =
0.26-1.2*i
1.2*i+0.26
Ejemplo 4:
>> syms x y deriv integ raices
>> y=(x^3-8)/(3*x^2-2*x+5)
y=
(x^3 - 8)/(3*x^2 - 2*x + 5)
>> ezplot(y)
(x 3 - 8)/(3 x 2 - 2 x + 5)
2.5
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-6

-4

-2

0
x

>> deriv=diff(y)
deriv =
(3*x^2)/(3*x^2 - 2*x + 5) - ((6*x - 2)*(x^3 - 8))/(3*x^2 - 2*x + 5)^2
>> integ=int(y)
integ =

(2*x)/9 - (11*log(x^2 - (2*x)/3 + 5/3))/54 + (257*14^(1/2)*atan(14^(1/2)/14 (3*14^(1/2)*x)/14))/378 + x^2/6


>> raices=solve(y)
raices =
2
- 3^(1/2)*i - 1
3^(1/2)*i - 1
>> vpa(raices,2)
ans =
2.0
-1.7*i-1.0
1.7*i-1.0
Ejemplo 5:
>> syms x y deriv integ raices
>> y=4*cos(3*x^2-2)
y=
4*cos(3*x^2 - 2)
>> ezplot(y)
4 cos(3 x 2 - 2)
4
3
2
1
0
-1
-2
-3
-4
-6

>> ezplot(y,0,3)

-4

-2

0
x

4 cos(3 x 2 - 2)
4
3
2
1
0
-1
-2
-3
-4
0

0.5

>> deriv=diff(y)
deriv =
(-24)*x*sin(3*x^2 - 2)
>> raices=solve(y)
raices =
-(6^(1/2)*(pi + 4)^(1/2))/6
(6^(1/2)*(pi + 4)^(1/2))/6
Ejemplo 6:
>> syms x y deriv integ raices
>> y=(4*sin(2*x-3))/tan(5*x-1)
y=
(4*sin(2*x - 3))/tan(5*x - 1)
>> ezplot(y)

1.5
x

2.5

(4 sin(2 x - 3))/tan(5 x - 1)
15
10
5
0
-5
-10
-15
-6

-4

-2

0
x

>> deriv=diff(y)
deriv =
(8*cos(2*x - 3))/tan(5*x - 1) - (4*sin(2*x - 3)*(5*tan(5*x - 1)^2 + 5))/tan(5*x - 1)^2
>> raices=solve(y)
raices =
3/2
Ejemplo 7:
>> syms x y deriv integ raices
>> y=2*(sin(2*x^2-1))^2-8.3*(cos(2*x-5))^2
y=
2*sin(2*x^2 - 1)^2 - (83*cos(2*x - 5)^2)/10
>> ezplot(y)

2 sin(2 x2 - 1)2 - (83 cos(2 x - 5)2)/10


2

-2

-4

-6

-8
-6

-4

-2

0
x

>> deriv=diff(y)
deriv =
(166*cos(2*x - 5)*sin(2*x - 5))/5 + 16*x*sin(2*x^2 - 1)*cos(2*x^2 - 1)
Ejemplo 8:
>> syms x y deriv integ raices
>> y=3*exp(5*x^-1)
y=
3*exp(5*x^2 - 1)
>> ezplot(y)
3 exp(5 x 2 - 1)

65

x 10
10
9
8
7
6
5
4
3
2
1
0
-6

-4

-2

0
x

Ejemplo 9:
>> syms x y deriv integ raices
>> y=2*exp(5*x)-log(x^2)
y=
2*exp(5*x) - log(x^2)
>> ezplot(y)
2 exp(5 x) - log(x 2)

10

x 10

0
-6

-4

-2

0
x

Ejemplo 10:
>> syms x y deriv integ raices
>> y=(log10(x-3))/exp(5*x-2)
y=
(log(x - 3)*exp(2 - 5*x))/log(10)
>> ezplot(y)
-7

(log(x - 3) exp(2 - 5 x))/log(10)

x 10
0

-0.5

-1

-1.5

-2
3

3.5

4.5

5.5

Para evaluar variables, se utiliza el comando eval( )


Ejemplo:
>> syms x y z
>> y=3*x^2-5*x-9
y=
3*x^2 - 5*x - 9
>> x=5.6
x=
5.6000
>> z=eval(y)
z=
57.0800
CONTROL AUTOMTICO
Se utiliza el MATLAB para el anlisis ya sea en lazo abierto o en lazo cerrado.
Para el lazo cerrado, se utiliza el controlador PID, en el cual se realizan pruebas para los
valores de las constantes Kp, Ki y Kd.
Kp = tiempo de subida
Ki = error
Kd = sobrepicos (si existen)
Ejemplo 1:

v
F

m = 1000 Kg
f = 50 N seg/m
v= 10 m/seg
t < 5 seg
Sp < 110%
Error < 2%

PLANTA

Gp=

1
ms+f

Gc=Kp+

H=

Ki
+ Kd s
s

Gp Gc
1+Gp Gc

En lazo abierto:
>> syms m s f num den nume dene
>> num=[1]
num =
1
>> den=[m f]
den =
[ m, f]
>> syms sys gp
>> nume=num
nume =
1
>> m=1000
m=
1000
>> f=50
f=
50
>> dene=eval(den)
dene =
1000
50
>> sys=tf(nume,dene)
Transfer function:
1
----------1000 s + 50
>> impulse(sys)

-3

Impulse Response

x 10

0.9
0.8
0.7

Amplitude

0.6
0.5
0.4
0.3
0.2
0.1
0

20

40

60

80

100

120

Time (sec)

Como se puede apreciar, no se ha llegado a la velocidad deseada de 10, por


lo que se debe escalar la respuesta:
>> impulse(10000*sys)
Impulse Response

10
9
8
7

Amplitude

6
5
4
3
2
1
0

20

40

60
Time (sec)

80

100

120

Ahora, para una respuesta paso:


>> step(sys)
Step Response

0.02
0.018
0.016
0.014

Amplitude

0.012
0.01
0.008
0.006
0.004
0.002
0

20

40

60

80

100

120

80

100

120

Time (sec)

Escalando:
>> step(500*sys)

Step Response

10
9
8
7

Amplitude

6
5
4
3
2
1
0

20

40

60
Time (sec)

Se puede apreciar que se obtiene la velocidad de 10 en aproximadamente


100 segundos, por lo cual se requiere un controlador que optimice este
valor al factor deseado de < 5 segundos:

En lazo cerrado:
>> syms gc kp ki kd h hs
>> gp=1/(m*s+f)
gp =
1/(1000*s+50)
>> gc=kp+ki/s+kd*s
gc =
kp+ki/s+kd*s
>> h=gp*gc/(1+gp*gc)
h=
1/(1000*s+50)*(kp+ki/s+kd*s)/(1+1/(1000*s+50)*(kp+ki/s+kd*s))
>> hs=simplify(h)
hs =
(kp*s+ki+kd*s^2)/(1000*s^2+50*s+kp*s+ki+kd*s^2)
>> num=[kd ki kp]
num =
[ kd, ki, kp]
>>den=[kd+1000 kp+50 ki]
den =
[ kd+1000, kp+50,
ki]
>> kp=1
kp =
1
>> ki=1
ki =
1
>> kd=0
kd =
0
>> nume=eval(num)
nume =
0
1
1
>> dene=eval(den)
dene =
1000
51
1
>> sys=tf(nume,dene)
Transfer function:
s+1
------------------1000 s^2 + 51 s + 1
>> step(sys)

Step Response

1.4

1.2

Amplitude

0.8

0.6

0.4

0.2

50

100

150
Time (sec)

Se multiplica por la consigna = 10


>> kp=800
kp =
800
>> ki=200
ki =
200
>> nume=eval(num)
nume =
0 200 800
>> dene=eval(den)
dene =
1000

850

>> sys=tf(nume,dene)

200

200

250

300

Transfer function:
200 s + 800
---------------------1000 s^2 + 850 s + 200
>> step(10*sys)

Step Response

40
35
30

Amplitude

25
20
15
10
5
0

10

Time (sec)

>> kp=800
kp =
800
>> ki=50
ki =
50
>> nume=eval(num)
nume =
0 50 800
>> dene=eval(den)
dene =
1000
850
>> sys=tf(nume,dene)
Transfer function:
50 s + 800
--------------------1000 s^2 + 850 s + 50
>> step(10*sys)

50

12

14

16

18

Step Response

160
140
120

Amplitude

100
80
60
40
20
0

20

40

60
Time (sec)

>> kp=50
kp =
50
>> ki=800
ki =
800
>> nume=eval(num)
nume =
0 800 50
>> dene=eval(den)
dene =
1000
100
800
>> sys=tf(nume,dene)
Transfer function:
800 s + 50
---------------------1000 s^2 + 100 s + 800
>> step(10*sys)

80

100

120

Step Response

10
8
6

Amplitude

4
2
0
-2
-4
-6
-8

20

40

60

80

Time (sec)

Ejemplo 2:

Q1

Q2
A

h=

v2
2g

A 12 h=

A 02 v 2
2g

Q22=2 gh A02

100

120

Q 2= 2 g A 0 h
PLANTA

Q1

dV
=Q1Q2
dt
NO LINEAL

dh
A =Q1 2 g A 0 h
dt
A s h ( s )=Q 1 ( s ) 2 g A 0 kl h(s )
h (s )
1
=
Q(s) A s+ 2 g A0 kl
Se linealiza:

h=kl h
h=5,2
kl=0,438
Sea:
A = 28,3 m2
Kl = 0,438

2 g=4,4 3
A0 = 2,03x10-3
Para agilizacin de los clculos, se hace uso de los programas *.m:

Utilizando la funcin creada en MATLAB:

Impulse Response

0.18
0.16
0.14

Amplitude

0.12
0.1
0.08
0.06
0.04
0.02
0

0.5

1.5

2.5

Time (sec)

3.5

4.5
4

x 10

Step Response

1400

1200

Amplitude

1000

800

600

400

200

0.5

1.5

2.5

3.5

x 10

Ejemplo 3:
Sea un caldero:

12840

PLANTA

dT
0,3
=9 T 26 T +
+q
dt
T

T = temperature del horno = 250 C


q = caudal del F.O.#6 = 5 lpm

12840

dT
=9 kl 1 T6 T +0,3 kl 2 T + q
dt

12840 s T ( s)=9 kl1 T (s)6 T (s)+0,3 kl2 T ( s)+q (s)


Se linealiza:

4.5
4

Time (sec)

T =kl 1 T
kl 1=T =250
1
=kl 2 T
T
1
=kl 2 250
250
kl 2=2,53 x 104
12840 s T ( s)=2250 T (s)6 T (s )+ 0,0000759 T (s)+q (s)

12840 s T ( s)=2256 T (s)+q (s)


En lazo abierto:

12840 s T ( s )+ 2256 T ( s )=q (s)

T ( s ) (12840 s+ 2256)=q (s)


T (s)
1
=
q( s) 12840 s +2256
Se utiliza un programa *.m:

-4

Impulse Response

x 10

Amplitude

0
0

10

15

20

25

30

35

Time (sec)

-3

2.5

Step Response

x 10

Amplitude

1.5

0.5

10

15

20

25

30

35

Time (sec)

Para el lazo cerrado:


>> syms gp gc kp ki kd h hs s
>> gp=1/(12840*s+2256);
>> gp=1/(12840*s+2256)
gp =
1/(12840*s + 2256)
>> gc=kp+ki/s+kd*s
gc =
kp + kd*s + ki/s
>> h=gp*gc/(1+gp*gc)
h=
(kp + kd*s + ki/s)/((12840*s + 2256)*((kp + kd*s + ki/s)/(12840*s + 2256)
+ 1))

>> hs=simplify(h)
hs =
1 - (12840*s^2 + 2256*s)/(ki + 2256*s + kp*s + kd*s^2 + 12840*s^2)
Se utilize un programa *.m

Impulse Response

1.2

Amplitude

0.8

0.6

0.4

0.2

-0.2

10

15

20

25
Time (sec)

30

35

40

45

50

Step Response

Amplitude

0
0

10

15

20
Time (sec)

ANLISIS EN FRECUENCIA:
Bode
>> syms nume dene
>> nume=[1]
nume =
1
>> dene=[100 80]
dene =
100 80
>> sys=tf(nume,dene)
Transfer function:
1
---------100 s + 80
>> step(500*sys)
>> bode(500*sys)

25

30

35

40

Bode Diagram

20

Magnitude (dB)

10
0
-10
-20

Phase (deg)

-30
0

-45

-90

-2

10

-1

10

10

Frequency (rad/sec)

>> allmargin(500*sys)
ans =
GainMargin: [1x0 double]
GMFrequency: [1x0 double]
PhaseMargin: 99.2069
PMFrequency: 4.9356
DelayMargin: 0.3508
DMFrequency: 4.9356
Stable: 1 (estable)

10

10

Você também pode gostar