PID assi idraulici

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

PID assi idraulici

Postby darko3sc » 11 Apr 2015, 11:28

Salve a tutti e sempre complimentoni per il lavoro che fate qui sul forum...siete una miniera di informazioni!
tempo fa avevo chiesto delucidazioni su un progetto per atmega di un controllo numerico per gestire due assi ( pistoni oleodinamici ) di una macchina utensile http://www.delucagiovanni.com/public/phpbb3/viewtopic.php?f=4&t=791 e viste le mie lacune sulla programmazione dei microcontrollori ho accantonato il progetto per studiare un po...e diciamo che ora ho le idee un pelo piu chiare...pero essendo la mia prima applicazione,le perplessita' non mancano!
volevo chiedere a voi che probabilmente ci lavorate ogni giorno con queste cose, come si potrebbe affrontare il discorso della sincronizzazione dei due attuatori tenendo conto che:
-entrambi devono raggiungere una quota x (sicuramente tramite opportuna rampa di velocita')
-la corsa deve essere parallela
SOLUZIONI:
Se do un riferimento di quota uguale ad entrambi gli assi, ciascuno dei quali ha un controllo di posizione in anello chiuso ( PI o PID), la quota finale, penso, verrà raggiunta correttamente ma durante la corsa non ho certezza del parallellismo( disassamento massimo 10 mm).
Quindi ipotizzando di assumere y1 come master e y2 come slave, do il setpoint ad entrambi e poi y2 lo chiudo ulteriormente con loop in posizione sempre con PID sul master? Oppure do il setpoint solo al master e lo slave tramite loop lo segue?
la velocita degli assi sara di circa 100 mm/s in rapido e 10 mm/s in lento.
voi di solito come effettuate un controllo del genere?
buon weekend
Dario
darko3sc
 
Posts: 12
Joined: 25 Jun 2014, 11:14
Location: Cammarata (AG)

Re: PID assi idraulici

Postby darko3sc » 16 Apr 2015, 15:30

Toc Toc.....c'è nessuno?!
Dai ragà, uno alla volta, non vi affollate!!!!
:lol: :lol: :lol: :lol:
Pensavo fosse un argomento interessante....o sono solo io che cerco sempre di complicarmi la vita con cose che vanno un pelo piu in là del classico blink led?! :D :shock:
Comunque...gia che ci siamo...le rampe di accelerazione e decelerazione agli assi, essendo penso una funzione nel dominio del tempo del tipo x(t)=quota(t), in che modo si implementa in C ? Sarà qualcosa del tipo:
all'istante x = quota y
all'istante x+1 = quota y+1
all'istante x+2 = quota y+2
eccetera finche quota attuale >= quota desiderata ? prendendo come riferimento un timer interno e incrementando la quota y via via di piu in fase di accelerazione e, appena sono ad esempio a 30 mm dalla quota desiderata inizio a diminuire l'incremento di y sempre piu man mano che mi avvicino e la raggiungo?
Spero di essere stato chiaro...eventualmente lo espongo in pseudo C...
Attendo vostri lumi!
ciao
darko3sc
 
Posts: 12
Joined: 25 Jun 2014, 11:14
Location: Cammarata (AG)

Re: PID assi idraulici

Postby deluca » 16 Apr 2015, 15:48

ciao,
darko3sc,
purtroppo sono stato impegnato coi "Fatti vostri" e solo oggi sono rientrato da Roma..... se vuoi dare un'occhiata....
http://www.delucagiovanni.com/I_fatti_v ... ostri.html

appena un minuto cercherò di aiutarti, ok?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: PID assi idraulici

Postby darko3sc » 16 Apr 2015, 16:07

Salve Ing...dopo aver pubblicato il secondo post, ho dato un occhiata sul sito e ho visto la Sua partecipazione ai fatti vostri...davvero complimenti, anche se non ho visto tutto il video perche la connessione fa un po di storie...
Quanto mi piacciono ste cose!!!!!!!
Piccolo O.T.: in una prossima vita mi piacerebbe nascere...diciamo...in località un po piu all'avanguardia( come catania ad es), in tempi economico-sociali nettamente migliori, solo per poter avere il privilegio di poter "scegliere" cosa fare della mia vita e che percorsi seguire e avere almeno una chance di poter lavorare con gente come Lei, collaborando alla ricerca e allo sviluppo di quelle tecnologie che tanto mi affascinano...
( ho le lacrime agli occhi!!)
Per fortuna queste mancanze professionali sono ampiamente colmate dalle mie due bimbe di 6 e 2 anni, che ora come ora, a 27 anni, mi fanno sentire la persona piu fortunata al mondo!
Tornando a noi...La ringrazio per la disponibilità...soltanto Gente come Lei, e tanti altri presenti in questo forum, mi fanno sentire ancora orgoglioso di far parte di questa nazione!
darko3sc
 
Posts: 12
Joined: 25 Jun 2014, 11:14
Location: Cammarata (AG)

Re: PID assi idraulici

Postby deluca » 17 Apr 2015, 20:49

Intanto ti ringrazio molto per le belle parole espresse nei miei riguardi.
Dai! Poi AG non è molto lontano da CT :) qualche ora di viaggio e sei da noi :)

Ma tornando al tuo problema.....
mi è capitato pochissime volte di controllare sistemi idraulici anche perchè la maggior parte dei nostri sistemi meccanici viene azionato da motori elettrici DC e Passo-Passo.

Ma cmq,
di solito per attuare una movimentazione meccanica con azionamento idraulico ti basta chiudere il loop con PI.
il segnale di feedback per la lettura della posizione da dove ti proviene? è analogico o digitale?
quale è la velocità max con cui il sistema si sposta?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: PID assi idraulici

Postby darko3sc » 18 Apr 2015, 14:07

Buongiorno Ing...
beh non è un problema di distanze...Agrigento, e Cammarata in particolare, per essere città dalle dimensioni modeste, devo dire che sono abbastanza sviluppate... però nei paraggi purtroppo non c'è nessun laboratorio di fisica nucleare! :lol: :lol:
al massimo c'è l'oratorio... :D
Quindi, diciamo, i mezzi e le strutture disponibili ( e soprattutto quelle non disponibili), influenzano pesantemente l'evoluzione personale e professionale dell'individuo...io che ho sempre amato fisica generale, astronomica, nucleare...sistemi di propulsione spaziale... A.I. ...controlli di processi... ecc...dove avrei dovuto praticarli?e poi le scuole sono altresì influenzate da questi aspetti, riducendo lo studente ad aspirare professionalmente al semplice operaio elettronico o simile...
Comunque siamo forse troppo off topic...ed il discorso sarebbe lungo!
Tornando a noi...forse per la fretta non ha letto bene i miei post precedenti dove è spiegato il sistema...
ricapitolanto abbiamo due attuatori oleodinamici gestiti da servoproporzionali di portata ( e qualche altra valvola on off di regolazione flusso), che effettuano una corsa di circa 150 mm ad una velocita di 50 mm /sec in veloce e 10 mm / sec in lento. Tale movimento dei due assi y1 ed y2 deve essere il più possibile sincronizzato, ed è ammesso un disassamento massimo durante la corsa di 10 mm...e la quota finale deve essere raggiunta da entrambi gli assi con precisione al decimo...
i miei dubbi sono sull'implementazione in C di un profilo trapezoidale di accelerazione e decelerazione ( nel post precedente le ho esposto come penso che si proceda).
Poi il sincronismo viene gestito con set point (quota da raggiungere comprensiva di rampe) inviata ad y1 trattato come asse master e poi y2 con loop sul master (quindi funzione master-slave).
ho mia figlia in braccio quindi non so se sono stato chairo a scrivere, ma se rileggete i miei precedenti post ,li penso di essere stato più chiaro!
Ciao
Dario
darko3sc
 
Posts: 12
Joined: 25 Jun 2014, 11:14
Location: Cammarata (AG)

Re: PID assi idraulici

Postby Leonardo » 18 Apr 2015, 14:25

darko3sc wrote:Toc Toc.....c'è nessuno?!
Comunque...gia che ci siamo...le rampe di accelerazione e decelerazione agli assi, essendo penso una funzione nel dominio del tempo del tipo x(t)=quota(t), in che modo si implementa in C ? Sarà qualcosa del tipo:
all'istante x = quota y
all'istante x+1 = quota y+1
all'istante x+2 = quota y+2
eccetera finche quota attuale >= quota desiderata ? prendendo come riferimento un timer interno e incrementando la quota y via via di piu in fase di accelerazione e, appena sono ad esempio a 30 mm dalla quota desiderata inizio a diminuire l'incremento di y sempre piu man mano che mi avvicino e la raggiungo?
Spero di essere stato chiaro...eventualmente lo espongo in pseudo C...
Attendo vostri lumi!
ciao


