Con microbit e il suo convertitore ADCsi 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à
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:
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:
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:
(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 .
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 , noto il rapporto di partizione Kp = R2/(R1 + R2) basta modificare la formula interna per restituire la tensione misurata:
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