Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Progetto Con Presenza Di Rumore A Basse Freq. - Problema Tempo Assestamento Della Risp. Al Gradino


Messaggi consigliati

Inserito:

Salve a tutti,

sono uno studente universitario presso la facoltà di ing. informatica a Bologna. Volevo porvi un quesito sul progetto che stiamo portando a termine io e altri due colleghi, riguardanti la materia di Controlli Automatici.

Tengo a precisare subito che non vogliamo soluzioni, bensì indicazioni a riferimenti di parte teorica (che sia in italiano o in inglese, reperibile sul web): seguo questo forum da diverso tempo, e capisco che la finalità non sia quella di "aiutare e dare la soluzione per gli esercizi degli studenti", bensì ha finalità di reciproco aiuto e di miglioramento del proprio bagaglio didattico.

progetto10.png

Qui allegato, il codice corrente con cui abbiamo fatto gli ultimi tentativi (che poi vi spiegherò)


% puliamo lo schermo e le variabili in memoria e chiudiamo tutto

clc

clear all

close all

% impostazione variabile s di trasferimento

s=tf('s');

% funzione di trasferimento

G= 56700 /((s+0.7)*(s+10)*(s+90)^2);

%%%%%%%%%%%%%%

% definizione specifiche   %

%%%%%%%%%%%%%%

%•1 Errore a regime nullo in presenza di ingresso di riferimento a gradino

% di ampiezza massima pari a 2.0

%•2 Attenuazione superiore a 20 volte di un disturbo sinusoidale sull’uscita

% y(t) a pulsazione inferiore a 0.08 rad/s e di ampiezza massima pari a 0.3

%•3 Assenza di sovraelongazione e oscillazioni nella risposta al

% riferimento a gradino

%•4 Tempo di assestamento al 5% della risposta al riferimento a gradino

% inferiore a 0.4s.

%•5 Margine di fase superiore a 45 gradi , per garantire robustezza.

% Sulla misura è sovrapposto un rumore di misura sinusoidale a frequenza

% 100 rad/s e ampiezza massima 0.02.


% analisi sistema

P = bodeoptions; % Possibilita settaggio Bode

P.Xlim = [0.01 10000];

% h = bodeplot(tf(1,[1,1]),P);

figure(1);

bode(G, P); % diagramma Bode

grid on;

title('Bode funzione di trasferimento G(s)')

figure(2);

rlocus(G); % luogo delle radici

grid on;

title('Luogo delle radici G(s)')

figure(3);

step(2*G); % gradino doppio

grid on;

title('Risposta al gradino G(s)')


%%%%%%%%%%%%%%%%%%%%%%

% Regolatore statico %

%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%

%  PUNTO 1	 %

%%%%%%%%%

%•1 Errore a regime nullo in presenza di ingresso di riferimento a gradino

% di ampiezza massima pari a 2.0.

% Soluzione:

% Errore a regime nullo, quindi n° poli nell'origine = almeno uno:

% se e*=0 --> |L(0)|=infinito (polo nell'origine). Rs(s)=k/s ,k libero

% Slide LB 1.6 vedi tabella:

% tipo d'ingresso k=1(gradino) ed errore=0 --> g >= 1(grado funz-poli origine)

% Siccome G non ha poli nell'origine, dobbiamo inserirlo!

figure(4); %il figure deve essere aperto prima di margin,

% in modo da spiaccicarci sopra il grafico su una figure vuota

k1=1; % guadagno per regolatore statico, a default=1

RegS=k1/s;

RegS = RegS/s; % quindi 1/s

Ge=G*RegS; % funzione di anello

margin(Ge);

xlim([0.01 10000]);

grid on;

% RegS inserisce in L un polo nell'origine quindi g(grado)=1, il grafico

% deve avere pendenza -g quindi -1, ossia -20dB a decade,

% da grafico si vede che il PUNTO 1 è stato RISPETTATO!

% NOTA: k1 è 1 di default, da settare in seguito per altri vincoli


%%%%%%%%%

%  PUNTO 2	 %

%%%%%%%%%

%•2 Attenuazione superiore a 20 volte di un disturbo sinusoidale sull’uscita

% y(t) a pulsazione inferiore a 0.08 rad/s e di ampiezza massima pari a 0.3

% Soluzione:

% attenuazione(A) di almeno 20 volte ad ampiezza massima 0.3, quindi

% significa moltiplicare per 1/20, cioè ottenere A=0.3/20=0.015 come uscita

% In dB si deve attenuare di 20*log10(20)= 26 db circa

% |S(jw)| <= 0.3/20=0.015, essendo S(jw) = 1/1+L(jw), esplicitando

% il guadagno k del regolatore statico si ha |1/1+k*L(jw)| <= 0.015

% da cui |1+k*L(jw)| >= 1/0.015=66.7

absolute = abs(56700/((0.08+0.7)*(0.08+10)*((0.08+90)^2)*(1/0.08)));

% dato che |L(0.08j)| = 11.1092, si ha 1+k*11.1092 >= 66.7, quindi

% k >= 65.7/11.1092 cioè k >= 5.9

% scegliamo k = 7 per DARGLI ROBUSTEZZA

%(anche negli altri progetti si è deciso di abbondare questo margine)

figure(5);

k1=7;  % scelto

RegS=k1/s; % quindi 7/s

Ge=G*RegS; % funzione di anello

margin(Ge);

xlim([0.01 10000]);

grid on;

% Triplice vincolo:

% 1) k >= 5.9 --> RISPETTATO!

