% Controlador usado:
% posição(n)=posição(n-1+Kp*e(n),   e(n)=posição final-posição(n)
%
% Conclusões:
% Aplicação de um degrau no percurso entre -45 e +45º com uma carga de 933g
%
% Figura1: Percurso:-45º=>+45º
% Pode-se observar nesta figura o carácter instável do servo na ausencia de
% controlador... embora nunca atinja posições inferiores a -45º. o sinal do
% potenciómetro indica-nos informações falsas a esse respeito. Além disso,
% como até à posição 0 o binário é crescente passando a decrescente a
% partir desse ponto visualiza-se uma evolução não constante ao longo do
% tempo. Integrando um controlador de posição com Kp até 0.06 estes
% problemas são eliminados observando-se uma evolução suave em todo o
% percurso com um atraso tanto menor quanto maior é o Kp. Já para valores a
% partir de 0.07 já se começa a observar oscilação com a reintrodução dos
% problemas observados no caso sem controlo. É por isso essencial limitar
% este valor no pior caso de modo a evitar estes inconvenientes.
%
% Figura2: Percurso:+45º=>-45º
% Invertendo o sentido do trajecto, verifica-se, com alguma surpresa, que a
% estabilidade mantém-se para valores superiores de Kp, obtendo-se
% instabilidade apenas para Kp>=0.1. Mais uma vez pode-se observar aqui as
% vantagens do controlador na eliminação de oscilações estranhas.
%
% Conclusões finais:
% Pode-se concluir que na aplicação de um valor adequado de Kp consegue-se
% eliminar muitos dos problemas que surgem na ausencia de controlador,
% nomeadamente:
%  - Erro em regime estacionário;
%  - Overshoot;
%  - Oscilações estranhas no início e a meio do percurso;
% Daqui pode-se dizer que a aplicação de um Kp=0.06 é o mais adequado para
% um comportamento suave na aplicação de rampas (ver response_ramp.m) e
% degraus.

close all

help response_step

title1= 'Resposta ao degrau: -45º=>+45º, Carga=M1+M4=933g';
files1=['degrauM14nocontrol_volt_posEff_kt0#-45;+45.txt     ',
        'degrauM14kp=004_volt_posEff_controlReq#-45;+45.txt ',
        'degrauM14kp=001_volt_posEff_controlReq#-45;+45.txt ',
        'degrauM14kp=006_volt_posEff_controlReq#-45;+45.txt ',
        'degrauM14kp=002_volt_posEff_controlReq#-45;+45.txt ',
        'degrauM14kp=007b_volt_posEff_controlReq#-45;+45.txt'];
label1=['Sem Controlo',
        'Kp=0.04     ',
        'Kp=0.01     ',
        'Kp=0.06     ',
        'Kp=0.02     ',
        'Kp=0.07     '];

title2= 'Resposta ao degrau: +45º=>-45º, Carga=M1+M4=933g';
files2=['degrauM14nocontrol_volt_posEff_kt0#+45;-45.txt    ',
        'degrauM14kp=004_volt_posEff_controlReq#+45;-45.txt',
        'degrauM14kp=001_volt_posEff_controlReq#+45;-45.txt',
        'degrauM14kp=007_volt_posEff_controlReq#+45;-45.txt',
        'degrauM14kp=002_volt_posEff_controlReq#+45;-45.txt',
        'degrauM14kp=010_volt_posEff_controlReq#+45;-45.txt'];
label2=['Sem Controlo',
        'Kp=0.04     ',
        'Kp=0.01     ',
        'Kp=0.07     ',
        'Kp=0.02     ',
        'Kp=0.10     '];

legenda=['Percurso sem controlo',
         'Percurso COM controlo',
         'Pedido do controlador'];

f2=figure(2);
set(f2,'name',title2);

for i=1:size(files2,1)
    clear array;
    array=load(files2(i,:));
    
    subplot(3,2,i);
    if (i==1)
        array0=array;
        plot(array0(:,1),array0(:,3),'b');
    else
        plot(array0(:,1),array0(:,3),'b',...
             array(:,1),array(:,3),'r',array(:,1),array(:,4),'g');
    end
    
    xlabel(label2(i,:));
    ylabel('Posição (graus)');
    
    if (i==size(files2,1))
        legend(legenda,'location','northeast');
    end
end


f1=figure(1);
set(f1,'name',title1);

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