Con microbit e il suo convertitore ADClink2si può realizzare un voltmetro ... a certe condizioni.

Di default la gamma delle tensioni che viene codificata con 10 bit si estende dalla tensione del pin GND, 0 v (zero), alla tensione del pin 3V che viene utilizzata come tensione di riferimento Vref per la codifica.

Il video illustra il risultato della misurazione della tensione su due e una pila AA non ricaricabile.

La differenza fra il valore misurato dal multimetro digitale e quello misurato da microbit è insignificante: microbit può funzionare da voltmetro!

Tutto bene?

No!

Base teorica

Come minimo un convertitore ADC deve implementare una funzione monotona crescente: se cresce la tensione, il numero fornito deve crescere, meglio se in proporzione; la relazione attesa da un convertitore ADC è quindi di perfetta proporzionalità

\[num = k*Vin\]

Con k costante la funzione di cui sopra è rappresentabile con una proporzione nella quale si esplicita il ruolo giocato dalla Vref nel fornire il numero della conversione:

\[Vin : Vref = num : 1023\]

Se si applica una tensione compresa nella gamma di funzionamento di microbit ad un suo PIN collegato al suo convertitore analogico digitale si ottiene il valore di num generato dal ADC e di conseguenza si può calcolare la tensione Vin usando l'espressione ricavata dalla suddetta proporzione:

 

\[Vin = Vref \dfrac{num}{1023} \]

Implementazione del codice

Dato per scontato che il convertitore di microbit abbia comportamento lineare, la tensione in ingresso Vin è nota con la stessa precisione con cui è data la tensione Vref a meno della risoluzione a 10 bit.

Il codice di figura reallizza il voltmetro usato nel video.

All'avvio la Vref viene fissata al valore del pin 3V che è pari a 3,3V.

La tensione in ingresso al pin P2 viene confrontata con la Vref, lo ADC di microbit lo trasforma in un numero a 10 bit, il valore della tensione viene calcolato con l'espressione:

 

\[Vin = Vref \dfrac{num}{1023} \]

(che è stata implementata nel codice) e il comando "mostra numero" ne visualizza il valore sul display.

Condizioni da rispettare

L'utilizzo del valore di tensione del pin 3V come Vref comporta dei problemi in quanto varia a seconda del tipo di alimentazione per cui una stessa tensione Vin applicata al pin P2 restituirebbe valori di tensione diversi a seconda dell'alimentazione.

Vref deve essere costante e di valore certo e questo è vero se microbit viene alimentato col cavo USB che fornendo 5V permette al regolatore interno di generare i 3,3 V stabilizzati per l'alimentazione e il pin 3V. Quanche problema può ancora insorgere se carichi esterni eccessivi producono cadute di tensione anche all'alimentazione.

Se si usano pile o sorgenti esterne di tensione, non serve nemmeno misurare la tensione effettivamente presente sul pin 3V ed assegnarla a Vref nella fase di avvio in quanto le sorgenti esterne potrebbero non avere tensioni stabilizate, infatti le pile diminuiscono la tensione sia per cadute di tensione interne sia scaricandosi: di conseguenza diminuisce la tensione sul pin 3V. L'argomento è stato trattato in questo articolo link2.

Limiti di tensione

La tensione ai pin di microbit non deve mai superare i 3 V pena danni permanenti al dispositivo.

La gamma di tensioni misurabili va dunque da 0 a 3,3 V.

Per tensioni superiori si inserisce all'ingresso un partitore di tensione link2, noto il rapporto di partizione Kp = R2/(R1 + R2) basta modificare la formula interna per restituire la tensione misurata:

 

\[Vin = \dfrac{Vref}{Kp} \dfrac{num}{1023} \]

Precisione e risoluzione

La precisione della misura di tensione realizzata con microbit è data dalla precisione di Vref e dalla linearità del convertitore ADC.

la risoluzione è cosa diversa dalla precisione; la precisione rappresenta la capacità dello strumento di approssimare il valore vero mentre la risoluzione rappresenta il minimo intervallo di tensione che il convertitore può rilevare. Se la risoluzione è 10 mV non si potrà pretendere di conoscere valori frazionari di 10mV. Avere una alta risoluzione non significa avere una alta precisione.

Con un convertitore a 10 bit si hanno 1023 intervalli a disposizione per suddividere la Vref; nel caso di Vref = 3,3 V la risoluzione è di 3,3*1023 = 0,0032 V =3,2 mV.

 

Come si fa se microbit è alimentato a pile?

Per avere una Vref valida in qualunque circostanza di alimentazione e funzionamento di microbit basta utilizzare la tensione di 1,2 V stabilizzata generata internamente da assegnare per la Vref. Purtroppo questo valore non è disponibile da makeCode, per utilizzare questa possibilità occorre programmare con micropython; vedi i seguenti articoli:

https://meanderingpi.com/2017/08/05/microbit-analog-inputs/

https://github.com/DavidMS51/microbit/blob/master/ADC_internal_ref_example.py