Collegare Arduino a dispositivi a 3.3V

luca 12/09/2015 0

Sempre più spesso ci si trova nella necessità di collegare ad Arduino dei dispositivi che funzionano con una tensione di 3.3V.

Abbassare la tensione di funzionamento dei circuiti integrati ha infatti diversi vantaggi:

  • consente di realizzare transistor più piccoli
  • richiede una minore dissipazione di calore
  • permette transizioni di stato più veloci (la differenza di tensione tra lo stato logico basso e quello alto è inferiore)

per questo i produttori di moduli, sensori… stanno sempre più adottando la tensione di 3.3V come standard.

Il problema

Prendiamo come riferimento una scheda Arduino Uno. La scheda può essere alimentata in diversi modi (tramite il connettore da 2.1mm, tramite la presa USB…) ma la tensione di funzionamento è 5V, fornita dal regolatore a bordo:

uno-regulator

La scheda presenta anche un regolatore a 3.3V (LP2985), che rende possibile alimentare dispositivi esterni con tale tensione:

uno-regulator2

Tutti i PIN della scheda funzionano quindi a 5V: se un PIN digitale viene configurato come output, un valore logico 1 (digitalWrite(PIN, HIGH);) corrisponderà ad una tensione di 5V su tale PIN.

Se invece il PIN viene configurato come input, normalmente una tensione su tale PIN maggiore di 2.5V viene interpretata come valore logico 1; una tensione inferiore di 2.5V come valore logico 0.

Colleghiamo ora a tale PIN il corrispondente PIN di un dispositivo alimentato a 3.3V:

  • se il PIN di Arduino è configurato come input (dispositivo -> Arduino) non ci sono problemi: quando il dispositivo vuole inviare un valore logico alto impone una tensione di 3.3V che da Arduino viene correttamente interpretata (> 2.5V);
  • se invece il PIN di Arduino è configurato come output (Arduino -> dispositivo), in caso di valore logico alto Arduino impone una tensione di 5V, che supera la tensione di funzionamento del dispositivo e può quindi danneggiarlo!
Alcuni dispositivi, pur funzionando a 3.3V, accettano tensioni superiori sui PIN di I/O. Tali dispositivi sono normalmente definiti 5V tolerant: verificate sempre sui datasheet!

Soluzioni

Vi sono diverse soluzioni possibili per adattare le due tensioni di funzionamento.

Le soluzioni più semplici utilizzano soltanto componenti passivi (diodi, resistenze…). Queste soluzioni funzionano bene dal punto di vista delle tensioni ma introducono dei transitori sui passaggi di stato che non le rendono adatte per comunicazioni ad alta velocità. In questo blog post sono ben illustrate alcune di queste soluzioni e il loro effetto visualizzato su un oscilloscopio.

La soluzione che vi voglio invece suggerire utilizza un piccolo modulo in vendita su diversi webshops (io ad esempio l’ho acquistato da Banggood):

level-1 level-2

Questo modulo utilizza dei transistor per convertire fino a 4 segnali.

Il suo utilizzo è molto semplice: per prima cosa colleghiamo ad HV la tensione di alimentazione maggiore, mentre ad LV quella minore; quindi colleghiamo la massa (GND). Ai PIN etichettati come HVx va collegato il dispositivo a tensione più elevata, mentre a quelli etichettati come LVx quello a tensione più bassa.

Ad esempio per far comunicare via seriale Arduino con un dispositivo che funziona a 3.3V, i collegamenti saranno i seguenti:

level-5

Ecco ad esempio l’utilizzo su breadboard:

level-3 level-4

Leave A Response »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi