% Conclusões:
%
% Figura1:Pesquisa do melhor valor de Kp para o compensador PI
% Aplicaram-se degraus de -90 a 0º para vários Kp's diferentes de modo a
% encontrar o valor que apresentasse menor tempo de estabelecimento e menor
% overshoot. Este teste foi feito para uma carga elevada (1138g) pois é
% nesta circunstancia que o sistema é mais instável e por isso resulta num
% menor Kp (note que com massas elevadas, o sistema demora mais tempo a
% reagir levando o compensador a atingir extremos de PWM podendo levar o
% sistema a oscilar). Segundo estes gráficos observa-se que Kp=0.07 é o
% melhor.
%
% Figura2:Resposta ao degrau de várias cargas
% Os gráficos fazem a sobreposição do comportamento sem e com controlo, e
% pode-se constatar que com controlo a resposta é mais lenta, algo já
% previsível. No entanto, temos a vantagem de poder anular o erro em regime
% estacionário, o que pode ser visto para a carga de 675g.
%
% Figura3:Variando o ponto inicial e final
% Estes gráficos mostram-nos as fraquezas do compensador. Embora funcione
% bastante bem para a gama de de -90 a 0º, para outra gama diferente, como
% por exemplo de -45 a +45º, o comportamento deteriora-se revelando um
% elevado oveshoot e oscilação. Tal é facilmente compreensível devido ao
% facto de cada valor de Kp estar adaptado a uma determinada variação de
% binário - mudando esta variação, o parametro Kp também teria de mudar
% para garantir um comportamento suave. Uma solução para resolver este
% problema seria adaptar o valor de Kp a partir de um segundo paremtro de
% feedback como é o caso da corrente (que está relacionada com o binário
% exercido).
%
% Conclusões finais:
% De notar que a medida que a carga aumenta o sistema torna-se mais
% instável! Isto deve-se à velocidade de actualização da posição solicitada
% pelo CONTROLADOR relativamente à real. Se a velocidade de actualização
% for superior à efectiva (muito comum para cargas muito elevadas) o PWM
% aplicado tende a encostar a um dos extremos (+90º ou -90º) obrigando à
% ocorrencia de overshoot - o ideal é a velocidade de actualização do PWM
% acompanhar o efectivo para evitar ultrapassagens do PWM ideal. Já com
% cargas baixas verifica-se que a velocidade de actualização do PWM é
% inferior a máxima do servo o que o obriga a abrandar o movimento, mas
% nunca sem instabilizá-lo.
% Por isso, à medida que aumentamos a carga temos de reduzir o Kp máximo
% para que a velocidade de actualização do PWM nunca ultrapasse a máxima do
% servo, o que implica que o pior caso corresponde a máxima carga.
% Escolhendo o Kp a partir deste princípio, para cargas mais baixas o
% sistema será decerto estável pois o Kp em uso é inferior ao Kp
% máximo admissível para a nova carga.

close all

help response_step

title1= 'Pesquisa do melhor valor de Kp para o compensador PI (Carga=1138g, Percurso:-90º=>0º)';

files1=['degrau_control_m2+4_KP005.txt     ',
        'degrau_control_m2+4_KP007_este.txt',
        'degrau_control_m2+4_KP008.txt     ',
        'degrau_control_m2+4_KP01.txt      '];

label1=['Kp=0.05            ',
        'Kp=0.07            ',
        'Kp=0.08 (ESCOLHIDO)',
        'Kp=0.10            '];
    
title2= 'Resposta ao degrau para várias cargas (Kp=0.08)';

files2a=['degrauM1nocontrol_volt_posEff_kt0.txt ',
         'degrauM2nocontrol_volt_posEff_kt0.txt ',
         'degrauM4nocontrol_volt_posEff_kt0.txt '];
files2b=['degrauM1_volt_posEff_controlReq.txt   ',
         'degrauM2_volt_posEff_controlReq.txt   ',
         'degrauM4_volt_posEff_controlReq.txt   '];
label2=['Massa=m1=258g',
        'Massa=m2=463g',
        'Massa=m4=675g'];


title3= 'Variando o ponto inicial e final (com Kp=0.07)';

files3=['degrau_control_m2+4_KP007_este.txt  ',
        'degrauM24_volt_posEff_controlReq.txt'];
    
label3=['Movimento -90º => 0º (Kp=0.07)  ',
        'Movimento -45º => +45º (Kp=0.07)'];

legenda=['Percurso COM controlo',
         'Pedido do Controlador',
         'Percurso sem controlo'];
     
f3=figure(3);
set(f3,'name',title3);
for i=1:size(files3,1)
    clear array;
    
    array=load(files3(i,:));
    
    subplot(2,1,i);
    
    plot(array(:,1),array(:,3),'r',array(:,1),array(:,4),'g');
    
    xlabel(label3(i,:));
    ylabel('Posição (graus)');
    if (i==size(files3,1))
        legend(legenda,'location','southeast');
    end
end


f2=figure(2);
set(f2,'name',title2);
for i=1:size(files2a,1)
    clear array;
    
    array1=load(files2a(i,:));
    array2=load(files2b(i,:));
    
    subplot(3,1,i);
    
    plot(array2(:,1),array2(:,3),'r',array2(:,1),array2(:,4),'g',array1(:,1),array1(:,3),'b');
    
    xlabel(label2(i,:));
    ylabel('Posição (graus)');
    if (i==size(files2a,1))
        legend(legenda,'location','southeast');
    end
end


f1=figure(1);
set(f1,'name',title1);
for i=1:size(files1,1)
    clear array;
    
    array=load(files1(i,:));
    
    subplot(2,2,i);
    plot(array(:,1),array(:,3),'r',array(:,1),array(:,4),'g');
    
    xlabel(label1(i,:));
    ylabel('Posição (graus)');
    if (i==size(files1,1))
        legend(legenda,'location','southeast');
    end
end
