Sei sulla pagina 1di 9

Anno accademico 2008/2009

Laboratorio di Misure e Diagnostica Industriale





Realizzazione e caratterizzazione di un voltmetro embedded
programmato in LABVIEW.





Studente

Tamburino Christian 832/855





Realizzazione del voltmetro con scheda embedded.

Lo scopo di questa relazione di implementare un voltmetro numerico su supporto embedded
utilizzando un microcontrollore ARM (Advanced RISC Machine) EK-LM 3S8968 della luminary,
programmandolo in ambiente di programmazione grafica LABVIEW della National instruments.
Per far ci ho utilizzato il relativo modulo di sviluppo di LABVIEW per microcontrollori ARM
(embedded module).
Questultimo include generatore di codice C che fornisce il codice direttamente dal diagramma a
blocchi.
Sviluppato il VI sul PC (host computer), questultimo viene trasferito mediante debugger ULINK2
allARM. Da questo momento il VI verr eseguito dallARM stesso.

Commento codice LABVIEW

1. Gestione Display

Allesterno del ciclo while i sub vi Display init.vi e Display set background.vi [1] hanno
rispettivamente il compito di inizializzare lo schermo e settare il colore dello schermo secondo la
variabile di controllo data, che nel nostro caso costante sul valore Black.
Allinterno del ciclo while viene cancellato lo schermo ridisegnando un quadrato nero entro
determinati margini [2] : ad ogni ciclo vengono utilizzati i subvi set foreground.vi, che setta il
colore di ci che verr scritto nelle successive istruzioni, e il display draw rect.vi, che disegna un
quadrato sullo schermo secondo i margini x =(0 ; 127) e y =(0 ; 95) (in pixel) e mediante la costante
booleana all ingresso filled setta i riempimento del quadrato disegnato, in modo da cancellare tutto
lo schermo.

Fig. 1


Viene poi nuovamente utilizzato il sub vi set foreground.vi [3], per settare il colore (diverso dal
quello del blocco di cancellazione) di ci che verr successivamente visualizzato, utilizzando come
variabile di controllo la costante Gray 15.
Il sub vi display draw string.vi [3] serve a scrivere la stringa dei valori in uscita della parte di
codice che elabora il segnale acquisito dal microcontrollore (vedi paragrafo successivo), accettando
in ingresso le coordinate della posizione in cui inizier la visualizzazione della stringa, e la costante
booleana impostata su true che abilit il funzionamento del sub vi.
La tempificazione dei vari sub vi viene fatta mediante linea di errore, essendo legato lo svolgimento
di ogni parte di codice alla presenza in ingresso di tutte le informazioni richieste: dunque collegando
le varie parti di codice in serie mediante linea di errore si obbliga impedendo che il blocco
successivo sia eseguito se non terminata lesecuzione del precedente.
La condizione di uscita dal ciclo legata alla linea di errore sopra citata.


2. Acquisizione

Allinterno del ciclo for vengono acquisiti i valori di tensione del segnale dal canale dingresso AI0
con cadenza di 10 ms impostata dal Wait Until Next ms Multiple .
Dopo lacquisizione dei 100 campioni prestabiliti gli stessi vengono elaborati per fornire la media
dei valori al number to fractional string[5] che crea, dal valore in ingresso, la stringa che
successivamente sar visualizzata a video.

Caratterizzazione del voltmetro

Strumentazione utilizzata:
# 1 Fluke mod.45 Dual Dispaly Multimeter
# 1 Generatore di funzioni Yokogawa FG200
# 1 Microcontrollore ARM EK-LM 3S8968(sopra citato)

Per caratterizzare il voltmetro embedded ho usato il generatore FG200 come generatore di segnale
costante, sfruttando la possibilit di impostare un offset, fissando ampiezza nulla.
Il segnale di stimolo cos creato deve essere di tipo unipolare con tensione massima di 3V al fin di
non danneggiare il canale di ingresso.
Il segnale, che va in ingresso al canale AI0, viene misurato dal multimetro utilizzato, come
strumento campione.

Al variare delloffset sono stati rilevati dai due strumenti i seguenti valori:

