Difference between revisions of "Drawbot 3"

From FabLabGenovaWiki
Jump to: navigation, search
(Sviluppo)
Line 2: Line 2:
 
Le modifiche saranno prevalentemente sul lato hardware che era quello che più necessitava di essere rivisto. Sostituiremi i vecchi motori con due piccoli nema 17 da 200 step/giro che saranno pilotati dai nostri ottimi [[Through-hole A3982 Stepper Driver]]. In questo modo aumenteremo di un fattore 8 il numero di step e quindi la precisione ( da 47 a 400 passi per giro con l'half step ). Inoltre la scheda di interfaccia sarà radicalmente diversa, costruita sul concetto di "shield", in modo da poter essere rapidamente costruita e montata direttamente sul rasPi.
 
Le modifiche saranno prevalentemente sul lato hardware che era quello che più necessitava di essere rivisto. Sostituiremi i vecchi motori con due piccoli nema 17 da 200 step/giro che saranno pilotati dai nostri ottimi [[Through-hole A3982 Stepper Driver]]. In questo modo aumenteremo di un fattore 8 il numero di step e quindi la precisione ( da 47 a 400 passi per giro con l'half step ). Inoltre la scheda di interfaccia sarà radicalmente diversa, costruita sul concetto di "shield", in modo da poter essere rapidamente costruita e montata direttamente sul rasPi.
 
Lo stadio di alimentazione sarà esterno e dovrà fornire solamente una tensione a 12 V che verrà poi portata ai 5 V  richiesti per alimentare l'usb del rasPi tramire un LM2596, mentre potrà servire direttamente come tensione di lavoro per i due A3982. Stiamo inoltre implementando una progress-bar fisica e un pulsante "pausa" che si rivelano molto utili nell'utilizzo del drawbot. La meccanica sarà totalmente rivista per "poterlo portare in tasca".  
 
Lo stadio di alimentazione sarà esterno e dovrà fornire solamente una tensione a 12 V che verrà poi portata ai 5 V  richiesti per alimentare l'usb del rasPi tramire un LM2596, mentre potrà servire direttamente come tensione di lavoro per i due A3982. Stiamo inoltre implementando una progress-bar fisica e un pulsante "pausa" che si rivelano molto utili nell'utilizzo del drawbot. La meccanica sarà totalmente rivista per "poterlo portare in tasca".  
==Sviluppo==
+
==Sviluppo Hardware==
 
===Alimentazione===
 
===Alimentazione===
 
La versione precedente del drawbot era alimentato con un ATX che forniva i +/- 12V per i driver e la 5V per il raspberry. Era decisamente esagerato. Ora con i nuovi driver servono solo +12V per i motori e 5V per il RasPi. La soluzione che abbiamo deciso di adottare è di utilizzare è un alimentatore esterno che fornisca 12V per i driver; questa stessa tensione viene poi utilizzata per generare una linea a 5V per il RasPi. La prima soluzione per cui avevamo optato era di utilizzare un LM7805. Questo purtroppo si ritrovava a dover dissipare quasi 7W che erano del tutto insostenibili nello spazio molto ristretto tra shield e RasPi dove si trovava, oltre ad essere uno spreco notevole di potenza. Abbiamo quindi optato per una soluzione switching utilizzando un integrato apposito ( ma facilmente reperibile ) l'[http://www.ti.com/lit/ds/symlink/lm2596.pdf LM2595], che ci è stato fornito dalla Texas Instruments come campione. Questo fornisce tutto quello che serve per realizzare un convertitore DC-DC di tipo [http://it.wikipedia.org/wiki/Convertitore_buck Buck]; per il dimensionamento dei componenti esterni abbiamo semplicemente fatto riferimento al datasheet ( molto dettagliato ) considerando una corrente massima di circa 2A. Al momento stiamo utilizzando questa configurazione:
 
La versione precedente del drawbot era alimentato con un ATX che forniva i +/- 12V per i driver e la 5V per il raspberry. Era decisamente esagerato. Ora con i nuovi driver servono solo +12V per i motori e 5V per il RasPi. La soluzione che abbiamo deciso di adottare è di utilizzare è un alimentatore esterno che fornisca 12V per i driver; questa stessa tensione viene poi utilizzata per generare una linea a 5V per il RasPi. La prima soluzione per cui avevamo optato era di utilizzare un LM7805. Questo purtroppo si ritrovava a dover dissipare quasi 7W che erano del tutto insostenibili nello spazio molto ristretto tra shield e RasPi dove si trovava, oltre ad essere uno spreco notevole di potenza. Abbiamo quindi optato per una soluzione switching utilizzando un integrato apposito ( ma facilmente reperibile ) l'[http://www.ti.com/lit/ds/symlink/lm2596.pdf LM2595], che ci è stato fornito dalla Texas Instruments come campione. Questo fornisce tutto quello che serve per realizzare un convertitore DC-DC di tipo [http://it.wikipedia.org/wiki/Convertitore_buck Buck]; per il dimensionamento dei componenti esterni abbiamo semplicemente fatto riferimento al datasheet ( molto dettagliato ) considerando una corrente massima di circa 2A. Al momento stiamo utilizzando questa configurazione:
Line 59: Line 59:
 
Sul lato software l'implementazione è molto semplice grazie alle funzioni per la gestione del PWM implementate in RPi.GPIO.
 
Sul lato software l'implementazione è molto semplice grazie alle funzioni per la gestione del PWM implementate in RPi.GPIO.
  
==Versione attuale==
+
===Versione attuale===
 
Attualmente il drawbot è in funzione in una versione semi-definitiva, costutuita da un raspi, una scheda di interfaccia, e i due stepper driver tutto impilato. I motori sono dei nema17 riciclati
 
Attualmente il drawbot è in funzione in una versione semi-definitiva, costutuita da un raspi, una scheda di interfaccia, e i due stepper driver tutto impilato. I motori sono dei nema17 riciclati
 
da qualche parte che fanno il loro con 400step/giro in half-step. Le pulegge sono tornite in delrin ( qualsiasi plastica va benone ) e montate a pressione sugli assi dei motori. Come elemento di trasmissione abbiamo usato una lenza di nylon sottile ( 0.4mm ? ), bisogna ricordarsi di arrotolare correttamente le pulegge (una in un senso e l'altra nell'altro ) altrimenti il disegno è distorto
 
da qualche parte che fanno il loro con 400step/giro in half-step. Le pulegge sono tornite in delrin ( qualsiasi plastica va benone ) e montate a pressione sugli assi dei motori. Come elemento di trasmissione abbiamo usato una lenza di nylon sottile ( 0.4mm ? ), bisogna ricordarsi di arrotolare correttamente le pulegge (una in un senso e l'altra nell'altro ) altrimenti il disegno è distorto
o specchiato. Il software è grossomodo quello del drawbot vecchio un po' migliorato [[Software]].
+
o specchiato.
 +
 
 +
<u><b>Qui trovate i file necessari a realizzare i PCB del drawbot, aggioranti 10 Ottobre 2014:
 +
* [[file: Drawbot3_eagle_source.zip]]
 +
* [[file:Drawbot3_schematic.pdf]]  
 +
* [[file:Drawbot3_board.pdf]]</b></u>

Revision as of 09:11, 10 October 2014

Il logo del drawbot 3
Vista la configurazione estremamente instabile ed inadeguata del drawbot 2.0, abbiamo deciso di realizare una terza e definitiva versione del nostro amato drawbot.

Le modifiche saranno prevalentemente sul lato hardware che era quello che più necessitava di essere rivisto. Sostituiremi i vecchi motori con due piccoli nema 17 da 200 step/giro che saranno pilotati dai nostri ottimi Through-hole A3982 Stepper Driver. In questo modo aumenteremo di un fattore 8 il numero di step e quindi la precisione ( da 47 a 400 passi per giro con l'half step ). Inoltre la scheda di interfaccia sarà radicalmente diversa, costruita sul concetto di "shield", in modo da poter essere rapidamente costruita e montata direttamente sul rasPi. Lo stadio di alimentazione sarà esterno e dovrà fornire solamente una tensione a 12 V che verrà poi portata ai 5 V richiesti per alimentare l'usb del rasPi tramire un LM2596, mentre potrà servire direttamente come tensione di lavoro per i due A3982. Stiamo inoltre implementando una progress-bar fisica e un pulsante "pausa" che si rivelano molto utili nell'utilizzo del drawbot. La meccanica sarà totalmente rivista per "poterlo portare in tasca".

Sviluppo Hardware

Alimentazione

La versione precedente del drawbot era alimentato con un ATX che forniva i +/- 12V per i driver e la 5V per il raspberry. Era decisamente esagerato. Ora con i nuovi driver servono solo +12V per i motori e 5V per il RasPi. La soluzione che abbiamo deciso di adottare è di utilizzare è un alimentatore esterno che fornisca 12V per i driver; questa stessa tensione viene poi utilizzata per generare una linea a 5V per il RasPi. La prima soluzione per cui avevamo optato era di utilizzare un LM7805. Questo purtroppo si ritrovava a dover dissipare quasi 7W che erano del tutto insostenibili nello spazio molto ristretto tra shield e RasPi dove si trovava, oltre ad essere uno spreco notevole di potenza. Abbiamo quindi optato per una soluzione switching utilizzando un integrato apposito ( ma facilmente reperibile ) l'LM2595, che ci è stato fornito dalla Texas Instruments come campione. Questo fornisce tutto quello che serve per realizzare un convertitore DC-DC di tipo Buck; per il dimensionamento dei componenti esterni abbiamo semplicemente fatto riferimento al datasheet ( molto dettagliato ) considerando una corrente massima di circa 2A. Al momento stiamo utilizzando questa configurazione:

  • condensatore in ingresso : 330µF 25V
  • condensatore in uscita : 220µF 35V
  • induttanza: ~50µH ( i dati esatti non li so, è stata misurata con uno strumento diy e non aveva etichetta ma sembra funzionare alla grande, il valore teorico è 63µH ) in filo smaltato da 0.5mm per alte correnti.
  • diodo : SR560 ( sicuramente sovradimensionato con i suoi 5A continui ma avendoli in casa… un diodo più adatto sarebbe uno schotty da 3A a scelta )

Il circuito sembra funzionare a dovere, ma per averne conferma pensavo di fare delle prove sotto carico utilizzando una resistenza da 5Ω e 10W, in modo da essere certi che anche sotto sforzo non danneggi il RasPi.

Aggiornamento 13 Marzo 2014

Eseguiti alcuni test sotto sforzo usando delle resistenze corazzate da 6.8Ω ( per questioni di disponibilità ), con i seguenti risultati:

  • con 6.8Ω di carico 350mA di assorbimento su 12.2V in ingresso ( dati presi dallo strumento dell'alimentatore ). Tensione stabile a 5.08V per tutto il test, corrente teorica 0.75A ( perchè dovrebbe essere diversa?! ). Resa 89% - il ds riporta 80% per un carico di 3A quindi ragionevole. In queste condizioni l'integrato scalda ma si mantiene in range ragionevoli per i cinque minuti della prova e sembra stabilizzarsi. Considerando però che è in aria libera mentre verrà inserito in un sandwich di schede nel prototipo, fa riflettere.
  • con 3.4Ω di carico 720mA di assorbimento a 12.2V in ingresso ( come sopra ). Tensione stabile a 5.02V per tutto il test, corrente teorica 1.5A . Resa che scende all'84%. Qua siamo decisamente fuori dal range di potenze ( 7.5W! ) che dovrebbe tirare fuori per dare birra a un raspi, che ok consuma ma non è un saldatore. Detto questo scalda parecchio anche all'aria aperta, e arriva ad essere quasi ustionante al tatto ( ora misuro la temperatura con un LM35 appena ho tempo ). Comunque per 10min di test non molla il colpo e continua a dare in uscita i suoi 5.02V.

Non lo attaccherei ancora al raspi così perchè è un po' instabile ma sono abbastanza convinto che il danno dell'altra volta non sia stato causato da un breakdown dell'alimentatore. E' sicuramente saggio dissipare l'integrato e posizionare una ventolina lì vicino che aiuta un sacco a tenere a bada la temperatura. Da notare che anche il diodo e l'induttanza lì vicini scaldano parecchio, anche se essendo sovradimensionati non temo che cedano prima dell'integrato. Provvederò a comprare un dissipatore che vada bene là in mezzo.

Aggiornamento 14 Marzo 2014

Abbiamo eseguito due stress test sullo stadio di alimentazione, monitorando contemporaneamente la temperatura dell'LM2596 e la tensione in uscita dal circuito. La temperatura è stata monitorata utilizzando un sistema di acquisizione digitale controllato da un RaspberryPi; tale sistema è costituito da una sonda di temperatura LM35 ( precisa fino al quarto di grado e con uscita analogica ) e da un convertitore A/D a 13bit che comunica direttamente con il RasPi tramite un bus SPI ( in particolare abbiamo usato un MCP3301 della Microchip ). Il software lato Raspberry è un semplice script in Python che legge 100 valori dal convertitore, ne fa la media, e scrive il risultato già convertito in gradi centigradi su un file ad intervalli regolari di un secondo. La tensione è stata monitorata semplicemente usando un multimetro digitale e si è mantenuta costante a 5.05V in entrambi i test. I test sono stati svolti nelle seguenti condizioni:

  • Test 1: Vin = 12.2V, Iout = 1.5A. Scheda fuori dal "sandwich" senza dissipatore e senza ventilazione forzata.
  • Test 2: Vin = 12.2V, Iout = 1.5A. Scheda nel "sandwich" ( con una scheda sopra a coprire ) e ventilazione forzata ( ventolino 50mm x 50mm @ 12V )

I risultati sono riportati nel grafico sotto.

Temperature test.jpg

In entrambi i test si è notato un innalzamento della temperatura che tende però a stabilizzarsi ad un valore di sicurezza ( il chip è garantito per funzionare fino a 150°C ). Il secondo test ha evidenziato anche quanto influisca la ventola, che è quindi inserita nel progetto finale. Sarà inoltre aggiunto un piccolo dissipatore in alluminio come ulteriore protezione termica per l'integrato. Come test finale per garantire che l'alimentatore sia adatto a fornire tensione al Raspberry senza danneggiarlo, controllerò la presenza di ripple residui dallo switching ( quindi a circa 150kHz ) con un oscilloscopio. Con questo mi sarò tolto ogni dubbio che sia stato l'alimentatore a danneggiare il microcomputer durante gli ultimi test.

Aggiornamento 10 Ottobre 2014

A seguito di tutti i test svolti e descritti prima, il blocco di alimentazione del drawbot 3 ha raggiunto una forma ottimale, funzionante ( ormai da quasi 5 mesi ) e ampiamente testata di cui di seguito pubblico a cuor leggero sia gli schemi circuitali che i files eagle che permettono di modificare ed editare il progetto. Ci tengo a sottolineare che una ventola è utilissima se non indispensabile al suo buon funzionamento.

Progress Bar

Nell'ottica di realizzare un dispositivo "plug and play", che non necessiti di un computer esterno per funzionare sembrava carino mettere un dispositivo per controllare lo stato di avanzamento anche senza un vero e proprio display. La soluzione scelta è una progress bar costituita da 10 led; Per non sprecare 10 GPIO per farla funzionare, ho deciso di utilizzare un driver apposito che accetta in input una tensione e che in base a questa gestisce 10 led: l'LM3914 ( anche per questo si ringrazia la Texas Instruments ). Il calcolo dei pochi componenti esterni richiesti si fa rapidamente dal datasheet: nel nostro caso la tensione di riferimento è appena al di sotto dei 3.3V ( R2 = 1kΩ, R1 = 680Ω: Vref = 3.1V ). La tensione proporzionale all'avanzamento è generata semplicemente con un pwm su un pin che poi viene livellato tramite una resistenza e un condensatore ( R = 1kΩ, C = 22µF ). Il circuito così realizzato è soddisfacente e produce una progress bar gradevole. Sul lato software l'implementazione è molto semplice grazie alle funzioni per la gestione del PWM implementate in RPi.GPIO.

Versione attuale

Attualmente il drawbot è in funzione in una versione semi-definitiva, costutuita da un raspi, una scheda di interfaccia, e i due stepper driver tutto impilato. I motori sono dei nema17 riciclati da qualche parte che fanno il loro con 400step/giro in half-step. Le pulegge sono tornite in delrin ( qualsiasi plastica va benone ) e montate a pressione sugli assi dei motori. Come elemento di trasmissione abbiamo usato una lenza di nylon sottile ( 0.4mm ? ), bisogna ricordarsi di arrotolare correttamente le pulegge (una in un senso e l'altra nell'altro ) altrimenti il disegno è distorto o specchiato.

Qui trovate i file necessari a realizzare i PCB del drawbot, aggioranti 10 Ottobre 2014: