Miniduino: la chiavetta USB con Arduino

 

Da quando Arduino ha fatto la sua comparsa, in commercio sono “spuntati come funghi” i suoi derivati, che tante aziende hanno realizzato grazie alla disponibilità al pubblico (Arduino è un progetto open source) degli schemi elettrici delle board ufficiali, utilizzati come base per lo sviluppo di varianti di ogni genere; anche noi, con la nostra serie Fishino, abbiamo calcato le orme della scheda di prototipazione nata ad Ivrea e siamo “scesi nell’arena” dei derivati, dando però quel qualcosa in più, come avrà notato chi di voi ha letto gli articoli sulla serie Fishino e la documentazione reperibile su
www.fishino.com.

Di recente abbiamo sviluppato una nuova board Arduino-compatibile, che rappresenta il punto d’incontro di due hardware: la scheda che descriviamo in questo articolo si può considerare un incrocio tra la Leonardo e la Beetle.

Dallo sviluppo è nata quindi la nostra miniDuino USB, che abbiamo chiamato così perché la parte più avanzata del circuito stampato riporta un connettore USB ad inserzione diretta che ha la funzione di un connettore USB-A.

La board è basata sul microcontroller Atmel ATmega32U4, che è lo stesso utilizzato sulle schede Arduino Leonardo, Micro ed altre; non a caso, grazie anche al bootloader scritto in essa tramite la connessione ICSP, una volta inserita nella presa USB di un Personal Computer viene riconosciuta come Arduino Leonardo.

Abbiamo scelto questo microcontrollore in quanto incorpora la periferica USB, quindi è possibile caricare lo sketch senza dover utilizzare un convertitore USB/TTL. Inoltre l’ATmega32U4 può anche simulare una tastiera o un mouse, funzione utile in molte occasioni.

Le dimensioni della nostra miniDuino sono molto contenute (19x40x3,5 mm esclusi pin-strip e connettore USB). Per ottenere tale risultato abbiamo ottimizzato la disposizione di alcuni pin, mettendoli accanto al connettore ICSP.

Questo è previsto in posizione centrale posteriore come nella Nano e accanto ad esso abbiamo spostato i pin GND, CTS, TX ed RX della seriale UART, così da accorciare il più possibile il circuito stampato e rendere minore il carico sul connettore USB se la scheda viene introdotta in una presa di un Personal Computer.
I pin possono avere più funzioni, per semplificarne il riconoscimento nella Fig. 1 trovate le possibili alternative di uso.

Fig. 1 – Pin out del modulo visto dal lato senza componenti.

 

Schema elettrico

Questo ed altro emergono dallo schema elettrico della board, che andiamo subito ad analizzare: come vedete il tutto è basato sul microcontrollore U3, del quale portiamo direttamente all’esterno tutti gli I/O come è previsto dallo standard Arduino. Sulle linee PB0 (SS, ossia lo Slave Select del bus SPI), PD5 (CTS della seriale UART) e PC7 (IO digitale D13) sono collegati, ciascuno con la propria resistenza di limitazione della corrente diretta, i LED tipici di Arduino, ossia quelli che mostrano l’attività della seriale (LD1 e LD3) e il LED per applicazioni generiche (LD2).

Nello schema notate anche l’assenza del regolatore di tensione all’ingresso (il regolatore a 5V) che non serve perché la board è stata pensata per essere alimentata via USB e quindi per prelevare i 5 volt da tale connessione. Trovate però due regolatori, ossia un DC/DC switching di tipo boost (imperniato su U4) ed un LDO (U1); il primo è stato inserito perché, come appare dallo schema elettrico, la nostra scheda può essere alimentata da una batteria al litio 1s (3,7V nominali), mentre il secondo serve per stabilizzare a 3,3 volt la tensione principale di 5V per alimentare con essa il pin 3V3.
Notate che l’alimentazione del microcontrollore è a 5 volt per avere gli I/O funzionanti a 5V, compatibilmente con lo standard Arduino.

La batteria al litio viene caricata durante i periodi in cui la scheda è inserita nella presa USB del Personal Computer (o collegata ad essa mediante un cavo di prolunga USB-A/USB-A) oppure in un caricatore a uscita USB; chiaramente se è collegata al circuito (è previsto un apposito connettore sul PCB, posto di lato vicino ai pad del connettore USB a inserzione diretta…) quest’ultimo non va inserito in una presa USB, dato che peserebbe e danneggerebbe la connessione: in questo caso la scheda si collegherà con un cavo di prolunga. La carica della batteria è demandata all’integrato U2, che è il noto MCP73831T, un SMD incapsulato in un case SOT-23, prodotto dalla Microchip, che accetta in ingresso tipicamente 5 volt (in realtà il range è tra 3,75 e 6 volt), provenienti, in questo circuito, dal connettore USB e fornisce all’uscita la corrente occorrente alla carica di elementi agli ioni di litio o ai polimeri di litio (LiPo) erogando fino a 550 milliampere.

