franko Inserito: 18 novembre 2009 Segnala Inserito: 18 novembre 2009 ciao a tutti,ho qualche difficoltà a trovare un algoritmo che mi permetta di eseguire un movimento di un asse con comando trapezioidale.in pratica devo comandare un inverter ed ho una retroazione da encooder, al posto di fare il classico "rallenta in prossimita" vorrei creare un sistema "simile" al classico controllo assi senza però utilizzare le schede dedicate che hanno già integrate queste funzioni ( ovvio che non mi interessa la stessa precisione e il tempo di risposta)il fatto è che non riesco a capire con quale logica devo fare aumentare e sopratutto diminuire la velocità in funzione della distanza dal target, tenendo ovviamente conto che se la distanza è piccola non faccio nemmeno in tempo ad arrivare a regime che già devo rallentare.ho pensato di adattare un funzionamento pid ma non ne sono troppo convinto.mi sapete dare qualche consiglio?grazie
Livio Orsini Inserita: 18 novembre 2009 Segnala Inserita: 18 novembre 2009 Se ci dicessi che tipo di Hw vuoi usare si potrebbe darti delle informazioni più mirate e puntuali.Comunque ti do l'idea del sistema più semplice.La rampa di accelerazione e decelerazione è impostata nell'inverter, così come le velocità di lento e veloce; la selezione tra lento e veloce avviene chiudendo i due contatti dedicati sull'inverter.Riepilogando avrai 2 comandi: marcia lenta, marcia veloce, avanti/indietro.Ti calcoli quanto spazio percorrerà il tuo asse nella fase di accelerazione.Imposti la quota da raggiungere; il sistema di controllo verifica che la quota impostata sia >= del doppio dello spazio di accelarazione. Se è minore, comanda l'avanzamento in velocità lenta.Se è maggiore comanda la marcia avanti in velocità alta. Raggiunta una quota equivalente alla quota impostata - lo spazio di accelerazione, il controllo commuta su velocità lenta, velocità che sarà raggiunta secondo rampa di accelerazione impostata. L'ultimo tratto sarà percorso in velocità lenta. Lo stop sarà dato quando la quota attuale è >= quota da raggiungere meno banda morta (solitamente 2-5 impulsi di encoder).Questo, per sommi capi, il metodo semplice di posizionamento.Se vuoi saperne qualche cosa in più puoi cominciare a leggerti il mio tutorial sulle regolazioni. Lo trovi nella sezione didattica, sottosezione elettrotecnica. Nel capito 6, che tratta di applicazioni specifiche c'è la spiegazione di un algoritmo di posizionamento un poco più sofisticato e molto più performante.
franko Inserita: 18 novembre 2009 Autore Segnala Inserita: 18 novembre 2009 ciao Livio e grazie anticipatamente, probabilmente non mi sono spiegato bene.ho a disposizione un plc con contatore veloce in ingresso e bus di campo in uscita verso l'inverter.vorrei lasciare le rampe interne all'inverter al minimo e modulare da plc la velocità seguendo un andamento trapezioidale che mi porti ad avere velocità 0 sul target, esattamente come fà una scheda asse con controllo in tensione -10v +10v.il problema è la formula matematica che lega la variazione di velocità alla distanza dal target, ovviamente più mi avvicino più la velocità diminuisce.ciao
franko Inserita: 18 novembre 2009 Autore Segnala Inserita: 18 novembre 2009 ...... nel frattempo mi studio il tuo tutorial, grazie
batta Inserita: 18 novembre 2009 Segnala Inserita: 18 novembre 2009 In più di una occasione, mi sono trovato a risolvere problemi di posizionamento, con risultati più che soddisfacenti, nel seguente modo:- rampa di accelerazione con incremento costante della velocità- velocità costante (riferimento fisso)- rampa di decelerazione con velocità calcolata in base della distanza reale dal traguardo.Il calcolo della velocità per la rampa di decelerazione, è il seguente:partendo dalla formula semplificata per il calcolo dello spazio in un moto uniformemente accelerato s = (1/2)at², e considerando che t = v/a, si ottiene:s = (a/2)*(v²/a²) = v²/2ada cui:v = SQRT(2a*s)Generalmente procedo come segue:- calcolo la lunghezza massima della rampa di decelerazione, ovvero lo spazio necessario per passare da VMax a 0- se la distanza dal traguardo è >= alla lunghezza massima della rampa di decelerazione, assumo come VMax la velocità massima impostata per il posizionamento. Gestisco la rampa di accelerazione con incrementi costanti, fino al raggiungimento di VMax.- se la distanza dal traguardo è inferiore alla lunghezza massima della rampa di decelerazione, utilizzo la formula v = SQRT(2a*s) per calcolare la velocità massima. Il risultato di questo calcolo viene utilizzato come limite di velocità. Se la velocità attuale quindi è inferiore a questo valore non effettuo correzioni; diversamente, adeguo la velocità al valore limite. Se sono ancora in fase di accelerazione, per esempio, continuo ad accelerare fino a quando non sarà la velocità limite calcolata ad impedirmelo, ed a farmi, anzi, rallentare.Questo sistema ha il vantaggio di non dover calcolare il punto finale della rampa di accelerazione, e nemmeno il punto reale di inizio rampa di decelerazione. Basta calcolare solo il punto di inizio rampa di decelerazione da VMax a 0, anche nel caso di posizionamento fatto a velocità inferiori alla velocità massima dell'asse, o nel caso di posizionamenti con partenza vicina al traguardo, con rampa di accelerazione che non fa in tempo ad essere completata.Insomma, non c'è nessuna differenza di procedura per partenze vicine o lontane dal traguardo. Inoltre, essendo la velocità in decelerazione calcolata partendo dalla distanza dal traguardo, e non basata su un profilo teorico, non c'è nemmeno bisogno di implementare tecniche di feed-forward.Più difficile a dirsi che a farsi.
Livio Orsini Inserita: 18 novembre 2009 Segnala Inserita: 18 novembre 2009 Se lasci le rampe interne all'inverter non puoi modulare la velocità se non come limite. E' sempre consigliabile usare il riferimento da PLC sia per velocità sia per generazione di rampa.Se leggi il mio tutorial trovi un semplice algoritmo, di massimizzazione di risposta, che non necessita di alcun calcolo e genera sempre il mioglior profilo di velocità possibile.E' un po' lungo da spiegare ma poi è facilissimo da comprendere. Nella sezione PLC siemens S7-200 trovi una discussione abbastanza recente in cui lo spiego passo.
franko Inserita: 23 novembre 2009 Autore Segnala Inserita: 23 novembre 2009 grazie ad entrambi, ora faccio alcune prove poi vi faccio sapere
batta Inserita: 24 novembre 2009 Segnala Inserita: 24 novembre 2009 Il metodo proposto da Livio è molto semplice e, sicuramente, funziona. Con pochissime istruzioni si riesce ad ottenere un posizionamento. E questo è, indubbiamente, un grande pregio.A mio avviso però, presenta alcuni limiti:1) non è possibile impostare in modo chiaro quale sarà la pendenza delle rampe di accelerazione e decelerazione. Queste rampe dipendono direttamente dal guadagno impostato, che però influisce anche sul comportamento generale del posizionamento. Inoltre, non è possibile scegliere rampe di accelerazione e di decelerazione diverse tra loro.2) se modifico la velocità, non rimangono costanti le pendenze delle rampe di accelerazione/decelerazione, ma il tempo necessario per raggiungere la velocità.3) l'andamento della velocità nel tempo non è un trapezio. Le rampe di accelerazione/decelerazione non sono rette, ma presentano un andamento logaritmico.Allego due files (uno in formato .xls ed uno in formato .ods per OpenOffice) con una simulazione e rappresentazione grafica di quello che, secondo me, accade.La mia intenzione è quella di mostrare l'andamento della velocità. Ho trascurato quindi la parte finale del posizionamento fatta a bassa velocità costante.Nella realtà, sarà proprio questa parte finale a velocità fissa che permetterà di raggiungere la posizione.
aude Inserita: 24 novembre 2009 Segnala Inserita: 24 novembre 2009 Buon giorno Livio , ho provato a scaricare il suo corso di regolazione e controllo , ma il download si blocca dopo aver scaicato circa 11 pagine. E' possibile recuperarlo in altro modo? Ho anche cercato sul forum S7-200 la discussione alla quale si riferisce , ma non sono riuscito a trovarla. Potrebbe gentilmente indicarmela?Grazie.
Livio Orsini Inserita: 24 novembre 2009 Segnala Inserita: 24 novembre 2009 (modificato) se modifico la velocità, non rimangono costanti le pendenze delle rampe di accelerazione/decelerazione, ma il tempo necessario per raggiungere la velocità.E' una funzione voluta, serve a massimizzare l'accelerazione; in altri termini il sistema accelera e decelera con la massima accelerazione consentita dalle coppie e dalle inerzie.non è possibile impostare in modo chiaro quale sarà la pendenza delle rampe di accelerazione e decelerazione. Queste rampe dipendono direttamente dal guadagno impostato, che però influisce anche sul comportamento generale del posizionamento. Inoltre, non è possibile scegliere rampe di accelerazione e di decelerazione diverse tra loro.Questo è voluto per la ragione enunciata in precedenzal'andamento della velocità nel tempo non è un trapezio. Le rampe di accelerazione/decelerazione non sono rette, ma presentano un andamento logaritmico.Questo è uno dei punti di forza, specialmente nelle macchine utensili; infatti è uno dei metodi per ridurre al minimo i punti di discontinuità della funzione che son causa di vibrazioni. Mai fare rampe lineari, ma almeno raccordate; meglio se sono funzioni logaritmiche o paraboliche...il download si blocca dopo aver scaicato circa 11 pagine...Probibilmente hai problemi con la tua connessione, lo hanno scaricato in parecchie persone senza problemi. Per quanto riguarda la discussione dovrei andare a ricercarla anch'io e, sinceramente, non ho molto tempo disponibile. Modificato: 24 novembre 2009 da Livio Orsini
batta Inserita: 24 novembre 2009 Segnala Inserita: 24 novembre 2009 E' una funzione voluta, serve a massimizzare l'accelerazione; in altri termini il sistema accelera e decelera con la massima accelerazione consentita dalle coppie e dalle inerzie.Non mi pare che si ottengano sempre le massime accelerazioni/decelerazioni consentite dal sistema.Dimezzando la velocità si impiega comunque lo stesso tempo per raggiungerla. L'accelerazione media è quindi anch'essa dimezzata. Se voglio mantenere invariate le pendenze delle rampe, se dimezzo la velocità devo raddoppiare il guadagno. Però se si aumenta troppo il guadagno, poi non si controlla più nulla.Questo è voluto per la ragione enunciata in precedenzaDipende dai casi. Molto spesso impostare le rampe in modo da ottenere un'accelerazione costante e nota torna molto utile.Pienamente d'accordo sui vantaggi del raccordare le rampe, ma un andamento logaritmico, come nel caso di cui stiamo discutendo, significa che avremo:- accelerazione massima in partenza e poi a diminuire fino al raggiungimento della velocità massima- decelerazione massima quando inizia il rallentamento, e avvicinamento molto lento al traguardo.Si ottiene quindi una curva con raccordo molto dolce nella sua parte finale, ma con brusca variazione (molto più brusca che nel caso della retta) nella sua parte iniziale.Se non si impostasse una velocità minima, si rischierebbe addirittura di non riuscire a raggiungere il traguardo. Se la velocità minima non è sufficientemente elevata, si nota chiaramente che la parte finale del posizionamento avviene con "scarsa verve". Secondo me, un simile andamento può essere consigliato per alcune applicazioni, ma non per tutte.Per raggiungere la stessa velocità nello stesso tempo, anziché avere un'accelerazione costante, avrò momenti con accelerazione blanda, ed altri invece con accelerazione brusca. Io mi trovai, parecchi anni fa, a mettere le mani su un sistema dove la parte finale del posizionamento avveniva secondo questo principio (velocità proporzionale alla distanza dal traguardo).Di come funzionava il posizionamento non erano assolutamente soddisfatti, soprattutto per la lentezza nella fase finale. Per non avvertire questa lentezza, si doveva alzare la velocità di accostamento. Ma con velocità di accostamento elevata, c'era poi un gradino troppo brusco alla fine.Dopo lunghe discussioni riuscii a convincere chi mi commissionò il lavoro a lasciarmi provare a gestire la rampa di decelerazione con velocità proporzionale alla radice quadrata della distanza dal traguardo (ottenendo quindi una decelerazione costante).In quel caso si trattava di posizionare le mole di una macchina per la lavorazione del marmo in un arco da -90° a +90°. I due casi estremi erano il posizionamento da +90° a 0°, e quello da -90° a 0°. Per 0° intendo il gruppo di mole (di notevole massa) orizzontale. Ebbene, utilizzando sempre gli stessi parametri, si otteneva un ottimo posizionamento, preciso e rapido, sia in salita che in discesa.Ripeto, nel caso non fosse chiaro: non sto assolutamente contestando o criticando il metodo proposto da Livio. Sono, anzi, convinto della sua bontà in certe applicazioni. Ma in tutte.
Livio Orsini Inserita: 24 novembre 2009 Segnala Inserita: 24 novembre 2009 (modificato) Dimezzando la velocità si impiega comunque lo stesso tempo per raggiungerla.Quasi certamente ti è sfuggito qualche cosa o hai fatto male i conti. E' un sistema vecchio di decenni, messo a punto quando si poteva usare solo un circuito Hw. Io ho cominciato ad usarlo per sincronizzare la frequenza di un VCO con un quarzo. In quel caso praticamente è istantaneo essendo l'inerzia del sitema quasi nulla, almeno se la paragoniamo a quelle di un asse. Si stabilisce il guadagno ottimale del sistema, molto facilmente perchè il dispositivo è molto tollerante, poi le prestazioni sono sempre le migliori ottenibili senza sovra e/o sotto elongazioni. Se il sistema non avesse inerzia, o si disponesse di una coppia infinita, l'accelerazione sarebbe infinita quyindi la variazione di velocità sarebbe un gradino, indipendentemente dalla velocità finale. Però bisogna sempre fare i conti con la realtà ed ogni sistema ammette un'accelerazione massima che è ben lungi dall'essere infinita. Dando un riferimento a gradino il ritardo di risposta, dovuto all'accelerazione finita, causa un errore, errore che sarà maggiore quanto minore è l'accelerazione consentita. Ma questo limite vale per tutti i metodi di posizionamento. Il sistema è un filtro passa basso o, se preferisci, un integratore. Quindi o si limita la frequenza d'ingresso, imponendo una rampa sul riferimento, o si lascia che sia il sistema che tagli di suo la frequenza massima.Si ottiene quindi una curva con raccordo molto dolce nella sua parte finale, ma con brusca variazione (molto più brusca che nel caso della retta) nella sua parte iniziale.E' proprio quello che si vuole ottenere . Sulle macchine utensili da le migliori prestazioni qualitative. In alternativa si usa una rampa parabolica sempre con accelerazione, positiva o negativa, iniziale massimanon sto assolutamente contestando o criticando il metodo proposto da LivioMai dubitato del contrario; anzi le tue obiezioni mi fanno piacere visto che mi costringono a rinfrescarmi le idee su un lavoro vecchio di decenni e, si sa, in questi casi si tende a dare tutto per scontato.Che poi sia il metodo ottimale per tutte le applicazioni sono il primo a negarlo. Ha, a mio giudizio, parecchi vantaggi: è consolidato e robusto, è semplice da mettere a punto, si adatta a molte applicazioni e, con un poco di inventiva e abilità, si possono ottenere varianti molto interessanti per altre applicazioni meno canoniche.Comunque ci sono casi in cui ho ritenuto preferibile usare il metrodo canonico che hai descritto tu. Ad esempio se devo imporre una rampa ben precisa e, soprattutto, varabile il metodo canonico è insostituibile. L'abilità del progettista sta appunto nello scegliere, caso per caso, la metodologia e l'approccio migliore.Per chi ha poca dimestichezza con i sistemi di posizionamento, l'algoritmo che ho proposto ha il vantaggio di essere semplice e facile. Modificato: 24 novembre 2009 da Livio Orsini
batta Inserita: 24 novembre 2009 Segnala Inserita: 24 novembre 2009 Quasi certamente ti è sfuggito qualche cosa o hai fatto male i conti.Per fare un rapido ragionamento utilizzando i numeri, proviamo ad immaginare un asse da muovere alla velocità di 1000 mm/s, incrementando la quota ideale ogni 10ms ed utilizzando un fattore K=10L'incremento della quota ideale ad ogni step sarà quindi di 10mm.Dopo il primo incremento avremo quindi:quota_ideale = 10quota_reale = 0errore = 10 - 0 = 10rif_vel = 10 * 10 = 100Se di questo asse cambiamo solo la velocità, portandola, per esempio, da 1000 mm/s a 500 mm/s, avremo:incremento quota ideale per ogni step = 5Dopo il primo incremento:quota_ideale = 5quota_reale = 0errore = 5 - 0 = 5rif_vel = 5 * 10 = 50La velocità, nel secondo caso, aumenta più lentamente.Cambiando la velocità si stira la curva in altezza.Precisiamo: sto solo constatando cosa accade, non certo sostenendo che questo sia sempre un male. In alcuni casi (da valutare di volta in volta), potrebbe essere vantaggioso. Se mi devo spostare a velocità più basse, automaticamente riduco l'accelerazione in modo proporzionale, ottenendo così un movimento complessivamente più morbido, e non solo più lento.Alla fine, è praticamente quello che succede applicando una tensione ad un condensatore. La costante di tempo, e quindi il tempo di carica (o scarica) non dipendono dalla tensione applicata, ma solo dalla capacità del condensatore e dalla resistenza del circuito.La costante di tempo, nel nostro caso, anziché essere t=RC, sarebbe t=1/K.Nei prossimi giorni dovrò sviluppare il software per una macchina per curvare lastre di alluminio (collaudo previsto per inizio gennaio 2010), gestendo il posizionamento di due assi da plc senza utilizzare moduli dedicati.Essendo il sistema di facile e rapida implementazione, penso proprio che effettuerò prove con entrambi i metodi.
Livio Orsini Inserita: 25 novembre 2009 Segnala Inserita: 25 novembre 2009 (modificato) Il tuo ragionamento è corretto però...c'è un però.E' valido se, durante la fase di accelerazione si usa un differenziale di velocità corrispondente alla velocità impostata. Quindi dimezzando la velocità si dimezza la pendenza, ovvero rimane quasi costante il tempo per raggiungere la velocità di lavoro. Però esiste la variante che prevede differenziali di velocità costanti, pari alla massima velocità raggiungibile. Al raggiungimento di un riferimento pari alla velocità impostata, si cambia il valore del differenziale con il valore corrispondente alla velocità impostata.Cerco di chiarire meglio con un esempio.Immaginiamo di avere un sistema dove la massima velocità la si raggiunge con un riferimento pari a 10.000, a cui corrisponde un differenziale di posizione virtuale pari a 10 impulsi.Immaginiamo di voler lavorare a metà velocità, quindi con riferimento pari a 5.000 e con differenziale di posizione pari a 5 impulsi. Se si da un differenziale pari a 10 impulsi sino a che rif_vel <= 5.000, l'accelerazione rimane costante. In pratica si è spostato in avanti il bersaglio anticipando la reazione del sistema. Per la decelerazione, invece, non vale questa "drogatura" ma ci si deve accontentare di quella naturale....penso proprio che effettuerò prove con entrambi i metodi.Dovrebbero funzionare entrambi. Uno perchè traspone esattamente l'equazioni del moto lineare, l'altro perchè...fa la stessa cosa in modalità differenti.Poi dipende dall'applicazione. Il metodo che ho descritto io è particolarmente vantaggioso quando si debbano effettuare posizionamenti durante lavorazioni meccaniche (simil CNC) e cesoie volanti (con qualche variante di ffw) o posizionamenti interpolati (sempre con qualche variante di ffw)In effetti era sfuggita qualche cosa, ma a me . Come ho scritto nel post precedente, dopo alcuni anni si danno per scontate alcune cose che non lo sono; in questo caso ho dimenticato che sul tutorial ho riportato solo l'algoritmo minimo, il più semplice. Meglio così, almeno discutendone son dovuto andare a rivederlo. Penso che, se mai riuscirò a terminarlo, descriverò meglio il tutto sul tutorial specialistico sui posizionamenti. Modificato: 25 novembre 2009 da Livio Orsini
franko Inserita: 25 novembre 2009 Autore Segnala Inserita: 25 novembre 2009 stò eseguendo dei test a banco e sembra che il sistema funzioni, per part condicio non dirò quale soluzione ho adottato, ma mi avete aiutato moltissimo grazie
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora