Mini-datalogger: un ADC connesso alla porta parallela

Sullo sfondo, la finestra del programma per windows

Attenzione

Questa pagina è stata scritta molti anni fa e quindi non posso più fornire alcun supporto

Questo pagina presenta un convertitore analogico-digitale a 8 canali da collegare alla porta parallela di un personal computer.

Il circuito è nato dalla necessità di avere uno strumento agile e senza troppe pretese capace di misurare otto tensioni e trasferirle ad un PC per la successiva elaborazione: in pratica si tratta di un datalogger per uso personale che, pur non avendo le prestazioni (ed i costi!) di analoghi prodotti commerciali, risolve alcuni problemi che non trovano risposta nella strumentazione tradizionalmente disponibile nel laboratorio casalingo (e neppure in molti di quelli professionali, a dire il vero). Se le esigenze non sono molte è anche un dignitoso sostituto di schede di acquisizione dati.

Le caratteristiche principali:

Da quello che ho detto non aspettatevi quindi un oscilloscopio digitale a otto tracce ad alta risoluzione... ma quasi.

Descrizione del circuito

Lo schema elettrico è piuttosto semplice ed è costruito intorno ad un convertitore analogico-digitale con risoluzione di 12 bit della Maxim con interfaccia seriale a tre fili SPI-compatibile: il MAX147.

Come si può osservare nello schema presente nel file max147.tgz tutto il lavoro è fatto da questo integrato: esso contiene l'ADC vero e proprio, il multiplexer analogico ad otto canali, l'interfaccia seriale. Ho scelto di usare un riferimento di tensione esterno (il MAX872) sia per il minor consumo di corrente che per la maggiore precisione; in alternativa sarebbe possibile usare il Max146, sostanzialmente identico al max147 ma con riferimento interno.

Non descrivo il funzionamento del circuito integrato ma vi rimando direttamente ai fogli tecnici disponibili sul sito del produttore (http://www.maxim-ic.com).

Usando il software dimostrativo allegato viene utilizzata la modalità "con clock interno" in quanto non si riescono a garantire in modo rigoroso i timing previsti dalle altre modalità.

L'alimentazione

Una caratteristica interessante del Max147 è la sua possibilità di funzionamento con tensioni di alimentazioni comprese tra 2.7 e 5.5V ed assorbimenti inferiori a 2 mA. Ciò rende superflua la presenza di un regolatore di tensione e di una batteria: il circuito è infatti alimentato attraverso cinque pin della porta parallela che forniscono una tensione che, a seconda del modello della porta parallela del PC, è compresa tra 3 e 5V.

Osservando lo schema della sezione di alimentazione si vedono i cinque diodi (destinati a distribuire la corrente di alimentazione tra più pin), un condensatore da 33 uF, possibilmente al tantalio ed un diodo zener con esclusivamente funzioni di protezione (quest'ultimo potrebbe anche essere omesso, oppure nel caso di uso del max146 sostituito da uno da 3.3V). La resistenza da 100 ohm è stata messa per evitare eccessivi assorbimenti di corrente in caso di corto circuito (per le correnti di funzionamento in gioco è praticamente ininfluente).

Ho utilizzato un filtro LC a T (un dispositivo a tre pin equivalente ad un condensatore connesso a massa e due induttori in serie) con lo scopo di impedire il passaggio al convertitore dei disturbi ad alta frequenza provenienti dal PC; qualora non ne abbiate uno (non sono facilissimi da reperire e qualunque tipo è meglio di nulla) può essere sostituito da un semplice filo tra il pin 1 ed il pin 3, magari infilato in un paio di perline per il blocco delle radiofrequenze.

Un problema che ho notato (solo su alcuni PC) è il mancato riconoscimento della porta parallela in fase di boot se all'accensione il datalogger è già connesso; penso che la causa sia la presenza del condensatore che all'inizio deve caricarsi. La soluzione banale, da applicare solo nel caso si presenti il problema, è quella di collegare il dispositivo solo a PC acceso ed LPT riconosciuta. Il problema non sembra presentarsi in fase di riavvio.

Lo stadio di ingresso dell'ADC

Ciascun canale di ingresso del convertitore è preceduto da un partitore resistivo (indicati sullo schema con Ra e Rb) ed un condensatore da 100 nF. Lo scopo di Ra è quello di offrire una protezione minimale per tensioni maggiori della Vdd o minori di 0. Il valore da usare dipende dalla massima tensione in ingresso che ci si aspetta di trovare. Orientativamente è adeguato un resistore da qualche kohm: valori maggiori peggiorano le caratteristiche del convertitore a causa delle cadute di tensioni causate della corrente di polarizzazione del multiplexer (+/- 0.01uA tipico e comunque inferiore a 1uA), valori minori diminuiscono il grado di protezione. Si tenga conto che, con un resistore da 1 kohm la corrente si mantiene sotto i 2 mA (il valore di sicurezza indicato da Maxim) per tensione comprese tra -2V e +7V, introducendo a causa delle correnti di perdita un errore in DC di tipicamente 10 uV (quindi molto meno del valore di un bit). Se Ra viene omessa (cosa che sconsiglio) ricordarsi di mettere un ponticello.

Lo scopo di Rb è quello di formare assieme ad Ra un partitore adatto per misurare tensioni maggiori di 2,5V. Se si intendono misurare tensioni tra 0 e 5V è per esempio possibile mettere Ra ed Rb pari 10 kohm. Prestate attenzione al fatto che, essendo la massa del circuito connessa a quella del PC, per motivi di sicurezza non è possibile misurare tensioni elevate.

Il vincolo nella scelta delle resistenze del partitore è costituito dalla necessità di non prenderne di troppo grandi per evitare errori da parte del convertitore né troppo piccole per evitare eccessivi assorbimento di corrente da parte del circuito: il loro parallelo deve essere dell'ordine di qualche kohm. Qualora non si intenda usare la Rb, basta semplicemente non metterla.

Se si vuole realizzare un partitore, sia Ra che Rb devono essere resistori di precisione (almeno all'1%), a basso coefficiente termico e soprattutto con simili caratteristiche. Sarebbe opportuno in questo caso effettuare una taratura via software (non fatta dal software fornito), altrimenti non necessaria: basta applicare un segnale di valore noto e vicino al fondoscala, misurato attraverso il multimetro di riferimento e trovare per quale valore occorre moltiplicare il valore letto per ottenere la tensione corretta. Questa operazione va ripetuta per gli otto canali, trovando così otto costanti.

Il condensatore da 100nF forma un filtro passa basso del Ra ed Rb. Migliora il funzionamento in ambienti rumorosi; in base alle specifiche Maxim è necessario se la resistenza in ingresso (Ra // Rb + Rext) supera 1 kohm.

Nella tabella seguente ho riportato alcune combinazioni possibili.

V in V in (MAX) RA RB C I in

COMMENTO

 0 - 2.5 0 - 5 ponticello no opzionale 0.01uA Scelta non consigliata
0 - 2.5 -2 - 7 1 kohm 5% no opzionale 0.01uA  
0 - 2.5 -20 - 25 10 kohm 5% no 100nF 0.01uA Errore aggiuntivo < 10mV
0 - 5 -4 - 14 2.2 kohm 1% 2.2 kohm 1% 100nF 1mA  
0 - 5 -40 - 50 10 kohm 1% 10 kohm 1% 100nF 50uA Errore aggiuntivo < 5mV

Lo stampato

Il circuito stampato è a doppia faccia per ragioni di dimensioni ed anche di prestazioni. Ovviamente non ho utilizzato fori metallizzati, non realizzabili dall'hobbista; è necessario inserire in due punti un piccolo filo per collegare i due lati (una "via" artigianale) nonché realizzare le saldature di alcuni componenti su entrambi i lati del circuito stampato. 

Il circuito stampato pronto per essere "inscatolato"

Consiglio di non montare i due circuiti integrati su zoccolo o, al limite, utilizzare zoccoli con contatti torniti ("a tulipano"). Osservando il circuito stampato è possibile individuare quali sono le saldature da fare sul lato superiore in corrispondenza dell'IC e di alcune resistenze. Sul lato saldature è opportuno saldare tutti i pin.

I due connettori sono normali DB25 per montaggio su cavi (non quindi la versione per circuito stampato) e devono essere "incastrati" orizzontalmente sul fianco nello stampato e saldati sia sopra che sotto senza effettuare fori. E' importante montare un connettore maschio sul lato PC (deve cioè connettersi direttamente nella porta parallela del PC) e verificare attentamente la corrispondenza della numerazione.

Una particolarità è costituita da C2: a causa delle dimensioni verticali potrebbe essere opportuno metterlo al di sotto del circuito stampato, ripiegandolo. Nell'immagine, in effetti, non è visibile.

Le dimensioni permettono di inscatolare il tutto in una struttura molto compatta e maneggevole. Io ho trovato una scatola adatta, quella che si vede nell'immagine di apertura, nel "cassetto delle cose vecchie" ma cercando con calma penso si trovino in commercio. Naturalmente il circuito va benissimo anche "nudo".

Il software

Nel già citato file max147.tgz sono disponibili il codice sorgente ed i binari di alcuni semplici programmi per windows, dos e linux che mostrano sul monitor le otto tensioni misurate.

Lo scopo è ovviamente solo quello di creare una base da cui partire per sviluppare proprie applicazioni. Per saperne di più leggete le pagine dove descrivo VVIO, dove troverete anche alcune librerie che è necessario scaricare per usare il software.

Elenco dei componenti

C1, C3, C4, C5, C6, C7, C8, C9, C10 100nF - vedi testo
C2 33uF tantalio (o anche elettrolitico alluminio)
C11 10nF
C12 1uF tantalio (o poliestere)
D1, D2, D3, D5, D6 1N4148 o equivalente (generico diodo di segnale)
D4  Zener 4V7 1W - opzionale - vedi testo
LC1 Filtro LC Murata DSS310 - opzionale - vedi testo
P1 DB25 maschio a saldare per cavo
P2 DB25 femmina a saldare per cavo
R1, R3, R5, R7, R9, R12, R14, R16 Ra - vedi testo
R2, R4, R6, R8, R10, R13, R15, R17 Rb - opzionale - vedi testo
R11 100 ohm
U1 MAX147 - convertitore AD a 12 bit
U2 MAX872 - riferimento di tensione

Il software, lo schema del circuito ed il PCB sono contenuti nel file max147.tgz:

licenza La licenza d'uso che ho utilizzato
schematic.pdf Lo schema elettrico del circuito, in formato PDF
top.pdf Circuito stampato lato componenti, in formato PDF
bottom.pdf Circuito stampato lato saldature, in formato PDF
assembly.pdf Layout di assemblaggio in formato PDF
LW-CVI\ Software per windows: LabWindows/CVI
VB\ Esempio per windows: Visual Basic
TC\ Esempio per dos: TurboC
qbasic\ Software per dos: Qbasic, realizzato da Giuseppe
gcc/ Un paio di esempi per Linux. Uno dei due è stato realizzato da Francesco Curto

Per realizzare questo circuito è necessario disporre dei seguenti file o documenti:

Prima di realizzare il circuito o utilizzare il software è inoltre necessario leggere le avvertenze generali.

Altri progetti correlati:


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima