Progettare un pulsossimetro a basso costo utilizzando componenti di serie

Di Stephen Evanczuk

Contributo di Editori nordamericani di DigiKey

La pulsossimetria misura la saturazione periferica di ossigeno (SpO2), che riflette l'efficacia del sistema cardiopolmonare nel fornire sangue ossigenato al corpo. Gli atleti utilizzano le misurazioni di SpO2 per valutare il livello dello sforzo negli allenamenti, ma queste misurazioni hanno acquisito maggiore importanza durante la pandemia da COVID-19. Gli operatori sanitari vedono in una riduzione della SpO2 un campanello di allarme precoce di danni al tessuto polmonare causati dal virus SARS-CoV-2 alla base del COVID-19.

Per le persone colpite con sintomi lievi, cui è stato detto di mettersi in quarantena a casa, l'accesso immediato a un pulsossimetro a basso costo può aiutare a valutare il decorso dell'infezione e fornire un preavviso su quando sia necessario richiedere l'assistenza sanitaria.

Questo articolo discute brevemente i sintomi del COVID-19 e la necessità di monitoraggio della SpO2. Mostra poi come gli sviluppatori possono utilizzare un controller di segnali digitali (DSC) di Microchip Technology e alcuni dispositivi aggiuntivi per progettare un pulsossimetro a basso costo in grado di fornire agli utenti domiciliari un allarme precoce sui sintomi coerenti con l'infezione avanzata da COVID-19.

COVID-19 e la necessità di misurare i livelli di saturazione dell'ossigeno

COVID-19 presenta un ampio spettro di sintomi derivanti dagli effetti dannosi del virus SARS-CoV-2. Per gli operatori sanitari, un sintomo particolarmente preoccupante riguarda il danno al tessuto polmonare, con conseguente compromissione del sistema respiratorio e riduzione dell'assorbimento di ossigeno. Sebbene i medici utilizzino le radiografie toraciche e le tomografie computerizzate (TAC) per confermare questa fase di COVID-19, abitualmente utilizzano le misurazioni SpO2 come indicatore precoce.

La misurazione di SpO2 è un'alternativa non invasiva alla misurazione della saturazione di ossigeno arterioso (SaO2) determinata direttamente analizzando i livelli di gas nel sangue in campioni estratti da un'arteria del paziente. Sebbene alcune condizioni possano richiedere la misurazione diretta dei gas nel sangue arterioso, è stato riscontrato che la SpO2 fornisce una stima affidabile della SaO2. Forse ancor più importante, la misurazione può essere eseguita in modo affidabile sia in ambito domiciliare che clinico utilizzando i pulsossimetri ottici.

I pulsossimetri ottici misurano la SpO2 sfruttando le differenze di assorbimento della luce mostrate dall'emoglobina deossigenata (Hb) e dall'emoglobina ossigenata (HbO2). Trasportata nei globuli rossi, l'emoglobina forma rapidamente un legame reversibile con un massimo di quattro molecole di ossigeno nei polmoni ricchi di ossigeno. In questo stato di HbO2, la molecola assorbe più luce a 940 nm che a 660 nm (Figura 1).

Grafico delle differenze negli spettri di assorbimento tra i globuli sanguigni ossigenati (HbO2) e deossigenati (Hb)Figura 1: La pulsossimetria sfrutta le differenze negli spettri di assorbimento tra i globuli sanguigni ossigenati (HbO2) e deossigenati (Hb). (Immagine per gentile concessione di Wikipedia)

Mentre i globuli rossi vettori dell'HbO2 vanno alla periferia dove la pressione parziale (la pressione di un singolo componente gassoso in una miscela di gas) dell'ossigeno è inferiore, l'affinità dell'emoglobina per l'ossigeno diminuisce e l'HbO2 comincia a scaricare le sue molecole di ossigeno, riducendosi alla sola Hb. Nello stato deossigenato, lo spettro di assorbimento della luce della molecola cambia, assorbendo più luce a 660 nm che a 940 nm.

Poiché l'HbO2 diventa Hb quando la pressione parziale di ossigeno è bassa, si può determinare la SpO2 sulla base di una semplice formula:

SpO2 = HbO2 / (HbO2 + Hb)

A sua volta, le concentrazioni relative di Hb e HbO2 nel flusso sanguigno possono essere determinate misurando l'assorbimento della luce alla lunghezza d'onda di 660 nm e 940 nm.

I pulsossimetri sfruttano la relazione tra la pressione parziale di ossigeno nel sangue, il carico di ossigeno dell'emoglobina e le differenze di assorbimento della luce per fornire misurazioni affidabili della SpO2.

Sottosistemi chiave di un tipico pulsossimetro

