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




Profilo Di Velocità


Messaggi consigliati

Inserita:

Salve,con l'occasuione porgo un agurio di buon anno a tutti.

Prima delle ferie natalizie ho finito di installare il sistema discusso nei post precedenti,devo dire che il tutto funzione piuttosto bene.Nei giorni scorsi mi è stato chiesto di realizzare un sistema simile a quello che ho già realizzato,con un particolare molto importante,la possibilità di variare la rampa di accelerazione per vari motivi

Con il sistema realizzato ho notato che la rampa di accelerazione a un valore fisso che determina non solo la rampa ma anche la velocita che dovrà portare l'asse.

Secondo voi con il sistema discusso nei post precedenti,è possibile modificare la rampa di accelezione mantenedo la velocita richiesta.

Grazie


Inserita:
Secondo voi con il sistema discusso nei post precedenti,è possibile modificare la rampa di accelezione mantenedo la velocita richiesta.

Si potrebbe fare, ma il sistema si complica parecchio.

Attualmente il sistema accelera con la massima accelerazione possibile perchè dai un gradino di velocità. In altre parole il riferimento che dai, cioè il differenziale d'impulsi virtuali, corrisponde alla mssiam velocità.

Se vuoi accelerare gradualmente devi dare un differenziale in crescita.

Nell'esempio precedente il differenziale d'impulsi, per la velocità ipotizzata, era pari a 300imp. ogni 10 ms.

Prova a calcolarti come accelera il tuo asse se tu partissi con un differenziale pari ad 1 ip., crescendo di 1 imp. ogni 10 ms sino a raggiungere i 300 imp.

Avresti il differenziale che cresce in questo modo 1, 2, 3, 4, ...Mentre la somma crescerebbe seguendo la legge 1, 3, 6, 10, 15, 21....etc.

Accelerando più lentamente anche l'errore crescerà più lentamente, quindi crescerà più lentamente anche il riferimento di velocità.

Questo algoritmo non è fatto per gestire rampe variabili. E' semplice, efficace e facile da mettere a punto, però ha il suo punto debole.

Se vuoi rampe variabili devi costruirti un altro algoritmo, più classico.

Mantieni il sistema che ho descritto sopra per calcolare la quota virtuale. Dai un riferimento all'azionamento calcolato sulla rampa di velocità; in pratica usi la somma del virtuale, moltiplicata per una costante, sino al raggiungimento della massima velocità.

In somma al riferimento diretto (feed forward) metterai la differenza tra contatore virtuale e reale (errore) moltiplicato per una costante.

Ovviamente dovrai anche calcolarti le quote di rallantamento e predisporre le rampe relative.

Inserita:

OK Livio,

se ho capito bene tu mi consigli di:

Mantieni il sistema che ho descritto sopra per calcolare la quota virtuale

mantengo il sistema descritto per calcolarmi la quota virtuale che il mio asse dovra inseguire fino al raggiungimentoi della stessa

Dai un riferimento all'azionamento calcolato sulla rampa di velocità; in pratica usi la somma del virtuale, moltiplicata per una costante, sino al raggiungimento della massima velocità.

se ho capito bene,moltiplico la somma della quota virtuale per una costante ad ogni step,sino al raggiungimento della velocita massima che nell'esempio descritto prima e pari a 300mp. ogni 10 ms.

In somma al riferimento diretto (feed forward) metterai la differenza tra contatore virtuale e reale (errore) moltiplicato per una costante

il riferimento diretto (feed forward) a cui fai riferimento,è il riferimento che dò all'azionamento calcolato sulla rampa di velocità?che ho descritto al punto 2?

il riferimento diretto (feed forward), è un riferimento con cui dovro percorrere tutto il posizionamento,fino al raggiungimento dell'asse alla quota stabilita?

perche la differenza tra contatore virtuale e reale (errore) che andro poi a mettere in somma devessere moltiplicata cer una costante?

Ovviamente dovrai anche calcolarti le quote di rallantamento e predisporre le rampe relative.

la quota di rallemtamento non è data sempre dalla differenza accumulate tra la posizione virtuale in quota e la posizione dell'asse

Inserita:
l riferimento diretto (feed forward), è un riferimento con cui dovro percorrere tutto il posizionamento,fino al raggiungimento dell'asse alla quota stabilita?

Ok per tutto quello che precede questo.

Il riferimento così calcolato lo dai sino a che non raggiungi la quota di allentamento che dovrai calcolarti al momento che inserisci la quota da raggiungere (missione dell'asse). Raggiunta la quota inizi la rampa di rallentamento e percorrerai l'ultimo tratto a velocità lenta.

In somma al riferimento diretto (feed forward) metterai la differenza tra contatore virtuale e reale (errore) moltiplicato per una costante

Questo puoi ometterlo (è un mio errore) perchè devi solo realizzare un posizionamento non un asse coordinato in velocità. Se anche ci fosse un piccolo errore di velocità non ha importanza.

la quota di rallemtamento non è data sempre dalla differenza accumulate tra la posizione virtuale in quota e la posizione dell'asse

No! La quota va calcolata. A secondo della quota puoi avere un profilo di velocità quasi trapezoidale (rampa di accelerazione, tratto a velocità costante, rampa di rallentamento, ultimo tratto in lento); oppure simil triangolare (accelerazione, decelerazione e tratto in lento).

Come si calcola il tutto?

In funzione della rampa di accelerazione. Tu imponi la velocità massima ed il tempo impiegato per raggiungerla. Lo spazio percorso in accelerazione vale s=V/l*t. Se la quota da raggiungere q>2*s+l, dove l è lo spazio percorso a velocità lenta allora avrai: rampa di accelerazione e lavoro a velocità costante sino a q-(s+l), dove inizi la rampa di decelerazione.

Se q=<2*s+l devi accelerare sino q/2, poi inizi a decelerare.

Ricordati che devi considerare la posizione ragiunta quando quota da raggiungere - posizione attuale <= delta (valore che fissi arbitrariamente). Se non fissi un margine di errore di posizione rischi di non raggiungere mai la quota e, peggio di pendolare attorno alla quota stessa.

Poi ti mando al parcella per la consulenza :)

Inserita:
Poi ti mando al parcella per la consulenza

OK!

Credo che poi la rigirero a PLCForum,perché non so dirti a quanti altri utenti questa discussione può essere utile ;) .

Scherzi a parte,ho letto di sfuggita la risposta,domani mi soffermerò con più calma e vedrò cosa riesco a fare

Grazie

Inserita:
perché non so dirti a quanti altri utenti questa discussione può essere utile

a maggior ragione se sei l'unico interessato, la parcella spetta a te pagarla :)

Inserita:

Ho ripreso stamattina la tua risposta

Tu imponi la velocità massima ed il tempo impiegato per raggiungerla. Lo spazio percorso in accelerazione vale s=V/l*t

Se sono giusti i conto:

- V è la velocita che porta l'asse in mm/s

- l è lo spazio percorso nell'ultimo tratto a velocita costante per raggiungere il bersaglio

- t è il tempo che impiega l'asse a raggiungere la massima velocita

Quindi, ipotiziamo di avere l'asse che viaggia a 80mm/s,con un rallentamento di 10mm e un tempo di accelerazione di 0,5s. 80/20*0.5=s vale 20

Se la quota da raggiungere q>2*s+l, dove l è lo spazio percorso a velocità lenta allora avrai: rampa di accelerazione e lavoro a velocità costante sino a q-(s+l), dove inizi la rampa di decelerazione.

Se q=<2*s+l devi accelerare sino q/2, poi inizi a decelerare.

Livio il secondo punto indicato purtroppo non è molto chiaro,una cosa che non ho ben capito è quando ho raggiunto la posizione di decelerazione,chi mi genera il riferimento di velocita per arrivare fino al punto di velocita costante.

secondo i tuoi calcolo cosi facendo mi calcolo la posizione di decelerazione.

Inserita:

Chiedo scusa, non mi ero accorto di un errore di battitura.

Non è s=V/l*t, ma s=(V/2)*t; nel tuo esempio lo spazio percorso in accelerazione vale s = (80/2)*0.5= 20mm. In altr parole durante la fase di accelerazione, con accelerazione costante, l'asse percorrerà 20 mm. Poi continuerà a velocità costante.

Se accelerazione e decelerazione sono uguali, e se la quota da raggiungere è >=40 mm allora puoi accelerare e decelerare normalmente.

Se la quota da raggiungere è < 40 mm allora non riesci a raggiungere la velocità massima. In questo caso, raggiunta un quota pari a metà della quota finale, devi iniziare a rallentare.

Se, come è d'uso, riservi un piccolo tratto finale di accostamento in lento, poniamo 5 mm, allora nei tuoi calcoli devi sottrarre 5 mm alla quota finale.

Quindi, nell'esempio precedente, se la quota finale è >= 40 mm + 5 mm esegui il normale modo di accelerazione - decelerazione.

Sempre secondo l'esempio, poniamo che la tua missione prevede una quota pari a 100 mm.

Acceleri, poi arrivato alla quota pari a q= 100-5-20 = 75 mm inizi la decelerazione, decelerazione che non raggiungerà la velocità 0 ma la velocità lenta che, poniamo valga 8 mm/s. Raggiunta questa velocità continui a velocità costante sino a che il posizionatore segnala che l'errore di posizione è <= alla soglia minima.

Se invece la missione prevede una quota, per esempio, pari a 35mm il profilo di velocità diventa.

Accelerazione sino alla quota di 15mm, decelerazione sino alla quota di 35 mm, traslazione in lento sino altermine.

Inserita:

Livio faccio il punto della situazione riguardo l'ultimo messaggio per essere chiaro.

Prima di partire con il posizionamento,devo verificare se riesco a eseguire l'intera rampa di accelerazione,tratto dritto,decelerazione è rallento.

Per fare questo mi calcolo lo spazio s che equivale allo spazio percorso in accelerazione,che si ricava da s=(V/2)*t dove v è la velocita dell'asse e t corrisponde al tempo che impiega l'asse ad arrivare a regime.

Per verificare se riesco ad esguire il profilo di velocita completo, la quota da raggiungere deve essere superiore a

q= quota da raggiungere-s-tratto in lento.

Nel caso la quota da raggiungere e inferiore a q accellero fino q1= quota da raggiungere-tratto in lento/2.

Spero di essere stato chiaro ad interpretare quello che hai scritto nel tuo precedente post.

Rileggendo i post due cose non mi sono chiare:

La prima cosa è;una volta arrivato a regime di velocita con il posizionamento che mettiamo il caso siano 300imp. ogni 10ms, arrivato alla quota di decelerazione come mi ricavo la velocita da portare fino al tratto in lento per poi ultimare il posizionamento?

Nel senso che come faccio a ricavarmi la rampa di decelerazione con la differenza che è rimasta tra il virtuale e la posizione affettiva dell'asse.

La seconda cosa ,ti rimando ad una risposta di qualche post precedente

Dai un riferimento all'azionamento calcolato sulla rampa di velocità; in pratica usi la somma del virtuale, moltiplicata per una costante, sino al raggiungimento della massima velocità.

In somma al riferimento diretto (feed forward) metterai la differenza tra contatore virtuale e reale (errore)

Se cosi facendo,ipotiziamo che imposto una velocita pari a 30mm/s che fatti i conti corrispondono a 100Imp. ogni 10ms,e ipotiziamo che al mio D/A andro a dare una riferimento di 80 Imp che equivale alla differenza tra il virtuale e il reale,aggiungendo il feed forward non portero piu una velocita di 30mm/s ma portero una velocita piu alta perche al D/A do la somma di due velocita.

Grazie

Inserita:
Per fare questo mi calcolo lo spazio s che equivale allo spazio percorso in accelerazione,che si ricava da s=(V/2)*t dove v è la velocita dell'asse e t corrisponde al tempo che impiega l'asse ad arrivare a regime.

No la quota da raggiungere deve essere > 2*s (accelrazione + decelerazione)

Nel senso che come faccio a ricavarmi la rampa di decelerazione con la differenza che è rimasta tra il virtuale e la posizione affettiva dell'asse.

Fai all'inverso di quella di accelerazione :)

Se durante l'accelerazione hai, per esempio, incrementato la velocità di un tot ad ogni tic, durante la decelerazione lo decrementrai della medesima quatità se vuoi le due rampe simmetriche.

Rileggi bene i miei post precedenti. Se tu devi solo crearti un profilo di velocità con rampa variabile, senza dover controllare strettamente la velocità perchè non devi fare coordinamento di assi, allora ti limit a generare il riferimento.

Ho scritto: "Mantieni il sistema che ho descritto sopra per calcolare la quota virtuale. Dai un riferimento all'azionamento calcolato sulla rampa di velocità; in pratica usi la somma del virtuale, moltiplicata per una costante, sino al raggiungimento della massima velocità. "

In pratica puoi anche usare direttamente il conteggio da dare al D/A. Mi spiego meglio, o almeno ci provo :) .

Se la massima velocità di traslazione del tuo asse corrisponde al codice D/A 7FFh (esadecimale) e tu vuoi accelerare in 2", fai un temporizzatore (su interrupt di sistema) da 10 ms; ogni interrupt incrementi il codice di uscita al D/A di Ah (10 decimale).Dopo 200 tics avrai raggiunto 2000 counts in luogo dei 2047 previsti, quindi dovrai continuare ancora per 5 tics e la tua rampa durerà 2",05 in luogo dei 2" teorici. Approssimazione suffiicente per tutte le applicazioni.

Se la tua velocità massima corrisponde, per esempio, a 50.000 imp/s, avrai percorso in accelerazione, uno spazio equivalente a 51250 impulsi; se la tua quota finale "q" > 102.500 impulsi eseguirai l'accelerazione. manterrai lìuscita del D/A = 7FFh sino al valore di conteggio pari a q - 102.500, poi comincerai a diminuire il codice del D/A di Ah ad ogni tic di 10 ms. Raggiunto un codice pari a, per esempio, 30h non decrementi più il riferimento di velocità.

Quando il conteggio degli impulsi corrisponderà alla quota impostata, entro la finestra di errore massimo che hai imposto, fai l'uscita del D/A = 0. Esegui poi le operazioni previste: ritorno in rapido, fermata per lavorazione, etc.

Inserita:

OK. Ora credo che sia tutto chiaro. :)

In pratica il posizionatore va costruito nel seguente modo:

Inanzi tutto mi calcolo lo spazio che percorre l'asse per accelerare.Per fare ciò mi calcolo s=(V/2)*t dove V è la velocita che porta l'asse in mm/s e t e il tempo che impiega l'asse per arrivare a regime di velocita,che nei post precedenti corrisponde a 300Imp. ogni 10ms.

Se la quota da raggiungere è maggiore di 2*s+l dove l è il tratto percorso a velocita lenta eseguo la normale rampa di accelerazione,una volta arrivato alla quota di rallento che me la ricavo da q-(s+l) inizio a decelerrare.

La rampa di accelerazione viene realizzata sommando la posizione virtuale per una costante che determina il tempo di accelerazione,fino al raggiungimento del numero di inpulsi da incrementare ogni tics che corrisponde a 300Imp. ogni 10ms.

Se la quota da raggiungere è minore di 2*s+l mi conporto in modo differente,accellero fino a quota q/2 per poi proseguire con la decelerazione.

Il riferimento di velocita da dare al mio asse è la differenza tra la quota virtuale e quella reale,con l'aggiunta del Feed Forward che non è altro la la somma del virtuale accumulata in accelerazione, moltiplicata per una costante.

Livio un'ultima cosa vorrei chiarire,il Feed Forward devo darlo fino al raggiungimento della rampa di decelerazione,una volta raggiunta tale posizione devo porre il Feed Forward a zero o andra messo in sotrazione alla rampa di decelerazione?.

Spero di essere stato chiaro nel riepilogare quanto descritto da te.

Grazie mille

Inserita:

Mazzinga, per favore, rileggi bene il mio ultimo messaggio e fai esattamente come ho scritto (se ti va :) ).

Se fai como ho scritto usando solo il riferimento diretto (feed forward) è la via più semplice per venir fuori dal tuo problema di rampe. Devi solo stabilire quale rifrimento dare per avere la velocità che ti serve, e quale rampa impostare.

Inserita:

Livio ai ragione,nel mio ultimo messaggio ho sbagliato ad indicare il modo come creare la rampa,devo solo incrementare il codice di uscita al D/A ad ogni tics :ph34r: .

Secondo te,come si comporta il sistema se in somma al riferimento diretto (feed forward) metto la differenza tra contatore virtuale e reale (errore).

Inserita:
Secondo te,come si comporta il sistema se in somma al riferimento diretto (feed forward) metto la differenza tra contatore virtuale e reale (errore).

Fai solo una gran confusione. Tra l'altro il contatore virtuale non ti serve più. Hai solo da comparare il conteggio reale con la quota di rallentamento e la quota di arrivo.

Inserita:

