Gp = tf(0.01504, [2950 1]);
u = 900; % Potência da resistência, 900 W
[y, x] = step(Gp*u);
u = 1100; % potência de 1100 W.
[y1, x1] = step(Gp*u);
u = 500; % Agora potência de 500 W.
[y2, x2] = step(Gp*u);
plot(x, y, x1, y1, x2, y2)
legend('P = 900 W', 'P = 1100 W', 'P = 500 W');
xlabel('Tempo sec.');
ylabel('Temp ºC')
% Controlador de temperatura PID
% Rascunho inicial
% Autor: Ricardo B. Morim
% eletroinf@yahoo.com.br
% 27/10/2015
clear all
close all
clc
Ts = 10; % Intervalo entre as amostras experimentais de temperatura
% Sistema de aquecimento; temperatura em ºC; 50% de potência;
% Ts = 10 s
graus = [24.7;24.7;24.7;24.7;24.7;24.7;24.7;24.7;24.8;24.8;
24.8;24.8;24.8;24.8;24.8;24.8;24.8;24.9;24.9;24.9;
24.9;24.9;24.9;24.9;24.9;24.9;24.9;25;25;25;
25;25;25.1;25.1;25.1;25.1;25.2;25.2;25.2;25.2;
25.2;25.2;25.2;25.3;25.3;25.3;25.3;25.4;25.4;25.4;
25.4;25.5;25.5;25.5;25.5;25.5;25.6;25.6;25.6;25.6;
25.6;25.6;25.7;25.7;25.7;25.7;25.8;25.8;25.8;25.8;
25.9;25.9;25.9;26;26;26;26;26;26.1;26.1;
26.1;26.1;26.1;26.1;26.2;26.2;26.2;26.3;26.3;26.3;
26.3;26.3;26.4;26.4;26.4;26.5;26.5;26.5;26.5;26.5;
26.5;26.6;26.6;26.6;26.6;26.7;26.7;26.7;26.8;26.8;
26.8;26.8;26.9;26.9;26.9;26.9;26.9;26.9;27;27;
27;27;27.1;27.1;27.1;27.2;27.2;27.2;27.2;27.3;
27.3;27.3;27.3;27.4;27.4;27.4;27.4;27.4;27.5;27.5;
27.5;27.5;27.6;27.6;27.6;27.6;27.7;27.7;27.7;27.7;
27.8;27.8;27.8;27.8;27.9;27.9;27.9;27.9;27.9;27.9;
27.9;28;28;28;28;28.1;28.1;28.1;28.1;28.2;
28.2;28.2;28.2;28.3;28.3;28.3;28.4;28.4;28.4;28.4;
28.4;28.4;28.4;28.4;28.5;28.5;28.5;28.5;28.6;28.6;
28.6;28.6;28.7;28.7;28.7;28.7;28.7;28.8;28.8;28.8;
28.8;28.9;28.9;28.9;28.9;28.9;28.9;28.9;29;29;
29;29;29.1;29.1;29.1;29.1;29.2;29.2;29.2;29.2;
29.3;29.3;29.3;29.3;29.3;29.4;29.4;29.4;29.4;29.4;
29.5;29.5;29.5;29.5;29.5;29.5;29.5;29.6;29.6;29.6;
29.6;29.6;29.7;29.7;29.7;29.7;29.8;29.8;29.8;29.8;
29.8;29.8;29.9;29.9;29.9;29.9;29.9;30;30;30;
30;30;30;30.1;30.1;30.1;30.1;30.1;30.1;30.1;
30.1;30.2;30.2;30.2;30.2;30.2;30.2;30.2;30.3;30.3;
30.3;30.3;30.3;30.4;30.4;30.4;30.4;30.4;30.4;30.5;
30.5;30.5;30.5;30.5;30.6;30.6;30.6;30.6;30.6;30.6;
30.6;30.7;30.7;30.7;30.7;30.7;30.8;30.8;30.8;30.8;
30.8;30.8;30.8;30.8;30.8;30.8;30.9;30.9;30.9;30.9;
30.9;30.9;31;31;31;31;31;31;31;31.1;
31.1;31.1;31.1;31.1;31.1;31.1;31.2;31.2;31.2;31.2;
31.2;31.2;31.3;31.3;31.3;31.3;31.3;31.3;31.3;31.3;
31.4;31.4;31.4;31.4;31.4;31.4;31.4;31.5;31.5;31.5;
31.5;31.5;31.5;31.5;31.6;31.6;31.6;31.6;31.6;31.6;
31.6;31.6;31.6;31.6;31.6;31.7;31.7;31.7;31.7;31.7;
31.7;31.7;31.7;31.7;31.8;31.8;31.8;31.8;31.8;31.8;
31.8;31.9;31.9;31.9;31.9;31.9;31.9;31.9;32;32;
32;32;32;32;32;32;32;32;32.1;32.1;
32.1;32.1;32.1;32.1;32.1;32.1;32.1;32.1;32.1;32.2;
32.2;32.2;32.2;32.2;32.2;32.2;32.2;32.2;32.3;32.3;
32.3;32.3;32.3;32.3;32.3;32.3;32.3;32.4;32.4;32.4;
32.4;32.4;32.4;32.4;32.4;32.4;32.5;32.5;32.5;32.5;
32.5;32.5;32.5;32.5;32.5;32.5;32.5;32.6;32.6;32.6;
32.6;32.6;32.6;32.6;32.6;32.6;32.6;32.6;32.6;32.6;
32.6;32.7;32.7;32.7;32.7;32.7;32.7;32.7;32.7;32.7;
32.7;32.8;32.8;32.8;32.8;32.8;32.8;32.8;32.8;32.8;
32.8;32.9;32.9;32.9;32.9;32.9;32.9;32.9;32.9;32.9;
33;33;33;33;33;33;33;33;33;33;
33;33;33;33.1;33.1;33.1;33.1;33.1;33.1;33.1;
33.1;33.1;33.1;33.2;33.2;33.2;33.2;33.2;33.2;33.2;
33.2;33.2;33.2;33.2;33.3;33.3;33.3;33.3;33.3;33.3;
33.3;33.3;33.3;33.3;33.3;33.3;33.3;33.3;33.3;33.3;
33.3;33.4;33.4;33.4;33.4;33.4;33.4;33.4;33.4;33.4;
33.4;33.4;33.4;33.4;33.4;33.5;33.5;33.5;33.5;33.5;
33.5;33.5;33.5;33.5;33.5;33.5;33.5;33.5;33.5;33.5;
33.5;33.5;33.5;33.6;33.6;33.6;33.6;33.6;33.6;33.6;
33.6;33.6;33.6;33.6;33.6;33.6;33.6;33.7;33.7;33.7;
33.7;33.7;33.7;33.7;33.7;33.7;33.7;33.7;33.7;33.7;
33.7;33.7;33.7;33.7;33.8;33.8;33.8;33.8;33.8;33.8;
33.8;33.8;33.8;33.8;33.8;33.8;33.8;33.8;33.8;33.8;
33.8;33.8;33.8;33.8;33.8;33.9;33.9;33.9;33.9;33.9;
33.9;33.9;33.9;33.9;33.9;33.9;33.9;33.9;33.9;33.9;
33.9;33.9;33.9;33.9;34;34;34;34;34;34;34;34;34;34;
34;34;34;34;34;34;34;34;34.1;34.1;34.1;34.1;34.1;
34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;
34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;
34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;
34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;
34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1;34.1];
minimo = min(graus);
maximo = max(graus);
% Removo o offset de temperatura ambiente e salvo em outro vetor
for k=1:length(graus)
t(k) = k*Ts;
graus1(k) = graus(k)-minimo; % Ponto de partida em zero, do gráf.
end
% Escalono graus1 entre 0 e 1 para obter os parâmetros Ziegler Nichols da
% figura
maximo1 = max(graus1);
for k=1:length(graus1)
graus1(k) = graus1(k)/maximo1; % Normalizo entre 0 e 1.
end
%dt0 = maximo; % Variação de temperatura
dt = maximo-minimo % Variação de temperatura
pwr = 1250; % Potência da resistência, em W.
kp = dt/(pwr*0.5); % Ganho = Variação de temperatura em função de PWR com 50%
t_63 = dt*0.63; % Valor de temperatura em 63% de max(graus)
u = pwr/2; % Estou acionando com 50% de potência.
% Na tabela acima, atinge t_63 na amostra 295.
% Como Ts = 10, 295*10 = 2950 s = Tau
% Gp = y(s)/u(s) = kp*1/(s*Tau + 1)
Tau = 2950;
s = tf('s');
Gp = kp/(s*Tau+1);
step(Gp*u+minimo); % Step com 50% da potênca
hold on
plot(t, graus, 'color', 'r')
legend('TF aprox.', 'Medida');
xlabel('Tempo - sec');
ylabel('Temp. ºC');
figure
% Ploto a figura normalizada, para achar os parâmetros Ziegler-Nichols
plot(t, graus1)
axis([0 8000 -0.5 1.2]); % Melhor posicionamento no gráfico.
% Dessa figura eu obtive: L = 220 e a=0.053
% Agora testo o controlador Projetado.
% Utilizo Ts = 50 segudos.
Ts = 50; % Ts do meu controlador PID
Gpz = c2d(Gp, Ts);
Sysz = ss(Gpz);
Ap = Sysz.a;
Bp = Sysz.b;
Cp = Sysz.c;
L = 220;
a = 0.053;
Ti = 2*L; % Ti = 2*L
kp = 1.2/a;
Td = L/2; % Td = L/2
ek = 0;
ek_ant = 0;
ek2_ant = 0;
yp = 0;
xp = 0;
uk = 0;
u_ant = 0;
tamb=20;
ref = 32.5; % Ajuste, esta é a temperatura que eu quero
y_ant=0;
yk = 0;
for k=1:500
% Planta, aquele meu modelo aproximado:
xp = Ap*xp + Bp*uk;
yp = Cp*xp+tamb;
ek = ref-yp; % Erro atual
% https://en.wikipedia.org/wiki/PID_controller
uk = u_ant + kp*((1+(Ts/Ti)+(Td/Ts))*ek + (-1-(2*Td/Ts))*ek_ant + (Td/Ts)*ek2_ant);
ek2_ant = ek_ant;
ek_ant = ek;
u_ant = uk;
if uk > 1250 % Limite máximo de potência do aquecedor
uk = 1250;
end
ukplot(k) = uk;
ypplot(k) = yp;
refplot(k) = ref;
t1(k) = k*Ts;
end
figure
plotyy(t1, ukplot, t1, ypplot)
legend('Potencia kW', 'Temp ºC');
xlabel('Tempo - sec.');
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante