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