Tracciatore di tensioni per oscilloscopio

Tracciaotre di tensione per oscilloscopio

Supponiamo di voler misurare la tensione, lentamente variabile, proveniente da un sensore, oppure di dover tracciare la curva di scarica di una batteria. Dobbiamo necessariamente annotarci le misure eseguite manualmente a intervalli di tempo regolari con un multimetro, oppure esiste una soluzione alternativa più efficiente? La risposta a questa domanda è affermativa. Come vedremo nell'articolo, esiste infatti un modo molto più elegante e meno noioso, basato sull'utilizzo di Arduino, di alcuni componenti al contorno, e di un comune oscilloscopio.

Introduzione

Il progetto proposto in questo articolo nasce da due domande poste dall'autore dello stesso [3]: "questa batteria è ancora utilizzabile oppure è da buttare?". E ancora: "questo caricatore sta caricando correttamente la batteria?". Una visualizzazione grafica della tensione della batteria durante le fasi di carica e scarica sarebbe molto utile per rispondere alle domande appena menzionate. Tuttavia, la maggior parte dei moderni oscilloscopi (nonostante dispongano in genere di una considerevole quantità di memoria), non è adatta a questo scopo: la base dei tempi orizzontale più lenta è infatti tipicamente compresa tra 1 e 50 secondi per divisione, e di conseguenza uno schermo composto da 12 divisioni è in grado di visualizzare, contemporaneamente, soltanto un periodo compreso tra 12 secondi e 10 minuti. Spesse volte ciò non si dimostra sufficiente, soprattutto quando si debba monitorare degli andamenti con variazioni molto lente nel tempo, che possono verificarsi su periodi anche di alcune ore. Inoltre, una registrazione di lunghezza eccessiva non è molto pratica o di particolare aiuto: a chi piacerebbe dover esaminare decine di schermate piene di informazioni? Il modo più comodo per visualizzare questi dati sarebbe quello di riuscire a far stare l'intera traccia all'interno di un'unica schermata.

Questo problema potrebbe ovviamente essere risolto utilizzando un data logger oppure un multimetro dotato di funzionalità di registrazione. Alcuni tipi di questi strumenti sono dotati di un buffer di memoria integrato, e alcuni consentono anche il collegamento con un PC sul quale è in esecuzione un opportuno software. Tuttavia, la maggior parte dei multimetri non offre queste funzionalità, e quelli che le prevedono spesso non sono economici. L'autore ha così deciso di estendere in modo considerevole il range della base dei tempi di un oscilloscopio esistente, utilizzando una tecnologia a basso costo basata su una scheda a prototipazione rapida. Prima di partire con l'analisi del progetto, vorremmo sottolineare che, nonostante l'interfaccia utente "digitale" basata su pulsanti e la visualizzazione grafica delle impostazioni correnti sullo schermo dell'oscilloscopio, il circuito per il tracciamento delle tensioni funziona perfettamente sia sugli oscilloscopi analogici di vecchia scuola, che sui loro più moderni cugini digitali.

Considerazioni preliminari

A questo punto sorgono spontanee due domande: "come dovrebbe funzionare il tracciatore?", e "quali componenti dobbiamo utilizzare per costruirlo?". Alla prima domanda è piuttosto facile dare una risposta: un convertitore analogico-digitale (ADC) eseguirà periodicamente il campionamento della tensione in ingresso, mentre un microcontrollore si occuperà di memorizzare i risultati. Successivamente, il microcontrollore invierà i risultati, sotto forma di segnale, a un oscilloscopio, utilizzando un convertitore digitale-analogico molto veloce. Poiché disponiamo di un microcontrollore, è piuttosto facile aggiungere un'interfaccia utente realizzata con pulsanti e un display grafico con le impostazioni correnti da visualizzare sullo schermo dell'oscilloscopio, generando in uscita un segnale opportunamente costruito.

Arriviamo così alla risposta alla seconda domanda. Come tutti noi sappiamo molto bene, Arduino è una piattaforma a basso costo che dispone di un ambiente di sviluppo ben consolidato e liberamente utilizzabile (Arduino IDE): perché dovremmo reinventare la ruota? Se utilizziamo una scheda Arduino come base già pronta per il progetto, l'hardware che ancora occorre può essere realizzato con uno shield inseribile sulla scheda stessa. Questa soluzione ha il vantaggio di mantenere contenute le dimensioni del progetto complessivo (Figura 1).

Figura 1: lo shield del tracciatore di tensione con la scheda Arduino Mega (sullo sfondo)

La maggior parte dei microcontrollori dispone oggi di una quantità sufficiente di RAM per questa applicazione, in quanto è sufficiente memorizzare un numero di punti pari alla risoluzione orizzontale dell'oscilloscopio: superare questo valore rappresenta puramente un lusso non necessario. L'autore ha utilizzato una scheda Arduino Mega 2560 equipaggiata con 8 Kb di memoria RAM, di cui soltanto 1,8 Kb vengono utilizzati per memorizzare le letture e le altre funzioni del programma. Può comunque andare bene quasi ogni tipo di scheda Arduino, anche una comune Arduino Uno, a condizione che operi alla frequenza di 16 MHz in modo da fornire la capacità di calcolo richiesta, e soddisfare i requisiti legati alle tempistiche.

Se volete realizzare il progetto su una basetta, potete evitare di ricorrere all'impiego della scheda Arduino, e utilizzare soltanto il microcontrollore. Ogni dispositivo appartenente alla famiglia di microcontrollori ATmega dispone di almeno un ingresso analogico, dietro al quale si cela un convertitore analogico-digitale (ADC) ragionevolmente veloce. Anche se disponiamo di un ingresso analogico già pronto per l'utilizzo, dovremo implementare l'uscita analogica tramite un'uscita digitale, ad esempio utilizzando il PWM (Pulse Width Modulation). Ancora migliore, e molto più accurata, è la soluzione che prevede l'utilizzo di un opportuno DAC esterno dedicato, in grado di convertire un byte fornito in ingresso direttamente in una tensione analogica in uscita. Un amplificatore operazionale può poi essere collegato alla sua uscita, agendo come buffer o come stadio di uscita a bassa impedenza. Utilizzando una sorgente di alimentazione simmetrica, è possibile ottenere in questo modo un segnale di uscita pulito, con riferimento a massa.

Il circuito

Avremmo potuto scegliere un DAC iper moderno e super performante, inserirlo su una scheda con l'aggiunta di qualche pulsante, e lo shield sarebbe stato subito pronto. Tuttavia, questi integrati sono in genere costosi e, soprattutto, sono solitamente disponibili soltanto in un package SMD. In realtà noi disponiamo di parecchio spazio sullo shield, per cui si è deciso di utilizzare dei componenti a foro passante al fine di semplificare il montaggio del circuito e renderlo pertanto accessibile anche ai principianti. Fortunatamente, nonostante siano già trascorsi diversi anni dalla sua uscita, il convertitore DAC0808 è tuttora disponibile sul mercato: è un componente affidabile, economico, e quindi adatto ai nostri scopi. Anche il resto del circuito è piuttosto semplice da assemblare, tenendo anche presente che presso Elektor è disponibile il circuito stampato pronto per l'utilizzo  (visibile in Figura 2). Una volta completato l'assemblaggio di tutti i componenti, occorrerà poi caricare un apposito firmware sulla scheda Arduino. I file relativi allo sketch Arduino e al layout del circuito stampato sono disponibili liberamente per il download alla pagina web Elektor dedicata a questo progetto [1].

Figura 2: il PCB dello shield per Arduino

Lo schema elettrico (Figura 3) mostra come il DAC (IC1) sia pilotato dalla porta A del microcontrollore ATmega tramite il connettore K6. IC2 è il buffer di uscita: come componente è stato scelto un amplificatore operazionale di Microchip con uscita rail-to-rail. La scheda Arduino è alimentata con la tensione di +5 V, e questo valore è anche reso disponibile sullo shield. Avremo inoltre bisogno di una tensione negativa per alimentare sia il DAC che l'amplificatore operazionale (le correnti in gioco sono tuttavia molto piccole): questa tensione di alimentazione ausiliaria viene generata dal convertitore di tensione IC3. Come normalmente avviene quando si utilizza uno shield per Arduino, il circuito è abbastanza semplice ed immediato. Gli altri componenti richiesti sono infatti soltanto quattro pulsanti, che costituiscono l'interfaccia utente e consentono di interagire con il dispositivo, e un comune diodo led. La tensione da misurare è disponibile sul connettore K3. L'ingresso analogico del microcontrollore presente sulla scheda Arduino non è protetto da possibili guasti provocati dall'applicazione di tensioni negative o positive e di valore troppo elevato; per questo motivo sono stati aggiunti la resistenza di protezione R1 e due diodi, la cui funzione è quella di limitare entro un range di sicurezza la tensione presente sul pin del microcontrollore.

Figura 3: come si può subito osservare, lo schema elettrico dello shield è relativamente semplice

Poiché stiamo utilizzando l'ADC integrato nel microcontrollore, il range di tensioni disponibili è compreso (e prefissato) tra 0 V e +5 V. Si tratta comunque di un range comodo per lavorare con le celle ricaricabili agli ioni di litio (Li-ion), che, a seconda del particolare modello, funzionano con tensioni fino a 4,6 V. Se volete misurare la tensione di un pacco di batterie, oppure la tensione della batteria a 12 V della vostra auto, sarà sufficiente aggiungere un semplice partitore di tensione. Per questo scopo si possono utilizzare delle resistenze con valori intorno a 100 kΩ, dal momento che l'ingresso analogico presenta un'impedenza molto elevata, pari a circa 100 MΩ. Come menzionato in precedenza, il circuito è alimentato direttamente dalla scheda Arduino. Questa, a sua volta, riceverà l'alimentazione a +5 V tramite una porta USB (per esempio, quella messa a disposizione da un oscilloscopio digitale), oppure tramite un'alimentazione compresa tra 7,5 V e 12 V proveniente da un alimentatore esterno.

Lo shield è collegato all'oscilloscopio tramite due cavi. Uno di questi (quello posto sul connettore K4) porta il segnale analogico, mentre l'altro (posto sul connettore K7) porta un segnale di trigger. Entrambi i segnali sono accessibili tramite un connettore BNC. Due cavi coassiali standard con connettori BNC posti ad ogni estremità possono essere utilizzati per collegare lo shield a un oscilloscopio. In Figura 4 possiamo osservare lo shield assemblato, mentre la Figura 5 mette in evidenza la compattezza dell'unità formata dallo shield inserito sulla scheda Arduino.

Figura 4: lo shield del tracciatore di tensione completamente assemblato

Figura 5: il "sandwich" composto dallo shield e dalla scheda Arduino forma una struttura molto compatta

Elenco dei componenti

Resistenze

R1, R5 =  1kΩ 5%, 0,25W
R2, R3, R4 = 5,11 kΩ 1%, 0,25W, strato metallico

Condensatori

C1–C7, C9, C11 = 100 nF 50V, X7R, passo 0,2’’
C8, C10, C12 = 100 μF 25V, radiale, passo 0,1’’

Semiconduttori

D1, D2 = 1N4148
LED1 = led rosso, diametro 3 mm
IC1 = DAC0808LCN, DIP16
IC2 = MCP601-I/P, DIP8
IC3 = ICL7660CPAZ, DIP8

Varie

K1, K2 = 8-pin pinheader
K3 = 2-pin pinheader
K7, K8 = presa BNC per PCB ad angolo retto
K5 = 6-pin pinheader
K6 = 36-pin (2x18) pinheader
S1–S4 = pulsante, 6x6 mm, montaggio su PCB
zoccoli per gli integrati IC1, IC2, IC3
Due cavi coassiali con prese BNC
PCB # 150422-1 (Elektor Store)
Arduino Mega, # 140566-93 (Elektor Store)

Configurazione e utilizzo pratico

Il microcontrollore memorizza i campioni misurati all'interno della propria memoria, e pertanto non è necessario collegare l'oscilloscopio e tenerlo alimentato per ore mentre si sta eseguendo una registrazione. Tuttavia, l'oscilloscopio è richiesto quando occorre impostare i vari parametri del dispositivo, in quanto l'oscilloscopio stesso è utilizzato come "schermo" per visualizzare l'interfaccia utente comandata tramite i quattro pulsanti.

Una volta assemblato l'intero circuito, scaricato lo sketch sullo scheda Arduino, e inserito lo shield, il tracciatore di tensione può essere collegato all'oscilloscopio utilizzando gli appositi cavi BNC per i segnali dati e trigger, e si può applicare l'alimentazione. Sullo shield sono presenti quattro pulsanti. Due di questi sono (o dovrebbero essere) marcati con le etichette ‘–’ e ‘+’. Questi pulsanti possono essere utilizzati per modificare un singolo parametro, mentre si può navigare tra i vari parametri utilizzando il pulsante S3 (‘set’). Una leggera pressione di S4 (‘start’) avvia o interrompe la registrazione, mentre una pressione prolungata dello stesso pulsante (pari ad almeno 2 secondi) cancella la registrazione corrente. Detto questo, come possiamo visualizzare sullo schermo l'azione che stiamo compiendo tramite i pulsanti? La risposta è molto semplice. La scheda Arduino pilota il DAC in modo tale da creare sullo schermo dell'oscilloscopio una rappresentazione della prima lettera (l'iniziale) del parametro che si sta modificando, seguita da una scala che ne indica il valore corrente.

Il livello di trigger dell'oscilloscopio dovrebbe essere impostato tra 1 V e 4 V, oppure impostato in modo automatico. La base dei tempi dovrebbe essere impostata su 10 ms per divi­sione, e la scala verticale su 2 V per divisione. Occorre inoltre verificare che l'oscilloscopio sia configurato per accettare una sonda 1:1 ai suoi ingressi. Una volta eseguite queste impostazioni, una lettera ‘t’ minuscola (indicante la base dei tempi, o ‘timebase’) dovrebbe comparire sul display, seguita da una scala. I singoli step di questa scala dovrebbero avere un'ampiezza esattamente pari a una divisione: se ciò non si verifica, controllate nuovamente la base dei tempi dell'oscilloscopio. Se il display dell'oscilloscopio non dispone di dodici divisioni orizzontali, il tracciatore di tensione può essere regolato per adattarsi comunque alle dimensioni dello schermo. Per fare ciò, premete il pulsante ‘set’ fino a quando sullo schermo non compare una lettera ‘n’ minuscola (indicante il numero di divisioni, o ‘number of divisions’), e utilizzate i pulsantii ‘+’ e ‘–‘ per inserire il numero di divisioni utilizzato dal tracciaotore, compreso tra 10 e 16 (si veda anche la descrizione più avanti nell'articolo). Una volta inserito il valore corretto, premere il pulsante ‘set’ e mantenetelo premuto sino a quando non compare nuovamente la lettera ‘t’. Si possono a questo impostare gli altri parametri in base a ciò che si vuole misurare, facendo riferimento alla descrizione dei menu che vedremo tra poco. Si noti come sia il led presente sullo shield che quello presente sulla scheda Arduino rimangano spenti durante la configurazione del dispositivo. Entrambi i led lampeggiano invece durante la registrazione, e rimangono accesi fissi quando la registrazione è completata.

I cinque parametri che possono essere configurati, e i range disponibili per ciascuno di essi, sono descritti qui di seguito.

Tabella 1: sono disponibili sette possibili impostazioni per la base dei tempi, o ‘timebase’ (si veda la Figura 6). Le durate indicate nella tabella sono applicabili a un oscilloscopio con dodici divisioni orizzontali. Poichè la scala dell'immagine ha soltanto uno step, la base dei tempi orizzontale è stata impostata su 1 minuto per divisione.

Figura 6: visualizzazione relativa alla configurazione del parametro 'timebase'. L'oscilloscopio mostra una 't' minuscola e una scala con un solo gradino, corrispondente a una base dei tempi di 1 minuto per divisione

 

Tabella 1 - parametro timebase (base dei tempi)
Step Tempo per divisione Durata della registrazione
1 1 minuto 12 minuti
2 2 minuti 24 minuti
3 5 minuti 1 ora
4 10 minuti 2 ore
5 20 minuti 4 ore
6 30 minuti 6 ore
7 1 ora 12 ore

Tabella 2: il livello (‘level’), cioè la tensione al di sopra della quale un segnale in ingresso viene registrato, può essere configurato in cinque step (si veda la Figura 7). L'immagine mostra l'impostazione del livello (‘level’) al valore di 3 V. Si noti come in questo caso la massima oscillazione dell'ingresso che può essere utilizzata è pari a 2 V, in modo tale da mantenersi all'interno dei 5 V di ingresso del microcon­trollore: si veda anche l'impostazione verticale.
[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3056 parole ed è riservato agli abbonati MAKER. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e potrai fare il download (PDF) dell'EOS-Book del mese. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica
Elektor Post

4 Commenti

  1. Giovanni Di Maria Giovanni Di Maria 26 settembre 2017
  2. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 26 settembre 2017
  3. Luca Giuliodori Luca Giuliodori 27 settembre 2017
  4. Angelo.Bilotta 6 ottobre 2017

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *