Beruflich Dokumente
Kultur Dokumente
4.1
Pretende-se controlar em tempo real um dado sistema. Para isso, o sistema foi identificado,
aplicando em malha aberta um degrau unitário na entrada. A sua resposta foi amostrada
obtendo-se a seguinte tabela.
Tempo resposta ao
(segundos) degrau unitário
0.0000 0
0.2500 0
Nota: Embora normalmente não
0.5000 0
apareça no enunciado de um teste os
0.7500 0.7869
valores considerados foram:
1.0000 1.2642
1.2500 1.5537
k=2
1.5000 1.7293
Tp = 0.5
1.7500 1.8358
L = 0.5
2.0000 1.9004
2.2500 1.9396
E a FT 1ª ordem é na forma
2.5000 1.9634
ke − Ls
G ( s) =
2.7500 1.9778 1 + sTp
3.0000 1.9865
3.2500 1.9918
mk = kp ek + ki Sk + kd (ek - ek-1)
onde: Sk = Sk-1 + ek
1.2 0.6Ts .5
kp = ,ki = 2 ,kd =
R ( L + Ts ) R ( L + Ts / 2) RTs
Ts = 0.3 L
Nota: caso não tenha conseguido resolver o anterior, assume valores razoáveis para Ts, Kp,
Ki e Kd.
c) Escreva outro programa, utilizando agora um algoritmo de velocidade para o PID. Assuma
que o controlo é iniciado quando o sistema está em repouso.
Resolução
a)
Assumindo que podemos identificar um sistema de 1ª ordem com atraso de acordo com:
y(∞)
gain = K =
∆
t
TT = L + Tp
e como a resposta é:
Tp
Slope R
Tt
y(∞)
H y(∞) 2
k= = = =2
∆ ∆ 1
O declive da recta, R, pode ser calculado pela equação da recta que passa por dois pontos.
Pode-se considerar os dois primeiros pontos (t,y) da resposta não nula, como mostra a figura
acima, i.e (0.5,0) e (0.75, 0.7869):
y 0 - y1 0 − 0.7869 − 0.7869
R= = = = 3.1476
t 0 - t1 0.5 − 0.75 − 0 .5
Agora para calcular o Tt, isto é o Tempo quando a recta de declive R intersecta a resposta
final, resolve-se a equação acima de modo a determinar o tempo para y = 2, i.e o segundo
ponto será (Tt, 2):
y 0 - y(∞) 0−2
R= ⇔ 3.1476 =
t 0 - Tt 0.5 − Tt
2 - 3.1476 * 0.5
Tt = ⇔ Tt = 1.1354
- 3.1476
Tp = Tt – L = 1.1354-0.5 = 0.6354
k e −L S 2 e −0.5 S
G(S) = =
Tp S + 1 0.634 S + 1
⎧ 1.2 ⎧ 1.2
⎪k p = kp = = 0.5864
⎪ R (L + Ts ) ⎪ 3.1476 * (0.5 + 0.15)
⎪
⎪ 0.6 Ts ⎪ 0.6 * 0.15
⎨k i = ⇔ ⎨k i = = 0.0864
R (L + Ts / 2 ) 3.1476 * (0.5 + 0.15 / 2)
2 2
⎪ ⎪
⎪ 0.5 ⎪ 0.5
⎪k d = RT ⎪⎩k d = 3.1476 * 0.15 = 1.0590
⎩ s
b)
O algoritmo de controlo do PID discreto, usando as expressões acima indicadas para o
cálculo do sinal de controlo, e as funções para a entrada de dados com a Plant e para
sincronizar com o tempo de amostragem de 0.15 segundos, em, por exemplo PASCAL:
PROGRAM PID_discreto_base;
VAR
Ts, time, NextSample, S, m, e, eold, kp, ki, kd : REAL;
BEGIN
kp := 0.586;
ki := 0.086;
kd := 1.059;
In (eold); (* Melhor inicializar eold com o valor corrente do que com 0 *)
S : = 0;
Ts = 0.15;
time := GetTime*0.1; (*Converte para segundos*)
WHILE TRUE DO
BEGIN
(* Aguarda próximo instante de amostragem *)
NextSample := time + Ts;
WHILE time < NextSample DO time := GetTime*0.1;
(* Tarefa de Controlo *)
S := S + e;
m := kp * e + ki * S + kd * (e - eold);
eold := e;
(* Envia sinal de controlo para Plant via DAC*)
Out (m);
END;
END.
c)
O algoritmo de velocidade é dado por:
∆mk = mk - mk-1
m k = k p e k + k i S k + k d (e k − e k -1 )
m k -1 = k p e k -1 + k i S k -1 + k d (e k -1 − e k -2 )
têm-se:
∆m k = k p (e k - e k -1 ) + k i (S k - S k -1 ) + k d (e k - 2e k -1 + e k -2 )
e como:
ek = Sk - Sk-1
chega-se a:
∆m k = e k (k p + k i + k d ) - e k -1 (k p + 2k d ) + e k -2 k d
PROGRAM PID_discreto_algo_velocidade;
VAR
Ts, time, NextSample, dm, e, e1, e2, kp, ki, kd, K : REAL;
BEGIN
kp := 0.586;
ki := 0.086;
kd := 1.059;
e1 := 0; (* Visto que o controlo é iniciado com o sistema em repouso *)
e2 := 0;
Ts = 0.15;
time := GetTime*0.1; (*Converte para segundos*)
While TRUE
(* Aguarda próximo instante de amostragem *)
NextSample := time + Ts;
WHILE time < NextSample DO time := GetTime*0.1;
(* Tarefa de Controlo *)
dm = e*(kp + ki + kd) - e1 * (kp + 2 *kd) + e2 * (kd);
e2 = e1;
e1 = e;