La tipica progettazione di un pulsossimetro comprende tre sottosistemi principali:

  • Un sottosistema di trasmissione della luce comprendente interruttori e driver analogici insieme a diodi a emissione luminosa (LED) a lunghezza d'onda rossa (660 nm) e infrarossa (IR) (950 nm). Alcuni sistemi includono anche sorgenti verdi (530 nm) da utilizzare con metodi di fotopletismografia (PPG) che determinano la frequenza cardiaca monitorando le variazioni volumetriche nei vasi sanguigni della pelle.
  • Un sottosistema di rilevamento della luce comprendente un fotodiodo, una catena di condizionamento del segnale e un convertitore analogico/digitale (ADC).
  • Un DSC o un microcontroller per coordinare i sottosistemi di trasmissione e di rilevamento della luce e per calcolare la SpO2 dai dati misurati.

Sebbene questi sottosistemi di base esistano in qualsiasi pulsossimetro, la loro implementazione può variare in modo significativo. Nei pulsossimetri trasmissivi, il fotodiodo è posizionato sul lato opposto del dito o del lobo dell'orecchio del paziente rispetto ai LED. Le comuni unità con molletta a dito disponibili combinano LED rossi, IR e verdi opzionali su un lato della molletta con un fotodiodo sull'altro. Nei pulsossimetri riflessivi, il fotodiodo e i LED sono posizionati sullo stesso lato della pelle con una barriera ottica posta tra loro per ridurre gli artefatti. Ad esempio, SFH7060 di OSRAM è un dispositivo riflessivo drop-in che incapsula i LED e un fotodiodo in un unico contenitore di 7,2 x 2,5 x 0,9 mm.

Sia che si utilizzino questi contenitori ottici per metodi trasmissivi o riflessivi, i progettisti necessitano di relativamente pochi componenti aggiuntivi per implementare un pulsossimetro a basso costo che possa fornire a pazienti domiciliari informazioni utili per cercare assistenza sanitaria all'occorrenza. Un progetto di esempio costruito con un DSC DSPIC33FJ128GP802 di Microchip Technology utilizza le periferiche integrate del microcontroller per controllare l'illuminazione della pelle tramite LED rossi e IR e per digitalizzare il segnale di uscita del fotodiodo condizionato (Figura 2).

Schema di un tipico progetto di pulsossimetro di MicrochipFigura 2: Un tipico progetto di pulsossimetro combina i sottosistemi per l'illuminazione a LED e l'elaborazione del segnale dei fotodiodi con un microcontroller utilizzato per controllare i tempi di illuminazione e di acquisizione dati. (Immagine per gentile concessione di Microchip Technology)

I progetti dei pulsossimetri si basano solitamente su un singolo fotodiodo con un'ampia curva di risposta spettrale per acquisire il segnale trasmesso o riflesso indipendentemente dalla sorgente di illuminazione. Per garantire che il segnale ricevuto corrisponda solo alle lunghezze d'onda rossa o IR, la logica di controllo hardware o software presenta solo la sorgente di illuminazione rossa o IR in un dato momento, alternando le due sorgenti per completare una sequenza di misurazioni.

Implementazione di un progetto hardware a basso costo per i pulsossimetri

In questo progetto, il DSC utilizza un convertitore analogico/digitale (DAC) MCP4728 di Microchip Technology per impostare transistor MBT2222separati al livello necessario per pilotare ogni LED all'intensità richiesta. Per temporizzare con precisione la sequenza "on" di ogni LED, il DSC usa due delle sue uscite a modulazione della larghezza d'impulso (PWM) per controllare l'interruttore analogico ADG884 di Analog Devices (Figura 3).

Schema di un interruttore analogico che consente di abilitare la corrente di comando ai LED rosso e IRFigura 3: Azionato da segnali alternati per i canali rosso e IR del controller digitale, l'interruttore analogico abilita la corrente di comando ai LED rosso e IR. (Immagine per gentile concessione di Microchip Technology)

Per elaborare l'uscita del fotodiodo, un singolo dispositivo MCP6002 di Microchip Technology fornisce una coppia di amplificatori operazionali necessari per implementare una catena di condizionamento del segnale a due stadi. Qui, il primo stadio utilizza un amplificatore operazionale MCP6002, configurato come amplificatore in transimpedenza, per convertire l'uscita di corrente del fotodiodo in un segnale di tensione. Dopo un filtro passa-alto per ridurre il rumore, il secondo amplificatore operazionale in MCP6002 fornisce la regolazione del guadagno e dell'offset c.c. necessaria per ottimizzare l'oscillazione del segnale condizionato sull'intero ADC integrato nel DSC (Figura 4).

