% Alguns dados:
%
% Conclusões:
% Testou-se o sistema para várias cargas diferentes nomeadamente:
% m0=Vazio
% m1=258g
% m2=463g
% m4=675g
% m1+m4=933g
% m2+m4=1138g
% ...nas condições de ausencia de um controlador externo (apenas é usado o
% controlador interno do servo) e com um controlador externo baseado num
% compensador do tipo PI implementado em software (Kp=0.07). Vários passos
% foram executados no percurso ascendente (-90º a +90º) com paragens de 5
% em 5º para registo dos valores
% A recta a verde apresenta o trajecto ideal que o servo deveria seguir, no
% entanto a imperfeição do controlador do servo apresenta desvios a favor
% da força gravítica nos pontos de maior binário (pontos a azul). Aplicando
% o compensador externo, pode-se observar que a trajectória é corrigida
% consideravelmente com um erro máximo de 2º (pontos a vermelho) (este erro
% deve-se a limitada resolução do PWM em discernir as várias posições).

close all

title1= 'Percurso passo a passo (passos de 5º) - azul:sem controlo; vermelho:com controlo';

files1a=['roundM0nocontrol_posReq_volt_posEff.txt ',
         'roundM1nocontrol_posReq_volt_posEff.txt ',
         'roundM2nocontrol_posReq_volt_posEff.txt ',
         'roundM4nocontrol_posReq_volt_posEff.txt ',
         'roundM14nocontrol_posReq_volt_posEff.txt',
         'roundM24nocontrol_posReq_volt_posEff.txt'];
files1b=['roundM0_posReq_controlReq_posEff.txt',
         'roundM1_posReq_contReq_posEff.txt   ',
         'roundM2_posReq_contReq_posEff.txt   ',
         'roundM4_posReq_contReq_posEff.txt   ',
         'roundM14_posReq_contReq_posEff.txt  ',
         'roundM24_posReq_contReq_posEff.txt  '];

label1=['Massa=m0=Vazio   ',
        'Massa=m1=258g    ',
        'Massa=m2=463g    ',
        'Massa=m4=675g    ',
        'Massa=m1+m4=933g ',
        'Massa=m2+m4=1138g'];
    
f1=figure(1);
set(f1,'name',title1);
for i=1:size(files1a,1)
    clear array;
    
    arraya=load(files1a(i,:));
    arrayb=load(files1b(i,:));
    
    subplot(2,3,i);
    plot(arraya(1:ceil(length(arraya)/2),1),arraya(1:ceil(length(arraya)/2),1),'g',...
         arraya(1:ceil(length(arraya)/2),1),arraya(1:ceil(length(arraya)/2),3),'b.',...
         arrayb(1:ceil(length(arrayb)/2),1),arrayb(1:ceil(length(arrayb)/2),3),'r.');
    
    xlabel(label1(i,:));
    ylabel('Posição (graus)');
    
    grid on;
end