Ciao Dario,

Che attuatori utilizzi?

Se utilizzi dei motori passo passo implementare una rampa di accelerazione trapezoidale non è così banale, su un micro è generalmente necessario poi approssimare l'operazione di radice quadrata tramite lo sviluppo di Taylor (ho ottenuto buoni risultati in passato con uno sviluppo del secondo ordine).

Nel caso gli attuatori siano passo-passo ti segnalo l'articolo "Generate stepper-motor speed profiles in real time" così come l'AN AVR446 col relativo codice che puoi reperire in rete.

Leonardo
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: PID assi idraulici

Postby deluca » 18 Apr 2015, 15:22

@Leo,
gli attuatori sono pistoni oleodinamici,
ci sta una pompa idraulica che immette olio nei pistoni, e valvole proporzionali regolano la portata e quindi la velocità.

@Dario: "per decidere l'algoritmo da implementare in C per la generazione delle rampe, dobbiamo sapere che tipo di sensore abbiamo per leggere la posizione che assume il pistone man mano che si sposta"..... c'è un sensore, giusto?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: PID assi idraulici

Postby darko3sc » 18 Apr 2015, 16:02

Si sono pistoni oleodinamici e come dicevo prima sono movimentate dal fluido oleodinamico che vi viene immesso per mezzo di servovalvole proporzionali che ne regolano la portata e quindi la velocità tramite segnali in tensione +/-10 v quindi da 0 a +10 v i pistoni salgono da 0 a -10 v il pistone scende....
ne avevamo parlato in un topic dell'anno scorso ma poi ho accantonato il progetto per studiare i micro...http://www.delucagiovanni.com/public/phpbb3/viewtopic.php?f=4&t=791
I sensori sono due righe ottiche incrementali di cui non ho scheda tecnica...ma al limite le cambio...
nel post precedente avevo accennato su come pensavo di fare...potete dargli un occhiata per vedere se in linea di principio è giusto?
grazie a tutti della collaborazione!
@Leo: veramente cosi ad occhio ritenevo più facile tutto il discorso se gli attuatori fossero degli stepper, perché credo che pilotandoli tramite gli appositi driver che accettano segnali step dir,o addirittura alcuni driver segnali +/-10v , sarebbe più facile gestirli per via della risposta un po più fedele rispetto ad un circuito la cui forza motrice è olio ad alta pressione!
Ciao

Dario
darko3sc
 
Posts: 12
Joined: 25 Jun 2014, 11:14
Location: Cammarata (AG)

Re: PID assi idraulici

Postby Leonardo » 18 Apr 2015, 16:27

Non ho esperienza con oleodinamica, ad ogni modo se puoi imporre direttamente la velocità il problema sembrerebbe semplificarsi parecchio.

Sei già riuscito ad interfacciarti col driver dei pistoni idraulici con un DAC?

Con gli stepper si può imporre la posizione tramite impulsi e realizzare la rampa di accelerazione lineare diventa più complesso. E' anche vero che esistono driver di motion control che implementano tutti i calcoli dietro le quinte..
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: PID assi idraulici

Postby darko3sc » 18 Apr 2015, 19:25

Scusami se dico una castroneria: ma se consideriamo ad es. degli stepper pilotati per mezzo di un driver step/dir i cui ingressi vengono generati da un microcontrollore tramite pwm su cui vario opportunamente il duty cicle relativo all'onda quadra generata...non basta per creare profili di rampa?! diciamo che non ho mai avuto di queste necessita, anche perché sto costruendo una cnc per taglio plasma da 3000mm x 2000mm motorizzata da stepper da 5Nm pilotati da driver step/dir da 6A/fase il tutto gestito da Mach3...pero in futuro potrei creare un controllo per utilizzarla in remoto, e li avrei bisogno di rampe e quant'altro!
Tornando al discorso Madre...Non mi sono interfacciato direttamente con i driver dei pistoni semplicemente perché è una macchina utensile che utilizzo tutti i giorni a lavoro e non posso fermarla per giocarci... :lol:
Comunque li non ci sono problemi, anche perché il discorso è semplice :0/10v sale...0/-10v scende...più tensione do più veloce vanno! L'anno scorso si è guastata questa macchina, e dopo che i tecnici non ci hanno capito un c***o su come farla andare...li ho congedati e me ne sono occupato io...dopo un paio di giorni di smontarla pezzo per pezzo...ho trovato la valvola guasta e l'ho riparata con la modica cifra di...5 euro! contro 2000 che hanno voluto i tecnici senza trovare il guasto!nel frattempo ho testato le servovalvole con i relativi driver con un alimentatore da laboratorio e due potenziometri...e le valvole rispondevano come previsto...quindi non è un problema interfacciarsi!
Quello che in definitiva mi chiedevo era se è corretto tutto cio:
come si potrebbe affrontare il discorso della sincronizzazione dei due attuatori tenendo conto che:
-entrambi devono raggiungere una quota x (sicuramente tramite opportuna rampa di velocita')
-la corsa deve essere parallela
SOLUZIONI:
Se do un riferimento di quota uguale ad entrambi gli assi, ciascuno dei quali ha un controllo di posizione in anello chiuso ( PI o PID), la quota finale, penso, verrà raggiunta correttamente ma durante la corsa non ho certezza del parallellismo( disassamento massimo 10 mm).
Quindi ipotizzando di assumere y1 come master e y2 come slave, do il setpoint ad entrambi e poi y2 lo chiudo ulteriormente con loop in posizione sempre con PID sul master? Oppure do il setpoint solo al master e lo slave tramite loop lo segue?
la velocita degli assi sara di circa 100 mm/s in rapido e 10 mm/s in lento.
voi di solito come effettuate un controllo del genere?

le rampe di accelerazione e decelerazione agli assi, essendo penso una funzione nel dominio del tempo del tipo x(t)=quota(t), in che modo si implementa in C ? Sarà qualcosa del tipo:
all'istante x = quota y
all'istante x+1 = quota y+1
all'istante x+2 = quota y+2
eccetera finche quota attuale >= quota desiderata ? prendendo come riferimento un timer interno e incrementando la quota y via via di piu in fase di accelerazione e, appena sono ad esempio a 30 mm dalla quota desiderata inizio a diminuire l'incremento di y sempre piu man mano che mi avvicino e la raggiungo?

secondo me in tutto cio, che siano pistoni oleodinamici o altro che possa essere cmandato da un a tensione proporzionale il discorso non cambia...il punto è qual è l'approccio da seguire!
ciao e buona serata!
darko3sc
 
Posts: 12
Joined: 25 Jun 2014, 11:14
Location: Cammarata (AG)

Re: PID assi idraulici

Postby Leonardo » 18 Apr 2015, 20:13

Per quanto riguarda il passo-passo col PWM non vai molto lontano se vuoi ottenere una rampa di accelerazione uniforme.

Per sincronizzare i due attuatori la tua ipotesi sembra plausibile, non ho mai fatto qualcosa di questo tipo e dovresti iniziare a fare simulazioni se disponi del modello del sistema (es. con Matlab)

Per quanto riguarda le rampe di accelerazione così hai velocità costante mentre se vuoi accelerazione costante la velocità deve incrementare, quota y deve essere aggiornata ad ogni istante successivo e non riferirsi sempre a quella dell'istante x.

Ciao
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: PID assi idraulici

Postby deluca » 18 Apr 2015, 20:30

allora darko,
per prima cosa devi implementare un controllo PID/PI di velocità.
configurandolo opportunemente, lo stesso pid ti servirà come PID di posizione quando sarai alla fine della rampa di decelerazione..... poi ti spiego come calcolare le rampe.

quindi ad ogni sample_time, generato con un timer, (diciamo ad ogni 10msec) calcola il delta_position


- sai come implementare in FW un PID a tempo discreto?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: PID assi idraulici

Postby darko3sc » 18 Apr 2015, 22:57

@ Leo: per gli stepper poi ne riparliamo...
Per quanto riguarda le rampe di accelerazione così hai velocità costante mentre se vuoi accelerazione costante la velocità deve incrementare, quota y deve essere aggiornata ad ogni istante successivo e non riferirsi sempre a quella dell'istante x
infatti dicevo all'istante x+1, x+2, x+3, x+4,x ecc aumento la quota y+1, y+3, y+6, y+10, ecc fina a fine rampa in cui y segue l'andamento di x e quindi a velocità costante...
dovresti iniziare a fare simulazioni se disponi del modello del sistema (es. con Matlab)
e come si ricava il modello di una macchina utensile?!?! sul manuale mi sa che non ce sta!!! :lol: :lol:

per prima cosa devi implementare un controllo PID/PI di velocità.
configurandolo opportunemente, lo stesso pid ti servirà come PID di posizione quando sarai alla fine della rampa di decelerazione
suppongo significhi che alla fine della rampa di decelerazione la velocità diminuisca man mano ci avviciniamo alla quota voluta,fermandosi una volta raggiunta, trasformandosi praticamente in un controllo di posizione...giusto?ma perché non farlo direttamente di posizione? ahh forse ho capito...per configurare le rampe!
- sai come implementare in FW un PID a tempo discreto?

:lol: :lol: :lol: :lol: :lol: :lol: :lol:
Mai fatto prima d'ora... :oops: :oops: :oops: :oops:
Ma ho studiato un po l'argomento, dovrebbe essere qualcosa del tipo:
-dichiarazione delle variabili come i coefficienti del pid errori ed altro
-calcolo errore di posizione ( o velocità)
-calcolo azione P =kp* e
-calcolo azione I: I istantaneo=ki*errore ; I=I + I istantaneo
-calcolo azione D = kd * (errore - vecchio errore)
-si sommano le tre azioni corredate di limiti per restare nel range dei valori ammessi dal driver come ingresso, e limiti per non saturare l'azione Integrale...e altro...il tutto a campionatora secondo me anche inferiore ai 10ms...
Mi piacerebbe vedere un esempio di una vostra applicazione anche differente per capire se quello che ho studiato è corretto, o meglio, se ci ho capito bene!
Ma visto che i micro come il 328 hanno adc a più canali, e che quindi le campionature sono ad istanti per forza differenti, questo ritardo innescato riesce ad essere compensato dal pid?quanti cicli macchina e quindi tempo impiega il micro ad effettuare scansione dei due canali e memorizzare le quote dei due assi?
Per la sincronizzazione degli assi forse è opportuno fare un asse master virtuale e far lavorare i due assi reali come slave, in loop sul virtuale...
Grazie Leonardo
Grazie Ing Deluca
Buona serata
Dario.
darko3sc
 
Posts: 12
Joined: 25 Jun 2014, 11:14
Location: Cammarata (AG)

Re: PID assi idraulici

Postby deluca » 19 Apr 2015, 10:34

Ciao Darko,
per darti qualche altra indicazione, ti segnalo questa AN# che ho sviluppato alcuni anni fa per MCS_electronics scritta in Bascom-avr.
http://mcselec.com/index.php?option=com ... &Itemid=57

In pratica devi realizzare un generatore di rampe con profilo trapezoidale...
dando per scontato che gli attuatori si trovino all'istante T=0 alla stessa quota +/- la tolleranza,
l'uscita del generatore di rampa diventa un set per il pid di velocità per entrambi gli attuatori.

Come procedere:
Una volta settata la posizione finale desiderata e letta la posizione attuale, devi calcolare il punto PM che sarà il punto medio del percorso..... intanto prova con un solo attuatore....
-Quindi avrai PM=(P_finale - P_iniziale)/2
-Poi fisserai la velocità massima, e l'accelarazione(incremento lineare per ogni sample-time) che possiamo fissare a 10msec.

ci siamo fin qui?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: PID assi idraulici

Postby Leonardo » 19 Apr 2015, 12:55

Più che modellare l'intera macchina utensile potresti partire dal modello dell'attuatore con un carico fittizio. E' un po da controllista però come approccio e potresti divertirti parecchio con poli e zeri ;)

Il 328 ha ADC a un canale con ingresso multiplexato, come hai intuito si può fare una sola lettura per volta. Si può raggiungere una frequenza di 15ksps. Si può però "barattare" risoluzione per velocità in alcuni casi.

L'ADC ha un clock generalmente compreso tra 50 e 200 KHz, una lettura dura 13 colpi di clock dell'ADC (quindi 200 KHz / 13 = 15 Khz o ksps) a 10 bit di risoluzione.
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma


Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 13 guests

cron