Funzioni analogiche di Arduino - Come utilizzarle nel vostro prossimo progetto

Di Lee H. Goldberg

Contributo di Electronic Products


Sia i professionisti di progetti embedded che gli hobbisti alle prime armi apprezzeranno i canali di ingresso e uscita analogici della piattaforma open-hardware di Arduino grazie ai quali i vostri progetti possono rivolgersi e toccare facilmente il "mondo reale". I moduli compatti permettono di accedere facilmente agli ingressi multicanale dell'MCU, utilizzabili per monitorare le tensioni e leggere numerosi tipi di sensori analogici o forme d'onda campione.

Malgrado risoluzione e velocità di conversione relativamente modeste, il convertitore D/A dell'MCU è perfettamente idoneo per numerose applicazioni comuni, dal controllo di apparecchi di illuminazione o motori al pilotaggio del guadagno/polarizzazione di un amplificatore. Questo articolo illustra le risorse hardware e software che formano la base per le funzioni analogiche di Arduino e mostra come utilizzarle nel vostro prossimo progetto.

Se non conoscete Arduino, potete leggere l'articolo "Arduino Open Source Platform Unleashes Creativity" nella TechZone.

Nata per l'analogico

Fedele alla filosofia Arduino di semplificare l'applicazione delle tecnologia digitale al mondo reale, questa piattaforma hardware è stata progettata per sfruttare al massimo le capacità analogiche intrinseche della versatile famiglia di MCU a 8 bit ATmega di Atmel. Tutte le varianti di ATmega usate nelle piattaforme Arduino sono dotate di un convertitore analogico/digitale (ADC) multicanale, su chip. L'ADC ha una risoluzione di 10 bit, è in grado di produrre fino a 15.000 campioni/sec sotto forma di interi tra 0 e 1023. La maggior parte degli MCU AVR supporta 6 canali di ingresso analogici, sebbene alcune varianti ne supportino anche 8 e 16. Anche se la loro funzione principale è quella di leggere gli ingressi analogici, i pin analogici possono essere configurati anche come pin digitali di ingresso/uscita per uso generale (GPIO). In caso di necessità, i pin analogici sono provvisti di resistori pull-up selezionabili, configurabili come i pull-up sui pin digitali dell'MCU.

Sebbene alcuni MCU AVR siano provvisti di convertitori DAC, i membri della famiglia della generazione attuale di schede Arduino producono le loro uscite analogiche attivando e disattivando rapidamente i propri pin I/O digitali per produrre segnali con modulazione della larghezza di impulso (PWM). Il ciclo di lavoro dell'onda quadra di 490 Hz (circa) di uscita di ogni PWM può essere programmato per erogare una tensione RMS equivalente tra 0 e 5 V in 256 incrementi di 2 msec (Fig. 1). Sebbene abbiano capacità un po' limitate, le uscite di Arduino possono essere usate per numerose attività, come il pilotaggio di LED o il controllo di motori.

Pin digitali GPIO di Arduino

Figura 1: I pin digitali GPIO di Arduino possono fungere da uscite analogiche tramite l'uso di tecniche di modulazione della larghezza di impulso (PWM) (Per gentile concessione di Arduino.cc).

La maggior parte delle schede Arduino consente di accedere facilmente ai segnali di I/O analogici (e digitali) dell'MCU per mezzo di connettori pin femmina sul bordo della scheda. Il numero dei canali analogici e le assegnazioni fisiche dei loro pin variano in base al particolare MCU usato e al fattore di forma della scheda, ma molte varianti seguono le convenzioni di uscita dei pin usate da progetti "ufficiali" famosi, quali Uno (Fig.2), Mega e Nano.

La scheda Arduino Uno (rev3)

Figura 2: Si accede fisicamente agli ingressi analogici (A0-A5) e alle uscite analogiche PWM (digitali 3, 5, 6, 9, 10 e 11) della scheda Arduino Uno (rev3) tramite pin su basetta standard a bordo scheda (Per gentile concessione di Arduino.cc).

Le funzioni analogiche di I/O agevolano anche lo sviluppo di codice, dato che il linguaggio di programmazione supportato da IDE Arduino include una serie di comandi analogici nativi di I/O. Queste istruzioni consentono di leggere gli ingressi analogici, generare uscite analogiche (PWM) e configurare la tensione di riferimento del convertitore A/D.

Lettura di ingressi analogici

Portare gli ingressi analogici di Arduino in un'applicazione reale è abbastanza semplice ma richiede un'attenta scelta della corretta fonte di riferimento della tensione per il convertitore A/D dell'AVR. Può utilizzare una fonte di riferimento PREDEFINITA, INTERNA o ESTERNA per determinare il valore massimo del suo intervallo della tensione di ingresso. In modalità PREDEFINITA, l'MCU usa come riferimento l'uscita del regolatore dell'alimentazione su scheda. A seconda del tipo di scheda Arduino usata, si tratta di 5 V o di 3,3 V.

La modalità INTERNA utilizza la fonte di riferimento di precisione su chip di AVR. La tensione della fonte varia in base ai dispositivi interessati, ma di solito è di 1,1 V (per ATmega168 o ATmega328) o 2,56 V (per le serie ATmega8 e Mega). La modalità ESTERNA consente di collegare una tensione di riferimento esterna al pin AREF tramite un resistore 5 K. Il pin AREF ha un resistore di protezione interno da 32 K che funge da divisore di tensione con il resistore esterno 5 K. Ciò significa che, ad esempio, 2,5 V applicati tramite il resistore produrranno 2,5 * 32 / (32 + 5) = circa 2,2 V sul pin AREF.

La lettura delle tensioni analogiche tramite il linguaggio di programmazione Arduino implica la selezione della fonte di riferimento utilizzando analogReference(tipo) e quindi richiamando analogRead(pin) dove (pin) indica il numero del pin su basetta che si desidera campionare. Una volta selezionato, il tipo di riferimento rimane costante fino a che non si cambia programmazione. Sebbene gli MCU AVR supportino velocità di conversione fino a 15.000 campioni/sec l'ambiente hardware/software Arduino solitamente la limita a circa 10.000 campioni/sec.

Creazione di uscite analogiche PWM

La generazione di una tensione analogica su uno dei pin PWM di Arduino richiede che i pin desiderati vengano configurati come una uscita utilizzando il comando pinMode(pin, modalità) e richiamando poi un analogWrite(pin, valore), dove (pin) indica il pin su basetta desiderato per l'uscita e (valore) è la frazione della tensione di riferimento da generare (in incrementi di 1/255). Una volta configurato, il pin genererà un'onda quadra costante di 490 Hz con il ciclo di lavoro specificato, fino alla chiamata successiva a analogWrite() (o una chiamata a digitalRead() o a digitalWrite() per lo stesso pin).

I pin di I/O possono supportare correnti di comando fino a 40 mA, per cui possono pilotare direttamente stringhe di LED di dimensioni ridotte. Per motori c.c. o illuminazioni più potenti, l'uscita analogica può essere usata per pilotare un transistor di potenza o un circuito a ponte. Per applicazioni più esigenti, l'uscita può essere filtrata utilizzando una rete R/C semplice e può essere usata come la tensione di controllo per un amplificatore o una sorgente di corrente.

Altri espedienti analogici

Alcuni MCU AVR (inclusi MEGA8 e MEGA168) hanno un comparatore interno in grado di confrontare una tensione di ingresso con un altro ingresso esterno, una tensione generata da una delle uscite PWM o la tensione di riferimento interna del dispositivo di riferimento. L'uscita del comparatore può essere messa in polling o usata per attivare un interrupt. Anche se richiede più software, una disposizione comandata da interrupt consente al processore di rilevare una condizione di sotto/sovratensione senza dover campionare ripetutamente un canale analogico. Ciò può essere molto comodo praticamente per tutto, dai rilevatori di movimento a soglia regolabile e sensori di rilevamento collisioni al monitoraggio biomedicale.

Per le schede Arduino i cui gli MCU sono privi di comparatore interno, è relativamente facile aggiungere un dispositivo esterno come LM741, LM339N o TLC3704 nell'area "intelligente" di alcune schede Arduino. Se la vostra piattaforma non ha posto per il circuito fornito dall'utente, lo si può aggiungere usando una economica scheda a schermatura di prototipazione (Fig.3)

Schede a schermatura di prototipazione

Figura 3: Le schede a schermatura di prototipazione consentono di aggiungere facilmente un I/O analogico (o digitale) a quasi tutte le schede Arduino standard (Per gentile concessione di DigiKey).

Riepilogo

La versatilità e i costi contenuti di Arduino hanno attirato un seguito fedele di sviluppatori di hardware commerciale. La piattaforma hardware di Arduino è stata progettata per sfruttare al massimo le capacità analogiche intrinseche della versatile famiglia di MCU a 8 bit ATmega di Atmel. Tutte le varianti di questi MCU sono dotate di un convertitore analogico/digitale (ADC) multicanale, su chip. Questo articolo vuole essere un'introduzione alle risorse hardware e software che formano la base per le funzioni analogiche di Arduino e un punto da cui partire per i progettisti che possono usare queste funzioni nei progetti futuri. A tale fine è stata illustrata la lettura degli ingressi analogici, la creazione delle uscite analogiche PWM e l'aggiunta di I/O analogico esterno. Maggiori informazioni sui prodotti Arduino sono disponibili seguendo i link indicati nel sito Web DigiKey.
 

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Lee H. Goldberg

Informazioni su questo editore

Electronic Products

La rivista Electronic Products e il sito ElectronicProducts.com sono al servizio di ingegneri e responsabili tecnici che si occupano della progettazione di sistemi e apparecchiature elettroniche.