La batteria (da collegare ai contatti +/- BAT) può avere una capacità teoricamente illimitata, perché al massimo si carica in un tempo lunghissimo, tuttavia considerate che con una corrente di 550 mA un elemento da 550 mAh si carica in un’ora, uno da 1.100 mAh per la carica richiederà 2 ore, uno da 5,5 Ah necessiterà di 10 ore e via di seguito. L’integrato funziona nella configurazione tipica, con l’uscita STAT che pilota il LED LD4 per fargli produrre le segnalazioni di stato utili a farci capire in quale fase è la carica; per l’esattezza l’uscita STAT si pone a livello logico basso durante la carica, facendo accendere il LED a luce fissa, mentre rimane a livello alto a fine carica facendo spegnere lo stesso LD4. STAT si porta ad alta impedenza (open) quando l’MCP73831T è in shutdown o all’uscita VB non risulta collegata alcuna batteria. VB (piedino 3) è l’uscita per la batteria al litio, che si connette ai contatti + e – BA. L’integrato effettua la carica a corrente e tensione costante. La corrente di carica (Ireg) si imposta con la resistenza collegata al piedino 5 (R1, nel nostro caso), al cui valore è legata dalla relazione:

Ireg = 1.000/R

dove il valore della R risulta in ohm se la corrente Ireg è espressa in A.
Nel nostro caso R vale 10 Kohm e la corrente erogata è quindi di 100 mA.

Chi lo desiderasse potrà modificare il valore della corrente di carica (ma rimanendo nei limiti imposti dal costruttore) agendo sul valore della resistenza R1.
Il convertitore DC/DC che ricava i 5 volt dalla tensione della batteria è collegato all’uscita VB dell’U2, in modo da funzionare alimentato dalla cella al litio; si tratta di un XR1151 della Xysemi, che è uno switching step-up capace di fornire in uscita fino a 6 volt, alimentato all’ingresso (VIN e GND) con una tensione di valore compreso fra 1,6 e 6V.

Per funzionare richiede pochissimi componenti esterni, che si riducono a una bobina (che immagazzina l’energia quando è alimentata da MOSFET interno e la restituisce al C6 quando il transistor si interdice) e a un diodo Schottky (D1) che fa passare la corrente di scarica dell’induttore. Grazie all’elevatissima frequenza di commutazione (1,2 MHz tipici), il valore di L1 e quello del condensatore C6 possono essere piccolissimi, a tutto vantaggio della minimizzazione dell’ingombro del PCB.

Completa lo stadio DC/DC un partitore resistivo (R10/R11) che dall’uscita dello switching retrocede all’ingresso di retroazione una porzione della tensione. All’interno dell’U4 troviamo un generatore di impulsi PWM che pilota il MOSFET (da 2A) il cui drain chiude periodicamente a massa la bobina L1 attraverso il pin SW, caricandola e lasciando che nei periodi di pausa essa restituisca l’energia immagazzinata, attraverso il piedino 1, al condensatore di filtro C6. La tensione riportata al piedino FB serve all’amplificatore di errore del generatore PWM per correggere il duty-cycle in funzione del carico, ovvero aumentarlo al calare della tensione generata e viceversa. Il rapporto tra R10 ed R11 è tale da ottenere all’uscita 5V stabilizzati, con una corrente massima di 800 mA, più che sufficiente a far funzionare l’intero circuito e ad alimentare eventuali dispositivi esterni connessi agli I/O e al +5V.

Dell’integrato facciamo notare la possibilità di mandarlo in power-down (praticamente spegnerlo…) mediante il piedino EN, internamente provvisto di pull-up: quando questo è a livello alto il DC/DC entra in funzione, mentre se viene forzato a zero logico si spegne, mantenendo alimentata la sola logica di controllo.

Infine il regolatore lineare è un MIC5219-3.3YM5-TR, ossia un LDO in SMD capace di fornire 3,3 volt molto ben stabilizzati (si parla dell’1% di tolleranza) e una corrente massima di 500 mA; il drop-out è davvero ridottissimo, perché è di appena 10 mV a basse correnti d’uscita e sale a soli 0,5V a pieno carico.

Concludiamo il discorso sull’alimentazione con il diodo Schottky D2, che abbiamo inserito per separare l’alimentazione da USB dall’eventuale tensione ricavata dal DC/DC U4 quando la batteria è presente e carica: con la scheda collegata all’USB, i 5 volt di quest’ultima raggiungono la linea +5V della board attraverso D2 e il transistor T1, polarizzato in base tramite il partitore R12/R3, viene portato in saturazione ed il suo collettore trascina a zero logico il contatto EN dell’U4 tramite R4; ciò permette di mantenere spento il DC/DC ed evitare che questo fornisca i propri 5 volt al circuito, così da scongiurare conflitti di alimentazione che potrebbero risolversi in un danno all’U4 stesso o alla porta USB del computer cui la nostra Arduino è collegata. Invece se stacchiamo la scheda dall’USB il T1 va in interdizione e lascia che il resistore di pull-up interno al piedino EN dell’U4, se è presente la batteria, lasci accendere il DC/DC che quindi fornirà i propri 5 volt al resto della scheda.
Nel caso non sia presente la batteria il circuito, almeno il microcontrollore, può essere alimentato tramite l’ICSP, quando serva caricarvi il bootloader.

 

 

 

Caratteristiche tecniche

- Microcontrollore: ATmega32u4
- Frequenza di clock: 16 MHz
- Tensione d’alimentazione: 4,5 ÷ 5,5V
- Assorbimento: 15 mA
- Digital I/O: 20
- canali PWM: 7
- Input analogici: 12
- UART: 1
- I²C-Bus: 1
- USB con connettore a inserzione diretta
- Flash Memory: 32 kB
- SRAM: 2,5 kB
- EEPROM: 1 kB

 

Piano di montaggio

Elenco componenti

C1, C2, C4: 100 nF ceramico (0603)
C3, C5: 15 pF ceramico (0603)
C6, C7: 22 µF ceramico (0603)
C8: 1 µF ceramico (0603)
R1, R3, R4: 10 khom (0603)
R2: 470 ohm (0603)
R5, R6: 22 ohm (0603)
R7÷R9: 470 ohm (0603)
R10: 97,6 kohm (0603)
R11: 13,3 kohm (0603)
R12, R13: 4,7 khom (0603) 
D1, D2: PMEG3020EJ
LD1, LD2: LED verde (0603)
LD3: LED giallo (0603)
LD4: LED rosso (0603)
U1: MIC5219-3.3YM5-TR
U2: MCP73831
U3: ATMEGA32U4-MU
U4: XR1151 
Q1: Quarzo 16MHz 
T1: BC817 
L1: Bobina 2,2 µH 
BATT: Connettore JST 1.25mm 2 vie

Varie:
- Strip maschio 11 vie passo 2.54mm (2 pz.)
- Strip maschio 2x5 vie passo 2.54mm
- Circuito stampato S1360 (15x19 mm)

 

Utilizzo della board

Una volta completata la scheda, potete subito provarla inserendola in una presa USB del vostro computer (senza connettere alcuna batteria) e verificando che si accendano i due LED più vicini al fondo.

Per fare una prova rapida aprite l’IDE Arduino, impartite il comando File>Nuovo e nella finestra che si apre scrivete il semplice codice d’esempio, che poi sarebbe il canonico esempio Blink adattato al controllo del LED LD1, attraverso la definizione dell’istruzione digitalWrite sul piedino 13.
Il codice da scrivere è il seguente:

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH); 
  delay(500); 
  digitalWrite(13, LOW);
  delay(500); 
}

 

Poi aprite il menu Strumenti e impartite il comando Scheda, cliccando, nel sottomenu cui si accede, su Arduino Leonardo.
Adesso fate clic sul pulsante Verifica e compila (spunta) e, terminata la compilazione, su Carica (freccia): se la scheda funziona correttamente, vedrete il LED vicino al connettore della batteria pulsare al ritmo di 0,5/0,5 secondi.

Tale tempo nasce dal parametro assegnato al comando delay, che è 500 (millisecondi); provate a cambiarne il valore, ricompilate e ricaricate, allorché vedrete il LED LD1 lampeggiare con la cadenza corrispondente al tempo che avrete scritto.
Il lampeggio del LED in risposta al codice d’esempio dimostra che la vostra scheda funziona correttamente e dialoga su USB.

Quindi adesso siete pronti a utilizzare la vostra mini Arduino USB per mille applicazioni. Ricordiamo che per particolari applicazioni, la scheda può essere alimentata da una batteria al litio a singola cella, da collegare con il cavetto in dotazione (tali batterie vengono vendute con cavetto rosso-nero e connettore femmina volante a due poli a passo 2,54 mm) al connettore maschio previsto sul PCB, come mostra la Fig. 3; la batteria si ricaricherà nei periodi di connessione all’USB del computer (o di un alimentatore con uscita USB) e fornirà alimentazione alla nostra miniArduino una volta che verrà sconnessa.

Concludiamo precisando che se lo desiderate, potete inserire al board in un contenitore in materiale plastico (se ne può usare uno di quelli standard Teko neri) lavorato per far uscire il connettore USB su PCB dalla parte anteriore e gli eventuali pin-strip dal coperchio, oltre che per rendere visibili i LED.
Chi ha una stampante 3D può anche realizzare il contenitore utilizzando del filamento di PLA o PET trasparente, dandogli la sagoma che preferisce: ad esempio quella di una Pen Drive USB.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Menu