Skip to content

Instantly share code, notes, and snippets.

@paolorotolo
Created May 9, 2018 09:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paolorotolo/ff2b8a2ceaf57585bc9b5200498185d4 to your computer and use it in GitHub Desktop.
Save paolorotolo/ff2b8a2ceaf57585bc9b5200498185d4 to your computer and use it in GitHub Desktop.
%compensazione con rete ritardatrice
clc
clear
MFR=60; %specifica margine di fase
K=2000; %amplificatore
epsilon=15;
s=tf('s');  % la variabile della nostra funzione di trasferimento è la variabile s
           % in questo modo possiamo scrivere la funzione di trasferimento G
           % direttamente in funzione di s
G=100*K/(s*(s+20)*(s+100)); % Funzione di trasferimento del sistema
[MG, MF, Wcg, Wcf] = margin(G);
% calcola i vari margine di fase e di ampiezza della funzione di
% trasferimento
if MF<MFR
  % è necessario intervenire con una rete ritardatrice
  MFnew = - 180 + MFR + epsilon;
  
  figure(1)
  
  % genera diagramma di Bode
  bode(G), grid
  % sul diagrama di Bode generato, vediamo qual è Mc e Wc e sostituiamo
  % di seguito:
  Wcgnew = 4.41;
  MGnew = 26.8;
  
  % variabili da cambiare vedendo il diagramma di Bode
  % Sul diagramma di bode, prendere il valore corrispondente a MFnew
  % (-105)
  
  alpha = 10^(-MGnew/20);
  toll = 4; % da 2 a 10
  tau = toll/(alpha*Wcgnew);
  GR = (1+alpha*tau*s)/(1+tau*s);
  
  [MGr, MFr, Wcgr, Wcfr] = margin(G*GR);
  
  MFr
  %Se falso il controllo è finito
  if MFr>MFR
     G0c=(G*GR)/(1+G*GR);
     G0n=G/(1+G);
     figure(2)
     step(G0c), hold on % apri il grafico
     step(G0n), grid
     
     % primo grado ritardatrice, secondo amplificatore
     legend ('ritardatrice', 'amplificatore')
     hold off % chiudi il grafico
     figure(3)
     bode(G0c), hold on
     bode(G0n), grid
     legend ('ritardatrice', 'amplificatore')
     hold off
  else
      disp('MODIFICARE TOLLERANZA E POI EPSILON');
  end
  
  % Se il margine di fase del sistema è già maggiore della specifica
  % il controllo non è necessario
else
   disp('CONTROLLO NON NECESSARIO');
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment