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 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