relazione pdf

annuncio pubblicitario
Università degli studi di Roma
LA SAPIENZA
Corso di ingegneria informatica e automatica
Misure e strumentazione Automatica
Studio e realizzazione di un pulsossimetro
Di Alessandro Giuseppi
Fabrizio Gennari
All’attenzione del Docente: Prof. Francesco La Gala
Sommario
Obiettivo e svolgimento....................................................................................................................................................... 3
La Pulsossimetria ................................................................................................................................................................... 3
Il calcolo di 𝑆𝑝𝑂2................................................................................................................................................................... 5
Coefficienti di assorbività molare........................................................................................................................................ 7
Problematiche nello studio del segnale ............................................................................................................................. 7
Limiti del modello proposto ................................................................................................................................................. 9
Pulsossimetro ottico a trasmissione ................................................................................................................................... 10
Schemi elettrici.................................................................................................................................................................... 11
Il sensore .............................................................................................................................................................................. 12
Il front end ........................................................................................................................................................................... 14
Microcontrollore ................................................................................................................................................................. 16
Firmware .............................................................................................................................................................................. 21
Analisi dei dati raccolti ....................................................................................................................................................... 22
Calibrazione e testing ........................................................................................................................................................ 26
Video del funzionamento .................................................................................................................................................. 28
Conclusioni .......................................................................................................................................................................... 29
Bibliografia........................................................................................................................................................................... 29
Software utilizzati ................................................................................................................................................................. 29
Autori ................................................................................................................................................................................... 30
2
Obiettivo e svolgimento
Il progetto inizierà con un’introduzione alla pulsossimetria, analizzando alcune delle tecniche più utilizzate nelle
apparecchiature moderne.
Nella seconda parte si analizzeranno le vari fasi della realizzazione di un pulsossimetro, sia per quanto riguarda gli
aspetti elettronici che per quelli software.
Durante tutta la realizzazione gli autori hanno lavorato in gruppo, proponendo entrambi aspetti, problematiche e
soluzioni in un clima di reciproco confronto, approfondendo tal volta aspetti in maniera autonoma per poi
sottoporli all’altro e insieme sintetizzarne le conclusioni.
La Pulsossimetria
La pulsossimetria è una metodica diagnostica che permette di misurare la percentuale di emoglobina legata
all’ossigeno nel sangue di un paziente, in modo non invasivo.
In particolare si vuole misurare la saturazione percentuale di ossigeno, definita come
𝑺𝒑 π‘ΆπŸ =
π‘―π’ƒπ‘ΆπŸ
π‘―π’ƒπ‘ΆπŸ + 𝑯𝒃
Questo indice è di particolare importanza nei pazienti con problemi respiratori o sottoposti ad interventi chirurgici,
poiché un deficit di ossigeno nel sangue può portare a danni irreparabili a tessuti e organi e, in alcuni casi, alla
morte.
Per la natura dell’indice è importante per i medici poter valutare la saturazione di ossigeno in tempo reale,
piuttosto che affidarsi a più accurate misurazioni in laboratorio ad intervalli di alcune ore.
È inoltre importante che la misurazione non sia invasiva, poiché il paziente potrebbe trovarsi in situazioni critiche
(neonato in incubatrice, paziente in ipossia o sotto anestesia) quindi è da escludere il prelievo di un campione di
sangue.
Per realizzare uno strumento in grado di soddisfare questi requisiti si è dunque pensato di utilizzare le proprietà
ottiche della luce,
L’emoglobina legata all’ossigeno, π‘―π’ƒπ‘ΆπŸ o ossiemoglobina, e l’emoglobina non legata, 𝑯𝒃 o deossiemoglobina,
hanno due diversi spetti di assorbimento, ovvero assorbono, al variare della lunghezza d’onda, diverse quantità
di luce.
Valutando l’assorbimento della luce a due differenti lunghezze d’onda si può misurare il rapporto dellle due
emoglobine senza sapere con esattezza la quantità di sangue analizzato.
È possibile realizzare due tipologie di pulsossimetri ottici, basati rispettivamente sulla riflessione e sulla trasmissione
della luce.
3
Nel primo caso un sensore luminoso è posto vicino a due Led che emettono alternativamente luce rossa e
infrarossa, così da poter misurare la quantità di luce riflessa alle due lunghezze d’onda, mentre nel secondo caso
uno o due sensori sono posti dall’altra parte del dito (o orecchio) rispetto ai Led.
La prima soluzione ha il vantaggio di poter essere applicata su qualsiasi parte del copro, anche in zone di
particolare interesse come la zona toracica prossima al cuore, al contrario della soluzione a trasmissione che
richiede di essere applicata su un’appendice il più sottile possibile, tuttavia la quantità di luce riflessa è molto
inferiore a quella trasmessa, e quindi è necessario impiegare un sensore dotato di una risoluzione ed una
sensibilità maggiori rispetto al secondo caso.
Siccome, tranne in pazienti critici l’ossigenazione periferica non è sensibilmente diversa da quella centrale, per il
resto della trattazione ci limiteremo all’analisi di un pulsossimetro a trasmissione, tuttavia , con le dovute differenze
nelle leggi fisiche applicate, l’analisi è valida anche per un pulsossimetro a riflessione.
In entrambi i casi esposti in precedenza si sono utilizzate due Led che emettono luce rossa (πœ†~660π‘›π‘š) ed
infrarossa (πœ†~940). Questa scelta è dovuta sia all’alta capacità di attraversare i tessuti organici della luce a
lunghezza d’onda superiore ai 600nm sia al comportamento della luce attraverso l’emoglobina a quelle
lunghezze d’onda.
Nella figura si evidenza il comportamento dell’assorbività molare (o coefficiente di estinzione molare, ovvero
l’assorbanza specifica a concentrazione molare unitaria attraverso una cella lunga 1 cm) di Hb e HbO 2
P. isosbestico
Si può notare come il comportamento delle due emoglobine è particolarmente diverso alle due lunghezze
d’onda scelte per l’analisi.
In particolare a lunghezze d’onda attorno ai 660nm l’emoglobina ossigenata assorbe una quantità di luce rossa
maggiore dell’Hb, mentre la situazione si inverte per lunghezze attorno ai 940nm.
4
Alcuni pulsossimetri utilizzano al posto della lunghezza d’onda a 940nm la lunghezza prossima all’infrarosso di
805nm, corrispondente al punto isosbestico (l’intersezione tra i due grafici) presente in figura. Se questa scelta da
una parte rende più semplice dal punto di vista computazionale (la quantità di luce assorbita dalle due
emoglobine è la stessa), la misura richiede l’impiego di una lunghezza d’onda non facilmente ottenibile e non
penetrante come quella a 940nm.
Il calcolo di 𝑆𝑝𝑂2
Fino ad ora si è considerata solo l’emoglobina ai fini dell’assorbimento della luce.
Durante l’attraversamento del dito da parte del fascio luminoso, tuttavia, intervengono altri elementi e
l’assorbimento della luce si discosta molto dall’assorbimento che si avrebbe se la luce passasse esclusivamente
attraverso il sangue.
In figura con T è indicata la componente della luce assorbita dai tessuti (ossa ,pelle, unghie),con V quella relativa
al sangue venoso e con A la parte relativa al sangue arterioso.
Se si assume che l’incremento dell’assorbimento di luce sia dovuto esclusivamente al battito cardiaco, e relativa
pulsazione del sangue arterioso, possiamo distinguere nell’attenuazione rilevata un valore costante DC, dovuto
all’assorbimento del sangue venoso e dei tessuti, e una parte variabile AC legata alla pulsazione del sangue
arterioso.
Siccome le altre componenti del sangue (quali il plasma ed i globuli bianchi) non influiscono sensibilmente con
l’assorbimento luminoso si può dunque studiare la SpO2 a partire dal segnale pulsante così ottenuto
considerando solo l’emoglobina, nelle sue due forme, come unico componente del sangue per il calcolo.
5
Consideriamo un fascio luminoso a lunghezza d’onda πœ†1 che attraversa un’arteria di larghezza L.
Ii1
I1
L
Sia 𝑙𝑖1 l’ illuminanza del fascio di luce emesso e 𝑙1 l’illuminanza del fascio di luce trasmesso attraverso l’arteria.
Per la legge di Beer-Lambert si ha:
𝐼1 = 𝐼𝑖1 10−( π›Όπ‘œ1 πΆπ‘œ+
𝛼𝑑1 πΆπ‘Ÿ )𝐿
Con π›Όπ‘œ1 e 𝛼𝑑1 i coefficienti di assorbività molare di ossiemoglobina e deossiemoglobina, e πΆπ‘œ eπΆπ‘Ÿ le rispettive
concentrazioni molari.
Nella stessa situazione, con un fascio di luce con lunghezza d’onda πœ†2 si ha:
𝐼2 = 𝐼𝑖2 10−( π›Όπ‘œ2 πΆπ‘œ +
𝛼𝑑2 πΆπ‘Ÿ )𝐿
Posto
𝑅=
log10 ( 𝐼1 ⁄𝐼𝑖1 ) log10 ((𝐼1𝐴𝐢 + 𝐼1𝐷𝐢 )⁄𝐼𝑖1 )
=
=
log10 ( 𝐼2 ⁄𝐼𝑖2 ) log10 ( (𝐼2𝐴𝐢 + 𝐼2𝐷𝐢 )⁄𝐼𝑖2 )
π›Όπ‘œ1 πΆπ‘œ + 𝛼𝑑1 πΆπ‘Ÿ
=
π›Όπ‘œ2 πΆπ‘œ + 𝛼𝑑2 πΆπ‘Ÿ
Si può ricavare:
𝑆𝑝𝑂2 =
πΆπ‘œ
𝛼𝑑2 𝑅 − 𝛼𝑑1
=
πΆπ‘œ + πΆπ‘Ÿ
(𝛼𝑑2 − π›Όπ‘œ2 )𝑅 − ( 𝛼𝑑1 − π›Όπ‘œ1 )
Noti i vari coefficienti 𝛼, ottenuti tramite analisi in laboratorio su campioni di sangue, l’intero problema si
riduce quindi al calcolo di R.
6
Coefficienti di assorbività molare
Alleghiamo nella tabella i valori per il coefficiente di estinzione (in 𝐿 βˆ™ π‘šπ‘€−! βˆ™ π‘π‘š−1 ) calcolati in laboratorio.
W.G.Zijistra,A. Buursma, “Absorption spectra of human fetal and adult oxyhemoglobin
and de-oxyhemoglobin’’ Clin.Chem.,vol 37[1]
Problematiche nello studio del segnale
Il segnale che analizzeremo avrà la forma dell’onda sfigmica
7
Sarà quindi periodico e non costante.
Per determinare il valore delle luci assorbita da inserire nel rapporto per il calcolo di 𝑆𝑝𝑂2 abbiamo due scelte:
ο‚·
Considerare due valori esattamente in fase tra i due segnali
ο‚·
Considerare un valore ‘’medio’’
La prima soluzione, benché formalmente più corretta è di difficile realizzazione pratica anche nel caso in cui i
due segnali venissero generati e analizzati perfettamente in parallelo.
La seconda opzione risulta realizzabile se si considera la tensione efficace della componente AC del segnale
studiato.
Questo tuttavia rende non più adeguatamente accurata la relazione proposta in precedenza, poiché
escluderebbe totalmente la parte DC.
Grazie a studi su pazienti volontari è stata stimata una relazione empirica tramite interpolazione lineare tra il
rapporto delle sole componenti AC dei due segnali.
𝑅′ =
𝐼1𝐴𝐢
𝐼2𝐴𝐢
Dove in questo caso la lunghezza d’onda 1 è 660nm e la lunghezza d’onda 2 è 940nm.
La relazione trovata, prendendo in esame solo pazienti aventi un 𝑆𝑝 𝑂2 superiore al 90% è la seguente:
𝑆𝑝𝑂2 = −0.342 ∗ 𝑅 ′ + 1.167[2]
Per quanto riguarda l’analisi della frequenza cardiaca si incontra un ulteriore problema: la presenza dell’incisura
dicrota, corrispondente al secondo picco in figura, dovuto alla natura elastica del sistema arterioso, che
trasmette un’onda generata dal battito del cuore indipendentemente dal flusso sanguigno.
Se si procedesse ad uno studio sui massimi relativi del segnale si rischierebbe di dimezzare il periodo del battito.
Per ovviare a questo problema, essendo il segnale periodico e sufficientemente simile ad una sinusoide si passerà
all’analisi in frequenza dello stesso, e si assumerà come sua frequenza la frequenza della pulsazione
caratteristica.
8
Limiti del modello proposto
L’equazione per il calcolo di 𝑆𝑝𝑂2 risulta essere semplificata rispetto ad un’analisi più analitica del fenomeno.
Si è supposto di poter escludere la componente continua del segnale in maniera perfetta, si è considerato il
sangue venoso come non pulsante o comunque ininfluente al calcolo della componente variabile
dell’assorbimento (limite presente in un gran numero di strumenti professionali, poiché ininfluente per pazienti privi
di patologie particolari) e si sono trascurate tutte le assorbitività molari dei componenti secondari del sangue.
Ai fini della misura si è ritenuto che tali semplificazioni rientrassero nella tollerabilità dell’analisi, in strumenti
dedicati a pazienti con patologie o condizioni particolari tali semplificazioni potrebbero non essere tollerabili.
Passiamo ora allo studio dello strumento vero e proprio.
9
Pulsossimetro ottico a trasmissione
Schema a blocchi
Alleghiamo di seguito uno schema di massima del pulsossimetro.
Per evitare fenomeni di interferenza tra i due fasci di luce si è deciso di utilizzare una soluzione in multiplexing.
Tramite il MUX I/O del microcontrollore si accenderanno in modo alternato i due led, ed un unico fotodiodo
rileverà la luce dall’altra parte del tessuto in esame.
Il segnale passa poi per un blocco di Front-end in cui viene amplificato e filtrato, per raggiungere il convertitore
A/D del controllore, il quale invia all’interfaccia seriale del computer, tramite il proprio UART ed un convertitore
max 232, i campioni raccolti.
Sul pc sarà utilizzato un software per mostrare i segnali da studiare e saranno svolte le operazioni finali per il
calcolo del 𝑆𝑝𝑂2.
Si è preferito l’uso di un pc per permettere un’analisi più approfondita dei segnali grazie agli strumenti ad alto
livello disponibili sulla piattaforma.
Uno strumento totalmente autonomo dal computer è possibile previa modifica del firmware del pic ed eventuale
impiego di alcuni OpAmp, tuttavia, per questa soluzione, è necessaria una qualità costruttiva e un’attenzione al
rumore maggiori rispetto a quanto è normalmente possibile con strumentazioni puramente amatoriali.
10
Schemi elettrici
11
Il sensore
Il sensore è stato implementato nel seguente modo:
Un led IR e un led Red operanti rispettivamente ad una lunghezza d’onda di 940 e 660 nm montati sul lato
opposto rispetto ad un fotodiodo dotato di una larghezza di banda che comprenda l’intervallo 660-940 nm.
L’utilizzo del fotodiodo è stato deciso rispetto altre due alternative (foto resistenza o fototransistor) in quanto ha
una risposta temporale più veloce e una larghezza di banda migliore (più stretta) eliminando così componenti
indesiderate.
I componenti utilizzati saranno:
- led IR tipo LD271;
- led Red tipo LX5093XRC;
- fotodiodo tipo BPW20RF;
Si riportano di seguito le risposte in frequenza dei tre componenti:
led IR tipo LD271
12
-
led Red tipo LX5093XRC
- fotodiodo tipo BPW20RF
Si noti che la risposta in frequenza del fotodiodo a 660 nm è più bassa di circa un 35% rispetto a quella a 940 nm.
Questo fenomeno potrà essere compensato via hardware o via software.
13
Il front end
La funzione del blocco “front-end” è quella di polarizzare correttamente il fotodiodo e di trasformare la variazione
in corrente ΔId in una tensione ΔV. Questo è ottenuto tramite un transimpedance amplifier.
Considerando che l’A/D utilizzato accetterà tensioni comprese tra 0 e 5 V, il front-end dovrà amplificare il segnale
ΔV proveniente dal transimpedance amplifier.
A tale segnale andrà sommata una tensione costante di 2,6 V (piedistallo) per due motivi:
1) centrare il segnale in uscita al centro della dinamica dell’A/D (0-5 V);
2) permettere agli operazionali di lavorare a una tensione di alimentazione singola (+9V) invece che duale (+9 V e
-9V)
Così facendo lo zero sarà traslato in 2,6.
La scelta di 2,6V invece dell’esatta metà del range in input dell’A/D (2,5 V) è stata dettata semplicemente da
ragioni di reperibilità del diodo Zener.
Il blocco front-end può essere suddiviso in cinque differenti sotto blocchi, come riportato nella figura seguente.
Questa divisione sarà utile per andare a definire i singoli guadagni. Per semplicità si trascureranno i circuiti di
filtraggio i quali verranno trattati più avanti.
2,4𝑉
√2
Il segnale Ac in uscita dal FrontEnd sarà quindi su un piedistallo di 2,6Vdc e potrà assumere come massimo valore
di picco Vp=2,4V (per Vp >2,4V andrebbe oltre il fondo scala dell’A/D).
Il suo valore efficace, che d’ora in poi indicheremo con V, sarà V3=V2=2,4/√2 =1,68V.
Si noti che l’uscita di Amp3 è messa in corto circuito con l’ingresso invertente (-) questo fa in modo che si abbia un
guadagno K3 unitario. Amp3 è quindi un buffer, o inseguitore di tensione.
Imponiamo ora i guadagni K2=K1=48 e il valore di attenuazione dell’attenuatore variabile ATT a K a=1/2 . In questo
modo si ottiene Va=0,35V, V1=70mV, V=1,45mV.
Vediamo nel dettaglio quanto appena detto.
14
Il transimpedance amplifier deve trasformare una variazione di corrente in una variazione di tensione. La costante
k che legherà le due grandezze sarà dunque un valore di resistenza. Questo è valido ovviamente nel caso più
semplice in cui in ingresso ci sia una corrente continua (il condensatore C3 si comporta come circuito aperto). Nel
caso più generale si dovrà tener conto anche dell’impedenza del condensatore quindi il rapporto tra le due
grandezze sarà: ΔV= ΔI[1/R1 + (1/jωC3)- 1]-1= ΔI[1/R1 + jωC3]-1= ΔI[(1 + R1 jωC3)/ R1]-1= [R1/(1 + R1 jωC3)] ΔI
Tracciando i diagrammi di Bode di R1/(1 + R1 jωC3) è facile osservare che come pulsazione di attraversamento si
ha ωattr.= (R1C3)-1. Considerando che R1=K=V/Id=1,5MΩ e che si è deciso di tagliare la banda attorno ai 20Hz
ricaviamo C3=4’700pF.
Alleghiamo di seguito il diagramma di Bode nella configurazione scelta.
Ragionamenti analoghi valgono anche per gli amplificatori dei blocchi 2 e 3.
Passiamo ora alla implementazione circuitale dei singoli blocchi, riferendoci allo schema elettrico.
Il circuito di referenza che genera la tensione Vref di 2,6Vdc è realizzato dal diodo zener D1 imponendo una
corrente di zener Iz=10mA otteniamo R4=(Vb-Vz)/Iz=(9-2,6)/10mA =640 ohm (680ohm) dove Vb è la tensione di
alimentazione (batteria 9Vdc).
I due circuiti integrati IC1 e IC2 sono di tipo LM324 il quale contiene al suo interno quattro operazionali.
15
Il TIA (TransImpedance amplfier) è rappresentato nello schema da IC2 (pin 3,2,1) in cui la resistenza di 1,5Mohm
prima calcolata ne definisce il guadagno mentre i due condensatori C1 e C2 sopprimono disturbi ad alta
frequenza. La rete resistiva R2,R3 stabilisce una polarizzazione di circa 0,4Vdc necessaria all’operazionale per
operare correttamente.
I due AMP1 e AMP2 sono due amplificatori realizzati rispettivamente da IC1(pin 1,3,2) e IC1(pin 6,5,7) aventi lo
stesso guadagno K1=K2 = 1+R7/R6=48 per K1 e 1+R10/R9 per K2 , AMP3 è realizzato da IC1(pin 9,10,8) e il suo
guadagno K3 è unitario (Buffer).
Nel circuito i condensatori C4, C5, C6 hanno funzioni di filtraggio della tensione di alimentazione.
Tra AMP1 e AMP2 troviamo l’attenuatore ATT che è realizzato con un trimmer da 10 Kohm e permette di
attenuare il segnale da 0 a 1.
Microcontrollore
La frequenza del segnale proveniente dal front-end varia tra 0,5 Hz e 3.5 Hz, corrispondenti rispettivamente a 30
e 210 battiti per minuto, con una tensione massima di 5 V.
Considerando un passo di discretizzazione intorno ai 5 mV (peso dell’ LSB) con un fondo scala di 5 V otteniamo:
1
2𝑛
*5 = 5 ∗ 10−3
𝑛 = [3 ∗ π‘™π‘œπ‘”2 (10)]
con [] := intero superior
da cui
n = 10 bit
Si decide di campionare il segnale a una fs (frequenza di campionamento) compresa tra 900 e 1100 campioni/s.
Questa scelta permetterà una ricostruzione fedele del segnale campionato, essendo ben maggiore della
frequenza minima di campionamento.
Si ricorda che, per il teorema del campionamento, sarebbe sufficiente una frequenza doppia rispetto alla
banda del segnale in ingresso, che nel nostro caso corrisponderebbe a 3,5 Hz, non considerando le armoniche di
ordine superiore in quanto tagliate dai filtri del front-end.
Stabilita la frequenza di campionamento passiamo a calcolare la velocità di trasferimento dei dati seriali dal
microcontrollore al PC.
Si stabilisce che il protocollo di scambio dati tra microcontrollore e computer è di tipo RS232 asincrono con le
seguenti caratteristiche:
16
-
1 start bit
-
8 bit di dato
-
No parity
-
1 stop bit
Segue dunque che per ogni byte da trasmettere verranno impiegati 10 bit.
Sotto queste condizioni andiamo a definire la baude rate.
Il microcontrollore dovrà trasmettere 2 byte ogni millisecondo in quanto l’A/D converte a 10 bit. Tenendo
presente che ad ogni byte vanno aggiunti lo start e lo stop bit si trasmetteranno 20 bit ogni millisecondo.
Le velocità standard maggiormente utilizzate dal protocollo RS232 sono 4800 bit/s, 9600 bit/s, 19200 bit/s, 38400
bit/s et cetera. Dovendo trasmettere in un millisecondo 20 bit il bit time sarà 1/20 ms ovvero 50 µs. Alla velocità
di 38400 bit/s si otterrà un bit time di 1/38400 s ovvero 26 µs.
Il totale dei due byte (20 bit) richiederà 520 µs, evitando così la perdita di dati. Si assumerà quindi la velocità di
trasferimento dati di 38400 bit/s.
I requisiti minimi del microcontrollore dovranno essere:
-
A/D di 10 bit con tempi di conversione inferiore al millisecondo;
-
porta UART a 38400 bit/s;
-
tre porte di I/O per gestire il led IR, red e led di stato.
Dopo un’analisi costo\prestazione dei vari modelli di microcontrollore è stato scelto il componente della
MicroChip 16F876A le cui caratteristiche principali sono riassunte nella tabella seguente.
17
I dati provenienti dall’A/D (10 bit) saranno trasmessi al computer secondo il seguente protocollo:
L’Host (computer) invia tramite seriale il carattere Ascii ‘i’ per avviare una campagna di acquisizione
accendendo il led Ir, e ‘r’ per avviare l’acquisizione dal led Red.
I dati saranno codificati nel seguente modo:
LeastSignificantByte indici pari (0 , 2, 4, ecc.);
MostSignificantByte indici dispari (1,3,5 ecc.).
L’A/D per ogni campagna (Ir e Red) di acquisizione effettuerà 16382 conversioni ed il micro invierà al computer
16382 x 2 = 32768 Byte
Il tempo di acquisizione per ogni campagna sarà di circa 16 sec (ogni acquisizione dura poco meno di 1 ms)
Nello schema elettrico viene riportato lo schema del Micro Controller e dell’interfaccia MAX232 ricavati dai
rispettivi data sheeet.
Nonostante il PIC16f876A possa lavorare ad una frequenza di 20MHz, per le nostre esigenze lo utilizzeremo con
una frequenza di clock di 8MHz, Tc =0,125uS.
18
Associazione pin 16F876A alla relativa funzione :
Pin 1 ----οƒ  MasterClear & Vpp (per programmazione chip)
Pin 2----οƒ  An0 ingresso A/D (proveniente dal FrontEnd)
Pin 8----οƒ  Vss (massa alimentazione 5Vdc proveniente da USB computer)
Pin 9----οƒ  Osc1 (quarzo 8 MHz)
Pin 10--οƒ  Osc2 (quarzo 8 MHz)
Pin 17--οƒ  TX
(uscita seriale trasmettitore)
Pin 18--οƒ  RX
(ingresso seriale Ricevitore)
Pin 19--οƒ  Vss
(massa alimentazione 5Vdc proveniente da USB computer)
Pin 20--οƒ  Vdd
( alimentazione +5Vdc proveniente da USB computer)
Pin 21--οƒ  RB0
( porta I/O uscita stato acquisizione comanda led)
Pin 22--οƒ  RB1
( porta I/O uscita comando eccitazione led Ir)
Pin 23--οƒ  RB2
( porta I/O uscita comando eccitazione led Red)
Pin 27--οƒ  PGC
( porta per programmazione micro)
Pin 28--οƒ  PGD
( porta per programmazione micro)
Tutti i restanti pin non sono usati.
Descrizione Connettori In/Out
J1---οƒ  Connettore per programmazione connesso a MPLAB ICD3 Programmer
J2---οƒ  Connettore USB per alimentazione +5Vdc proveniente dal computer
J3---οƒ  Connettore per collegamento a porta RS232 del computer
Tp1οƒ  Connettore ingresso A/D proveniente dal FrontEnd
Tp2οƒ Connettore collegamento diodi Ir e Red
19
Il componente MAX232 è stato utilizzato secondo quanto previsto dal produttore
20
Firmware
Compatibilmente al protocollo di trasferimento descritto analizziamo il firmware del PIC.
Il firmware è stato scritto utilizzando l’ambiente di sviluppo MPLAB e il modulo HI-TECH che permette di scrivere il
codice in C.
#include<htc.h>
#include<pic.h>
#define _XTAL_FREQ 8000000
#include "uart.h"
#define Acquire RB0
#define Ir RB1
#define Red RB2
void main()
{int i=0;
unsigned char a;
TRISB = 0x00;//inizializzazione PIC
TRISC = 0x00;
UART_Init_38400();
ADC_Init();
do
{
if(UART_Data_Ready()) a = UART_Read();//legge l'istruzione inviata dal
pc. 'i' attiva l'infrarosso, 'r' il rosso
if(a== 'i')
{Acquire=1;//accende il led di stato
Ir=1;//accende il led IR
ADC_Read(0);//avvia la lettura dell’adc
UART_Write(ADRESL);//8 bit meno significativi (nel PIC sono presenti
due registri separati per la gestione dell'AD)
UART_Write(ADRESH);//2 bit più significativi
__delay_us(5);
i++;
if(i>=16384){i=0;a=0;Ir=0; }//se sono stati prelevati campioni a
sufficienza
}
if(a== 'r')//caso del rosso,considerazioni equivalenti al caso
precedente
{Acquire=1;
Red=1;
ADC_Read(0);
UART_Write(ADRESL);
UART_Write(ADRESH);
__delay_us(5);
i++;
if(i>=16384){i=0;a=0;Acquire=0;Red=0; }
}
}while(1);//loop
}
21
Analisi dei dati raccolti
Ora che abbiamo inviato i nostri campioni al computer dobbiamo studiarli per estrapolare le informazioni che ci
interessano ai fini della misura.
Per lo sviluppo di un’applicazione adatta ai fini proposti si è deciso di impiegare CVI, potente e versatile IDE
sviluppato dalla National Instruments e disponibile per gli studenti come trial gratito sul loro sito.
Andremo ora ad allegare ed analizzare alcuni frammenti di codice.
L’interfaccia utente è stata così organizzata:
22
Andremo ora ad analizzare le varie funzioni relative ai singoli elementi dell’interfaccia.
int CVICALLBACK StartCallback(int panel, int control, int event, void
*callbackData, int eventData1, int eventData2)
{
int32
error=0;
char
chan[256];
uInt32
sampsPerChan;
float64
min,max,rate;
int
log;
char
errBuff[2048]={'\0'};
if( event==EVENT_COMMIT ) {
GetCtrlVal(panel,PANEL_RS232,&comport);//identificazione della porta
e del device connesso
Fmt (devicename, "%s<%s%i", "Com", comport);
if (ConfigCom()==-1) return -1;
SetCtrlAttribute (panel, PANEL_START, ATTR_DIMMED, 1);//disattiva il
pulsante start
ProcessSystemEvents ();//refresh dell'applicazione a schermo
GetCtrlVal(panel,PANEL_MINVAL,&min);
GetCtrlVal(panel,PANEL_MAXVAL,&max);
GetCtrlVal(panel,PANEL_RATE,&rate);
GetCtrlVal(panel,PANEL_SAMPSPERCHAN,&sampsPerChan);
SetCtrlAttribute(panel,PANEL_STRIPCHART,ATTR_XAXIS_GAIN,1.0/rate);//imposta
la scala sull'asse x
log = (int)log10(rate);
//setto gli attributi del grafico
SetCtrlAttribute(panel,PANEL_STRIPCHART,ATTR_XPRECISION,log);
SetCtrlAttribute(panel,PANEL_STRIPCHART,ATTR_POINTS_PER_SCREEN,10000);
SetCtrlAttribute(panel,PANEL_STRIPCHART,ATTR_NUM_TRACES,1);
ComWrtByte (comport,'i' ); //inizia l'acquisizione dei dati dal
micro,richiedendo prima l'analisi infrarossa.
t0=Timer();
while (LengthQ <32768 && t<= 20)//limite di tempo per evitare loop
infiniti in caso di malfunzionamenti
{
t=Timer()-t0;
LengthQ = GetInQLen (comport); //legge la lunghezza della coda di
informazioni disponibile sulla porta,se sono 32768 esce
}
if (LengthQ>=32767) //se effettivamente sono disponibili i dati e non
si è verificato time out
{ComRd (comport, Rs232Data, LengthQ);//salva nel vettore Rs232Data i
23
valori sulla coda in ingresso
for(i=0;i<=LengthQ;i=i+2) {IrData[i/2]=(Rs232Data[i])+
(Rs232Data[i+1])*256;IrData[i/2]=IrData[i/2]*5/1024;}//ricostruisce
l'informazione effettuando uno shift di 8 bit per le informazioni salvate nel
secondo blocco di dati, e li moltiplica per il passo di quantizzazione 5/1024
per riconvertire i valori in volt
SetCtrlVal (panelHandle,PANEL_SAMPLES, LengthQ);
ACDCEstimator (IrData, LengthQ/2, &AcComponent,
&DcComponent);//stimiamo il valore efficace della tensione. Questo permetterà
di ottenere una misura notevolmente migliore nel calcolo di spO2 al momento
del rapporto finale
AutoPowerSpectrum (IrData,LengthQ/2 , 1/rate, Amplitude,
&Freq);//viene effettuata la trasformata di fourier a partire dai campioni
contenuti in IrData. La trasformata viene fornita come elenco delle ampiezze
relative alle frequenze componenti.
MaxMin1D (Amplitude,LengthQ/2 , &MaxVal, &MaxIndex, &MinVal,
&MinIndex);//otteniamo gli indici del massimo e del minimo del vettore
if(AcComponent<=0.1)
FrequencyIr=0;//se non avviene una misura
verosivime è inutile procedere nei conti
else FrequencyIr=((MaxIndex+1) * Freq)*60;//convertiamo la frequenza
fondamentale (quella dall'ampiezza maggiore) in
battiti al minuto
PlotStripChart(panelHandle,PANEL_STRIPCHART,IrData,10000,0,0,VAL_DOUBLE);
//stampa dei campioni sul grafico
SetCtrlAttribute(panel,PANEL_STRIPCHART,ATTR_NUM_TRACES,2);//predisposizione
del grafico per la seconda traccia
SetCtrlVal (panelHandle,PANEL_AC_IR, AcComponent);
}
///analisi del rosso,stesse considerazioni del caso precedente
t0 = Timer ();
ComWrtByte (comport,'r' );
t0=Timer();
while (LengthQ <32768 && t<= 20)
{
t=Timer()-t0;
LengthQ = GetInQLen (comport);
}
if (LengthQ>=32767)
{ComRd (comport, Rs232Data, LengthQ);
for(i=0;i<=LengthQ;i=i+2) {RedData[i/2]=(Rs232Data[i])+
(Rs232Data[i+1])*256;RedData[i/2]=RedData[i/2]*5/1024;}
SetCtrlVal (panelHandle,PANEL_SAMPLES, LengthQ);
ACDCEstimator (RedData, LengthQ/2, &AcComponent, &DcComponent);
AutoPowerSpectrum (RedData,LengthQ/2 , 1/rate, Amplitude, &Freq);
MaxMin1D (Amplitude,LengthQ/2 , &MaxVal, &MaxIndex, &MinVal,
&MinIndex);
if(AcComponent<=0.1)
FrequencyRed=0;
24
else FrequencyRed=((MaxIndex+1) * Freq)*60;
SetCtrlVal (panelHandle,PANEL_AC_RED, AcComponent);
///fine analisi rosso
if(FrequencyIr==0 || FrequencyRed==0)Frequency=0;//se c'è stato un
errore invalida la misura
else Frequency=(FrequencyIr+FrequencyRed)/2;//altrimenti fa la media
delle due frequenze ricavate
SetCtrlVal (panelHandle,PANEL_FREQ, Frequency);//stampa della
frequenza
for(i=0;i<=16384 ;i++) {IrRedData[2*i]= IrData[i];IrRedData[2*i+1]=
RedData[i];}//si crea un vettore unico adatto ad essere stampato sul grafico
PlotStripChart(panelHandle,PANEL_STRIPCHART,IrRedData,20000,0,0,VAL_DOUBLE);/
/stampa dei due segnali
spo2=-0.342*(AcComponent2/AcComponent)+ 1.167;//calcola spo2
SetCtrlVal(panel,PANEL_SPO2,spo2);//stampa spo2
}
SetCtrlAttribute (panel, PANEL_START, ATTR_DIMMED, 0);
//riattiva il
pulsante start
}
return 0;
}
25
Calibrazione e testing
26
27
Video del funzionamento
(video disponibile anche a: http://www.youtube.com/watch?v=CChBlzBni5w&feature=youtu.be)
28
Conclusioni
Il progetto ha analizzato tutte le tematiche relative alla pulsossimetria e alla realizzazione di un pulsossimetro,
cercando, dove possibile, di entrare nello specifico.
Con opportune modifiche le considerazioni fatte sono valide anche per la realizzazione di altri macchinari
medici.
Negli ospedali si stanno diffondendo sempre più sistemi d’automazione, dal semplice controllo di parametri vitali
collegato ad allarme a veri e propri robot, come il ‘’da Vinci’’ della Intuitive Surgical in grado di operare pazienti.
Sono in corso studi da svariati anni di dispositivi automatici in grado di somministrare farmaci salvavita o
intervenire in vario modo su pazienti critici quando vengono rilevate anomalie in determinanti parametri
fisiologici, l’ormai diffuso peacemaker ne è un esempio.
Tutti questi sistemi hanno come requisito fondamentale l’affidabile misurazione delle grandezze di interesse.
Una misura non adeguata può portare alla morte del paziente stesso, per questo motivo lo studio
dell’automazione in ambito medico è di primaria importanza.
Bibliografia
[1] W.G.Zijistra,A. Buursma, “Absorption spectra of human fetal and adult oxyhemoglobin
and de-oxyhemoglobin’’ Clin.Chem.,vol 37
[2] Wukitisch MW, Peterson MT, Tobler DR, Pologe JA: Pulse oximetry:analysis of theory, technology, and practice.
J Clin Monit 1988, 4:290-301.
Medical Electronics,Dr. Neil Townsend,Michaelmas Term 2001 32-42
Pulse Oximeter Fundamentals and Design, Santiago Lopez 2012
Pressione arteriosa,Grassi
Software utilizzati
CVI
MPLAB HI TECH
Microsft Office
29
Autori
Fabrizio Gennari
email:[email protected]
Alessandro Giuseppi
email:[email protected]
Università degli studi di Roma La Sapienza
3° anno Ingegneria Informatica ed Automatica, indirizzo Automatica
30
Scarica