Entwerfen Sie ein kostengünstiges Pulsoximeter unter Verwendung von Standardkomponenten
Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey
2020-08-13
Die Pulsoxymetrie misst die periphere Sauerstoffsättigung (SpO2), die die Wirksamkeit des kardiopulmonalen Systems widerspiegelt, dem Körper sauerstoffreiches Blut zur Verfügung zu stellen. Athleten verwenden SpO2 Messungen, um den Grad ihrer Anstrengung im Training zu messen, aber diese Messungen haben während der COVID-19-Pandemie an Bedeutung gewonnen. Gesundheitsversorger achten auf einen Rückgang von SpO2 als Frühwarnzeichen für eine Schädigung des Lungengewebes durch das SARS-CoV-2-Virus, das COVID-19 verursacht.
Für Betroffene mit leichten Symptomen, die zu Hause unter Quarantäne gestellt werden sollen, kann der einfache Zugang zu einem kostengünstigen Pulsoximeter helfen, den Verlauf ihrer Infektion abzuschätzen und die Warnung zu geben, die für eine Eskalation der medizinischen Versorgung erforderlich ist.
In diesem Artikel werden die Symptome von COVID-19 und die Notwendigkeit einer Überwachung von SpO2 kurz besprochen. Anschließend wird gezeigt, wie Entwickler einen Microchip Technology Digital Signal Controller (DSC) und einige zusätzliche Geräte verwenden können, um ein kostengünstiges Pulsoximeter zu entwerfen, das in der Lage ist, Heimanwendern eine Frühwarnung vor Symptomen einer fortgeschrittenen COVID-19-Infektion zu geben.
COVID-19 und die Notwendigkeit der Messung der Sauerstoffsättigung
COVID-19 weist ein breites Spektrum von Symptomen auf, die auf die schädlichen Auswirkungen des SARS-CoV-2-Virus zurückzuführen sind. Ein besonders besorgniserregendes Symptom für Gesundheitsdienstleister ist die Schädigung des Lungengewebes, die zu einer Beeinträchtigung des Atmungssystems und einer verringerten Sauerstoffaufnahme führt. Obwohl Ärzte individuelle Röntgenaufnahmen der Brust und Computertomographien (CT) verwenden, um dieses Stadium von COVID-19 zu bestätigen, verwenden sie routinemässig SpO2 Messungen als Frühindikator.
Die Messung der SpO2 ist eine nicht-invasive Alternative zur Messung der arteriellen Sauerstoffsättigung (SaO2), die direkt durch die Analyse der Blutgaswerte in den aus einer Arterie des Patienten entnommenen Proben bestimmt wird. Obwohl einige Bedingungen eine direkte Messung der arteriellen Blutgase erfordern können, hat sich gezeigt, dass SpO2 eine zuverlässige Schätzung von SaO2 liefert. Am wichtigsten ist vielleicht, dass sie zu Hause genauso zuverlässig durchgeführt werden kann wie im klinischen Umfeld mit optischen Pulsoximetern.
Optische Pulsoximeter messen SpO2, indem sie die Unterschiede in der Lichtabsorption ausnutzen, die von desoxygeniertem Hämoglobin (Hb) und oxygeniertem Hämoglobin (HbO2) gezeigt werden. In den roten Blutkörperchen transportiert, bildet Hämoglobin schnell eine reversible Bindung mit bis zu vier Sauerstoffmolekülen in der sauerstoffreichen Lunge. In diesem Zustand als HbO2 absorbiert das Molekül bei 940 Nanometern (nm) mehr Licht als bei 660 nm (Abbildung 1).
Abbildung 1: Die Pulsoxymetrie macht sich die Unterschiede in den Absorptionsspektren zwischen sauerstoffhaltigen (HbO2) und sauerstoffarmen (Hb) Blutzellen zunutze. (Bildquelle: Wikipedia)
Wenn die HbO2-tragenden roten Blutkörperchen in die Peripherie gelangen, wo der Partialdruck - der Druck einer einzelnen Gaskomponente in einem Gasgemisch aus Sauerstoff ist niedriger, die Affinität von Hämoglobin für Sauerstoff nimmt ab und HbO2 beginnt, seine Sauerstoffmoleküle zu entladen und schließlich zu Hb wird. In diesem sauerstoffarmen Zustand ändert sich das Lichtabsorptionsspektrum des Moleküls, das bei 660 nm mehr Licht absorbiert als bei 940 nm.
Da HbO2 zu Hb wird, wenn der Sauerstoffpartialdruck niedrig ist, kann SpO2 durch die einfache Formel bestimmt werden:
SpO2 = HbO2 / (HbO2 + Hb)
Im Gegenzug können die relativen Konzentrationen von Hb und HbO2 im Blutstrom durch Messung der Lichtabsorption bei 660 nm und 940 nm Wellenlänge bestimmt werden.
Pulsoximeter nutzen die Beziehung zwischen dem Sauerstoffpartialdruck im Blut, der Sauerstoffbelastung des Hämoglobins und den Unterschieden in der Lichtabsorption aus, um zuverlässige Messungen von SpO2 zu liefern.
Schlüssel-Subsysteme eines typischen Pulsoxymeters
Ein typisches Pulsoxymeter-Design besteht aus drei Hauptteilsystemen:
- Ein Subsystem zur Lichtabgabe mit analogen Schaltern und Treibern zusammen mit Leuchtdioden (LEDs) bei den Wellenlängen Rot (660 nm) und Infrarot (IR) (950 nm). Einige Systeme enthalten auch grüne (530 nm) Quellen zur Verwendung mit Photoplethysmographie (PPG)-Methoden, die die Herzfrequenz durch Überwachung von Volumenänderungen in den Blutgefäßen der Haut bestimmen.
- Ein Lichterkennungssubsystem mit einer Fotodiode, einer Signalaufbereitungskette und einem Analog-Digital-Wandler (ADC).
- Ein DSC oder Mikrocontroller zur Koordinierung der Subsysteme für die Lichtzufuhr und -erkennung sowie zur Berechnung von SpO2 aus den gemessenen Daten.
Obwohl diese grundlegenden Subsysteme in jedem Pulsoxymeter vorhanden sind, kann ihre Implementierung erheblich variieren. Bei transmissiven Pulsoximetern befindet sich die Fotodiode auf der den LEDs gegenüberliegenden Seite des Fingers oder Ohrläppchens des Benutzers. Herkömmliche Fingerclip-Einheiten kombinieren rote, IR- und optional grüne LEDs auf einer Seite des Clips mit einer Fotodiode auf der anderen Seite. Bei Reflexions-Impulsoximetern werden die Fotodiode und die LEDs auf derselben Seite der Haut platziert, wobei eine optische Barriere dazwischen platziert wird, um Artefakte zu reduzieren. Zum Beispiel ist OSRAM's SFH7060 ein Drop-in-Reflexionsmessgerät, das LEDs und eine Fotodiode in einem einzigen 7,2 x 2,5 x 0,9 Millimeter (mm) großen Gehäuse verpackt.
Unabhängig davon, ob diese optischen Pakete für Transmissions- oder Reflexionsmethoden verwendet werden, benötigen Designer relativ wenige zusätzliche Komponenten, um ein kostengünstiges Pulsoximeter-Design zu implementieren, das in der Lage ist, Heimanwendern Informationen zu liefern, die auf die Notwendigkeit einer weiteren Bewertung durch medizinisches Fachpersonal hinweisen. Ein Beispieldesign, das um eine Mikrochip-Technologie DSPIC33FJ128GP802 DSC aufgebaut ist, verwendet die integrierten Peripheriegeräte des Mikrocontrollers, um die Beleuchtung der Haut durch rote und IR-LEDs zu steuern und das konditionierte Fotodioden-Ausgangssignal zu digitalisieren (Abbildung 2).
Abbildung 2: Ein typisches Pulsoxymeterdesign kombiniert Subsysteme für LED-Beleuchtung und Photodioden-Signalverarbeitung mit einem Mikrocontroller, der zur Steuerung der Beleuchtungszeit und Datenerfassung verwendet wird. (Bildquelle: Microchip Technology)
Pulsoxymeter-Designs basieren typischerweise auf einer einzelnen Fotodiode mit einer breiten spektralen Ansprechkurve, um das durchgelassene oder reflektierte Signal unabhängig von der Beleuchtungsquelle zu erfassen. Um sicherzustellen, dass das empfangene Signal nur den roten oder IR-Wellenlängen entspricht, stellt die Hardware- oder Software-Steuerlogik zu einem bestimmten Zeitpunkt nur die rote oder IR-Beleuchtungsquelle dar und wechselt zwischen den beiden Quellen, um eine Sequenz von Messungen zu vervollständigen.
Implementierung eines kostengünstigen Pulsoximeter-Hardware-Designs
Bei diesem Design verwendet der DSC eine externe Mikrochip-Technologie MCP4728 Digital-Analog-Wandler (DAC), um separate MBT2222 Transistoren auf den Pegel einzustellen, der erforderlich ist, um jede LED mit der erforderlichen Intensität anzusteuern. Zur genauen Zeitsteuerung der Einschaltsequenz für jede LED verwendet der DSC zwei seiner Pulsweitenmodulationsausgänge (PWM-Ausgänge) zur Steuerung des analogen Schalters Analog Devices' ADG884 (Abbildung 3).
<Abbildung 3: Ein analoger Schalter ermöglicht die Ansteuerung der roten und IR-LEDs durch abwechselnde Signale für Rot- und IR-Kanäle vom digitalen Controller. (Bildquelle: Microchip Technology)
Zur Verarbeitung des Fotodiodenausgangs bietet ein einzelner Microchip Technology MCP6002 Baustein ein Paar von Operationsverstärkern, die zur Implementierung einer grundlegenden zweistufigen Signalkonditionierungskette benötigt werden. Hier verwendet die erste Stufe einen MCP6002-Operationsverstärker, der als Transimpedanzverstärker konfiguriert ist, um den Stromausgang der Fotodiode in ein Spannungssignal umzuwandeln. Nach einem Hochpassfilter zur Rauschunterdrückung bietet der zweite Operationsverstärker im MCP6002 einen Verstärkungs- und DC-Offset-Abgleich, der zur Optimierung des Schwingens des konditionierten Signals über den gesamten Bereich des in der DSC integrierten ADCs erforderlich ist (Abbildung 4).
<Abbildung 4: Eine zweistufige Signalkette bereitet den Fotodiodenausgang für die Weiterleitung an den integrierten ADC des Digitalcontrollers vor. (Bildquelle: Microchip Technology)
Im Betrieb verwendet der DSC seine PWM-Ausgänge und ADC-Eingänge, um die LED-Beleuchtung und die ADC-Digitalisierung des konditionierten Fotodioden-Ausgangssignals zu synchronisieren. Hier wird jede abwechselnd rote und IR-Beleuchtungsperiode mit der Signalerfassung und -umwandlung koordiniert. Eine zusätzliche ADC-Probe, die entnommen wird, wenn beide LEDs ausgeschaltet sind, liefert eine Messung des Umgebungslichts zur Optimierung der LED-Intensität und eine SpO2 Messung. Das Ergebnis ist eine präzise gesteuerte Abfolge von Ereignissen, die die LED-Beleuchtung und die ADC-Digitalisierung koordinieren, um die Ergebnisse der roten Wellenlänge für Hb zu erfassen, das Umgebungslicht zu erfassen und schließlich die Ergebnisse der IR-Wellenlänge für HbO2 zu erfassen (Abbildung 5).
Abbildung 5: Die Funktionalität des kostengünstigen Pulsoxymeters beruht auf der Fähigkeit des digitalen Signalcontrollers, das genaue Timing der Sequenzen für die Beleuchtung und die Datenerfassung zu verwalten, die zur Erfassung der Messungen für die Bestimmung von SpO2 erforderlich sind. (Bildquelle: Mikrochip-Technologie)
Implementierung einer interruptgesteuerten Software-Lösung
Microchip liefert ein Pulsoximeter-Firmware-Paket mit einem Beispielprogramm, das die Verwendung des DSC zur Durchführung dieser Beleuchtungssteuerungs- und Datenumwandlungssequenzen demonstriert. Hier implementiert das Programm eine interruptgesteuerte Methode, bei der ein Paar von DSC-Timern - Timer2 und Timer3 - verwendet wird, um die getrennten "Ein"-Folgen der IR-LED bzw. der roten LED zeitlich zu steuern. Jeder Timer wiederum liefert die Zeitbasis für zwei der Ausgangsvergleichsmodule (OC-Module) des DSC, OC1 und OC2, die zur Steuerung der analogen Schalter für die IR-LED bzw. die rote LED verwendet werden.
Wie in Listing 1 gezeigt, initialisiert die Software zunächst Timer2 und Timer3, um die gewünschte Periode des Beleuchtungszyklus einzustellen und Unterbrechungen zu ermöglichen. Als Teil ihrer Initialisierungssequenz werden die Module OC1 und OC2 mit Hilfe der RP-Fähigkeit (remappable pins) des DSC an separate Ausgangspins gebunden. Die Initialisierungssequenz stellt dann das Tastverhältnis der Beleuchtung ein und wählt den zugehörigen Zeitgeber zur Verwendung als Zeitbasis aus.
Kopieren
//*********************************************************************************************************
// 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
Listing 1: Die Hauptroutine aus dem Beispielcodepaket von Microchip Technology verwendet eine kurze Initialisierungssequenz, um die Timer des digitalen Signalcontrollers und die Ausgangsvergleichsmodule, die das Herzstück dieser kostengünstigen Pulsoxymeterlösung bilden, einzurichten. (Codequelle: Microchip Technology)
Dieser Ansatz nutzt die in der DSC-Architektur gegebene Zuordnung jedes Timer-Interrupts zu einem bestimmten Einstiegspunkt der Interrupt-Service-Routine (ISR). Wenn beispielsweise der Timer3-Interrupt des roten LED-Kanals auftritt, führt der DSC die Funktion am Eintrittspunkt _T3Interrupt aus. Wenn also der Timer3 der roten LED abläuft, treten zwei koordinierte Hardware- und Software-Ereignisse auf:
- OC2 erzeugt einen kontinuierlichen Impuls an den Analogschalter und schaltet die rote LED ein.
- Der DSC beginnt mit der Ausführung des _T3Interrupt ISR (Listing 2)
Kopieren
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
}
Listing 2: Der hier gezeigte Timer3 ISR, der im Microchip Technology Beispielcodepaket enthalten ist, sammelt Messungen der roten LED-Beleuchtung und des Umgebungslichts, während der Timer2 ISR nur die Messungen der IR-LED-Beleuchtung sammeln muss. (Codequelle: Microchip Technology)
Wie in Listing 2 dargestellt, liest der _T3Interrupt ISR den roten Basislinienpegel (Rot-DC) von ADC-Kanal 0 (AN0) und den roten Dynamikpegel (Rot-AC) von ADC-Kanal 1 (AN1). Wenn sich der Entwickler für die Aufnahme einer Definition für Sleep_Enabled entscheidet, folgt der kompilierte ISR-Code nach der Datenerfassung mit einer Prüfung, ob der Prozessor in einen Ruhezustand gehen soll. Die Standardkonfiguration des Microchip-Softwarepakets enthält eine #define für Sleep_Enabled, so dass die Variable goto_sleep gesetzt wird, wenn die optische Sonde nicht angeschlossen ist oder wenn der Finger des Benutzers nicht vorhanden ist.
Nach dieser Sondenstatusprüfung nimmt die ISR eine Stichprobe des Umgebungslichtpegels und verwendet diesen aktualisierten Wert, um die Grenzen des Basislinienfensters entsprechend zu verschieben. Unter Verwendung dieser angepassten Grenzwerte erhöht oder verringert die Funktion Calibrate_Red() den DAC-Ausgang zum roten LED-Treiber, um die Intensität zwischen dem Baseline_Lower_Limit und dem Baseline_Upper_Limit zu halten.
Die T2-Timer-Unterbrechungs-Serviceroutine verwendet dasselbe grundlegende Designmuster mit Ausnahme der Prüfung auf sleep_enabled und Umgebungslichtmessung.
Wenn der Timer, der Ausgabevergleich und die ISRs eingerichtet sind, führt die Hauptroutine der Beispielsoftware eine kurze Initialisierungssequenz aus und startet Timer2 und Timer3. An diesem Punkt tritt der Code in die Hauptschleife ein und wartet auf Daten, die von den ESRs verarbeitet werden. Sobald Rot- und IR-Daten verfügbar sind, werden diese Werte durch einen digitalen Filter mit endlicher Impulsantwort (FIR) verarbeitet und schließlich Routinen zur Berechnung von SpO2 und der Herzfrequenz aufgerufen (Listing 3).
Kopieren
//********** 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);
Listing 3: Dieser Ausschnitt aus der Hauptroutine im Microchip Technology-Beispielcodepaket zeigt, wie der Code Timer- und Ausgabevergleichsmodule initialisiert und in eine Endlosschleife eintritt, wobei SpO2 und die Herzfrequenz berechnet werden, wenn Messungen verfügbar sind, oder der Prozessor in einen energiesparenden Schlafmodus versetzt wird, wenn die Sensorfunktionalität offline geht. (Codequelle: Microchip Technology)
Für SpO2 wandelt die Funktion SpO2_Calculation() die Impulsamplituden (Vpp) des Rot- und IR-Signals in Veff-Werte um. Anhand dieser Werte generiert die Funktion ein Verhältnis und verwendet eine Nachschlagetabelle (nicht in Listing 3 gezeigt), um das Verhältnis in einen bestimmten Wert von SpO2 umzuwandeln. Normalerweise wird diese Nachschlagetabelle aus mehreren empirischen Messungen abgeleitet. Die Pulse_Rate_Calculation() verwendet die Zeit zwischen den Spitzenwerten der Messung zur Bestimmung der Herzfrequenz.
SpO2 Optionen zur Entwurfsoptimierung
Obwohl das in diesem Artikel beschriebene Design eine effektive Lösung für ein kostengünstiges Pulsoximeter darstellt, könnten andere Geräte eine weitere Optimierung bieten. Beispielsweise könnte ein Entwickler die externe MCP6002 Dual-Operationsverstärker-Vorrichtung eliminieren, indem er die in der Mikrochip-Technologie DSPIC33CK64MP102 DSC integrierten Operationsverstärker verwendet.
Bei der Implementierung dieses modifizierten Pulsoximeter-Designs müssen die Entwickler jedoch einige wichtige Teile des zuvor beschriebenen Softwarepakets neu schreiben, um einige Unterschiede in der DSC zu berücksichtigen.
Beispielsweise bietet der DSC DSPIC33CK64MP102 DSC anstelle der Timer2/Timer3-Funktion im DSPIC33FJ128GP802 DSC einen Satz von Mehrzweck-Timer-Modulen, so dass Entwickler für einige der in den Listen dieses Artikels beschriebenen Funktionen eine eigene Lösung bereitstellen müssen. Dennoch bleiben die Funktionsprinzipien gleich, und die Entwickler können zumindest die im Mustersoftwarepaket Microchip Technology gezeigten Entwurfsmuster verwenden, um ihr eigenes kundenspezifisches Softwaredesign zu steuern.
Fazit
Die Messung der Sauerstoffsättigung des Blutes liefert einen wichtigen Indikator für die Atemfunktion und ist zu einem wichtigen Instrument für den Umgang mit der Gesundheit während der COVID-19-Pandemie geworden. Unter Verwendung einfacher optischer Methoden liefern Pulsoximeter zuverlässige Schätzungen der peripheren Sauerstoffsättigung (SpO2) und erfüllen damit einen besonderen Bedarf an erschwinglichen Lösungen für die Gesundheitsüberwachung während der Pandemie.
Wie gezeigt, bietet ein DSC in Kombination mit einigen wenigen Basiskomponenten eine effektive Hardware-Grundlage für die Implementierung eines kostengünstigen Pulsoximeters, das zuverlässig SpO2 Messungen liefern kann, die darauf hindeuten könnten, dass Anwender bei einer fortschreitenden COVID-19-Infektion weitere medizinische Hilfe suchen müssen.
Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.