Vin (V) Vmis (V) Errore(V)
0,0007 0,010 0,0093
0,1010 0,108 0,0070
0,2090 0,209 0,0000
0,2997 0,305 0,0053
0,4005 0,406 0,0055
0,5007 0,505 0,0043
0,6001 0,606 0,0059
0,7003 0,704 0,0037
0,8003 0,804 0,0037
0,9006 0,902 0,0014
1,0004 1,002 0,0016
1,2007 1,200 0,0007
1,4009 1,402 0,0011
1,6013 1,602 0,0007
1,8000 1,798 0,0020
2,0002 1,997 0,0032
2,2001 2,194 0,0061
2,4005 2,395 0,0055
2,6000 2,593 0,0070
2,7997 2,793 0,0067
3,0003 2,992 0,0083
3,1019 2,997 0,1049





Caratterizzazione Voltmetro
0,000
0,500
1,000
1,500
2,000
2,500
3,000
3,500
0,0000 0,5000 1,0000 1,5000 2,0000 2,5000 3,0000 3,5000
V.in
V
.
m
i
s


Fig 2.



dove indicata con Vin la tensione misurata dallo strumento campione e con Vmis la tensione
misurata dal microcontrollore e visualizzata sul display.
Indico inoltre, sotto la voce Errore, la differenza in valore assoluto tra il valore campione e quello
misurato; tale valore, fatta eccezione per lultima misura in cui si ha la saturazione del canale di
ingresso, resta nellordine dei millesimi di Volt, con un valore massimo di 0.0093V.

Si nota che la caratteristica praticamente lineare con saturazione della misura quando questa si
avvicina al limite superiore dei 3V.







Dopo la realizzazione e caratterizzazione del voltmetro sopraindicato andiamo a rivedere ed
ampliare tutto il progetto al fine di poter calcolare il valore efficace (RMS) di un segnale periodico.

Considerazioni preliminari:
ricordiamo il canale di ingresso AI0 di tipo unipolare. Per ovviare a ci andremo ad
aggiungere al segnale utile un offset che trasler il segnale verso lalto: tale valore sar
fissato a met del range di valori utili, ovvero a 1,5V.

i campioni acquisiti dal canale di ingresso AI0 sono ora riferiti ad un segnale periodico ed il
calcolo del RMS v fatto su un numero intero di periodi. A tal proposito andiamo a
sviluppare un algoritmo di calcolo degli attraversamenti per lo zero che ci torner utile come
vedremo per selezionare un insieme di valori relativi ad un numero intero di periodi.



Commento codice LABVIEW

Allinterno del ciclo for viene sottratto il valore di offset posto a 1,5V ai campioni di ingresso come
detto precedentemente. Alla uscita destra del ciclo for, con la funzione Auto-Indexed Tunnel,
abbiamo larray dei campioni di ingresso con lunghezza fissata dalla costante.
In alto, viene fornito lultimo valore acquisito che sar poi visualizzato a display.



Fig 3




Il successivo ciclo for [5] individua il numero di attraversamenti per lo zero e gli indici dellarray in
cui questi si verificano.
In ingresso al ciclo viene fornito il vettore dei campioni tagliato del primo elemento. Questultimo
inzializza uno shift register che viene utilizzato per effettuare il confronto tra campione attuale e
precedente ed individuare lattraversamento per zero. In alto, invece, vengono inizializzati un
vettore ed una variabile entrambi nulli.


Fig 4

Allinterno del ciclo si ha un controllo sul segno del prodotto degli elementi consecutivi del vettore
presi a coppie[5b]: lattraversamento per zero si verifica quando si ha un cambio di segno tra
elementi successivi e ci equivale a dire che il loro prodotto minore di zero. Caso particolare
quello in cui il prodotto nullo, dovuto al valore nullo di uno dei due campioni coinvolti nel
prodotto; questa circostanza porta a considerare un doppio attraversamento per lo zero quando in
realt se ne verifica uno solo. Per ovviare a ci viene effettuato un controllo che non consente il
rilevamento del passaggio per lo zero se il primo fattore nullo. Ad ogni attraversamento viene
incrementata una variabile: se la variabile alla fine delle iterazioni del for risulta non maggiore di 2,
significa che linsieme dei campioni si riferisce a meno di un periodo e quindi non possibile il
calcolo del RMS.
Nella parte superiore dello stesso ciclo [5a], quando si verifica un attraversamento viene salvato il
valore dellindice attuale nel vettore degli indici.
Anche qui presente, in maniera ridondante, una variabile che tiene conto del numero di
attraversamenti, che inoltre corrisponde anche alla dimensione delle vettore degli indici.




