1. Misure Elettriche ed Elettroniche
Prof. Bruno Andò
Progetto cRIO
Mazza Dario 616/002007
Merlino Sebastiano 616/002008
Messina Marco 616/002000
2. Obiettivi
Acquisire conoscenze di base sull’apparato hardware.
Comprendere il funzionamento del sistema software di
base.
Accumulare esperienze a proposito di interfacciamento
dell’oggetto con hardware esterno.
Utilizzare l’oggetto come controllore “stand alone” di
sistemi automatici.
Reimplementare l’algoritmo di trilaterazione utilizzato nel
sistema CAN‐Bus attualmente realizzato mediante motore
MatLab.
Ottimizzare l’algoritmo di cui al punto precedente per un
funzionamento “stand alone” sul cRIO.
2
Progetto Crio ‐ Mazza, Merlino, Messina
3. Generalità
Il cRIO (Compact Reconfigurable I/O) è un
microcontrollore real‐time programmabile per sistemi
embedded che offre ottime potenzialità come sistema stand
alone per l’esecuzione di applicazioni real‐time in
LabVIEW. Importante caratteristica del sistema è la sua
modularità. Il sistema cRIO consta di un’unità centrale
e di uno chassis ove è possibile ospitare fino a 8 moduli che
estendono le funzionalità dell’oggetto.
Il modello di cRIO a nostra disposizione è il cRIO‐9004.
L’utilizzo di un processore che lavora alla frequenza di 195
MHz permette il bilanciamento di bassi consumi in potenza
e buone capacità di calcolo. Il NI cRIO si interfaccia con
sistemi informatici tramite porta Ethernet BaseT 10/100, ed
inoltre vi è una porta seriale RS232 per collegarvi device
esterni.
3
Progetto Crio ‐ Mazza, Merlino, Messina
4. I moduli
NI 9215 BNC: consta di 4 canali
analogici con un range di input ± 10 V.
Il convertitore A/D ha una frequenza
di campionamento di 800 kS/s in
modalità multiplexer e 100 kS/s in
campionamento simultaneo.
NI 9263: presenta 4 canali analogici per
una risoluzione di 16 bit e presenta un
range di input pari a ± 10 V. Ha una
velocità di aggiornamento simultaneo di
100 kS/s.
4
Progetto Crio ‐ Mazza, Merlino, Messina
5. I moduli
NI 9265: è dotato di 4 canali analogici;
vanta una risoluzione di 16 bit e un
range di output che spazia tra 0 e 20
mA. Può sostenere un carico massimo di
600Ω.
NI 9401: è costituito da 8 canali digitali
di input/output di tipo TTL a ± 5V. Il NI
9401 ha un delay time di I/O inferiore a
100 ns. Il massimo segnale di input
processabile dipende dal numero di
canali utilizzati.
5
Progetto Crio ‐ Mazza, Merlino, Messina
6. Componenti Software del cRIO
Il cRIO viene fornito con un sistema operativo
proprietario chiamato LabVIEW Real‐Time (ETS):
questo si occupa della gestione dei processi e organizza
le operazioni di IO. Altri importanti componenti software
sono:
il modulo Real‐Time per l’organizzazione dei cicli ad
alta priorità;
il modulo NI Rio 2.3.1 e il modulo FPGA che si occupa
dell’interfacciamento con i moduli del Chassis;
Server FTP e Web.
6
Progetto Crio ‐ Mazza, Merlino, Messina
7. Che cos'è l'FPGA?
Un dispositivo FPGA (Field‐Programmable Gate Array) è
un dispositivo che può essere configurato, dall'utente o
dal progettista, in modo da compiere uno specifico
lavoro.
Generalmente i dispositivi FPGA vengono però
programmati direttamente dai progettisti utilizzando
linguaggi come il VHDL (VHSIC Hardware Description
Language dove VHSIC sta per Very High Speed
Integrated Circuits).
7
Progetto Crio ‐ Mazza, Merlino, Messina
8. Come programmare FPGA con
LabVIEW ?
Lo sviluppo di una applicazione FPGA si svolge su un computer
host collegato al dispositivo FPGA; utilizzando il modulo FPGA e il
linguaggio G del LabVIEW si ottiene un Virtual Instrument (VI)
che poi verrà compilato (usando il compilatore Xilinx ISE).
Il risultato della compilazione è un file bit stream che, al momento
dell'esecuzione, verrà caricato nei chip FPGA ed eseguito con un
clock di default a 40 MHz ( 25 ns per ogni tick).
8
Progetto Crio ‐ Mazza, Merlino, Messina
9. Come funzionano le applicazioni
sul cRIO ?
Un applicazione Real‐Time realizzata per essere eseguita sul
cRIO è composta essenzialmente da due parti: la prima è
quella che rimane sul computer Host mentre la seconda è
quella caricata nel cRIO. Le due parti comunicano tramite
una connessione ETHERNET e utilizzando un protocollo TCP
o UDP.
9
Progetto Crio ‐ Mazza, Merlino, Messina
10. Come funzionano le applicazioni
sul cRIO ?
La parte residente sul cRIO è caratterizzata da tre componenti:
Un'applicazione FPGA per l'input, l'output, la comunicazione ed
il controllo;
Un Time‐Critical Loop per le operazioni in virgola mobile, il
processamento e l'analisi dei segnali;
Un Loop a priorità
normale per data logging
locale, l'interfacciamento
Web con pannelli remoti
e la comunicazione
ETHERNET o seriale.
10
Progetto Crio ‐ Mazza, Merlino, Messina
11. Come funzionano le applicazioni
sul cRIO ?
I due loop vengono mappati sul sistema operativo come thread
separati garantendone l'indipendenza durante l'esecuzione. Solo il
Time‐Critical Loop è in grado di interagire con l'applicazione FPGA
contenuta nei chip.
11
Progetto Crio ‐ Mazza, Merlino, Messina
12. L'esperimento “Doppia Soglia”
L'esperimento “Doppia Soglia” è una semplice applicazione
sviluppata per testare le capacità del cRIO e la possibilità di
integrare nei VI codice scritto in C. L'esperimento consiste nella
lettura di due segnali per controllare se superano due soglie
(diverse per i due segnali), i risultati ottenuti dai controlli delle
soglie devono essere dati in ingresso ad un codice C che inverte i
valori booleani ed, infine, l'uscita del codice C deve essere
utilizzata per accendere quattro led. Inoltre, si manda come output
analogico la somma dei due segnali in ingresso. Il risultato visibile
è che se un segnale è sopra una determinata soglia il led si spegne
altrimenti rimane acceso.
Per questo esperimento ci siamo avvalsi di tre moduli: NI 9215 BNC
per l'input analogico (acquisizione dei due segnali), NI 9263 per
l'output analogico (output delle somma dei segnali acquisiti) e NI
9401 per l'output digitale (illuminazione dei led).
12
Progetto Crio ‐ Mazza, Merlino, Messina
14. L'esperimento “Doppia Soglia”
Apre l’applicazione Esegue
FPGA l’applicazione
Esegue
Attende una
l’applicazione
IRQ
Imposta le Imposta i led
Legge i
Soglie da illuminare
booleani
14
Progetto Crio ‐ Mazza, Merlino, Messina
16. La Trilaterazione: tecnica utilizzata
Nel software sviluppato durante il progetto utilizzeremo una tecnica per
l’individuazione dei soggetti nello spazio detta MTA (Multiple
Trilateration Algorithm). Nell’algoritmo MTA la trilaterazione è applicata
a singole terne di sensori a meno che questi non siano allineati. Si calcola
per ciascuna terna:
Nelle precedenti matrici, le variabili x e y rappresentano le coordinate
cartesiane del sensore sulla mappa e la variabile r, invece, va ad indicare la
distanza rilevata dal sensore. A questo punto utilizzando la formula:
otterremo le coordinate, rappresentate dal vettore U, della posizione dell’utente
per la singola terna di sensori.
La media delle coordinate calcolate dalle singole terne fornirà la posizione finale
dell’utente.
16
Progetto Crio ‐ Mazza, Merlino, Messina
17. Generalità sul progetto di
trilaterazione
In questa parte del progetto si è voluto
realizzare un VI che calcolasse la posizione
dell’utente una volta fornita la mappa dei
sensori ed il vettore delle distanze rilevate
da questi.
Si è dovuto realizzare un sistema di
scambio informazioni su rete (basata su
tecnologia Ethernet) tra il cRIO ed un PC
che provvederà a ricevere i dati sulle
distanze inviati dai sensori e a rimandarli
al cRIO che diverrà, quindi, l’unità logica
di calcolo dell’intero sistema e fornirà i
risultati ottenuti nuovamente al PC che
implementa l’interfaccia utente.
17
Progetto Crio ‐ Mazza, Merlino, Messina
19. Il VI di Trilaterazione (cRIO)
Attesa per l’arrivo della
mappa dalla rete
Salvataggio della
mappa su file (per
successivo caricamento)
19
Progetto Crio ‐ Mazza, Merlino, Messina
20. Il VI di Trilaterazione (cRIO)
Loop deterministico
Loop non deterministico
(passaggio variabili)
20
Progetto Crio ‐ Mazza, Merlino, Messina
21. Il VI di Trilaterazione (HOST)
Molto più semplice è il Sub‐VI destinato ad essere eseguito sul PC.
Tale Sub‐VI va ad integrarsi con il sistema di trilaterazione
esistente, fornendo un’interfaccia per la comunicazione con il
cRIO.
Il Sub‐VI consiste in una semplice Flat‐Sequence con imposta una
temporizzazione di 10 msec per mantenere la sincronia con il cRIO.
Le azioni svolte VI sono due. In un primo momento esso invia
l’array di distanze (ricevute dai sensori) ed il numero totale dei
sensori al VI di calcolo sul cRIO; successivamente, riceve la
posizione dell’utente finale (calcolata sul cRIO) e l’eventuale codice
d’errore.
È stato, inoltre, realizzato un VI di configurazione mappa, che si
occupa, semplicemente, dell’invio della mappa dei sensori, come
vettore, sulla rete.
21
Progetto Crio ‐ Mazza, Merlino, Messina
22. Il codice C
Sono state realizzate due differenti soluzioni in C per il calcolo
della trilaterazione che abbiamo chiamato, rispettivamente, “a
taglio per valori” ed “a taglio per occorrenze”; spieghiamole in
dettaglio.
Entrambe le soluzioni accettano in ingresso la matrice delle
posizioni dei sensori ed il vettore delle distanze rilevate da questi.
Il codice andrà a scartare i sensori che inviano un dato non valido
di distanza (maggiore di 10 metri) e, dati questi, calcolerà le terne
di sensori valide (quelle per cui i tre sensori non siano allineati o
coincidenti).
Per ogni terna verrà calcolata la coordinata stimata sull’asse x e
quella sull’asse y.
A questo punto si troverà la posizione dell’utente calcolando la
media dei risultati ottenuti
22
Progetto Crio ‐ Mazza, Merlino, Messina
23. Il Codice C “a taglio per Valori”
Il codice “a taglio per valori” si basa
sulla supposizione che i valori
ottenuti per ciascuna coordinata
siano distribuiti, per numero di
occorrenze, su una gaussiana.
Per poter scegliere i risultati da
scartare, il codice ordinerà (usando
l’algoritmo di QuickSort) i risultati dal più piccolo al più grande e
scarterà i più piccoli N/5 ed i più grandi N/5, ove N rappresenta il
numero totale di valori.
Si calcola la media sui rimanenti e si ottiene il valore della
coordinata.
23
Progetto Crio ‐ Mazza, Merlino, Messina
24. Il Codice C “a taglio per Valori” –
Calcolo della Complessità
Nel caso “peggiore” dal punto di vista della complessità,
avremo 64 sensori (maggior numero possibile di sensori
sostenuto dalla rete CAN‐Bus) tutti a distanza valida e fra i
quali non vi siano mai tre sensori allineati o coincidenti.
Considerando che ogni variabile in ciascuno dei due vettori è
rappresentata mediante l’utilizzo di 64 byte e che nel caso
descritto ritroviamo un numero di elementi per ciascun
vettore pari a 41664 avremo quindi una quantità di bytes
occupati pari a (41664 x 64 x 2)/8 = 666.62 kbyte.
Dal punto di vista della complessità di calcolo l’operazione
più faticosa rimane il QuickSort che risulta comunque un
algortimo a complessità sottolineare.
Si nota un andamento crescente dei tempi di calcolo in
maniera direttamente proporzionale al numero di sensori
24
Progetto Crio ‐ Mazza, Merlino, Messina
25. Il Codice C “a taglio per
Occorrenze”
Il codice “a taglio per occorrenze” non potendo più avvalersi della
supposizione sulla gaussianità, dovrà considerare, per ogni supposto
valore, il suo numero di occorrenze. Per questo motivo, prendiamo in
ingresso un intero rappresentante il numero di cifre dopo la virgola che
considereremo per noi significative. Per ciascuna coordinata troveremo il
minimo ed il massimo valore fra quelli forniti dal calcolo sulle terne di
sensori ed allochiamo un vettore, definito vettore delle occorrenze, con
un numero N di elementi pari a:
Gli indici di tale vettore rappresentano il range di valori misurati, percui,
ad ogni indice dell’array possiamo associare un valore del range.
A questo punto viene riempito il vettore delle occorrenze e si determinano
quelli che hanno numero massimo di occorenze; fra questi si sceglie
quello nel cui intorno ricadono il maggior numero di occorrenze. Il raggio
dell’intorno di valutazione è dato da .
Il valore scelto corrisponderà alla coordinata finale dell’utente.
25
Progetto Crio ‐ Mazza, Merlino, Messina
26. Il Codice C “a taglio per Occorrenze” –
Calcolo della Complessità
L’occupazione di memoria Errore causato da
dell’algoritmo sembra essere il suo un sensore guasto
punto debole si è per questo
preferito utilizzare elementi del
vettore delle occorrenze a 2 byte.
Nel caso peggiore si avrà uno spreco
di memoria pari ai 666,624 Kbyte
dell’algoritmo precedente più una
quantità variabile di memoria di difficile calcolo (si sono, tuttavia,
potute osservare variazioni nell’occupazione di memoria fra i 700
Kbyte e 1‐2 Mbyte). Per ovviare ad eventuali problemi dovuti
all’eccessiva occupazione di memoria si è inserito un controllo che
riduce l’accuratezza se il range dei valori supera una certa soglia.
26
Progetto Crio ‐ Mazza, Merlino, Messina