Livio,ho seguito la discussione aperta da mazzinga.Negl'ultimi post mazzinga richiedeva la possibilita di variare le rampe,la tua soluzione sicuramente è la più idonea per avere delle rampe trapezoidale.

Il sistema descritto da tè prevede quindi di avere due rampe uguali,nel caso il sistema ha rampe differenti,se i conti sono corretti dovrebbero essere:

s_acc =(V/2)*tacc e s_dec =(V/2)*tdec, dove s_acc sta per lo spazio percorso in accelerazione e s_dec sta per lo spazio percorso in decelerazione.

Quindi se q=>s_acc+s_dec+l rampa di accelerazione e lavoro a velocità costante sino a q-(s_dec+l), dove inizi la rampa di decelerazione.

Se invece q=<s_acc+s_dec+l come si dovrebbe comportare il sistema dato che non posso accelerare fino a q/2 perche le due rampe non sono uguali.

Grazie

  • 2 weeks later...
Inserita:

Salve a tutti, mi intrometto in questa discussione perchè interessante.

Avrei bisogno di un paio di chiarimenti a proposito del algoritmo di Livio (il primo, diciamo quello con rampe automatiche).

Premetto che non ho ancora testato il sistema. Ci ho solo meditato e mi sembra un algoritmo molto furbo.

Il primo dubbio, è che dovendo utilizzare un inverter con motore asincrono, ho timore che la decelerazione sia troppo brusca.

Però, meditando ho pensato che la ripidità delle rampe dovrebbe dipendere dal "guadagno" del errore-riferimento al drive. Infatti le rette della quota virtuale e quota attuale, sono destinate ad essere parallele. La loro distanza dipenderà dalla velocità e dal "guadagno" del segnale al drive. Giusto?

Se si, più abbassando il guadagno, le rette si distanziano, e dovrebbe essere maggiore il tempo delle rampe. E' corretto?

-Il secondo dubbio, è che non ho trovato il tutorial di cui paralvi nei primi messaggi.

Grazie.

Inserita:

Puoi sempre inserire una rampa sul riferimento di velocità dell'inverter, quella in dotazione all'inverter stesso. Comunque se devi usare un inverter a controllo vettoriale dotato di unità doi frenatura. COn un V/f rischi di non riuscire a posizionare; senza unità di frenatura avresti tempi di decelerazione troppo lunghi.

Il mio tutorial lo trovi nella sezione didattica, sottosezione "elettrotecnica"

Inserita:

Non ho problemi di velocità. E' proprio per questo che vorrei rendere il sistema piuttosto soft.

E' quindi corretto che se diminuisco il guadagno, allungo le rampe?

Inserita:
E' quindi corretto che se diminuisco il guadagno, allungo le rampe?

Quale guadagno?

Nell'algoritmo che ho descritto non è previsto nessun parametro di guadagno.

Se vuoi introdurre un guadagno, devi introdurre un fattore moltiplicativo (>1, =1, <1) per la differenza tra posizione virtuale e posizione reale. In questo modo il riferimento crescerà più o meno velocemente dell'errore.

Se il riferimento cresce più lentamente hai, come effetto collaterale, un'accelerazione inferiore ma, come conseguenza principale, un allungamento dei tempi di posizionamento.

Se il riferimento cresce più velocemente dell'errore l'azionameto rischia di non riusicire a seguire il comando e di avere instabilità.

L'algoritmo così come è è ottimizzato per il minimo tempo di posizionamento.

Inserita:
Sempre ogni 10 ms leggi il contator che conteggia gli impulsi encoder (posizione reale) e lo sottrai alla posizione virtuale. La differenza la butti sul D/A converter e sarà il riferimento all'azionamento.

Per guadagno intendo la scala sulla analogica per il drive. Ho un drive che lo comando in velocità attraverso una analogica per es o...10V.

Cosa mi cambia se faccio corrispondere i 10V ad una differenza di 300 impulsi, oppure 3000?.

Inserita:

Se il D/A è un classico 12 bit, il fondo scala è pari a 2047 counts. L'algoritmo prevede che 2047 impulsi di differenza generino 10 V di riferimento. Se scali facendo, p.e., 20470 impulsi = 10 V (gaudagno proporzionale = 0.1) il sistema posizionerà in più tempo del necessario. Scalando con 10 v = 1024 impulsi (G.P. = 2) perdi in risoluzione, con possibilità di instabilità.

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...