Usciti dal ciclo, il vettore degli
attraversamenti viene diviso in due con un
Decimate Array, in modo tale da ottenere il
vettore dei attraversamenti sui fronti di salita
o sui fronti di discesa rispettivamente se il
primo attraversamento si verifica sul fronte di
salita o di discesa. Ci non v ad inficiare il
funzionamento, poich si ha in entrambi i casi
un numero intero di periodi.





Fig. 5


Fig.6 a Case True


Fig.6 b - Case False.


Al passo successivo troviamo la Case Structure[6], condizionata da controllo sul numero di
attraversamenti rilevati.
Nel caso in cui gli attraversamenti siamo maggiori di due, ed quindi almeno campionato un
periodo del segnale, allinterno della finestra di True[6a] il vettore degli elementi acquisiti viene
tagliato in modo da riferirsi ad un numero intero di periodo, con lausilio di un Array SubSet.
Index e length di tale operazione sono forniti dal vettore degli indici e dalla lunghezza di questo
ultimo. Larray cos formato utilizzato per il calcolo dellRMS con il relativo blocco, il cui
risultato sar successivamente convertito in stringa dal number to fractional string.
Diversamente, nel caso di attraversamenti minori o uguale a due [6b], viene visualizzata la stringa
di errore contenuta nella finestra False.



In entrambi i casi, la stringa in uscita dal
case viene concatenata a quella costante
R.M.S:, per essere visualizzata a
display [7].



Fig.7




Caratterizzazione del voltmetro con RMS

Strumentazione utilizzata:
# 2 Fluke mod.45 Dual Dispaly Multimeter
# 1 Generatore di funzioni Yokogawa FG200
# 1 Microcontrollore ARM EK-LM 3S8968

Anche questa volta, FG200 ci permette di ricavare esattamente il segnale di cui abbiamo bisogno,
ovvero un segnale periodico con un offset posto a 1,5V.
Lo strumento campione ora, rispetto al caso precedente, costituito da due multimetri usati per due
differenti misure voltmetriche: la prima, in DC, restituisce il valore delloffset che deve per tutta la
caratterizzazione non spostarsi dai 1,5V; la seconda, in AC, restituisce il Vrms, valore efficace del
segnale periodico. Sar proprio questultima che andremo a confrontare con quella presa dal display
che rappresenta il valore misurato dal nostro voltmetro embedded.
Luscita del generatore di funzione alimenta direttamente il canale AI0 del microcontrollore, con i
voltmetri in parallelo.
Il range di valori entro cui varia lampiezza del segnale periodico, avendo posto loffset a 1,5V e
sapendo che il canale satura per tensioni superiori ai 3V, sar tra 0 e 1,5 V; al limite massimo di
questo range corrisponde un valore rms di circa 1V.
Premesso ci, si ricavano le seguenti tabelle e la relativa curva:


Vrms In Vrms
mis
Errore

0,0014 0,001 0,0004
0,1003 0,103 0,0027
0,1994 0,203 0,0036
0,3954 0,403 0,0076
0,4935 0,502 0,0085
0,5914 0,598 0,0066
0,6983 0,708 0,0097
0,7965 0,805 0,0085
0,8945 0,909 0,0145
1,0002 1,063 0,0628

Carattrizzazione Vrms
0,000
0,500
1,000
1,500
0,0000 0,2000 0,4000 0,6000 0,8000 1,0000 1,2000
Vrms Ingresso
V
r
m
s

D
i
s
p
l
a
y

Fig.8


dove indicato con Vrms In il valore fornito dallo strumento campione e con Vrms mis il
valore misurato dal microcontrollore.
Anche in questo caso abbiamo riportato sotto il nome di Errore gli errori calcolati in valore
assoluto: escludendo lultima riga in cui si verifica probabilmente una saturazione, il valore
massimo dellerrore 0,0145V.

Conclusioni

Con la realizzazione del suddetto voltmetro, ho potuto constatare le potenzialit del linguaggio di
programmazione LABVIEW della National Instruments e la semplicit dello stesso per trasferire il
codice generato su di un dispositivo embedded.