% 2) essendo 20log(20) = 26db, nelle pulsazioni fino a 0.08 la magnitudo

% deve essere >= 26db --> da grafico si vede che è RISPETTATO!

% 3) limite inferiore di Wc = 0.08 --> per ora RISPETTATO, da

% controllare nel regolatore dinamico!


%%%%%%%%%

%  PUNTO 3	 %

%%%%%%%%%

%•3 Assenza di sovraelongazione e oscillazioni nella risposta al

% riferimento a gradino

t=0:0.1:10; % Time for step input

figure(6);

step(Ge,t); % grafico risposta al gradino - nel periodo di 10sec

grid on;

title('Risposta al gradino Ge(s)');

% Vincolo di tipologia della risposta a gradino (grafico 6), ora insensato, dato che è una RAMPA DIAGONALE!


%%%%%%%%%

%  PUNTO 4	 %

%%%%%%%%%

%•4 Tempo di assestamento al 5% della risposta al riferimento a gradino

% inferiore a 0.4s.

% Soluzione:

% ta,5%<=0,4 --> 3/(sigma*wn)<=0,4

% sarebbe Mf>=45° --> sigma=Mf/100=0,45

% ma essendo richiesta assenza di sovraelongazione (vincolo 3)

% prendiamo sigma=0.75, quindi:

% wn>=3/sigma*0,4=3/0.75*0.4=3/0.3=10

% quinid: wn~>=10 rad/sec

%alphaLead=4.599;

%tauLead=0.06;

%alphaLead=7.547;

%tauLead=0.036;

%alphaLead=20.276;

%tauLead=0.032;

fiLead=85;

wnLead=25;

sinFi=sind(fiLead);

alphaLead=(-1-(sinFi))/(sinFi-1);

alphaSqr=sqrt(alphaLead);

tauLead=1/(wnLead*alphaSqr);

% In MATLAB, a phase lead compensator in frequency response form is implemented by using the transfer function in the form

lead = (1+(alphaLead*tauLead*s))/(1+(tauLead*s));

lead = lead * lead;

figure(7);

margin(lead);

xlim([0.01 10000]);	%Periodo considerato asse x - delle freq(rad/s)

grid on;

%title('Bode della funz di Doppia Rete di Anticipo LEAD COMPENSATOR');

L = lead*Ge;

figure(8);

margin(L);

xlim([0.01 10000]);	%Periodo considerato asse x - delle freq(rad/s)

grid on;

%title('Rete di anticipo su Ge(s)');

figure(9);

CL = L/(1+L);

step(2*CL);

xlim([0 10]);	%Periodo considerato asse x - delle freq(rad/s)

grid on;

figure(10);

step(2*CL);

xlim([0 1]);	%Periodo considerato asse x - delle freq(rad/s)

grid on;

figure(11);

pzmap(CL);


n=0.02*100/(s^2+100^2); %rumore sinusoidale freq 100rad/s ampiezza 0.02

d=0.3*0.08/(s^2+0.08^2); %disturbo sinusoidale ampiezza 0.3 e pulsazione inf a 0.08rad/s

f=L/(1+L);

%q=r/(1+L); %r è la rete anticipatrice

se=1/(1+L);	  

%figure(11);impulse(n,0.05);title('Errore di misura');grid

%c=80^3/(s+80)^3;%filtro

%figure(12);step(c*2);title('Risposta del filtro al gradino');grid

%figure(13);impulse(CL*c*2/s);title('Risposta al gradino');grid;

p=pole(CL);	 %matrice di poli

z=zero(CL);	 %matrice di zeri

e=eig(CL);  %poli del sistema

%DISCRETIZZAZIONE

% wc=50;

% Tc=0.001; %2*pi/(10*wc)

% Filtro=10^2/(s+10^2);

% FiltroD=c2d(Filtro,Tc,'Tustin');

% CLD=c2d(CL,Tc,'Tustin');

% Filter=50^2/(s+50^2);

% FilterD=c2d(Filter,Tc,'Tustin');

%

% figure(12);step(FilterD*2);title('Risposta del filtro al gradino');grid;

% figure(13);hold on;

% impulse((CLD/(CLD+1))*FilterD*2/s);title('Risposta al gradino');grid;


Rpf = 1/(1+1/5 * s);

%c=((1+s/1.68) / ((1+s/2)*(1+s/4.43)))^3;%filtro cancellando gli zeri di CL

%alpha=2; tau=0.0240;

%c=((tau*s+1) / (alpha*tau*s+1));

