U TorVergata
REALIZZAZIONE E CONTROLLO
DI UNA STAMPANTE 3D
RELATORE:
Ing. Daniele Carnevale
CANDIDATO:
Danilo Diaferia
(1) Introduzione
Pag. 1/28
La stampante 3D
La stampante 3D è un robot capace di stampare oggetti tridimensionali.
I prototipi
Ingombranti e costose.
1) stampante Rep Rap (figura 1)
2) Stampante Galileo
Obiettivo:
Realizzare un robot versatile,
capace di cambiare
funzionalità in base all’end effector.
Figura 1
Pag. 2/28
(1) Struttura portante
Il robot realizzato
Il robot realizzato è un manipolatore a tre gradi di libertà, in cui tutte le coppie sono
prismatiche.
La struttura è composta da
1) Piano di lavoro
Figura 1
Pag. 2/28
(1) Struttura portante
Il robot realizzato
Il robot realizzato è un manipolatore a tre gradi di libertà, in cui tutte le coppie sono
prismatiche.
La struttura è composta da
x
1) Piano di lavoro
2) Tre coppie prismatiche, movimenti x,y,z
4
5
y
2
y 3
1
7
6
z
z
y
x
Figura 1
Pag. 3/28
(1) Coppie prismatiche
Nomenclatura coppia prismatica
La coppia prismatica è composta da due o piu membri, che realizzano un modo relativo
puramente traslazionale
Realizzazione
1) membri 1,2 aste in alluminio a profilo circolare
2) membro 3, in plexiglass, presenta due fori
3) facile da realizzare, moto traslazionale
Rn
Rn
3
Rn
1
Rn
2
traslazione del carrello
(Figura 2)
(1) Coppie prismatiche
Pag. 4/28
Azionamento elettrico
Al fine muovere elettronicamente la coppia sono necessari:
motore, cinghia e puleggia.
Il funzionamento
Rotazione albero motore -> traslazione della cinghia -> traslazione del carrello solidale alla cinghia.
X
2
Ruota dentata
Puleggia
Motore
Cinghia
1
Carrello
(Figura 3)
Pag. 5/28
(1) Il robot realizzato
(Figura 4)
(2) Hardware
Hardware
Pag. 6/28
(2) Azionamento elettrico
Scheda elettrica dedicata
1)
2)
pilotaggio motori
gestione dei segnali di controllo
(Figura 5)
(2) Azionamento elettrico
Pag. 7/28
Il ponte H
Azionamento di un motore tramite segnali digitali:
1) enable -> abilitazione ponte
Stepper
2) In1,In2 -> gestione verso rotazione
Inverter
Risparmio segnali microcontrollore.
step.h
(Figura 6)
Motore DC
(2) Motori passo passo
Pag. 8/28
Rotore
1) due ruote dentate di polarità opposta
2) corrispondenza dente-valle
Statore
1) quattro poli elettromagnetici
2) collegamento in serie di poli opposti
-> 2 avvolgimenti all’esterno (A,B)
(Figura 7)
(2) Motori passo passo
Pag. 9/28
Rotazione
Ogni 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 orario
2) Ordine decrescente -> verso antiorario
Sequenza di rotazione
La sequenza in cui devono essere polarizzati i due avvolgimenti (A e B) esterni è:
1) A-B-A*-B* senso orario
Controllo stepper
2) B*-A*-B-A senso antiorario
A
B
A*
(Figura 9)
B*
(2) Motore DC
Pag. 10/28
Rotazione
1) Ve>0, rotazione oraria
2) Ve<0, rotazione antioraria
Ve
Motore
w
1
s
(Figura 10)
Sistema a ciclo chiuso con controllore proporzionale di tipo 1
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
θ
(3) Controllo
Controllo
Pag. 11/28
(3) Controllo
Controllo
1) due stepper
2) un motore DC
Obiettivo
Realizzare un controllo che assicuri:
1) precisione nel raggiungimento della posizione desiderata
2) astatismo ai disturbi
Pag. 12/28
(3) Esecuzione di un passo
Esecuzione di un passo
Questa 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 fase
9. digitalWrite(Enable1A,HIGH);}
.
.
Pag. 12/28
(3) Esecuzione di un passo
Esecuzione di un passo
Questa 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 fase
9. 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.
Pag. 12/28
(3) Esecuzione di un passo
Esecuzione di un passo
Questa funzione di occupa di alimentare correttamente gli avvolgimenti dello stepper
al fine di eseguire un singolo passo.
Nella seconda parte invece, in base al polo magnetico da
1. void passo1(String verso){
eccitare si abilita effettivamente il ponte h corrispettivo,
2. if (verso=="avanti") polo1++;
3. if (verso=="indietro") indicando
polo1--; la polarizzazione della bobina.
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 fase
9. digitalWrite(Enable1A,HIGH);}
.
.
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) Controllo Stepper
Pag. 13/28
E= npassi - npassi0
E>0, npassi0++, fare un
singolo passo avanti
Ritardo
E<0, npassi0--, fare un
singolo passo indietro
Il ritardo è unico per tutti i motori
evitando variazioni della velocità.
Funzione ritardo
ritardo
Il ritardo viene controllato con millis()
lasciando libera la loop() di controllare
il motore DC.
Pag. 14/28
(3) Controllo proporzionale DC
Il controllo:
•e > 0 : impostare velocità positiva,
• e < 0: impostare velocità negativa,
• e = 0: la velocità è nulla, posizione
desiderata raggiunta.
e= nencoder – nencoder0Pos;
u = Kp*e;
u = abs(u)+Dead Zone
If (|e| < ControlDeadzone)
u = 0;
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.
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
Pag. 14/28
(3) Controllo proporzionale DC
Attrito tra rotore e statore:
(Eq 1)
e= nencoder – nencoder0Pos;
u = Kp*e;
u = abs(u)+Dead Zone
If (|e| < ControlDeadzone)
u = 0;
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.
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
Pag. 15/28
(3) Controllo PID
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
(Figura 11)
Pag. 16/28
(3) Sovraelongazione
Azione derivata:
Azione di compensazione dell’errore,
riduzione sovraelongazione intorno alla
posizione finale.
S = f(ξ) =
sin( ψ)=f(M φ)
Mφ aumenta
Approssimato
(rete
anticipatrice)
ψ
Decadimento
sovraelongazione S
(Figura 15)
sin(ψ)=ξ
(3) Integrale
Pag. 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
Pag. 18/28
(3) Realizzazione PID
Il controllore a tempo discreto PID(z) si ottiene con il metodo indiretto:
(Eq 9)
Il controllore non realizzabile perche C(s)
non è una funzione propria.
(Eq 10)
Approssimazione con un metodo che
preservi la stabilità, ad esempio Tustin
(Eq 11)
Antitrasformata:
(Eq 12)
Il controllore PID(k) è conforme al linguaggio dell’Arduino.
Pag. 19/28
(3) Cinematica del robot
raggiungere una posizione (x,y,z)
Cinematica inversa
determinazione delle variabili di giunto
Passo traslazione/passo motore
z
determinazione dei passi/passi encoder
Controllo
1
raggiungimento dei passi/passi encoder
2
3
(Figura 14)
Pag. 20/28
(3) Passo di traslazione
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)
(4) Stampa
Stampa
Pag. 21/28
(4) Stampa
Obiettivo
Per 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
Test affidabilità struttura
impieghi di:
realizzata
• stampantemeccanica
3D
Funzioni di stampa
• fresa automatica.
Bontà del controllo
software
(4) Stampa cerchio
Pag. 22/28
Perché il cerchio:
Complicato per un robot cartesiano (movimenti lineari).
X=r*cos(theta);
Y=r*cos(theta);
theta+=Delta_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 cerchio
Pag. 23/28
Test funzione
1) Asse xy: motore DC e stepper, linea frastagliata
2) Asse xz: stepper e stepper,
linea omogenea
y
z
x
∆ѳ=3 mm
(Figura 15)
x
∆ѳ=1 mm
(Figura 16)
Pag. 24/28
(4) Stampa testo
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.
Soluzione
1) preparazione dati
2) conversione pixel posizioni e stampa
(4) Stampa testo
Pag. 25/28
Preparazione dati:
Immagine JPG
Pixel p1,p2 per ogni
linea di ogni colonna
File con sequenza di
pixel p1, p2
p1
p2
Trasformazione file
in vettore
Vettore di pixel
per arduino
(Figura 16)
(4) Stampa testo
Pag. 25/28
Preparazione dati:
Immagine JPG
Pixel p1,p2 per ogni
linea di ogni colonna
File con sequenza di
pixel p1, p2
Trasformazione file
in vettore
Vettore di pixel
per arduino
(Figura 16)
(4) Stampa testo
Pag. 26/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.
Soluzione
1) preparazione dati
2) conversione pixel-posizioni e stampa
Raggiungere la
posizione p1=f(p1)
Tracciamento linea
Abbassare l’effettore
Raggiungere la
posizione p2=f(p2)
Alzare l’effettore
(4) Stampa testo
Pag. 27/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.
Soluzione
1) preparazione dati
2) conversione pixel-posizioni e stampa
Risultato ottenuto
(Figura 17)
Pag. 28/28
(5) Conclusioni
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
Grazie per
l’attenzione