Schema delle condizioni della catena di segnali a due stadi di uscita del fotodiodoFigura 4: Un'uscita a catena di segnali a due stadi condiziona il fotodiodo per la fornitura all'ADC integrato del controller digitale (Immagine per gentile concessione di Microchip Technology)

Durante il funzionamento, il DSC utilizza le sue uscite PWM e gli ingressi ADC per sincronizzare l'illuminazione a LED e la digitalizzazione ADC del segnale di uscita del fotodiodo condizionato. Qui, ogni periodo di illuminazione rossa e IR alternata è coordinato con l'acquisizione e la conversione del segnale. Un ulteriore campione ADC prelevato quando entrambi i LED sono spenti fornisce una misurazione della luce ambiente utilizzata per ottimizzare l'intensità dei LED e la misurazione della SpO2. Il risultato è una sequenza precisamente controllata di eventi che coordinano l'illuminazione a LED e la digitalizzazione ADC per acquisire i risultati della lunghezza d'onda rossa per Hb, acquisire la luce ambiente e infine acquisire i risultati della lunghezza d'onda IR per HbO2 (Figura 5).

Schema della funzionalità del pulsossimetro a basso costo di MicrochipFigura 5: La funzionalità del pulsossimetro a basso costo si basa sulla capacità del controller di segnali digitali di gestire la temporizzazione precisa delle sequenze per l'illuminazione e l'acquisizione dei dati necessari per raccogliere le misurazioni e determinare la SpO2. (Immagine per gentile concessione di Microchip Technology)

Implementazione di una soluzione software con interrupt

Microchip fornisce un pacchetto firmware per pulsossimetro con un programma di esempio che dimostra l'uso del DSC per eseguire queste sequenze di controllo dell'illuminazione e di conversione dei dati. Il programma implementa un metodo guidato da interrupt che utilizza una coppia di timer DSC - Timer2 e Timer3 - per temporizzare le sequenze "on" separate rispettivamente del LED IR e del LED rosso. A sua volta, ogni timer fornisce la base temporale per due dei moduli di confronto delle uscite (OC) del DSC, OC1 e OC2, utilizzati per controllare gli interruttori analogici rispettivamente per il LED IR e il LED rosso.

Come mostrato nel Listato 1, il software inizializza prima il Timer2 e il Timer3 per impostare il periodo desiderato del ciclo di illuminazione e abilitare gli interrupt. Come parte della sequenza di inizializzazione, i moduli OC1 e OC2 sono legati a pin di uscita separati utilizzando la capacità di pin rimappabili (RP) del DSC. La sequenza di inizializzazione imposta quindi il ciclo di lavoro dell'illuminazione e seleziona il timer associato per l'uso come base temporale.

Copy
    //*********************************************************************************************************
    // 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

Listato 1: La routine principale del pacchetto di codice di esempio di Microchip Technology utilizza una breve sequenza di inizializzazione per impostare i timer del controller di segnali digitali e i moduli di confronto delle uscite al centro di questa soluzione a basso costo per pulsossimetri. (Fonte del codice: Microchip Technology)

Questo approccio sfrutta l'associazione dell'architettura DSC di ogni interrupt del timer con un punto di ingresso specifico della routine di servizio interrupt (ISR). Ad esempio, quando si verifica l'interruzione del Timer3 del canale LED rosso, il DSC esegue la funzione al punto di ingresso _T3Interrupt. Così, quando il Timer3 del LED rosso scade, si verificano due eventi hardware e software coordinati:

  • OC2 genera un impulso continuo all'interruttore analogico, accendendo il LED rosso
  • Il DSC inizia l'esecuzione dell'ISR _T3Interrupt (Listato 2)
Copy
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
}

Listato 2: Incluso nel pacchetto di codice di esempio di Microchip Technology, l'ISR Timer3 mostrato qui raccoglie le misurazioni di illuminazione a LED rosso e di luce ambiente, mentre l'ISR Timer2 deve raccogliere solo le misurazioni di illuminazione a LED IR. (Fonte del codice: Microchip Technology)

Come mostrato nel Listato 2, l'ISR _T3Interrupt legge il livello baseline rosso (Red-DC) dal canale ADC 0 (AN0) e il livello dinamico rosso (Red-AC) dal canale ADC 1 (AN1). Se lo sviluppatore sceglie di includere una definizione per Sleep_Enabled, il codice ISR compilato fa seguire all'acquisizione dei dati un controllo per decidere se il processore deve entrare in stato di sospensione. La configurazione predefinita del pacchetto software di Microchip include #define for Sleep_Enabled, quindi la variabile goto_sleep sarà impostata se la sonda ottica non è collegata o se il dito dell'utente non è presente.

