REALIZZAZIONE E CONTROLLO DI UNA STAMPANTE 3D RELATORE: Ing. Daniele Carnevale TorVergata U...

Post on 02-May-2015

219 views 1 download

Transcript of REALIZZAZIONE E CONTROLLO DI UNA STAMPANTE 3D RELATORE: Ing. Daniele Carnevale TorVergata U...

REALIZZAZIONE E CONTROLLO DI UNA

STAMPANTE 3D

RELATORE:Ing. Daniele Carnevale

TorVergata U

CANDIDATO:Danilo Diaferia

La stampante 3DLa stampante 3D è un robot capace di stampare oggetti tridimensionali.

I prototipi1) stampante Rep Rap (figura 1)2) Stampante Galileo

Obiettivo:Realizzare un robot versatile, capace di cambiare funzionalità in base all’end effector.

Figura 1

Ingombranti e costose.

(1) IntroduzionePag. 1/28

Il robot realizzatoIl robot realizzato è un manipolatore a tre gradi di libertà, in cui tutte le coppie sonoprismatiche.

La struttura è composta da1) Piano di lavoro

Figura 1

(1) Struttura portantePag. 2/28

Il robot realizzatoIl robot realizzato è un manipolatore a tre gradi di libertà, in cui tutte le coppie sonoprismatiche.

La struttura è composta da1) Piano di lavoro2) Tre coppie prismatiche, movimenti x,y,z

x

y

y z

zxy

1

2

3

45

67

Figura 1

(1) Struttura portantePag. 2/28

Nomenclatura coppia prismaticaLa coppia prismatica è composta da due o piu membri, che realizzano un modo relativo puramente traslazionale

Realizzazione1) membri 1,2 aste in alluminio a profilo circolare2) membro 3, in plexiglass, presenta due fori3) facile da realizzare, moto traslazionale

traslazione del carrello

2

1

3

Rn

RnRn

Rn

(Figura 2)

(1) Coppie prismatichePag. 3/28

Azionamento elettricoAl fine muovere elettronicamente la coppia sono necessari: motore, cinghia e puleggia.

Il funzionamentoRotazione albero motore -> traslazione della cinghia -> traslazione del carrello soli-dale alla cinghia.

PuleggiaRuota dentata

Motore

1

2

Carrello

X

Cinghia (Figura 3)

(1) Coppie prismatichePag. 4/28

(Figura 4)

(1) Il robot realizzatoPag. 5/28

Hardware

(2) Hardware

Scheda elettrica dedicata1) pilotaggio motori2) gestione dei segnali di controllo

(Figura 5)

(2) Azionamento elettricoPag. 6/28

Il ponte HAzionamento di un motore tramite segnali digitali:1) enable -> abilitazione ponte2) In1,In2 -> gestione verso rotazione

InverterRisparmio segnali microcontrollore.

(Figura 6)

Motore DCStepper

step.h

(2) Azionamento elettricoPag. 7/28

Rotore1) due ruote dentate di polarità opposta2) corrispondenza dente-valle

Statore3) quattro poli elettromagnetici4) collegamento in serie di poli opposti

-> 2 avvolgimenti all’esterno (A,B)

(Figura 7)

(2) Motori passo passoPag. 8/28

RotazioneOgni volta che si alimenta un polo elettromagnetico il dente più vicino al polo viene attirato generando una rotazione, nel nostro caso 1.8 [gradi]. Per ottenere la rotazione basta eccitare i poli magnetici in:1) Ordine crescente -> verso orario2) Ordine decrescente -> verso antiorario

Sequenza di rotazioneLa sequenza in cui devono essere polarizzati i due avvolgimenti (A e B) esterni è:3) A-B-A*-B* senso orario4) B*-A*-B-A senso antiorario Controllo stepper

A B A* B*

(Figura 9)

(2) Motori passo passoPag. 9/28

Rotazione1) Ve>0, rotazione oraria2) Ve<0, rotazione antioraria

Sistema a ciclo chiuso con controllore proporzionale di tipo 1

(2) Motore DCPag. 10/28

Tipo\u u(t)=c u(t)=t u(t)=t²/2

0 E0≠0 infinito infinito

1 nullo E1≠0 Infinito

2 nullo nullo E2≠0

Motore 1s

Ve w θ

(Figura 10)

Controllo

(3) Controllo

Controllo1) due stepper2) un motore DC

ObiettivoRealizzare un controllo che assicuri:3) precisione nel raggiungimento della posizione desiderata4) astatismo ai disturbi

(3) ControlloPag. 11/28

Esecuzione di un passoQuesta funzione di occupa di alimentare correttamente gli avvolgimenti dello stepper al fine di eseguire un singolo passo.

1. void passo1(String verso){2. if (verso=="avanti") polo1++;3. if (verso=="indietro") polo1--;4. if (avvolgimento1==4) polo1=0;5. if (avvolgimento1==-1) polo1=3;6. 7. if (avvolgimento1==0){8. digitalWrite(In12m1,HIGH); //abilito prima avvolgimento in fase9. digitalWrite(Enable1A,HIGH);} . .

(3) Esecuzione di un passoPag. 12/28

1. void passo1(String verso){2. if (verso=="avanti") polo1++;3. if (verso=="indietro") polo1--;4. if (avvolgimento1==4) polo1=0;5. if (avvolgimento1==-1) polo1=3;6. 7. if (avvolgimento1==0){8. digitalWrite(In12m1,HIGH); //abilito prima avvolgimento in fase9. digitalWrite(Enable1A,HIGH);} . . Nella prima parte si decide quale dei quattro poli magnetici

deve essere eccitato al fine di ottenere la rotazione nel verso desiderato.

La variablie globale polo1=0,1,2,3 ricorda l'ultimo polo magnetico eccitato consentendo di sceglie il successivo.

(3) Esecuzione di un passoPag. 12/28

Esecuzione di un passoQuesta funzione di occupa di alimentare correttamente gli avvolgimenti dello stepper al fine di eseguire un singolo passo.

1. void passo1(String verso){2. if (verso=="avanti") polo1++;3. if (verso=="indietro") polo1--;4. if (avvolgimento1==4) polo1=0;5. if (avvolgimento1==-1) polo1=3;6. 7. if (avvolgimento1==0){8. digitalWrite(In12m1,HIGH); //abilito prima avvolgimento in fase9. digitalWrite(Enable1A,HIGH);} . .

Nella seconda parte invece, in base al polo magnetico da eccitare si abilita effettivamente il ponte h corrispettivo, indicando la polarizzazione della bobina.

Gestione ritardo:Al termine della funzione bisognerebbe effettuare un ritardo di qualche ms per consentire al motore di effettuare il passo, ma tale operazione viene svolta successivamente in modo unico per tutti i motori.

(3) Esecuzione di un passoPag. 12/28

Esecuzione di un passoQuesta funzione di occupa di alimentare correttamente gli avvolgimenti dello stepper al fine di eseguire un singolo passo.

RitardoIl ritardo è unico per tutti i motori evitando variazioni della velocità.

Funzione ritardoIl ritardo viene controllato con millis() lasciando libera la loop() di controllare il motore DC.

E>0, npassi0++, fare un singolo passo avanti

E<0, npassi0--, fare un singolo passo indietro

E= npassi - npassi0

ritardo

(3) Controllo StepperPag. 13/28

Il controllo: •e > 0 : impostare velocità positiva, • e < 0: impostare velocità negativa, • e = 0: la velocità è nulla, posizione desiderata raggiunta.

Anti Dead Zone:E’ il minimo valore di tensione (o meglio duty cycle) che bisogna applicare al motore per vincere l'attrito statico e consentire il moto.

If (|e| < ControlDeadzone) u = 0;

e= nencoder – nencoder0Pos;u = Kp*e;

u = abs(u)+Dead Zone

(3) Controllo proporzionale DC

Pag. 14/28

Control dead zone:Raggiunta la posizione desiderata a causa di disturbi che simulano un errore si continua ad alimentare il motore. Per ovviare a questo problema se (|e| < ControlDeadzone

(Eq 1)

Attrito tra rotore e statore:

(3) Controllo proporzionale DC

Pag. 14/28

If (|e| < ControlDeadzone) u = 0;

e= nencoder – nencoder0Pos;u = Kp*e;

u = abs(u)+Dead Zone

Control dead zone:Raggiunta la posizione desiderata a causa di disturbi che simulano un errore si continua ad alimentare il motore. Per ovviare a questo problema se (|e| < ControlDeadzone

Anti Dead Zone:E’ il minimo valore di tensione (o meglio duty cycle) che bisogna applicare al motore per vincere l'attrito statico e consentire il moto.

(Figura 11)

Perché usare un controllore PID:Il PID può essere impiegato anche se non si conosce la funzione di trasferimento del processo.

Azioni del PID:Il PID si basa su tre azioni: proporzionale, integrale e derivativa.

Risultati:Il controllo ottenuto con un PID rispetto al proporzionale è:1) sperimentalmente più preciso (piccoli spostamenti, sovraelongazione ridotta)2) astatico ai disturbi costanti tra C(s) e P(s)3) errore nullo a regime permanente per ingressi a rampa

(3) Controllo PIDPag. 15/28

(3) SovraelongazionePag. 16/28

Azione di compensazione dell’errore, riduzione sovraelongazione intorno alla

posizione finale.

Azione derivata:

Mφ aumenta S = f(ξ) = sin( ψ)=f(M φ)

(rete anticipatrice)

(Figura 15)

sin(ψ)=ξψ

Decadimento sovraelongazione S

Approssimato

(3) IntegralePag. 17/28

Azione integrale: Astatismo del sistema a ciclo chiuso a disturbi costanti tra C(s) e P(s), grazie al polo

in s=0 di C(s)

Sistema a ciclo chiuso di tipo 2

Tipo\u u(t)=c u(t)=t u(t)=t²/2

0 E0≠0 infinito infinito

1 nullo E1≠0 Infinito

2 nullo nullo E2≠0

Il controllore non realizzabile perche C(s) non è una funzione propria.

Il controllore PID(k) è conforme al linguaggio dell’Arduino.

Il controllore a tempo discreto PID(z) si ottiene con il metodo indiretto:

Antitrasformata:

(Eq 9)

(Eq 10)

(Eq 11)

(Eq 12)

Approssimazione con un metodo che preservi la stabilità, ad esempio Tustin

(3) Realizzazione PIDPag. 18/28

determinazione delle variabili di giunto

determinazione dei passi/passi encoder

raggiungere una posizione (x,y,z)

Cinematica inversa

Passo traslazione/passo motore

Controllo

raggiungimento dei passi/passi encoder

(3) Cinematica del robotPag. 19/28

(Figura 14)

3

2

1

z

Precisione motori passo passo:θs=1.8 [gradi]=cost, d=8mm -> ∆z =d/2*θs = 0.1265 ≈ 1/8 [mm/passo]

∆σ

∆x = d/2 *∆θ

d/2

Ruota dentata

(Figura 13)

(3) Passo di traslazionePag. 20/28

Stampa

(4) Stampa

ObiettivoPer valutare l’affidabilità della struttura meccanica realizzata e la bontà del controllo software si creano delle funzioni di stampa che avvicinano il robot ai possibili impieghi di:• stampante 3D• fresa automatica.

Test affidabilità struttura meccanica realizzata

Bontà del controllo software

Funzioni di stampa

(4) StampaPag. 21/28

Perché il cerchio:Complicato per un robot cartesiano (movimenti lineari).

theta+=Delta_theta

X=r*cos(theta);Y=r*cos(theta);

controllo

Coordinate polari:La funzione proposta si basa sull'uso delle coordinante polari, incrementando l'angolo theta di Delta_theta per ogni iterazione.

(4) Stampa cerchioPag. 22/28

Test funzione1) Asse xy: motore DC e stepper, linea frastagliata2) Asse xz: stepper e stepper, linea omogenea

(Figura 15)

(4) Stampa cerchioPag. 23/28

∆ѳ=3 mm ∆ѳ=1 mm

(Figura 16)

x

y

x

z

(4) Stampa testoPag. 24/28

Obiettivo:Si vuole stampare un immagine di testo ovvero un immagine bicolore ove il bianco rappresenta zone vuote e il colore rappresenta il testo da stampare.

Soluzione1) preparazione dati2) conversione pixel posizioni e stampa

(4) Stampa testoPag. 25/28

Preparazione dati:

Immagine JPG

File con sequenza di pixel p1, p2

Vettore di pixel per arduino

Pixel p1,p2 per ogni linea di ogni colonna

Trasformazione file in vettore

(Figura 16)

p1p2

(4) Stampa testoPag. 25/28

Preparazione dati:

Immagine JPG

File con sequenza di pixel p1, p2

Vettore di pixel per arduino

Pixel p1,p2 per ogni linea di ogni colonna

Trasformazione file in vettore

(Figura 16)

(4) Stampa testoPag. 26/28

ObiettivoSi vuole stampare un immagine di testo ovvero un immagine bicolore ove il bianco rappresenta zone vuote e il colore rappresenta il testo da stampare.

Soluzione1) preparazione dati2) conversione pixel-posizioni e stampa

Raggiungere la posizione p1=f(p1)

Raggiungere la posizione p2=f(p2)

Tracciamento linea Abbassare l’effettore

Alzare l’effettore

(Figura 17)

(4) Stampa testoPag. 27/28

ObiettivoSi vuole stampare un immagine di testo ovvero un immagine bicolore ove il bianco rappresenta zone vuote e il colore rappresenta il testo da stampare.

Soluzione1) preparazione dati2) conversione pixel-posizioni e stampa

Risultato ottenuto

Conclusioni:

1) Realizzazione della struttura meccanica e dell’azionamento elettrico

2) Studio cinematica del robot

3) Sistema di controllo per 2 motori passo passo e per un motore DC (P,PID)

4) Software per riconoscimento e stampa di immagini di testo 2D

(5) ConclusioniPag. 28/28

Grazie per l’attenzione