Você está na página 1de 7

Lista de Exercı́cios 3

1. Deseja-se projetar um controlador Gc (z) para o sistema da Figura 3.1 de modo que:

ˆ o erro estacionário seja nulo para entrada r(kT ) do tipo degrau unitário.

ˆ os polos de malha fechada dominantes tenham coeficiente de amortecimento ζ = 0, 5 e frequência


natural ωn = 2 rad/s.

R(z) + Y (z)
Gc (z) D/A Gp (s) A/D

Figura 3.1: Diagrama de blocos de um sistema em malha fechada.

A função de transferência da planta é


1
Gp (s) = ·
(s + 1)(s + 2)
A função de transferência do controlador PID ideal é
K(z + C1 )(z + C2 )
Gc (z) = ·
z(z − 1)

Escolha o perı́odo de amostragem T = 0, 4 s. Faça o projeto de Gc (z) diretamente no plano z e


utilize a técnica do lugar geométrico das raı́zes com cancelamento de polos e zeros. Escolha um dos
polos de Gc (z) para cancelar o polo mais lento da planta discretizada Gp (z).

2. Projete um controlador Gc (z) para o sistema da Figura 3.1 de modo que os polos de malha fechada
tenham um coeficiente de amortecimento ξ = 0, 5 e uma frequência natural não amortecida ωn = 4
rad/s. A função de transferência da planta é
1
Gp (s) = ·
s2
Considere um controlador PD ideal com função de transferência
K(z + C)
Gc (z) = ·
z
Adote um perı́odo de amostragem T = 0, 1 s. Faça o projeto de Gc (z) diretamente no plano z e
utilize as condições de fase e módulo do LGR para calcular os valores de C e K.
2 LISTA DE EXERCÍCIOS 3.

3. A Figura 3.2 apresenta o esquemático elétrico de um sistema de controle de tempo discreto


implementado na plataforma Arduino UNO para o controle de tensão de um circuito RC.

Figura 3.2: Esquemático elétrico do sistema de controle de tempo discreto.

A função de transferência Gc (s) obtida no RLTOOL do MATLAB para o compensador de avanço


de fase foi
15, 88(s + 1)
Gc (s) = ·
(s + 5, 69)
Pede-se:

1. Determine a função de transferência do controlador de tempo discreto, Gc (z), usando a trans-


formação de Tustin. Suponha um perı́odo de amostragem T = 0, 1 s.

2. Obtenha a equação de diferenças do controlador Gc (z).

3. Complete os campos destacados como (1) a (6) no código-fonte do Algoritmo 1 para que o
mesma seja futuramente embarcado na plataforma Arduino UNO.

Algoritmo 1: Código-fonte embarcado na plataforma Arduino UNO.

1 #include <TimerOne.h> 16 float ek 1 = (1);


2 #include <Wire.h> 17 float uk 1 = (2);
3 #define addr 0x62 // 0x62 ou ox63 18

4 19 void setup(void)
5 void dacvoltage(float valor); 20 {
6 float adcvoltage(unsigned char pino); 21 rk = 1.0;
7 22 Wire.begin(addr);
8 unsigned char pino = 0; 23 dacvoltage(0.0);
9 unsigned long k = 0; 24 Serial.begin(9600);
10 float t = 0.0; 25 do{} while(Serial.available()<=0);
11 float Ta = 0.1; // T = 0,1 s 26 Timer1.initialize(1); // T=100ms
12 float uk; 27 Timer1.attachInterrupt(controlador);
13 float ek; 28 }
14 float yk; 29

15 float rk; 30
3

31 void loop(void) 54 dacvoltage(uk);


32 { 55 Serial.print(rk);
33 t = (float)k*Ta; 56 Serial.print(”\t”); // tab
34 if((t>=0.0) && (t<=5.0)) rk=1.0; 57 Serial.print(yk);
35 if(t>5.0) 58 Serial.print(”\t”);
36 { 59 Serial.println(uk);
37 rk=0.0; 60 }
38 cli(); // Desabilita as interrupções 61

39 Serial.end(); 62 void dacvoltage(float valor)


40 } 63 {
41 } 64 unsigned int Rda=valor*(4095.0/5.0);
42 65 Wire.beginTransmission(addr);
43 void controlador() 66 Wire.write(64);
44 { 67 Wire.write(Rda >> 4);
45 sei(); 68 Wire.write((Rda & 15) << 4);
46 k++; 69 Wire.endTransmission();
47 yk=adcvoltage(pino); 70 }
48 ek = (3); 71

49 uk = (4); 72 float adcvoltage(unsigned char pino)


50 uk 1 = (5); 73 {
51 ek 1 = (6); 74 return analogRead(pino)*(5.0/1023.0);
52 if (uk>=5.0) uk=5.0; 75 }
53 if (uk<=0.0) uk=0.0;

4. O sistema de controle de tempo discreto representado pelo diagrama de blocos da Figura 3.3 se
destina a controlar o funcionamento de uma planta industrial. Encontre os parâmetros C1 e C2 do
controlador Gc (z) de forma que, em malha fechada, o sistema tenha uma função de transferência de
malha fechada com um único polo em z = −0, 6065.

