Arduino permette di memorizzare in modo indelebile una certa quantità di dati utilizzando la eprom disponibile a bordo del suo microcontrollore ATmega328. Ma se i dati diventano tanti e superano i pochi Kbyte disponibili? Una soluzione semplice, affidabile e a basso costo è utilizzare una memory card.

 

Alcuni dettagli importanti

Nel progettare il circuito dell’adattatore è necessario tenere presenti alcuni punti fondamentali che derivano essenzialmente dalle caratteristiche elettriche delle schede di memoria SD che sono alimentate a 3.3V:

  • E’ necessario un regolatore per portare i 5V di Arduino ai 3.3V della alimentazione della SD
  • Sono necessari alcuni accorgimenti per portare i livelli delle linee dati di Arduino (0-5V) a essere compatibili con quelli delle SD (0-3.3V)

Al valore di tensione dell’ “1” logico delle linee dati (bus SPI) può essere applicata una tolleranza tale per cui i valori limite applicabili in ingresso alla SD potranno essere compresi tra 2.7V e 3.6V.

 

Il regolatore di tensione

Come regolatore di tensione abbiamo scelto un LM3940: regolatore a basso dropout da 1A per l’alimentazione a 3.3V derivata dai 5V.

In realtà la scheda Arduino prevede già la possibilità di prelevare una alimentazione a 3.3V dal secondo terminale dell’header delle alimentazioni. Questo significa che se utilizzerete l’adattatore esclusivamente con Arduino potrete fare a meno dello stadio di alimentazione presente nel circuito che abbiamo qui realizzato e predere l’alimentazione già fornita.

 

Figura 1: Sorgente di alimentazione a 3.3V su Arduino

 

L’adattamento dei livelli delle linee dati

Per quanto riguarda invece l’adattamento dei livelli delle linee dati (level shifting), si sono prospettate più alternative: utilizzare un semplice ma efficace partitore di tensione oppure impiegare diodi zener con tensione di riferimento opportuna oppure ancora utilizzare dei buffer con uscite a 3.3V e ingressi che tollerino 5V tipo il 74LCX125 (Low Voltage Quad Buffer with 5V Tolerant Inputs and Outputs) o una loro semplificazione tipo quella in Figura 2.

 

Figura 2: Esempio di circuito adattatore di livello

 

La scelta è caduta sulla seconda soluzione principalmente perchè pensiamo che l’utilizzo di zener per la regolazione della tensione consenta da un lato di utilizzare il minor numero di componenti e dall’altro di mantenere il segnale “pulito” e quindi raggiungere frequenze di lavoro maggiori sul bus SPI.

Alla fine del progetto cercheremo di valutare le effettive differenze in termini di qualità del segnale offerte dalle tre soluzioni e valuteremo l’eventuale vantaggio di una soluzione riapetto alle altre anche in relazione al costo dei componenti necessari per la sua realizzazione.

 

Un rapido sguardo al LM3940

L’LM3940 è come già accennato un regolatore di tensione che fornisce un uscita stabile a 3.3V partendo da un ingresso a 5V.

 

Figura 3: Applicazione tipica del LM3940

 

Il principio di funzionamento è il medesimo dei regolatori della famiglia 78xx, come il 7805 già illustrato in un altro post su questo blog: si applica la tensione di ingresso tra un piedino comune (la massa) e il piedino di input e si preleva la tensione di uscita tra il piedino comune e il piedino di output. Come per il 7805 e gli stadi di alimentazione in genere è importante posizionare opportune capacità in parallelo all’ingresso e all’uscita per evitare oscillazioni indesiderate.

 

Il diodo zener in sintesi

In questo progetto i diodi zener funzionano anchessi da regolatori di tensione. In estrema sintesi un diodo zener polarizzato inversamente è un circuito aperto per tensioni applicate ai suoi capi inferiori alla tensione di zener (Vz) mentre è un generatore di tensione pari alla tensione di zener per tensioni applicate superiori.

Figura 4: Caratteristica tensione/corrente dello Zener

 

Applicando quindi una tensione inversa di 5V a uno zener da 3.3V si ha come effetto che ai suoi capi la tensione sarà pari a 3.3V. Per una analisi più approfondita su come utilizzare al meglio gli zener, ad esempio come calcolare la resistenza da collegare tra lo zener e l’alimentazione per manenere Iz entro i valori ottimali, in attesa di un nostro post, vi rimandiamo a uno dei moltissimi siti che spiegano l’argomento in modo esaustivo.

 

Lo schema del circuito v1.0

Lo schema del circuito utilizzato inizialmente per questo progetto non presenta grandi punti oscuri. Presenta principalmente uno stadio di alimentazione per la generazione dei 3.3V necessari all’SD e una sezione di “abbassamento” dei segnali SPI in ingresso per renderli compatibili con i livelli di tensione sopportati dalla scheda di memoria.

Figura 5: Lo schema dell’adattatore

 

Questo circuito costituisce la prima versione dell’adattatore: l’idea che ha ispirato questo design è quella di ridurre al minimo i componenti necessari mantenendo il sistema stabile e affidabile. Questo approccio ha richiesto di tralasciare qualche particolare progettuale tipo l’ottimizzazione delle correnti che cercheremo però di riprendere in modo più specifico in fase di ottimizzazione alla fine del progetto.

 

I prossimi passi

Nelle prossime puntate verranno illustrati:

  • una possibile realizzazione su millefori dell’adattatore
  • il collegamento dell’adattatore ad Arduino utilizzando una breadboard
  • il test di scrittura e lettura di una SD Card da 2 GB con relativo codice
  • il confronto tra i diversi metodi di adattamento dei livelli SPI
  • l’ottimizzazione del circuito

A presto!

Non dimenticatevi di seguirci su Twitter per essere sempre informati sui nuovi articoli pubblicati su Sisuino Blog.