In seguito a questo controllo dello stato della sonda, l'ISR campiona il livello di luce ambiente e utilizza questo valore aggiornato per spostare di conseguenza i limiti della finestra baseline. Utilizzando questi limiti regolati, la funzione Calibrate_Red() aumenta o diminuisce l'uscita DAC al driver LED rosso per mantenere l'intensità tra Baseline_Lower_Limit e Baseline_Upper_Limit.

La routine di servizio interrupt del timer T2 utilizza lo stesso schema di progettazione di base, eccetto il controllo di sleep_enabled e la misurazione del livello di luce ambiente.

Con il timer, il confronto delle uscite e le ISR in posizione, la routine principale del software di esempio esegue una breve sequenza di inizializzazione e avvia Timer2 e Timer3. A quel punto il codice entra nel ciclo principale, in attesa dei dati elaborati dalle ISR. Quando sono disponibili i dati del LED rosso e IR, questi valori vengono elaborati da un filtro digitale a risposta impulsiva finita (FIR), chiamando infine le routine per calcolare la SpO2 e la frequenza cardiaca (Listato 3).

Copy
    //********** 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);

Listato 3: Questo frammento della routine principale del pacchetto di codice di esempio di Microchip Technology mostra come il codice inizializza il timer e i moduli di confronto delle uscite e avvia un ciclo infinito, calcolando la SpO2 e la frequenza cardiaca quando le misurazioni sono disponibili oppure portando il processore in modalità di sospensione a basso consumo quando la funzionalità del sensore va offline. (Fonte del codice: Microchip Technology)

Per SpO2, la funzione SpO2_Calculation() converte le ampiezze d'impulso (Vpp) dei segnali rosso e IR in valori Vrms. Utilizzando questi valori, la funzione genera un rapporto e utilizza una tabella di ricerca (non mostrata nel Listato 3) per convertirlo in un valore specifico di SpO2. Tipicamente, questa tabella di ricerca è derivata da svariate misure empiriche. Pulse_Rate_Calculation() utilizza la temporizzazione tra i picchi della misurazione per determinare la frequenza cardiaca.

Opzioni di ottimizzazione del progetto per SpO2

Anche se il progetto descritto in questo articolo è una soluzione efficace per un pulsossimetro a basso costo, altri dispositivi potrebbero offrire un'ottimizzazione maggiore. Ad esempio, uno sviluppatore potrebbe eliminare il dispositivo esterno MCP6002 con doppio amplificatore operazionale utilizzando gli amplificatori operazionali integrati nel DSC DSPIC33CK64MP102 di Microchip Technology.

Quando implementano questo progetto modificato di pulsossimetro, tuttavia, gli sviluppatori dovranno riscrivere alcune parti chiave del pacchetto software descritto in precedenza per tener conto di alcune differenze nel DSC.

Ad esempio, il DSC DSPIC33CK64MP102 fornisce un set di moduli timer multiuso al posto della funzione Timer2/Timer3 del DSC DSPIC33FJ128GP802, e ciò richiede agli sviluppatori di fornire una soluzione personalizzata ad alcune delle funzionalità descritte nei listati inclusi in questo articolo. Ciononostante, i principi di funzionamento rimangono invariati e gli sviluppatori possono, come minimo, utilizzare i modelli di progettazione mostrati nel pacchetto software di esempio di Microchip Technology per la progettazione personalizzata del software.

Conclusione

La misurazione dei livelli di saturazione dell'ossigeno nel sangue fornisce un importante indicatore della funzione respiratoria ed è diventata uno strumento importante nella gestione della salute durante la pandemia da COVID-19. Utilizzando metodi ottici semplici, i pulsossimetri forniscono stime affidabili della saturazione di ossigeno periferico (SpO2), soddisfacendo una particolare esigenza di soluzioni di monitoraggio della salute a prezzi accessibili durante la pandemia.

Come mostrato, in combinazione con alcuni componenti di base, un DSC si dimostra una base hardware efficace per implementare un pulsossimetro a basso costo in grado di fornire misurazioni affidabili della SpO2 che potrebbero indicare la necessità di richiedere assistenza sanitaria per una possibile infezione da COVID-19 in corso.

DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk ha più di 20 anni di esperienza come autore sull'industria elettronica e ha scritto su una vasta gamma di argomenti tra cui hardware, software, sistemi e applicazioni, incluso l'IoT. Ha ricevuto un Ph.D. in neuroscienze sulle reti neuronali e ha lavorato nel settore aerospaziale su sistemi di sicurezza ampiamente distribuiti e sui metodi di accelerazione algoritmica. Attualmente, quando non scrive articoli su tecnologia e ingegneria, lavora su applicazioni di deep learning per i sistemi di riconoscimento e di raccomandazione.

Informazioni su questo editore

Editori nordamericani di DigiKey