|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
[Controllo Digitale] Datemi una mano che sono in crisi per favore!
Ciao, devo consegnare entro questo mercoledì questo progetto:
Due robot cooperano per manipolare un’asta prima di inserirla in un’apertura di un blocco posizionato su un tavolo. La funzione di trasferimento che caratterizza il controllo di un giunto di un robot ha la seguente forma: Gp(S) ═ 4/S(S+0.5) Si Programmi un regolatore che garantisca il soddisfacimento delle seguenti specifiche: - Errore di velocità pari a 0.0125 - Tempo di Assestamento Ta ≤ 2 sec - Picco SMax ≤ 25% Lo devo svolgere con tre metodologie diverse, la prima è la tecnica della discetizzazione.. Vi allego il mio svolgimento con il primo metodo.. Il mio problema è che non so come fare per impostare un errore di velocità pari a 0.0125... lo che che dovrei utilizzare il teorema del valor finale: lim s-->0 di s*E(s) dove E(s) sta per la funzione di trasferimento dell'errore a ciclo chiuso.. il problema è che visto che il mio sistema ha già un polo in zero mi basterebbe avere un controllore statico K per avere un errore finito alla rampa.. solo che per far rispettare le altre due specifiche non riesco a far rispettare la prima.. (cry) comunque per capire leggete l'allegato.. e ditemi la vostra per favore!! è urgente e sono disperato
__________________
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
TECNICA DELLA DISCRETIZZAZIONE
- Prima Fase: Scelta del Tempo di Campionamento: Ci sono moltissimi modi per la scelta di un tempo di campionamento appropriato. Avendo una specifica sul tempo di assestamento, in questa prima parte del progetto, ho scelto di prendere un tempo di campionamento in modo da avere 50 campioni della risposta del sistema all’interno del tempo di assestamento: Ta = 2 sec T = 2/50 = 0.0400 - Seconda Fase: Costruzione Schema a Blocchi a Tempo Continuo: La funzione di trasferimento del ricostruttore di ordine zero è: H0(S) = (1 – e-ST) / S Quest’ultima può essere approssimata attraverso lo sviluppo in serie di Taylor a: H0(S) ≈ T / (1+T/2 S) Questa funzione è in cascata con il campionatore il quale ha un guadagno pari a 1/T quindi avremo: GH(S) = 1/T ∙ T/(1+T/2 S) = 1 / 1 + T/2 S Svolgendo la cascata tra Gp(S) e GH(S) la nostra G(S) da controllare sarà uguale a: G(S) = Gp(S) GH(S) = 1/(1+T/2 S) 4/S(S+0.5) G(S) = 4/(0.02 s3 + 1.01 s2 + 0.5 s) Che nella forma poli, zeri, guadagno è uguale a: G(S) = 200 / S (S+50) (S+0.5) Abbiamo quindi poli in: - p1 = 0 - p2 = -50 - p3 = -0.5 -Terza Fase: Determinazione di un Controllore C(S) a Tempo Continuo: Nelle specifiche come prima richiesta ho un errore alla rampa pari a 0,0125. Per avere un errore finito alla rampa bisogna avere un polo nell’origine. Se osserviamo la funzione di trasferimento da controllare ci accorgiamo subito che il polo nell’origine di cui abbiamo bisogno c’è già. Proviamo quindi a procedere con il più semplice dei controllori: Cs(S) = K Applicando il teorema del valor finale otteniamo: lim S→0 S E(S) Dove E(S) è la funzione di trasferimento dell’errore che uguale a: E(S) = R(S) / 1+G(S)Cs(S) Dove R(S) è il riferimento in ingresso, nel nostro caso la rampa: 1/S2, sostituendo: E(S) = (1/S2) / (1 + 200K / S (S+50) (S+0.5)) E(S) = (S+50)(S+0.5) / S2(S+50)(S+0.5)+200K Quindi tornando al teorema del valor finale: lim S→0 S (S+50)(S+0.5) / S2(S+50)(S+0.5)+200K Otteniamo: 1 / 8K Che poniamo uguale all’errore desiderato: 1 / 8K = 0.0125 K = 1 / 0.0125 * 8 = 10 Abbiamo trovato la parte statica del nostro controllore: Cs(S) = 10. Attenzione però, guardando il luogo delle radici di G(S): Ci accorgiamo subito dei problemi di stabilità che potremmo avere, perché il sistema a ciclo chiuso non risulta stabile per ogni valore di K, infatti i due poli più significativi tendono a marciare verso l’instabilità. Se effettuiamo uno zoom della parte critica Vediamo che esiste qualche valore di K per cui il sistema risulterà stabile. Per trovare questi valore applichiamo Routh. Calcoliamo per primo la nostra funzione di trasferimento a ciclo chiuso, la W(S): W(S) = Cs(S) G(S) / 1 + Cs(S) G(S) W(S) = K G(S) / 1 + K G(S) W(S) = 200K / S(S+50)(S+0.5)+200K Prendiamone solo il denominatore: DW(S) = S(S+50)(S+0.5)+200K DW(S) = S3 + 50.5S2 + 25S + 200K Costruendo la tabella di Routh otteniamo: Da cui otteniamo le seguenti disequazioni: K < 6.3125 K > 0 Per cui il sistema W(S) risulterà stabile per valori di K compresi strettamente fra 0 e 6.3125. Tempo di Assestamento Ta ≤ 2 Sec Sappiamo che il Tempo di Assestamento è uguale a: Ta = 3 / δωn δωn ≈ −Re[pi] La parte reale dei poli più significativi del sistema in analisi è al massimo pari al punto di diramazione dei due poli nel luogo delle radici e questo nel nostro caso è pari a: 0.249. Approssimandolo a 0.25 e calcolandoci il Ta ci accorgiamo subito che: Ta ≈ 3 / 0.25 Ta ≈ 12 Sec Decisamente troppo per la nostra specifica. Con un solo controllore statico non riesco a coprire le specifiche, ho bisogno di aggiungere una parte dinamica. E lavorando per cancellazione mi rendo conto che il polo che mi crea problemi è il polo in -0.5, per questo aggiungo uno zero in -0.5, e ovviamente per la fisica realizzabilità ho necessità di aggiungere anche un nuovo polo. Cd(S) = S + 0.5 / 1 + τpS Devo scegliere il nuovo polo in modo che il punto di diramazione si trovi in almeno -1.5 se non di più. Decido quindi di fissare il nuovo polo in -3 in modo che con il polo in 0 il punto di diramazione sia circa uguale a -1.5. Però anche così non ce la faccio, infatti osservando la risposta Ho una sovraelongazione massimo dello 0% ma un tempo di assestamento ancora troppo alto, pari a 3.97. Decido allora di allontanare ancora di più il polo appena aggiunto in modo da spostare anche più a sinistra il punto di diramazione. Raddoppio il polo, da -3 lo sposto a -6.5, e il punto di diramazione si sposta a circa -3.15. Prendendo i poli in modo che siano reali e più grandi possibili (esattamente nel punto di diramazione) ottengo: Ottengo un tempo di assestamento di 1.88 secondi e una sovraelongazione praticamente inesistente. Il controllore ottenuto è 2.7919(S+0.5) / (s+6.5) Come faccio a modificare questo controllore per rispettare anche la specifica sull'errore alla rampa? (Ho omesso le immagini)
__________________
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
Quote:
C(s)=Cd(s)Cs(s) quello che hai trovato è Cd(s). ora devi fare in modo che il guadagno statico complessivo del controllore sia pari a 10(se è giusto il risultato che hai trovato prima). quindi devi moltiplicare il Cd(s) per la costante adatta e controllare se il sistema è stabile. C(s)=k Cd(s) prova k=45 e vedi se il sistema a ciclo chiuso è stabile(a occhio è così ma fai i conti bene)
__________________
"la scelta giusta non è sempre la più saggia,ma è quella che non porta con sè rimpianti" . pietro84 |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
Si lo so che il controllore lo posso dividere in parte statica e in parte dinamica... e infatti il mio Cs era uguale a 10... solo che con routh ho trovato che K deve essere compreso fra 0 e 6... e poi quando mi sono calcolato il Cd (parte dinamica del controllore) questo a un suo guadagno.. che interferisce no? se uso K=45 si fa a moltiplicare con il guadagno del Cd che è 2.79.. io devo fare in modo invece che il complessivo sia uguale a 10 no?
__________________
Ultima modifica di luxorl : 22-07-2006 alle 21:21. |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
Cd(s)= 2.7919(S+0.5) / (s+6.5)
Cd(0)=(2.7919*0.5)/6.5=0.2148 questo è il guadagno statico del controllore(parte dinamica). C(s)=kCd(s) C(0)=k*0.2148=10----------> k=46.56 in questo modo C(0)=10 e ti trovi con il risultato che volevi ottenere
__________________
"la scelta giusta non è sempre la più saggia,ma è quella che non porta con sè rimpianti" . pietro84 |
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
![]() Risposta al gradino: ![]() Ti faccio vedere cosa ho ottenuto con Routh: Quote:
![]() Quote:
Ho bisogno che il controllore abbia un guadagno k=10 per avere quell'errore di velocità, però questo valore non è compreso nel range di stabilità trovato con Routh... la specifica non è ottenibile? NB: Il sistema è 200/S(s+50)(s+0.5) nell'immagine sopra c'è un errore.. cmq la situazione è la stessa: -Range Stabilità ottenuto con Routh [0 , 6.3125] -Per avere un errore alla rampa di 0.0125 ho bisogno di un K=10.. fuori range!!
__________________
Ultima modifica di luxorl : 23-07-2006 alle 11:42. |
||
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
__________________
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
devi applicare il teorema del valor finale tenendo conto anche del controllore dinamico che hai trovato, non ho capito se l'hai fatto o no.
__________________
"la scelta giusta non è sempre la più saggia,ma è quella che non porta con sè rimpianti" . pietro84 |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
Il mio sistema è: 200/s (s+50) (s+0.5) Il mio controllore dinamico è: 2.4719 (s+0.5)/(s+6.5) con questo controllore le specifiche di tempo di assestamente e sovraelongazione sono ampiamente soddisfatte! TEOREMA DEL VALOR FINALE: lim s-->0 S*E(S) = S R(S) 1/1+G(S)Cd(S)K limite di s che tende a zero di s per il riferiemento (nel mio caso la rampa: 1/s^2) per 1 su 1 più Sistema per Controllore Dinamico per il K che sto cercando si riduce a: lim S-->0 di 1/S 1/1+ 494.38(S+0.5)K/S(S+6.5)(S+50)(S+0.5) = (S+6.5)(S+50)(S+0.5) / S(6.5)(S+50)(S+0.5)+494.38(S+0.5)K Sostituendo S=0 mi rimane solo: (6.5)(50)(0.5)/494.38(0.5)K = 162.5/247.19K = 0.0125 (pongo uguale all'errore voluto) K = 162.5 / (247.19*0.0125) = 52.6 E con questo K la mia risposta a ciclo chiuso impazzisce: ![]() I calcoli li ho fatti e rifatti.. e mi sembrano giusti! Quello che vorrei sapere è possibile che la specifica non sia ottenibile?
__________________
|
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
ora non ho tempo di seguire tutti i calcoli passo-passo.
cmq è possibile che quando viene richiesta una velocità di risposta troppo alta il sistema diventi instabile. per curiosità quali sono gli altri 2 metodi? qui hai usato la trasformazione bilineare per passare dal continuo al discreto? ps: cmq quella risposta al gradino mi sembra sottocampionata, è troppo spigolosa.
__________________
"la scelta giusta non è sempre la più saggia,ma è quella che non porta con sè rimpianti" . pietro84 |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
-Luogo delle radici a tempo discreto -Piano W nel metodo che ho postato qui, per discretizzazione, sto lavorando ancora a tempo continuo, aggiungendo al sistema la funzione di trasferimento del campionatore/ricostruttore cioè: 1/1+(T/2)S il tempo di campionamento l'ho scelto sul tempo di assestamento.. e mi esce 0.04.. ma ancora a parte nella funzione di trasferimento del campionatore/ricostruttore non l'ho ancora usato
__________________
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Ho svolto tutto il secondo metodo (Luogo Radici Discreto) e mi da tutto perfettamente.
Credo di aver individuato il problema dove sta... usando routh sul sistema normale che ho dalla traccia ottengo come unico limite su K per cui il sistema è stabile: k>0 Mentre nel primo metodo (questo che ho postato qui) il sistema da controllare va messo in cascata con la funzione di trasferimento del campionatore/ricostruttore... questa cosa mi modifica il sistema.. e applicandoci routh ottengo un range di k per cui il sistema è stabile di: 0<k<6.3125 Dovendo avere almeno un K=10 per avere errore di velocità pari a 0.0125 nel primo metodo ho problemi perchè se prendo un k più grande di 6.3125 la risposta a ciclo chiuso impazzisce... Secondo voi è giusto scrivere sul progetto che usando il primo metodo la cascata sistema-campion/ricostruttore non mi fa ottenere l'errore di velocità desiderato?
__________________
|
|
|
|
|
|
#13 | |
|
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
Quote:
c'è qualcosa che non mi quadra... hai provato ad aumentare la frequenza di campionamento? diminuisci T e vedi che succede
__________________
"la scelta giusta non è sempre la più saggia,ma è quella che non porta con sè rimpianti" . pietro84 |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Ok, ti chiedo l'ultimo sforzo (
)... seguimi per benino un attimo:Io inizialmente ho campionato a T=0.04.. che mi sembrava abbastanza buono come tempo di campionamento. Ecco la funzione di trasferimento del campion/ricostruttore con T=0.04... ricordo che la funz di ttrasferimento è: 1/(1+(T/2 S))... quindi non dovrebbero esserci errori... ![]() ed ecco il risultato dopo la cascata con il mio sistema: ![]() e con Routh applicato a quest'ultimo ottengo: 0<k<6.3125 Per farti capire meglio posto il luogo delle radici e la risposta a ciclo chiuso variando pian piano K: K=0.1 (Si vede anche nell'immagine) ![]() K=3 ![]() K=6 (Quasi al limite del risultato ottenuto con Routh) ![]() K=6,5 APPENA APPENA FUORI RANGE DI STABILITA' ![]() K=10 GUADAGNO CHE MI SERVE PER UN ERRORE ALLA RAMPA DI 0.0125 ![]() Guarda cosa succede se diminuisco di un ordine di grandezza il tempo di campionamento: T=0.004 (Decisamente piccolo) Ecco la nuova funzione del ricostruttore e poi anche la cascata con il mio sistema: ![]() Non ho applicato Routh a questo nuovo sistema ma guarda che succede se lavoro sul luogo delle radici e inserisco un K=10 come serve a me: ![]() La risposta a ciclo chiuso rimane stabile... e così fino a K=62 circa... Praticamente diminuendo di un ordine di grandezza il Tempo di campionamento ho aumentato di un ordine di grandezza il range di k per la quale la funzione rimane stabile? T=0.04 --------> 0<K<6.3 T=0.004 --------> 0<K<63 Secondo te è giusto quanto detto? Si può trarre conclusione che con un tempo di campionamento relativamente grande non riesco a ottenere un errore alla rampa per colpa della "lentezza" del campionatore/ricostruttore.. mentre rendendo adeguatamente piccolo sto tempo di campionamento ce la faccio?
__________________
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
sì stai cominciando a capire. se la frequenza di campionamento è bassa il sistema non riesce a essere rapido abbastanza per seguire le variazioni richieste dalle specifiche(senza diventare instabile naturalmente).
__________________
"la scelta giusta non è sempre la più saggia,ma è quella che non porta con sè rimpianti" . pietro84 Ultima modifica di pietro84 : 24-07-2006 alle 14:19. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:29.















)... seguimi per benino un attimo:
















