Anteprima
Vedrai una selezione di 4 pagine su 12
Taratura PID, esercizio con codice  MATLAB Pag. 1 Taratura PID, esercizio con codice  MATLAB Pag. 2
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Taratura PID, esercizio con codice  MATLAB Pag. 6
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Taratura PID, esercizio con codice  MATLAB Pag. 11
1 su 12
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

MATLAB CODE

%-----------------------TARATURA PID-----------------------%

clear; close all;

%% CARICAMENTO DATI ESERCIZIO

%load datisperimentali.mat

s=zpk('s');

G = 0.7/((500*s+1)^4*(100*s+1));

t=0:0.01:10000;

N=1;

figure(1)

step(t,G);

title('Curva di processo dell''impianto originario');

xlabel('tempo');

ylabel('ampiezza');

[valori_y,time]=step(G,t);

W=feedback(G,1);

%% METODO CICLO CHIUSO

% Calcolo il margine di ampiezza ovvero il guadagno critico

[K_cr,Phi_m,omega_pi,omega_c]=margin(G);

% Determino il periodo critico

T_cr = 2*pi/omega_pi;

% Determini i parametri del PID

[Kp_closedloop, Ti_closedloop, Td_closedloop ] = TARATURA_CICLO_CHIUSO(K_cr, T_cr);

% Funzione di trasferimento PID

C_PID_closedloop=Kp_closedloop*(((1+1/(s*Ti_closedloop))+s*Td_closedloop/(1+(Td_closedloop/N)*s)));

% closed loop

W_closedloop = feedback(series(C_PID_closedloop,G),1);

% Grafico con risposta del ciclo chiuso

% figure(2)

% step(W_closedloop); 5

% title('Risposta ciclo chiuso metodo ciclo chiuso');

% xlabel('tempo');

% ylabel('ampiezza');

% Salvo le informazioni della risposta al gradino

parametri_risposta_closedloop=stepinfo(W_closedloop);

Tc_sup_closedloop=parametri_risposta_closedloop.RiseTime/10;

Tc_inf_closedloop=parametri_risposta_closedloop.RiseTime/20;

%% IMPLEMENTO METODO GRAFICO (Valutando la risposta al gradino ottengo i valori di: k,T,tau)

% Estraggo il valore assunto dalla risposa al termine del vettore temporale

% che è uguale

K=valori_y(end);

% Devo trovare il punto di flesso

dY = diff(valori_y);

ddY = diff(dY);

Ind = find(ddY > 0 & min(ddY)); %Indice del vettore in cui si cambia concavità

% Stima del tempo di flesso e della sua ordinata

Tflesso = time(Ind(end));

Yflesso = valori_y(Ind(end));

% Stimo il coefficiente angolare

m = (Yflesso - valori_y(Ind(end)-10))/(Tflesso - time(Ind(end)-10));

% Stimo il tempo di ritardo del modello del I ordine

tau_tan = (m*Tflesso - Yflesso)/m;

% Stimo la costante di tempo del modello del I ordine

Tt_tan = (tau_tan*K)/(abs(Yflesso-m*Tflesso));

% Funzione di trasferimento approssimata mediante metodo della tangente

G_tan = K*exp(-s*tau_tan)/(1+s*Tt_tan);

% Vado a comparare graficamento il modello cosi stimato e la curva di

% processo

% figure(3)

% step(t,G); 6

% title('Risposta sistema traccia');

% xlabel('tempo');

% ylabel('ampiezza');

% hold on;

% step(G_tan);

% title('Risposta sistema approssimato metodo tangente');

% Determino i valori dei parametri del PID

[Kp_tan,Ti_tan,Td_tan] = TARATURA_ZIEG_NIC(K,Tt_tan,tau_tan);

% Funzione di trasferimento del PID

C_PID_tan=Kp_tan*(((1+1/(s*Ti_tan))+s*Td_tan/(1+(Td_tan/N)*s)));

% closed loop

W_tan = feedback(series(C_PID_tan,G_tan),1);

% Grafico con risposta del ciclo chiuso

% figure(4)

% step(W_tan);

% hold on

% step(W);

% title('Risposta ciclo chiuso metodo tangente');

% xlabel('tempo');

% ylabel('ampiezza');

% Salvo le informazioni della risposta al gradino

parametri_risposta_tan=stepinfo(W_tan);

Tc_sup_tan=parametri_risposta_tan.RiseTime/10;

Tc_inf_tan=parametri_risposta_tan.RiseTime/20;

%% CALCOLO DELLE AREE

% Definisco i parametri che approssimano la curva di processo mediante una

% funzione che utilizza il metodo delle aree

[K_aree, T_aree, tau_aree] = METODO_AREE(time,valori_y);

% Funzione di trasferimento sistema approssimato metodo delle aree 7

G_aree = K_aree*exp(-s*tau_aree)/(1+s*T_aree);

% Vado a comparare graficamento il modello stimato e la curva di

% processo originale

% figure(5)

% step(t,G);

% title('Risposta sistema originale');

% hold on

% step(t,G_aree);

% xlabel('tempo');

% ylabel('ampiezza');

% step(G_aree);

% title('Risposta sistema approssimato metodo aree');

% Parametri del PID metodo aree

[Kp_aree,Ti_aree,Td_aree] = TARATURA_ZIEG_NIC(K_aree,T_aree,tau_aree);

% Funzione trasferimento PID metodo aree

C_PID_aree=Kp_aree*(1+1/(s*Ti_aree)+s*Td_aree/(1+(Td_aree/N)*s));

% Closed loop

W_aree = feedback(series(C_PID_aree,G_aree),1);

% figure(6)

% step(W_aree);

% hold on

% step(W);

% title('Risposta ciclo chiuso metodo aree');

% xlabel('tempo');

% ylabel('ampiezza');

% Salvo i dati della risposta al gradino

parametri_risposta_aree=stepinfo(W_aree);

Tc_sup_aree=parametri_risposta_aree.RiseTime/10;

Tc_inf_aree=parametri_risposta_aree.RiseTime/2; 8

% % METODO APPROSSIMAZIONE RITARDO PARI AL 5PERCENTO DEL GUADAGNO

% Cerco l'indice del vettore per cui la risposta raggiunge il 5% del suo

% valore finale

indice_k=1;

while valori_y(indice_k) <= 0.05*K

tau_5percent=time(indice_k);

indice_k=indice_k+1;

end

% Cerco l'indice del vettore per cui la risposta raggiunge il 63% del suo

% valore finale

while valori_y(indice_k) <= 0.63*K

Tt_5percent=time(indice_k);

indice_k=indice_k+1;

end

Tt_5percent=Tt_5percent-tau_5percent;

% Funzione di trasferimento sistema approssimato metodo 5%

G_5percent = K*exp(-s*tau_5percent)/(1+s*Tt_5percent);

%Vado a comparare graficamento il modello cosi stimato e la curva di

%processo

% figure(7)

% step(G);

% title('Risposta sistema originario');

% xlabel('tempo');

% ylabel('ampiezza');

% hold on;

% step(G_5percent);

% title('Risposta sistema approssimato metodo 5%');

% Determino i parametri del PID

[Kp_5percent,Ti_5percent,Td_5percent] = TARATURA_ZIEG_NIC(K,Tt_5percent,tau_5percent);

% Funzione di trasferimento PID

C_PID_5percent=Kp_5percent*(1+1/(s*Ti_5percent)+s*Td_5percent/(1+(Td_5percent/N)*s)); 9

% Close loop

W_5percent = feedback(series(C_PID_5percent,G_5percent),1);

% figure(8)

% step(W_5percent);

% hold on

% step(W);

% title('Risposta ciclo chiuso 5%');

% xlabel('tempo');

% ylabel('ampiezza');

%% CONFRONTO APPROSSIMAZIONI E RISPOSTE AL GRADINO

figure(2)

subplot(2,2,1)

step(G)

hold on

step(G_tan)

title('Approssimazione metodo tangente')

xlabel('tempo');

ylabel('ampiezza');

subplot(2,2,2)

step(G)

hold on

step(G_5percent)

title('Approssimazione metodo 5%')

xlabel('tempo');

ylabel('ampiezza');

subplot(2,2,3) 10

step(G)

hold on

step(G_aree)

title('Approssimazione metodo aree')

xlabel('tempo');

ylabel('ampiezza');

subplot(2,2,4)

step(G)

hold on

step(G_tan)

step(G_5percent)

step(G_aree)

title('Confronto approssimazioni')

xlabel('tempo');

ylabel('ampiezza');

%Grafico tutte le risposte

figure(3)

subplot(2,2,1)

step(W)

hold on

step(W_tan)

title('Risposta metodo tangente')

xlabel('tempo');

ylabel('ampiezza');

subplot(2,2,2)

step(W)

hold on

step(W_5percent) 11

Dettagli
Publisher
A.A. 2018-2019
12 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/04 Automatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher deciccio96.bd di informazioni apprese con la frequenza delle lezioni di laboratorio automatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università della Calabria o del prof Ingegneria Prof.