c=16/(s+16);%Filtro di Greg

%c=(120/(s+120))^24;

c2=(250/(s+250))^8;

c3=(350/(s+350))^8;

figure(12);step(c*2);title('Risposta del filtro al gradino');grid;

figure(13);hold on;

%impulse(CL*c*2/s);

%impulse((CL/(CL+1))*c*4/s);title('Risposta al gradino');grid;

%impulse((CL/(CL+1))*c*4*Rpf/s);

impulse(CL*c2*2/s);

% impulse(CL*c2*2*Rpf/s);

% impulse(CL*c3*2/s);

% impulse(CL*c3*2*Rpf/s);

% figure(14); margin(CL*n);

% figure(15);impulse(-CL*n);title('Attenuazione rumore sulla y(t)');grid


Rf=(s+19.2340373664331); %zero cancellazione, scegliamo il polo più vicino a Wc, questo polo deve essere sempre minore di Wc

figure(14);

margin(CL*Rf);

figure(15)

step(CL*Rf);

% Design lag compensator zero, pole, and gain.

pos=10;			% desired percent overshoot.

Tp=0.4;	  % desired peak time.

z=(-log(pos/100))/(sqrt(pi^2+log(pos/100)^2)); % Calculate required damping ratio.

Pmreq=atan(2*z/(sqrt(-2*z^2+sqrt(1+4*z^4))))*(180/pi); % Calculate required phase margin.

wn=pi/(Tp*sqrt(1-z^2));			 % Calculate required natural

									% frequency.

wBW=wn*sqrt((1-2*z^2)+sqrt(4*z^4-4*z^2+2));

									% Determine required bandwidth.

wpm=0.8*wBW;

[M,P]=bode(G,wpm);

Pmreqc=Pmreq-(180+P)+5;

beta=(1-sin(Pmreqc*pi/180))/(1+sin(Pmreqc*pi/180)); % Find phase contribution required

									% from lead compensator with

									% additional 5 degrees.

zclag=wpm/10;					   % Calculate zero of lag compensator.

pclag=zclag*beta;				   % Calculate pole of lag compensator.

Kclag=beta;						 % Calculate gain of lag compensator.

'Lag compensator, Glag(s)'		  % Display label.

Glag=tf(Kclag*[1 zclag],[1 pclag]); % Create lag compensator.

Glag=zpk(Glag);					  % Convert Glag(s) to factored form

									% and display.

CL_lag=CL*Glag*s;

figure(16);

margin(CL_lag);

figure(17)

step(CL_lag);

% fi=70;

% wn=1000;

% sinFi=sind(fi);

% display(sinFi);

% alphaLag=(-1-sinFi)/(sinFi-1);

% display(alphaLag);

% alphaLagSqr=sqrt(alphaLag);

% tauLag=1/(wn*alphaLagSqr);

% figure(9);

% lag = (1+(tauLag*s))/(1+(alphaLag*tauLag*s));

% margin(lag);

% xlim([0.01 10000]);	%Periodo considerato asse x - delle freq(rad/s)

% grid on;

%

% figure(14);

% L=L*lag;

% margin(L);

% grid on;

%

% CL=L/(1+L);

% figure(15);

% step(2*CL);

% xlim([0 10]);	%

% grid on;

%

% figure(16);

% step(2*CL);

% xlim([0 0.4]);	%Periodo considerato asse x - delle freq(rad/s)

% grid on;


% Duplice vincolo:

% 1) wn >= 10 rad/sec, riguardante la funzione di trasferimento -> RISPETTATO!

% 2) tempo di assestamento al 5% inferiore a 0.4s, riguardante la risposta

% a gradino -> NON RISPETTATO, grafico strano !


%%%%%%%%%

%  PUNTO 5	 %

%%%%%%%%%

%•5 Margine di fase superiore a 45 gradi , per garantire robustezza.

% Soluzione:

% Vincolo grafico rispettato nel tuning delle reti al punto 4.

% Pm >= 45° nel grafico della funzione di trasferimento -> RISPETTATO!

Abbiamo applicato la doppia rete di anticipo (double lead compensator) alla nostra funzione, ottenendo il Margine di fase Mf e Wc desiderato.

Nel codice abbiamo ottenuto 55.1 come margine di fase Mf e Wc=34rad/s.

Abbiamo aumentato il più possibile la Wc - sperando di velocizzare la risposta al gradino step();

