Created
May 9, 2018 09:34
-
-
Save paolorotolo/ff2b8a2ceaf57585bc9b5200498185d4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%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