Suunnittele edullinen pulssioksimetri käyttäen valmiita komponentteja
Julkaisija DigiKeyn kirjoittajat Pohjois-Amerikassa
2020-08-13
Pulssioksimetri mittaa perifeeristä happisaturaatiota (SpO2), joka kuvastaa sydämen ja keuhkojen kykyä toimittaa elimistöön hapekasta verta. Urheilijat arvioivat SpO2-arvojen avulla treenauksen tehoa, mutta koronapandemian aikana mittareille on löytynyt vieläkin tärkeämpää käyttöä. Terveydenhuollon ammattilaiset tarkkailevat SpO2-arvon laskua, sillä se voi antaa jo varhain viitteitä keuhkovaurioista, jotka johtuvat COVID-19-pandemian aiheuttavasta SARS-CoV-2-viruksesta.
Edulliset pulssioksimetrit voivat auttaa kotikaranteeniin määrättyjä lieväoireisia ihmisiä seuraamaan tilaansa ja tarjoavat ajoissa tietoja jatkotoimenpiteiden tarpeesta.
Tässä artikkelissa käsitellään lyhyesti koronavirustaudin oireita ja SpO2-seurannan tarvetta. Sen jälkeen artikkelissa esitetään, miten kehittäjät voivat suunnitella Microchip Technologyn digitaalisen signaaliohjaimen (DSC) ja muutaman lisälaitteen avulla edullisen pulssioksimetrin, joka tarjoaa kotikäyttäjille ennakkotietoa koronavirustartunnan pahenemisesta.
Koronavirus ja happisaturaatiotason mittaustarve
COVID-19-tautiin liittyy monenlaisia oireita, jotka johtuvat SARS-CoV-2-viruksen haitallisista vaikutuksista. Terveydenhuollon ammattilaiset ovat erityisen huolissaan keuhkokudoksen vaurioitumiseen liittyvistä oireista, jotka heikentävät hengitysjärjestelmän toimintaa ja elimistön hapenottokykyä. Lääkärit voivat todeta taudin tämän vaiheen rintakehän röntgenkuvauksella ja tietokonetomografialla (TT), mutta SpO2-arvojen rutiininomaisen seurannan avulla voidaan saada viitteitä keuhkovaurioista jo varhaisessa vaiheessa.
SpO2-mittaus on noninvasiivinen vaihtoehto valtimoveren happiosapaineen mittaukselle (SaO2), jossa happiosapaine mitataan suoraan potilaan valtimosta otetusta verinäytteestä. Vaikka suoraa valtimoveren happiosapaineen mittausta tarvitaankin joissakin tapauksissa, SpO2-mittauksen on todettu tarjoavan luotettava estimaatio SaO2-tasosta. Lisäksi on syytä huomata, että optisilla pulssioksimetreillä tehtävä mittaus on kotioloissa aivan yhtä luotettavaa kuin sairaalassa.
Optiset pulssioksimetrit mittaavat SpO2-arvoa hyödyntämällä eroja vähähappisen hemoglobiinin (Hb) ja hapettuneen hemoglobiinin (HbO2) valonabsorptiokyvyssä. Punasolujen hemoglobiini sitoutuu runsashappisissa keuhkoissa jopa neljään happimolekyyliin nopeasti ja palautuvasti. Tässä HbO2-tilassa molekyyli absorboi enemmän valoa aallonpituudella 940 nanometriä (nm) kuin aallonpituudella 660 nm (kuva 1).
Kuva 1: Hapettunut (HbO2) ja vähähappinen (Hb) veri absorboivat valoa eri tavoin. Pulssioksimetrin toiminta perustuu juuri tähän eroon. (Kuvan lähde: Wikipedia)
Kun HbO2-molekyylejä kuljettavat punasolut kulkevat kehon ääriosiin, joissa hapen osapaine eli yhden kaasukomponentin paineen osuus kaasuseoksen paineesta on pienempi, hemoglobiinin happiaffiniteetti pienenee, HbO2 alkaa vapauttaa happimolekyylejään ja muuttuu Hb:ksi. Molekyylin kyky absorboida valoa muuttuu tässä vähähappisessa tai hapettomassa tilassa, ja se absorboi enemmän valoa aallonpituudella 660 nanometriä (nm) kuin aallonpituudella 940 nm.
Koska HbO2 muuttuu muotoon Hb hapen osapaineen laskiessa, SpO2-arvo voidaan laskea yksinkertaisesta kaavasta:
SpO2 = HbO2 / (HbO2 + Hb)
Verenkierron suhteelliset Hb- ja HbO2-pitoisuudet voidaan puolestaan arvioida mittaamalla, miten hyvin veri absorboi valoa aallonpituuksilla 660 nm ja 940 nm.
Pulssioksimetrimittauksessa hyödynnetään veren hapen osapainetta, hemoglobiinin happikuormaa ja valon absorptiokäyttäytymisen eroja luotettavien SpO2-mittauksien tarjoamiseen.
Tyypillisen pulssioksimetrin tärkeimmät alijärjestelmät
Tyypillisessä pulssioksimetrissä on kolme pääasiallista alijärjestelmää:
- Valoalijärjestelmä, joka sisältää analogiset kytkimet ja ohjaimet sekä valodiodit (ledit), jotka tuottavat punaista valoa (aallonpituus 660 nm) ja infrapunasäteilyä (950 nm). Joissakin järjestelmissä käytetään lisäksi vihreän valon (530 nm) lähteitä fotopletysmografiaan (PPG), jossa sydämen sykettä mitataan tarkkailemalla ihon verisuonissa kulkevan verimäärän muutoksia.
- Valon tunnistusalijärjestelmään kuuluu valodiodi, signaalinparannusketju sekä analogi-digitaalimuunnin (ADC).
- DSC tai mikrokontrolleri, jolla ohjataan valon lähetys- ja tunnistusalijärjestelmiä sekä lasketaan SpO2-arvo mittaustietojen perusteella.
Vaikka näitä samoja perusjärjestelmiä käytetään kaikissa pulssioksimetreissä, niiden toteutustapa voi vaihdella merkittävästi. Transmissiivisessa pulssioksimetrissä valodiodi tulee käyttäjän sormessa tai korvalehdessä eri puolelle kuin ledit. Yleisesti saatavana olevissa sormipulssimetreissä punaista, infrapunaa ja mahdollisesti vihreää valoa lähettävät ledit ovat sormeen kiinnitettävän klipsin yhdellä ja valodiodi toisella puolella. Heijastussuhteen mittaukseen perustuvissa pulssioksimetreissä valodiodi ja ledit ovat samalla puolella ihoa. Niiden välissä käytetään jonkinlaista artefakteja vähentävää optista estettä. Esimerkiksi OSRAM SFH7060 on valmis heijastussuhdetta mittaava laite, jossa ledit ja valodiodi on sijoitettu yhteen 7,2 x 2,5 x 0,9 millimetrin (mm) koteloon.
Näitä optisia koteloita voidaan käyttää läpäisy- tai heijastusratkaisuissa. Suunnittelijat tarvitsevat valitusta vaihtoehdosta riippumatta melko vähän muita komponentteja edulliseen pulssioksimetriin, jolla kotikäyttäjät voivat mitata arvoja ja tehdä päätöksiä mahdollisen terveydenhuollon ammattilaisten tarkemman arvioinnin tarpeesta. Microchip Technologyn DSPIC33FJ128GP802-DSC-piiriin perustuvassa esimerkkisuunnitelmassa käytetään mikrokontrollerin integroituja oheislaitteita ihon valaisemiseen punaista valoa ja infrapunavaloa lähettävillä ledeillä sekä valodiodin vakioidun tulosignaalin digitointiin (kuva 2).
Kuva 2: Tyypillisessä pulssioksimetrissä ledialijärjestelmä ja valodiodin signaalinkäsittely yhdistetään mikrokontrolleriin, jolla ohjataan valon ajastusta ja datan keräystä. (Kuvan lähde: Microchip Technology)
Pulssioksimetriratkaisut perustuvat tyypillisesti yhteen valodiodiin, jonka spektrivastekuvaaja on riittävän laaja lähetetyn tai heijastuneen signaalin tunnistukseen valonlähteestä riippumatta. Varmistaakseen, että vastaanotettu signaali vastaa juuri joko punaisen valon tai vastaavasti infrapunavalon aallonpituutta, laitteiston tai ohjelmiston ohjauslogiikka aktivoi kulloinkin vain joko punaisen ledin tai infrapunaledin ja tekee mittaussarjan vuorottelemalla näitä kahta lähdettä.
Edullisen pulssioksimetrilaitteiston toteutus
Tässä ratkaisussa DSC käyttää Microchip Technologyn ulkoista MCP4728-digitaali-analogiamuunninta (DAC) erillisten MBT2222-transistorien asetukseen sellaiselle tasolle, jota tarvitaan kunkin ledin ohjaukseen tarvittavalla valonvoimakkuudella. DSC ohjaa kahden pulssileveysmodulaatiolähtönsä (PWM) avulla Analog Devices ADG884 ‑analogiakytkintä kunkin ledin aktivointisekvenssin tarkkaan ajastamiseen (kuva 3).
Kuva 3: Analoginen kytkin ohjaa punaisen ledin ja infrapunaledin virtaa digitaalisen ohjaimen vuorottelemien punaisen ja infrapunakanavan mukaan. (Kuvan lähde: Microchip Technology)
Microchip Technology MCP6002 sisältää kaksi operaatiovahvistinta, jotka tarvitaan valodiodilta tulevan datan käsittelyyn ja yksinkertainen kaksivaiheinen signaalinparannuksen toteuttamiseen. Ensimmäisessä vaiheessa yhtä MCP6002-piirin operaatiovahvistinta käytetään transimpedanssivahvistimena, jolla valodiodilta tuleva virtalähtö muunnetaan jännitesignaaliksi. Kohinaa vähennetään ylipäästösuodattimella, minkä jälkeen MCP6002-piirin toinen operaatiovahvistin vahvistaa signaalin ja huolehtii tarvittavasta DC-offsetista, jolla optimoidaan parannetun signaalin jännitevaihtelu DSC-piiriin integroidun AD-muuntimen koko toiminta-alueelle (kuva 4).
Kuva 4: Kaksivaiheinen signaaliketju parantaa valodiodin lähtösignaalin valmiiksi lähetettäväksi edelleen digitaaliohjaimeen integroidulle AD-muuntimelle. (Kuvan lähde: Microchip Technology)
DSC synkronoi PWM-lähtöjensä ja AD-muunnintulojensa avulla ledien ohjauksen ja valodiodin parannetun lähtösignaalin digitoinnin AD-muuntimessa. Jokainen punaisen valon ja infrapunavalon aktivointijakso synkronoidaan signaalin vastaanoton ja muunnoksen kanssa. Lisäksi otetaan ylimääräinen ADC-näyte kun molemmat ledit on sammutettu. Näin voidaan mitata ympäristön valoisuus, jota käytetään ledien valaistusvoimakkuuden ja SpO2-mittauksen optimointiin. Näin muodostetaan tarkasti ohjattu tapahtumasarja, jossa ledien ohjaus ja signaalin digitointi AD-muuntimessa koordinoidaan Hb-arvojen määrittämiseen tarvittavan punaisen valon aallonpituuden mittaamiseksi, ympäristön valaistusvoimakkuuden määrittämiseksi ja lopuksi IR-aallonpituuden mittaamiseksi sekä HbO2-tulosten määrittämiseksi (kuva 5).
Kuva 5: Edullisen pulssioksimetrin toiminta perustuu digitaalisen signaaliohjaimen kykyyn ohjata tarkasti ledien ja datankeruun ajoitusta SpO2-arvon määritykseen tarvittavien mittaustulosten keräämiseksi. (Kuvan lähde: Microchip Technology)
Keskeytyspohjaisen ohjelmistoratkaisun toteutus
Microchipin tarjoamaan pulssioksimetrin laiteohjelmistopakettiin kuuluu esimerkkiohjelma, jossa esitellään DSC:n käyttöä ledien ohjaus- ja datan muunnossekvenssien toteutukseen Tämä ohjelma toteuttaa keskeytyspohjaisen metodin kahdella DSC-ajastimella – Timer2 ja Timer3 – joilla ohjataan IR-ledin ja punaisen ledin erillisiä aktivointisekvenssejä. Ajastimet tarjoavat puolestaan aikatiedon DSC:n lähtösignaalin vertailumoduuleille (OC) – OC1 ja OC2 – joilla ohjataan IR-ledin ja punaisen ledin analogisia kytkimiä.
Kuten ohjelmistolistauksesta 1 käy ilmi, ohjelma alustaa ensin ajastimet Timer2 ja Timer3 määrittämällä aktivointisyklille halutun pituuden ja sallii sen jälkeen keskeytykset. OC1- ja OC2-moduulit määritetään alustussekvenssissä käyttämään omia lähtönastojaan DSC:n RP (Remappable Pins) -toiminnon avulla. Sen jälkeen alustussekvenssi määrittää ledien käyttöjakson ja valitsee aikaperusteena käytettävän ajastimen.
Kopioi
//*********************************************************************************************************
// Initialize Timer 2 - IR light
//*********************************************************************************************************
T2CON = 0x0020; // Stop 16-bit Timer2, 1:64(40MhzFosc) Prescale, Internal clock (Fosc/2)
TMR2 = 0x00; // Clear timer register
PR2 = 1250; // Load the period value, OCxRS <= PRx, 4ms period = (1/(Fosc/2))*1000*64*PR2 = (1/(40000000/2))*1000*64*1250
IPC1bits.T2IP = 2; // Set Timer2 Interrupt Priority Level
IFS0bits.T2IF = 0; // Clear Timer2 Interrupt Flag
IEC0bits.T2IE = 1; // Enable Timer2 Interrupt
//*********************************************************************************************************
// Initialize Timer 3 - Red light
//*********************************************************************************************************
T3CON = 0x0020; // Stop 16-bit Timer3, 1:64(40MhzFosc) Prescale, Internal clock (Fosc/2)
TMR3 = 0x00; // Clear timer register
PR3 = 1250; // Load the period value, OCxRS <= PRx, 4ms period = (1/(Fosc/2))*1000*64*PR2 = (1/(40000000/2))*1000*64*1250
IPC2bits.T3IP = 2; // Set Timer3 Interrupt Priority Level
IFS0bits.T3IF = 0; // Clear Timer3 Interrupt Flag
IEC0bits.T3IE = 1; // Enable Timer3 Interrupt
//*********************************************************************************************************
// Initialize Output Compare 1 module in Continuous Pulse mode, OC1 controls IR LED switch
//*********************************************************************************************************
RPOR6bits.RP13R = 0b10010; // RP13/RB13 tied to OC1 (IR)
OC1CONbits.OCM = 0b000; // Disable Output Compare 1 Module
OC1R = 0; // Write the duty cycle for the first PWM pulse, 24=8MHzFosc(50us), 30=40MHzFosc(50us), 600=40MHzFosc(1ms)
OC1RS = duty_cycle; // Write the duty cycle for the second PWM pulse, OCxRS <= PRx, 499=8MHzFosc(1ms), 623=40MHzFosc(1ms), 1246=40MHzFoc,2msPeriod, 4984=40MHzFoc,8msPeriod, 280=450us D/C@40MHzFoc,2msPeriod,switch
OC1CONbits.OCTSEL = 0; // Select Timer 2 as output compare time base
//*********************************************************************************************************
// Initialize Output Compare 2 module in Continuous Pulse mode, OC2 controls Red LED switch
//*********************************************************************************************************
RPOR6bits.RP12R = 0b10011; // RP12/RB12 tied to OC2 (Red)
OC2CONbits.OCM = 0b000; // Disable Output Compare 2 Module
OC2R = 0; // Write the duty cycle for the first PWM pulse, 24=8MHzFosc, 30=40MHzFosc, 600=40MHzFosc(1ms)
OC2RS = duty_cycle; // Write the duty cycle for the second PWM pulse, OCxRS <= PRx, 499=8MHzFosc(1ms), 623=40MHzFosc(1ms), 1246=40MHzFoc,2msPeriod, 4984=40MHzFoc,8msPeriod, 280=450us D/C@40MHzFoc,2msPeriod,switch
OC2CONbits.OCTSEL = 1; // Select Timer 3 as output compare time base
Ohjelmistolistaus 1: Microchip Technologyn mallikoodipaketin päärutiini käyttää lyhyttä alustussekvenssiä määrittämään digitaalisen signaaliohjaimen ajastimet ja tulosignaalien vertailumoduulit, jotka muodostavat tämän edullisen pulssioksimetriratkaisun ytimen. (Koodin lähde: Microchip Technology)
Tässä lähestymistavassa hyödynnetään DSC-arkkitehtuurin tarjoamaa mahdollisuutta kytkeä jokainen ajastimen keskeytys tiettyyn keskeytyspalvelurutiinin (ISR) tulokohtaan. Kun esimerkiksi punaisen ledikanavan ajastin Timer3 tekee keskeytyksen, DSC suorittaa funktion tulokohdassa _T3Interrupt. Kun punaisen ledin ajastin Timer3 käy nollaan, toteutetaan siis seuraavat kaksi koordinoitua laitteisto- ja ohjelmistotapahtumaa:
- OC2 generoi analogiselle kytkimelle jatkuvan pulssin, joka kytkee punaisen ledin päälle
- DSC aloittaa _T3Interrupt ISR-aliohjelman suorituksen (ohjelmistolistaus 2).
Kopioi
void __attribute__((__interrupt__, no_auto_psv)) _T3Interrupt(void) //Read Red DC & AC signals from AN0 & AN1
{
int delay;
unsigned char i;
Read_ADC_Red = 1;
CH0_ADRES_Red_sum = 0;
CH1_ADRES_Red_sum = 0;
for (delay=0; delay<200; delay++); //2000=delayed 256us before read ADC
// LATBbits.LATB14 = 1; // for debugging
for (i=0; i<oversampling_number; i++)
{
//Acquires Red-DC from Channel0 (AN0)
AD1CHS0bits.CH0SA = 0x00; // Select AN0
AD1CON1bits.SAMP = 1; // Begin sampling
while(!AD1CON1bits.DONE); // Waiting for ADC completed
AD1CON1bits.DONE = 0; // Clear conversion done status bit
CH0_ADRES_Red_sum = CH0_ADRES_Red_sum + ADC1BUF0; // Read ADC result
//Acquires Red-AC from Channel1 (AN1)
AD1CHS0bits.CH0SA = 0x01; // Select AN1
AD1CON1bits.SAMP = 1; // Begin sampling
while(!AD1CON1bits.DONE); // Waiting for ADC completed
AD1CON1bits.DONE = 0; // Clear conversion done status bit
CH1_ADRES_Red_sum = CH1_ADRES_Red_sum + ADC1BUF0; // Read ADC result
}
CH0_ADRES_Red = CH0_ADRES_Red_sum / oversampling_number;
FIR_input_Red[0] = CH1_ADRES_Red_sum / oversampling_number;
#ifdef Sleep_Enabled
if (CH0_ADRES_Red<=74 && CH1_ADRES_Red>=4000) //if spo2 probe is not connected, 74=60mV, 4000=3.2V
{
goto_sleep = 1;
}
else if (CH0_ADRES_Red > Finger_Present_Threshold) //if no finger present then goto sleep
{
goto_sleep = 1;
}
else
#endif
{
// LATBbits.LATB14 = 0; // for debugging
for (delay=0; delay<500; delay++); //1000=delayed 256us before read ADC
// LATBbits.LATB14 = 1; // for debugging
//Acquires Red-DC baseline from Channel0 (AN0)
AD1CHS0bits.CH0SA = 0x00; // Select AN0
AD1CON1bits.SAMP = 1; // Begin sampling
while(!AD1CON1bits.DONE); // Waiting for ADC completed
AD1CON1bits.DONE = 0; // Clear conversion done status bit
Baseline_ambient = ADC1BUF0;
Baseline_Upper_Limit = Baseline_ambient + DCVppHigh;
Baseline_Lower_Limit = Baseline_ambient + DCVppLow;
Meter_State = Calibrate_Red();
}
// LATBbits.LATB14 = 0; // for debugging
OC2RS = duty_cycle; // Write Duty Cycle value for next PWM cycle
IFS0bits.T3IF = 0; // Clear Timer3 Interrupt Flag
}
Ohjelmistolistaus 2: Microchip Technologyn mallikoodipakettiin sisältyvä Timer3 ISR kerää punaisen ledin mittausdatan sekä taustavalon mittausdatan. Ajastimen Timer2 ISR kerää vain IR-ledin mittausdatan. (Koodin lähde: Microchip Technology)
Kuten ohjelmistolistauksesta 2 käy ilmi, _T3Interrupt ISR lukee punaisen valon perustason (Red-DC) AD-muuntimen kanavalta 0 (AN0) ja punaisen valon dynaamisen tason (Red-AC) AD-muuntimen kanavalta 1 (AN1). Jos kehittäjä päättää käyttää määritystä Sleep_Enabled, käännetty ISR-koodi tarkistaa datan keräyksen jälkeen pitäisikö prosessorin siirtyä lepotilaan. Microchipin ohjelmistopaketin oletuskonfiguraatioon kuuluu Sleep_Enabled-määritys, joten muuttuja goto_sleep asetetaan, jos optista anturia ei ole kytkettynä tai jos käyttäjän sormi ei ole anturissa.
Kun anturin tila on tarkistettu, ISR ottaa näytteen taustavalaistuksen tasosta ja siirtää lähtötasoikkunan raja-arvoja tämän päivitetyn arvon mukaisesti. Funktio Calibrate_Red() kasvattaa tai pienentää näiden muutettujen raja-arvojen perusteella digitaali-analogiamuuntimen punaisen lediohjaimen lähtösignaalia siten, että valaistusvoimakkuus pysyy arvojen Baseline_Lower_Limit ja Baseline_Upper_Limit välissä.
T2-ajastimen keskeytyspalvelurutiini käyttää tätä samaa perusmenetelmää (sleep_enabled-tarkistusta ja taustavalon mittausta lukuun ottamatta).
Kun ajastin, lähtöjen vertailu ja ISR-rutiinit ovat kunnossa, malliohjelmiston päärutiini suorittaa lyhyen alustussekvenssin ja käynnistää ajastimet Timer2 ja Timer3. Koodi siirtyy tässä vaiheessa pääsilmukkaan odottamaan ISR-rutiinien käsittelemää dataa. Kun punaisen valon ja infrapunavalon data on käytettävissä, kyseiset arvot käsitellään digitaalisella FIR (Finite Impulse Response) -suodattimella ja sen jälkeen kutsutaan rutiineja, joilla lasketaan SpO2 ja sydämen syke (ohjelmistolistaus 3).
Kopioi
//********** Enable OC1 & OC2 ouputs for IR & Red LED's on/off switch **********
OC2CONbits.OCM = 0b101; // Select the Output Compare 2 mode, Turn on Red LED
T3CONbits.TON = 1; // Start Timer3
for (delay=0; delay<2200; delay++);
OC1CONbits.OCM = 0b101; // Select the Output Compare 1 mode, Turn on IR LED
T2CONbits.TON = 1; // Start Timer2
goto_sleep = 0;
first_reading = 0;
while (1)
{
if (goto_sleep)
{
[lines clipped]
Sleep(); // Put MCU into sleep
Nop();
}
}
//--------- Main State Machine starts here ---------
if (RedReady && IRReady)
{
RedReady = 0;
IRReady = 0;
// LATBbits.LATB14 = 1; //for debugging
FIR(1, &FIR_output_IR[0], &FIR_input_IR[0], &BandpassIRFilter);
FIR(1, &FIR_output_Red[0], &FIR_input_Red[0], &BandpassRedFilter);
CH1_ADRES_IR = FIR_output_IR[0];
CH1_ADRES_Red = FIR_output_Red[0];
[lines clipped]
if (Detection_Done)
{
//Max & Min are all found. Calculate SpO2 & Pulse Rate
SpO2_Calculation(); //calculate SpO2
Pulse_Rate_Calculation(); //calculate pulse rate
[lines clipped]
}
/*****************************************************************************
* Function Name: SpO2_Calculation()
* Specification: Calculate the %SpO2
*****************************************************************************/
void SpO2_Calculation (void)
{
double Ratio_temp;
IR_Vpp1 = fabs(IR_Max - IR_Min);
Red_Vpp1 = fabs(Red_Max - Red_Min);
IR_Vpp2 = fabs(IR_Max2 - IR_Min2);
Red_Vpp2 = fabs(Red_Max2 - Red_Min2);
IR_Vpp = (IR_Vpp1 + IR_Vpp2) / 2;
Red_Vpp = (Red_Vpp1 + Red_Vpp2) / 2;
IR_Vrms = IR_Vpp / sqrt(8);
Red_Vrms = Red_Vpp / sqrt(8);
// SpO2 = log10(Red_Vrms) / log10(IR_Vrms) * 100;
// if (SpO2 > 100)
// {
// SpO2 = 100;
// }
// Using lookup table to calculate SpO2
Ratio = (Red_Vrms/CH0_ADRES_Red) / (IR_Vrms/CH0_ADRES_IR);
Ohjelmistolistaus 3: Tämä Microchip Technologyn mallikoodipaketin päärutiinin koodipätkä näyttää, miten koodi alustaa ajastimen ja lähtödatan vertailumoduulit ja siirtyy sitten loputtomaan silmukkaan, laskee SpO2- ja sykearvot, kun mittausdataa on käytettävissä, tai asettaa prosessorin vähävirtaiseen lepotilaan, kun anturi ei ole käytettävissä. (Koodin lähde: Microchip Technology)
SpO2_Calculation()-funktio laskee SpO2-arvon muuttamalla punaisen valon ja infrapunavalon signaalipulssien amplitudit Vrms-arvoiksi. Funktio muodostaa näistä arvoista suhdeluvun ja muuttaa sen hakutaulukon (taulukkoa ei näytetä ohjelmistolistauksessa 3) avulla tietyksi SpO2-arvoksi. Hakutaulukko perustuu tyypillisesti lukuisiin empiirisiin mittaustuloksiin. Pulse_Rate_Calculation() määrittää sydämen sykkeen mittausarvojen huippujen välisen ajan perusteella.
SpO2-ratkaisun optimointi
Tässä artikkelissa on kuvailtu tehokas edullisen pulssioksimetrin toteutus. Sitä voidaan kuitenkin optimoida edelleen muiden laitteiden avulla. Kehittäjä voi esimerkiksi päättää käyttää ulkoisen MCP6002-kaksoisoperaatiovahvistimen sijaan Microchip Technologyn DSPIC33CK64MP102 DSC-piiriin integroituja operaatiovahvistimia.
Tällaisen modifioidun pulssioksimetrin kehittäminen vaatii kuitenkin edellä kuvaillun ohjelmistopaketin joidenkin olennaisten osien kirjoittamista uudelleen DSC-ratkaisujen erojen vuoksi.
Esimerkiksi DSPIC33CK64MP102 DSC-piirissä on useita monikäyttöisiä ajastinmoduuleja, kun taas DSPIC33FJ128GP802 DSC-piirissä käytetään ajastimia Timer2/Timer3. Tästä syystä kehittäjä joutuu löytämään uuden ratkaisun joillekin tämän artikkelin ohjelmistolistauksissa kuvailluille toiminnoille. Toimintaperiaatteet pysyvät kuitenkin samoina ja kehittäjät voivat käyttää Microchip Technologyn malliohjelmistopaketin kaltaisia esimerkkejä vähintäänkin perusmallina omassa, räätälöidyssä ohjelmistokehityksessään.
Yhteenveto
Veren happisaturaatiotason mittaus antaa erittäin tärkeää tietoa hengityselimistön toiminnasta, ja siitä onkin koronapandemian aikana tullut tärkeä osa terveyden hallintaa. Pulssioksimetrit antavat yksinkertaisten optisten menetelmien avulla luotettavan estimaation perifeerisestä happisaturaatiosta (SpO2) ja vastaavat pandemiatilanteessa edullisten terveyden seurantaratkaisujen tarpeeseen.
Kuten edellä on esitetty, DSC tarjoaa muutamaan peruskomponenttiin yhdistettynä tehokkaan laitteistoalustan edulliselle pulssioksimetrille, jolla SpO2-arvoja voidaan mitata luotettavasti. Käyttäjät voivat mittaustulosten perusteella hakeutua tarvittaessa hoitoon koronaviruksen aiheuttaman taudin pahentuessa.

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.