Progetti

   

Forum

   

Servizi

   

Energia 07 - Lettura di una tensione

Introduzione

Nello scorso articolo abbiamo descritto il funzionamento del comando digitalRead utilizzando un pulsante collegato a massa e il comando INPUT_PULLUP.
Inoltre abbiamo avuto la possibilità di utilizzare per la prima volta il comando Serial.print che ci ha permesso di stampare sul PC i dati che volevamo vedere.

In questo articolo, invece, daremo un'occhiata alla funzione analogRead che utilizza l'ADC (Analog Digital Converter) presente sul microcontrollore, per leggere una tensione, ovvero una grandezza analogica.

Materiale necessario

Per il nostro progetto abbiamo bisogno del seguente materiale:

  • Software Energia
  • Scheda di sviluppo LaunchPad MSP430 con MSP430G2553  
  • 1 potenziometro con resistenza variabile da 10Kohm
  • Cavetti per collegare il tutto

Cos'è un Potenziomentro?

Un potenziometro è costituito spesso da un cilindro o anello isolante su cui è spalmato in maniera uniforme un materiale conduttivo ad elevata resistività (per esempio carbone) e le cui estremità sono connesse a due morsetti (A e C di Figura 1). Il potenziometro possiede anche un terzo terminale connesso ad un cursore mobile e rotante, posizionato sul materiale conduttivo presente tra i terminali A e C. Andando a variare il contatto mobile si varia il valore della resistenza in uscita al potenziometro. Nel nostro esperimento, avremo una resistenza che varierà il suo valore da 0 a 10Kohm.


Esempio di un Potenziomentro

Figura 1: Esempio di un potenziometro (fonte Wikipedia).

Per vedere come varia il valore del potenziometro basta prendere un multimetro e collegare il cavo nero al piedino B e quello rosso ad A o C; una volta impostato per misurare il valore della resistenza è possibile vedere che girando il contatto superiore si varia il valore della resistenza misurata.
Per collegare un potenziometro ad un circuito, invece, basta tenere a mente l'immagine in Figura 1, collegando (come faremo nel nostro primo esempio in Figura  3) il piedino B come uscita del potenziometro, il piedino A al valore di Vcc (il contatto + della nostra alimentazione) ed il piedino C a massa (il contatto - della nostra alimentazione).
Il valore della resistenza assumerà cosi valore massimo se giriamo il contatto verso il piedino A e raggiungerà valore 0 se giriamo il contatto verso il piedino C.
Alcuni di voi si chiederanno perché introducendo tensione in ingresso ho come risultato una variazione di tensione in uscita.

Questo è dovuto al fatto che il potenziometro è composto internamente (in maniera equivalente) da 2 resistenze variabili in serie. All'aumentare dell'una, diminuisce l'altra. Il circuito in Figura 2 illustra quello che comunemente viene chiamato “partitore di tensione”, poiché il suo compito è proprio quello di “ripartire” un segnale tra uscita e massa.
Prendendo come esempio il nostro potenziometro, quando giriamo il contatto verso il piedino su cui è collegata Vcc, il potenziometro cortocircuita la resistenza superiore ed aumenta quella inferiore fino al massimo della sua portata (nel nostro caso 10Kohm). Facendo questo la tensione in uscita varia come
descritto dalle formule di Figura 2.

Esempio di un partitore di tensione

Foruma di un partitore di tensione

Figura 2: Funzionamento di un partitore (fonte Wikipedia).

In questo caso abbiamo considerato i due estremi, ma viene da se che per valori di resistenza intermedi si ottengono valori di tensione compresi tra 0 e Vcc (Vs).

Esempio Applicativo

Vediamo ora come far leggere il valore della tensione alla nostra scheda. Prima di tutto andiamo a collegare il potenziometro come illustrato in Figura 3.

Schema Elettrico

Figura 3: Schema primo esperimento.

A questo punto scriviamo un primo sketch come raffigurato in Figura 4.

Sketch di Esempio

Figura 4: Sketch di esempio.

Prima di avviare il programma andiamo ad aprire la porta seriale. Se avviamo il programma, vedremo che facendo girare il contatto il valore che visualizzeremo varierà da 0 a 1023.
Questo perché il valore che noi facciamo leggere alla nostra scheda non ha nessun riferimento.