Purtroppo questa risposta non è veloce come pensavamo, e con qualsiasi pre-compensatore applicato, non otteniamo il tempo di assestamento del 5% a 0,4sec.

  • Abbiamo ipotizzato che la presenza di così tanti poli e zeri nella funzione CLOSED LOOP (variabile CL nel progetto) potesse compromettere la nostra risposta al gradino (doppio, moltiplichiamo per 2 - non influisce ai fini della specifica del Ta5%)
  • Abbiamo anche studiato il metodo Anti-Windup, scoprendo che è applicabile solo esclusivamente per i regolatori PID (dunque è solo una componente Simulink).
  • Abbiamo modificato i vari settaggi della doppia rete di anticipo, ma qualsiasi altro settaggio normale o estremo non porta ai miglioramenti sulla velocità di salita della risposta al gradino voluti dovendo manternere il mf richiesto. Qui sotto il grafico step, con già attuato il Closed Loop

    stepcl1sec.png
    • il pre-compensatore (formula c=30/(s+30); impulse(CL*c*2/s); )agisce bene quando la variabile nota è sul valore di 30-40. Aumentando a oltre 50, abbiamo fenomeni di sovraelongazione (gobbe prima dei 0.4s). Elevando la formula c alla n-sima potenza, abbiamo notato che il tempo di salita diminuiva sempre di più all’aumentare di n.
    • abbiamo consultato il materiale didattico del prof.Carlo Rossi, in particolare le reti correttrici: abbiamo applicato la rete di cancellazione (scegliendo il polo più vicino al Wc=34.4, ossia 19.9) ottenendo questi risultati

    proveretecancellazionez.png

    [*]Abbiamo anche fatto dei tentativi con la rete di ritardo (che sommata alla rete di anticipo di prima, è un lead-lag compensator, "sella di cavallo"). I risultati sono simili e non incoraggianti

    provereteritardo.png

    Ecco il grafico di Bode odierno (applicando il solo CLOSED LOOP), da notare che il bound di destra ancora da rispettare (abbiamo già ipotizzato l'utilizzo di un filtro passabasso, lo affronteremo meglio col 5°punto)

    figure8a.png

    CONCLUSIONI: non possiamo ignorare la specifica del Tempo di Assestamento. Attualmente la funzione di partenza è "troppo lenta" e qualsiasi precompensatore non dà il guadagno giusto (oltre che a sovraelongazioni indesiderate con settaggi più estremi).

    Ripassando tutta la parte di teoria, ci siamo bloccati senza delle idee chiare.

    Vi ringraziamo per la paziente lettura, ci affidiamo ai vostri preziosi consigli (oltre che a rimanere a disposizione di altri studenti, che magari hanno difficoltà simili) ^_^


Inserita:

Nel tema dell'esercizio ci sono alcune richieste che contrastano tra loro rendendo più ostica la soluzione. Si è ipotizzato un sistema abbastanza performante.

L'attenauzione del distrubo richiede un guadagno proporzionale abbastanza cospiquo.

L'errore nullo presuppone l'uso di un integratore.

L'assenza di sovraelongazioni presuppone uno xi unitario, che contrasta con la velocità di risposta.

Così in prima approssimazione io agirei con un feed forward affiancato da un PID non canonico.

Inserita:

Grazie mille per la risposta velocissima!

Vorrei riportare qui sotto alcuni documenti reperiti tra ieri e oggi sul web. Attualmente stiamo sviluppando il tuning del PID. Se per "non canonico" si intende "non convenzionale", allora possiamo confermare la difficoltà che stiamo affrontando: utilizzare le formule di Ziegler Nicholson non sono sufficenti, ma pensiamo che siano un buon punto di partenza sui cui "variare e modificare" Kp, Ki e Kd.

Ecco varie annotazioni varie

http://www.dis.uniroma1.it/~lanari/FdAutNO/MAtDidNO/EsercitazioniNO/LezioneFeedback.pdf pag 12

controllore ad anello aperto con compensazione del disturbo, anche chiamato controllo feedforward (il compensatore del disturbo è il REGOLATORE PID, chiamato anche Compensatore PID)

feedforwar è anche chiamato “a catena aperta”

http://www.ee.usyd.edu.au/tutorials_online/matlab/PID/PID.html

Qua abbiamo una serie di grafici, interessanti quelli sulla risposta al gradino fatti in Matlab

La nostra maggiore difficoltà è l’uso di vari termini lessicali diversi nella lingua italiana, mentre c’è una certa uniformità quando si parla di porgetti d’ingegneria in lingua inglese (si usano al massimo 2 termini in lingua inglese, oltre ad essere una lingua sintetica che conia dei neologismi e li utilizza in modo massiccio).

http://www-lar.deis.unibo.it/~lmarconi/Parte6_CAT.pdf feedforward a pag.5 (qui viene tradotto “Controllo in catena aperta “)

prof paolo Bolzern (quello del libro): vari schemi di Maltab e Simulink http://home.dei.polimi.it/bolzern/ccaatm/ccamate.html

Pensiamo che per il nostro progetto, questa Tesi in PDF spieghi perfettamente l’uso del Feed-forward con PID di cui abbiamo bisogno

http://tesi.cab.unipd.it/27073/1/Davide_Meneghel_580963.pdf

Open Loop vs. Closed Loop

Feedback vs. Feedforward

http://www.clear.rice.edu/engi128/Handouts/Lec14.pdf

Quest'ultimo link è molto esaustivo, spiega che Feedback e Feedforward non sono altro che due metodi di interpretare il problema: il Feedback ammette aggiustamenti per le azioni future (assestamento della temperatura ambiente, assestamento dell'innaffiamento nel giardino), mentre Feedforward non ammette aggiustamenti futuri, bisogna GIA SAPERE il comportamento futuro (devi sapere già con che forza maneggiare le uova, altrimenti le rompi e non si puo rimediare)

Il vincolo di maggiore difficoltà rimane il tempo di assestamento, le risposte al minimo variare dei K nel PID hanno vistosi cambiamenti. Ci stiamo lavorando, vi aggiorneremo. Grazie ancora

Inserita: (modificato)
La nostra maggiore difficoltà è l’uso di vari termini lessicali diversi nella lingua italiana,...

Come diceva un mio insegante di elettronica, più di mezzo secolo addietro: "La vostra maggior difficoltà nel comprendere l'elettronica è la vostra scarsa conoscenza della lingua italiana." Lui affermava questo per nascondere la sua inadeguatezza come insegnante, la sua incapacità di comunicazione; c'era comunque una grande verità: spesso la scarsa conoscenza della nostra lingua accresce la difficoltà di comprensione.

Fortunatamente l'italiono è una lingua complessa e precisa, contrariamente all'inglese lingua rozza ed approssimativa; per questa ragione l'inglese ha necessità di creare neologismi, mentre l'italiano può esprimere chiaramente il concetto necessario con il lessico tradizionale.

Molto, troppo, spesso si usano termini inglesi quando non ce ne è la necessità, solo per pigrizia o per conformismo.

il Feedback ammette aggiustamenti per le azioni future (assestamento della temperatura ambiente, assestamento dell'innaffiamento nel giardino), mentre Feedforward non ammette aggiustamenti futuri, bisogna GIA SAPERE il comportamento futuro (devi sapere già con che forza maneggiare le uova, altrimenti le rompi e non si puo rimediare)

Forse avete semplificato un po' troppo le definizioni. :smile:

Se il modello di riferimento del controllo diretto (feed forward) fosse perfetto, non sarebbe necessario affiancargli il regolatore in reazione negativa (feed back). L'uso contemporaneo di entrambi permette di velocizzare la risposta, eliminare gli errori di predizione e diminuire l'influenza del regolare a reazione.

Il vincolo di maggiore difficoltà rimane il tempo di assestamento, le risposte al minimo variare dei K nel PID hanno vistosi cambiamenti. Ci stiamo lavorando, ....

Che accada questo direi che è normale. Si può e si deve ridurre l'effetto del PID affiancandolo al feed forward. Poi ricordatevi che ci sono differenti modi, oltre a quello canonico, per realizzare un regolatore ad anello aperto con componenti proporzionale, integrale e derivativo.

Modificato: da Livio Orsini
Inserita:

Capisco benissimo la questione della lingua italiana in ingegneria.

Noi in informatica siamo "veicolati" ad utilizzare sempre più termini in lingua inglese: primo perchè l'ambiente e il linguaggio di programmazione ha una storia angloamericana (anche se l'Olivetti ha lasciato un suo segno nella storia dell'elettronica ed informatica, vedi il passaggio dalle Valvole ai Transistor nei laboratori di Ivrea).

Il motivo per cui molti professori facciano coesistere diversi termini italiano/inglese è per via della riduzione delle ore di lezione (e dei programmi didattici) che punta a sintetizzare i concetti in discorsi sempre più circoscritti. La mia carriera universtiaria è costellata di esami da 60 ore di lezione (quindi 6 Crediti Formativi CFU), mentre ce ne vorrebbero altre 30 di ore solo per fare pratica o laboratorio. Per quello ogni facoltà cerca sempre di adeguare e migliorare i programmi universitari, nonostante queste indicazioni di ridurre le ore dall'Unione Europea e gli investimenti sempre più ridotto all'osso.

Alla fine sono arrivato alla banale conclusione che sapere sia i termini italiani che quelli tradotti in inglese siano da tenere entrambi in considerazione, visto che studiamo praticamente su testi/pubblicazioni di tutte e due le lingue.

Purtroppo questo può generare confusione a chi si avvicina per la prima volta alle materie... e forse è questa la pecca di questo "mescolamento". è assolutamente vero che noi studenti entriamo nel percorso universitario a volte "inadeguati" con la lingua italiana, provengo da un Liceo Scientifico Matematico-Informatico e noto l'ampia conoscenza di parole tecniche dei miei colleghi usciti dagli ITIS. Quindi sono convinto che sporcandosi le mani si possa approfondire il proprio bagaglio culturale.

Alla fine si tratta di essere abbastanza curiosi e appassionati per il lavoro, che ci spinge a conoscere le sfumature di queste parole. La pigrizia di alcuni studenti miei coetanei è proprio dannosa, e sembra essere il nemico numero 1 nel percorso di studi.

Sarebbe bello discuterne con altre persone e magari in un dibattito più ampio.

Tornado al progetto, abbiamo trovato questa immagine di Simulink di come dovrebbe essere il risultato finale (lo abbiamo ricavato da uno schema datoci in un PDF intitolato "Guida al Progetto" - in cui si esplicitano le caratteristiche del problema ma ovviamente non fa alcun riferimento alle tecniche da adottare)

simulink.png

In alto e in basso vi sono componenti di rumore e disturbo, oltre l'ingresso a gradino doppio.

Vi è anche la componente Feed-back (LTI System3) e di Feed-forward (System2 se non erro).

Se tale schema è corretto, vuol dire che siamo nella giusta strada nel progetto Matlab :smile:

Inserita:

Siamo stati di recente al ricevimento dal prof e abbiamo avuto le indicazioni che volevamo avere, più avanti vi mostreremo la soluzione completa (quando consegneremo il progetto per l'esame)

Stiamo implementando un sistema sia Feedforward (caratterizzata da Rff=G^-1; con l'aggiunta di due poli ad alta frequenza) sia Feedback (il Closed Loop che è L/(1+L) già visto nel codice precedente).

Volevamo chiedervi in quale punto di questo schema è corretto fare il grafico di bode (ossia usare il comando MARGIN in Matlab)? su y(i) con sommati i regolatori FeedForward e Feedback, usando solo il RegolatoreFeedForward o Feedback singolarmente?

Il fatto è che siamo riusciti a trovare uno Regolatore FeedForward che ci dà un risposta molto veloce (arriviamo a 1.9 già a 0.16sec!), ma il grafico di bode sommando tutti i Regolatori è pessimo, soprattutto per il bound del rumore a Destra settato a 100rad/s e di ampiezza 150dB a partire da zero in giù

schemaffefb.png

Grazie ancora per la disponibilità del prof Orsini per averci dato utili suggerimenti, i tentativi nel costruire questo progetto sono la prassi per chi vuole lavorare a queste problematiche molto interessanti!

Inserita: (modificato)

Personalmente farei il Bode dei deu regolatori ed anche del totale.

Non mi è chiaro "siamo riusciti a trovare uno Regolatore FeedForward". Significa che il FF lo avete preso "così come è" da simulink?

Un FF dovrebbe essere semplicissimo da implementare. A mia esperienza la parte di FF oltre a migliorare la velocità di risposta non apporta altra variazione significativa sulla stabilità.

Attenzione che usando il FF, la parte di FB deve avere un'influenza ridotta e proporzionale all'ampiezza del FF. In altri termini si fissa, ad esempio, un limite del 20% e si limita a questo valore il un eventuale fB maggiore.

Grazie ancora per la disponibilità del prof Orsini..

Bhe ragazzi, c'è un professor Livio Orsini, insegna all'Università di Roma, ma non sono io. ;)

Poi sul forum ci si considera tutti amici e colleghi, ci si dal tu e non si usano titoli accademici o titoli onorifici (se no dovrei essere appellato "Vostra Altezza" :P ).

Scherzi a parte apprezzeremmo molto, sia io che altri utenti del forum, le vostre conclusione su questo lavoro. Poi, magari, potremmo vedere qualche topologia di PID un poco differente dal canonico.

Modificato: da Livio Orsini
Inserita:

Interessante discussione,

anche se ammetto di non aver letto con attenzione tutto il 3d :whistling: ,

Uno strumento molto molto potente da considerare, sopratutto quando il controllo viene fatto via software, è il controllo ottimo.

Questo tipo di controllo rappresenta, non dico lo stato dell'arte ma quasi, per quanto riguarda la regolazione,

ormai ampiamente utilizzato nei sistemi robotici piu spinti.

comunque complimenti per il lavoro svolto :clap::thumb_yello:

Inserita:

Grazie maguls, mi fa piacere sapere che le tecniche adottate siano alla base di tutti gli studi odierni di robotica e affini :D

Proprio l'altro giorno, mentre aspettavo il ricevimento a Bologna, ho osservato alcuni dottorati che si cimentavano a far percorrere dei robottini cingolati seguendo una linea di scotch bianco posto per terra, e i robottini proveniente da diverse direzioni si riallineavano alla linea bianca, grazie a un sensore rosso (presumo laser, l'infrarossi ha bisogno di almeno due sensori per essere preciso, vedi i telecomandi della Nintendo Wii).

Il nostro stesso dipartimento, il DEIS dell'Unibo, propone tesi sul Roomba affiancato dal Kinect (la telecamera a 3D), quindi penso che tutto sia collegato tra Automazione, Elettronica e Informatica ;)

Ecco un breve aggiornamento, abbiamo trovato le risposte ripercorrendo alcuni appunti del prof, e riproducendo di Grafici presenti nei suoi PDF e ne abbiamo dedotto che:

Il grafico di Bode = lo si ottiene solo coinvolgendo la componente Feedback

Il grafico della risposta a Gradino = usiamo feedback + feedforward (azione ciclo chiuso + azione in avanti)

ecco una parte di codice, la più interessante (più avanti vi posterò quella completa, fra un mese circa se tutto va bene)


ff = G^-1; %Inversione del plant

Rff = ff/(0.0001*s+1)^2; % Aggiungo due poli in alta frequenza fuori dinamica. Si può cambiare il grado partendo da 1 compreso, si consiglia di rimanere bassi in quanto troppi poli possono irrimediabilmente disturbare. Si può anche annullare alcuni Poli di G, ponendoli al denominatore di Rff.

%Rff = ff/((s+10)*(0.0001*s+1)^2); %questa è la versione dove annulliamo s+10, che è presente in G

Rfb=RegS*lead;  %unisco Regolatore Statico con quello Dinamico (Rete di Anticipo Lead)

CL=((Rfb+Rff)*G) / (1 +Rfb*G);


%se vi sono leggere sovraelongazioni, sfruttate il filtro passabasso di Butterworth (o Chebyshev o RC) per attenuare la risposta al gradino. Il primo parametro è s=1/wc che la frequenza di taglio del filtro, il secondo è l'ordine "n" dell'eq di Butterworth, più è alta e più il taglio è ripido

butw = mkfilter(4,4,'butterw');

figure();

step(butw*CL);

RegS e lead sono presenti qui sopra. Mentre il valore di Rff è stato volontariamente camuffato, vi facciamo vedere a grandi linee la procedura appunto

In particolare nel Closed Loop il numeratore è la parte "seriale/lineare", sommiamo regolatori Feedback e FeedForward.

Per la parte retroattiva (denominatore) ci interessa solo il regolatore Feedback.

Però abbiamo un piccolo dubbio: abbiamo trovato questa risposta al gradino doppio, è molto veloce, anche fin troppo per le nostre tiepide aspettative. Vi chiedevamo se un eventuale professore ce lo potesse considerare come "errore" questa velocità eccessiva o un picco max che va di +0,5% (5 millesimi) rispetto al valore massimo voluto (pari a 2 - essendo gradino doppio). Tutto qua, per il resto adesso finiremo simulink correggendo alcuni collegamenti col FeedForward e siamo a posto per dare l'esame :D

step04sec.png

Potrebbe anche essere un arrotondamento per eccesso per via della campionatura di Matlab questo valore max di 2.01 (il prof ci ha spiegato che nelle varie versioni di Matlab la campionatura del comando STEP è stata modificata varie volte, probabilmente con l'aumentare della potenza di calcolo delle CPU - il campionamento si è fatto più fitto e preciso) - mi chiedevo se nella vostra esperienza di Sistemi di Controllo fosse del tutto accettabile una soluzione teorica così ottenuta ^_^

Inserita:

C'è effetivamente un leggerissima sovraelongazione.

In un sistema reale sarebbe una risposta perfetta; questo però è un esercizio didattico con specifiche ben precise quindi meglio rallentarlo un poco e togliere la sovraelongazione.

Attenzione che un insegnante potrebbe aver qualche cosa da ridire anche sui risultati molto più performanti di quanto richiesto. Capitò, molti decenni fa, ad un mio collega di studi. Progettò e ralizzò un amplificatore video transistorizzato per una telecamera vidicon (era lo stato dell'arte del tempo). Invece dei 5MHz di banda richiesti ottenne 7.5 MHz; si aspettava le lodi del professore, invece questi gli cassò il progetto. Motivazione se la banda era più larga del 50% significava che si era progettato senza tenere d'occhio i costi! :(

Il grafico della risposta a Gradino...

Provate le risposte delle due componenti FF e FB separate: avrete delle indicazioni preziose sul comportamento.

Come vi ho scritto nel messaggio precedente quando si usa il FF è necessario dosare accuratamente il FB. Troppa influenza o troppo poca peggiora le prestazioni del sistema.

Inserita:
le tecniche adottate siano alla base di tutti gli studi odierni di robotica e affini

Be quando si parla di Controllo Ottimo in verità è tutt'altra storia.

Ma evidentemente non è stato trattato nel vostro corso, quindi meglio non mettere altra carne a cuocere

e continuare sulla strada intrapresa.

in bocca al lupo per l'esame ;)

Inserita:

Crepi il lupo, maguls :P

Ho letto l'esperienza dei risultati "più performanti", e devo ammettere che il prof aveva delle buone ragioni per criticare l'abbondanza di perfezione (a fronte ai costi di produzione e progettazione aumentate). Rimane il fatto che è la maggior parte dei Prof si scorda di spiegarci queste cose fondamentali di "buon senso" prima di dare gli incarichi di progettazione... quindi secondo me la colpa si può ben dividere 50/50, uno studente che cerca di andare oltre alle consegne e un professore che non ci avverte dei banali errori di distrazione o di incoscienza :thumb_yello:

E poi siamo all'Università per imparare, praticare e anche sbagliare... spero che il nostro professore non sia così severo e canaglia :lol:

Però abbiamo delle belle novità: abbiamo rallentato la risposta nei tempi richiesti (0.4secondi), con un assestamento esatto a 2.00. Questo grazie a un filtro passabasso di ordine N=1 e coefficiente basso, che ci ha rallentato la crescita della funzione step. L'unico effetto collaterale è una gobbetta impercettibile su grande scale, che misura 2.01.

stepperfetta201.png

Ricordo che il prof a ricevimento ci disse: "Le sovraelongazioni nelle risposte al gradino sono normali - quello che vi chiedo come consegna è di fare tutto il possibile per attenuarle e ridurne l'ampiezza - normale che possano rimanere delle piccole sovraelongazioni, voi cercate di elimanarle"

In allegato abbiamo degli schemi disegnati dal prof, cioè questo (inoltre ho notato che S% ha il simbolo di "approx a zero") - mentre per il riferimenti a libro, consultate il Bolzern

marconilb210520121529.jpg

Domandona: possiamo fare sogni tranquilli, in virtù di questa soluzione? :whistling:

Inserita: (modificato)
Le sovraelongazioni nelle risposte al gradino sono normali

Normali non direi proprio, tollerate si.

Se il sitema ha uno xsi pari a 0.707 si avrà un poco disovraelongazione (circa 1.05) e sotto elongazione (circa 0.985); sono accettate e si considera questo valore di smorzamento come compromesso ottimo tra velocità di risposta e sovraelongazione.

Se lo xsi è pari ad 1 non si hanno sovra e sotto eleongazioni.

A occhio il vostro sistema dovrebbe avere uno xsi compreso tra 0.97 e 0.98.

Uno dei sistemi usati per ridurre questo problema mantenndo il sistema molto rapido, da chi maneggia un poco i regolatori di questo tipo si basa sul cambio del guadagno in funzione dell'errore, unito ad una azione derivativa sulla reazione (anticipo di reazione) che agisce unicamente sulla componente proporzionale.

Attenzione! Non è lavoro per apprendisti stregoni, ma solo per maghi patentati. :lol:

Non vi dico di più se no vi svelo tutti i mie segreti appresi in decennni di duro lavoro, moccoli e nottate sugli impianti. :P;)

Modificato: da Livio Orsini
Inserita:

Esatto, volevamo sapere se erano tollerate! :smile:

Non ci interessano i trucchetti del mestiere, ognuno di noi ha il proprio repertorio :P noi informatici abbiamo i nostri siti web di riferimento e software modificati per svolgere al meglio alcune azioni. Non sono segreti, però agevolano un sacco i compiti ripetitivi :P

Vi pongo l'ennesimo errore in Simulink, che "San Google" non riesce a risolverci

transferfcn.png

Questo messaggio d'errore avviene nel blocco Transfer Fcn

num=[1 190.7 10033 87930 56700]

den=[36290 90720 56700]

che è praticamente l'espressione del Regolatore in avanti Feedforward. Ho provato anche l'uso del blocco LTI, e se mi dava l'errore "there are more zeros than poles".

Ho usato anche il blocco Transfer Fcn Discretizzata, nulla da fare, mi da due errori, uno sulla dimensione matrix non corretta e l'altra sul mux di Transfer Fcn Disc. stessa usa al suo interno.

Ci sembra cosi strano che Simulink non digerisca questa funzione... magari non stiamo usando il blocco giusto.

Ho attuato anche questa soluzione, ma i miei coefficienti sono in numeri complessi...

http://www.mathworks...olution=1-VPJDU

Possibile che non si possa attuare!?! :(

Ps. Intanto sto sfogliando le varie sezioni del forum, ho risposto a qualche thread nel settore d'informatica, in cui posso sicuramente indicare qualche consiglio :smile:

Inserita:

E' un bel po' che non uso più simulik e Mathlab, quindi non mi sento di darti consigli se non quello di interpellare Mathworks; in genere sono molto collaborativi, specialememte con insegnanti e studenti universitari.

Manda una mail o, meglio, contattali telefonicamente puoi risolvere molto rapidamente il tuo problema.

...le varie sezioni del forum, ho risposto a qualche thread nel settore d'informatica, in cui posso sicuramente indicare qualche consiglio

Questo è lo spirito del forum: ognuno collabora secondo le proprie capacità e conoscenze. :thumb_yello:

Inserita:

Ho seguito il consiglio alla lettera. E con l'aiuto anche di un amico che sta facendo il Dottorato a Milano (ma non ha tale esperienza in automazione, per quello non l'ho interpellato), abbiamo scoperto che le funzione con più zeri che poli sono Sistemi Non Causali, ovvero impossibile da realizzare nel mondo reale. La cosa che gli si avvicina di più è un derivatore.

Per ovviare alle indicazioni del professore e alle esigenze di Simulink, la soluzione è di compensare poli e zeri rendendoli dello stesso ordine di grandezza numeratore e denominatore

http://www.mathworks.com/matlabcentral/newsreader/view_thread/320492

SITUAZIONE ATTUALE: Simulink non ci dà pace, ci sta dando degli errori strani... ho il dubbio che la funzione Feedforward sia troppo veloce per gli standard di Simulink stesso... adesso stiamo cercando una risposta da altri forum più specializzati in Simulink, così da sentire le varie esperienze altrui ;)

erroresimulinkderivativ.png

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...