Gc (z) Gp (z)
+ 1,3(z+C1 ) 1,1059
r(k) (z+C2 ) (z−0,7788) y(k)

Figura 3.3: Sistema de controle de tempo discreto.

5. A Figura 3.4 apresenta o esquemático elétrico de um determinado sistema de controle de tempo


discreto. O processo a ser controlado possui uma função de transferência de terceira ordem dada por
1 1
P (s) = = ·
(R1 C1 s + 1)(R2 C2 s + 1)(R3 C3 s + 1) (s + 1)3
Um engenheiro de controle projetou um controlador digital para este processo. Foi adotado um
perı́odo de amostragem de T = 0, 1 segundos e a função de transferência obtida para esse controlador
foi
U (z) − 23 3
2 1
C(z) = = −1
+ −1
+ ·
E(z) (1 + 3z ) (1 + 4z ) 6
Para poder implementar a rotina deste controlador no microcontrolador, este engenheiro fez uma
representação gráfica da realização em paralelo de C(z), como ilustrado na Figura 3.5, onde os blocos
z −1 representam o operador atraso unitário, e em seguida começou a desenvolver o código-fonte para
o sistema da Figura 3.4, de acordo com o Algoritmo 2.
4 LISTA DE EXERCÍCIOS 3.

Pede-se:

1. Utilize os espaços reservados entre as linhas 37 a 44 do Algoritmo 2 para implementar a equação


de diferenças de C(z) com base na Figura 3.4.

2. Utilize os espaços reservados entre as linhas 14 a 20 do Algoritmo 2 para declarar as variáveis


globais necessárias no item 1 com base nas variáveis declaradas na Figura 3.5.

Figura 3.4:

1 u1 (k)
6

w1 (k) u2 (k)
e(k) + − 23 + u(k)

−3 z −1

w2 (k) 3 u3 (k)
+ 2

−4 z −1

Figura 3.5:
5

Algoritmo 2: Código-fonte embarcado na plataforma Arduino UNO.

1 #include <TimerOne.h> 29

2 #include <Wire.h> 30 void loop(void){}


3 #define MCP4725 ADDR 0x62 31

4 int analogPin=0; 32 void controle()


5 int dacValue=0; 33 {
6 int adcValue=0; 34 sei();
7 float umax=5.0; 35 adcValue=analogRead(analogPin);
8 float umin=0.0; 36 yk=adcValue*(5.0/1023.0);
9 float uk; 37

10 float urk; 38

11 float ek; 39

12 float yk; 40

13 float rk; 41

14 42

15 43

16 44

17 45 if (uk>=umax){urk=umax;}
18 46 else if (uk<=umin){urk=umin;}
19 47 else{urk=uk;}
20 48 dacValue=urk*(4095.0/5.0);
21 void setup(void) 49 Wire.beginTransmission(MCP4725 ADDR);
22 { 50 Wire.write(64);
23 rk = 1.0; 51 Wire.write(dacValue>>4);
24 Serial.begin(9600); 52 Wire.write((dacValue&15)<<4);
25 do{} while(Serial.available()<=0); 53 Wire.endTransmission();
26 Timer1.initialize(100000); 54 Serial.print(yk);
27 Timer1.attachInterrupt(controle); 55 }
28 }
6 LISTA DE EXERCÍCIOS 3.

Respostas

1. Adotou-se T = 0, 4. A função de transferência da planta discretizada é:


0, 0543(z + 0, 6703)
Gp (z) = ·
(z − 0, 4493)(z − 0, 6703)

A função de transferência do controlador Gc (z) é:

6, 1(z − 0, 26)(z − 0, 67)


Gc (z) = ·
z(z − 1)

2. A função de transferência da planta discretizada é:


0, 005(z + 1)
Gp (z) = ·
(z − 1)2

A função de transferência do controlador Gc (z) é:

42, 77(z − 0, 77)


Gc (z) = ·
z

3. A função de transferência do controlador Gc (z) é:

11, 13(z − 0, 8184)


Gc (z) = ·
(z − 0, 2747)

A equação de diferenças de Gc (z) é:

u(k) = 0, 27u(k − 1) + 11, 13e(k) − 9, 11e(k − 1).

Os campos de (1) a (6) do Algoritmo 1 são:

(1) 0;
(2) 0;
(3) rk-yk
(4) 0.27*uk+11.13*ek-9.11*ek 1
(5) uk
(6) ek

4. A função de transferência do controlador Gc (z) é:

1, 3(z − 0, 7788)
Gc (z) = ·
(z − 0, 8312)

5. Entre as linhas 14 e 20 são declaradas as seguintes variáveis:


14 float u1k;
15 float u2k;
16 float u3k;
17 float w1k;
18 float w2k;
19 float w1k 1=0.0;
20 float w2k 2=0.0;
7

Entre as linhas 37 a 44 é implementado a equação de diferenças do controlador:


37 u1k=(1/6)*ek;
38 w1k=ek=3*w1k 1;
39 u2k=(=2/3)*w1k;
40 w2k=ek=4*w2k 1;
41 u3k=(3/2)*w2k;
42 uk=u1k+u2k+u3k;
43 w1k 1=w1k;
44 w2k 2=w2k;

Você também pode gostar