L'unico riferimento che ha la scheda è dovuto al fatto che internamente avendo un ADC (Convertitore da analogico a digitale) a 10 bit può suddividere il valore letto in 1024 sotto valori. L'ADC ha un riferimento di tensione interno ma il nostro programma non è a conoscenza.

Nel prossimo articolo vedremo nello specifico come funziona un ADC riuscendo a comprendere meglio questa affermazione. Per dare una corrispondenza valore numerico – tensione, modifichiamo lo sketch come mostrato in Figura 5.

Sketch di Esempio

Figura 5: Secondo Sketch.

Andiamo a vedere nello specifico i passaggi effettuati.

Prima di tutto, come consuetudine, assegniamo ad una variabile il pin di ingresso del potenziometro, come possiamo vedere in Figura 6

Codice di esempio

Figura 6 Prima parte dello Sketch.

In seguito, nella seconda parte, come possiamo vedere in Figura 7, utilizziamo il comando analogRead per leggere il valore della tensione che abbiamo in ingresso (questo comando differisce da digitalRead perché può leggere più dei semplici valori LOW o HIGH utilizzando l'ADC interno).

Una volta letto il valore analogico in ingresso si moltiplica il tutto per la massima tensione che può leggere, quindi Vcc (3Volt) per poi dividere il tutto per 1023 valori dato che l'ADC è a 10 bit.

Il tutto può essere riassunto nella proporzione, il valore in tensione che voglio leggere sta al valore in bit che leggo come la tensione massima che voglio leggere sta al numero massimo di bit (dinamica) dell'ADC.

Figura 7 Seconda parte dello Sketch

Dopo aver letto il valore e convertito in maniera opportuna, lo si visualizza sul Terminal per mezzo della porta seriale, utilizzando la stringa “Serial.printin(voltage);”. A differenza della scorsa volta manderemo in stampa la variabile che abbiamo interesse a leggere e non una stringa fissa.

Leggendo sul Terminal, ci accorgiamo però che il valore stampato non ha una buona definizione, infatti sono visualizzati solamente i valori 1,2 e 3.

 

Ora vi porgo un quesito:

Come posso, in due semplice passaggi, avere una risoluzione più ampia?

Aspetto le vostre risposte...

 

Autore : Andrea Valeriani


Bibliografia

Commenti   

agric
+1 #3 RE: Energia 07 - Lettura di una tensioneagric 2015-10-19 09:57
ok, nell'articolo l'uso del termine "definizione" per la stampa e "risoluzione" più ampia, mi hanno ingannato nonostante sia sinonimi.
Detto questo l'uso nel programma di variabili INT limita il valore del risultato di una divisione (non tramite >> shift) al solo valore intero tralasciando la parte decimale, per non perdere la parte decimale bisogna usare variabili FLOAT.
C'è un particolare che non ricordo cioè se tutte le variabili nella divisione devono essere dichiarate float.
buona giornata
Andrea Valeriani
0 #2 RE: Energia 07 - Lettura di una tensioneAndrea Valeriani 2015-10-18 22:17
Citazione agric:
Salve il mio approccio all' MSP è appena iniziato,provengo comunque da esperienza sia con pic e un po di arduino .
per rispondere al quesito dovre conoscere un po di più il micro come dalla lettura dell'articolo (buono) c'è scritto
"L'ADC ha un riferimento di tensione interno" quindi credo basti modificare questo riferimento di tensione e il gioco è fatto
Buoan giorna Agric


Salve a te Agric,
La tua risposta si avvicina, ma andando ad aumentare la tensione di riferimento (per alcuni modelli di microcontrollor e è possibile) la lettura resterà comunque ferma sulla stampa di valori "interi"...
Quindi come possiamo aumentare la quantità di valori leggibili andando a raffinare la lettura della tensione?
:-)
agric
0 #1 risposta quesitoagric 2015-10-16 09:04
Salve il mio approccio all' MSP è appena iniziato,proven go comunque da esperienza sia con pic e un po di arduino .
per rispondere al quesito dovre conoscere un po di più il micro come dalla lettura dell'articolo (buono) c'è scritto
"L'ADC ha un riferimento di tensione interno" quindi credo basti modificare questo riferimento di tensione e il gioco è fatto
Buoan giorna Agric

Per commentare l'articolo bisogna Registrarsi o effettuare il Login.

   

Registrati  

   
© LaurTec 2006-2015