Vaša IP adresa: 3.133.144.197
Počet návštev: 30470

Meranie PPG s MAX30102

Meranie PPG signálu pomocou senzora MAX30102

1. Teoretický úvod

Modul MAX30102 (Obr. 1) predstavuje integrovaný pulzný oximeter a monitor srdcovej frekvencie. Obsahuje interné LED diódy, fotodetektory a nízkošumové elektronické komponenty, ktoré zabezpečujú potlačenie okolitého osvetlenia. Obvod MAX30102 je ľahko integrovateľný do návrhov mobilných a nositeľných zariadení. Na svoju činnosť potrebuje napätie 1,8 V a samostatný zdroj 3,3 V (typicky) pre napájanie interných LED diód. Napájanie interných LED diód môže byť zvýšené na maximálne 5V bez rizika ich poškodenia. MAX30102 obsahuje 18-bit AD prevodník a komunikuje cez štandardné I2C rozhranie. Modul je možné softvérovo prepnúť do pohotovostného režimu s nulovou spotrebou prúdu.

Obr. 1   Integrovaný obvod MAX30102.
Obr. 1 Integrovaný obvod MAX30102.

Modul sníma fotopletyzmografický (PPG) signál na reflektívnom princípe (Obr. 2). Na osvetlenie podkožia sa používajú dve LED diódy s vlnovými dĺžkami 660 nm (červená) a 880 nm (infračervená). Vďaka použitiu rôznych vlnových dĺžok môžeme vypočítať nasýtenie krvi kyslíkom a preto môžeme MAX30102 považovať za oximeter, hoci túto hodnotu priamo nepočíta (musí byť dopočítaná z nameraných PPG kriviek).

Obr. 2   Usporiadanie zdrojov a detektora svetla v MAX30102.
Obr. 2 Usporiadanie zdrojov a detektora svetla v MAX30102.

Integrovaný obvod MAX30102 sa vyrába iba v prevedení SMD. Pre účely odskúšania a testovania obvodu je vhodné použiť obvod naspájkovaný na rozširujúcej DPS. V laboratórnom cvičení budeme používať rozširujúcu DPS s označením GY-MAX30102 (Obr. 3).

Obr. 3   Modul GY-MAX30102 obsahujúci MAX30102.
Obr. 3 Modul GY-MAX30102 obsahujúci MAX30102.

Modul môže byť napájaný vstupným napätím 5 V alebo 3,3 V. Modul obsahuje okrem senzora MAX30102 aj stabilizátor napätia na 3,3 V a 1,8 V, ktoré sú určené na napájanie LED a samotného obvodu MAX30102. Ďalej obsahuje pull-up rezistory, filtračné kondenzátory a obvod na úpravu logických úrovní. Elektrická schéma zapojenia je uvedená na Obr. 4.

Obr. 4   Elektrická schéma zapojenia modulu GY-MAX30102.
Obr. 4 Elektrická schéma zapojenia modulu GY-MAX30102.

1.1 Princíp činnosti senzora

Výstup z fotodetektora je digitalizovaný AD prevodníkom. Maximálne rozlíšenie AD prevodníka je 18-bit/vzorka (necelé tri bajty). Digitálne vzorky sú ukladané do FIFO (First In First Out) zásobníka (buffer). Vďaka zásobníku nemusia byť vzorky čítané po jednej, ale po blokoch alebo môže byť prečítaný naraz celý zásobník. Zásobník FIFO umožní uložiť maximálne 32 vzoriek z červeného kanála a 32 vzoriek z infračerveného kanála. Ak má každá vzorka 3 bajty, tak maximálna kapacita FIFO zásobníka je 192 bajtov: 32 vzoriek × 3 bajty = 96 bajtov pre červený kanál a rovnaký počet bajtov pre infračervený kanál. Pozícia aktuálnej (najnovšej) vzorky v zásobníku je indikovaná pomocou ukazovateľa. Ukazovatele sú dva: pre čítanie a zápis, pretože čítanie vzorky zo zásobníka nemusí prebiehať synchrónne so zápisom. Podrobnosti o čítaní a zapisovaní do zásobníka sú uvedené v katalógovom liste na strane 15 a nebudeme ich ďalej rozvádzať, pretože na prácu so senzorom budeme používať predpripravenú knižnicu.

Senzor môže pracovať v 2 základných režimoch: HR a SpO2. V režime HR (Heart Rate) je aktívna iba červená LED. Názov režimu je odvodený z toho, že umožňuje z jedného kanála PPG vypočítať srdcovú frekvenciu - Heart Rate (HR). V prípade čínskeho klonu senzora MAX30102 sú LED zamenené, to znamená, že v HR móde je aktívna infračervená LED namiesto červenej. Klon je použitý aj pre modul GY-MAX30102, ktorý používame v tomto laboratórnom cvičení. V režime SpO2 sú aktívne obe LED. Z dvoch kanálov PPG, ktoré boli získané z LED rôznych vlnových dĺžok je možné vypočítať nasýtenie krvi kyslíkom (SpO2) a preto bol pre tento režim zvolený taký názov.

Osvetľovacie LED pracujú v pulznom režime. V prípade SpO2 režimu sa striedajú. Počas zasvietenej LED je digitalizovaný údaj z fotodetektora. Čím je trvanie impulzu (doby rozsvietenej LED) dlhšie tým je väčšie bitové rozlíšenie. Najdlhšie trvanie impulzu (411 µs) umožňuje získať maximálne bitové rozlíšenie (18-bit). Nastaviteľné šírky impulzu sú uvedené v hlavičke tabuľky na Obr. 5. Každé skrátenie impulzu znižuje rozlíšenie o jeden bit. Šírka impulzu 69 µs umožňuje bitové rozlíšenie 15-bit/vzorka. Šírka impulzu súvisí s nastavením vzorkovacej frekvencie. Súvislosť medzi vzorkovacou frekvenciou a dobou rozsvietenej LED (šírkou impulzu) je zobrazená na Obr. 5.

Obr. 5    Prípustné nastavenie vzorkovacej frekvencie vzhľadom na šírku impulzu v SpO2 móde (aktívne sú obe LED).
Obr. 5 Prípustné nastavenie vzorkovacej frekvencie vzhľadom na šírku impulzu v SpO2 móde (aktívne sú obe LED).

Časovanie rozsvietenia LED v SpO2 móde pre najväčšiu šírku impulzu a vzorkovaciu frekvenciu 200 Hz je zobrazené na Obr. 6.

Obr. 6   Časovanie kanálov v režime SpO2 so vzorkovacou frekvenciou 200 Hz 
(vzorkovacia perióda 5 ms).
Obr. 6 Časovanie kanálov v režime SpO2 so vzorkovacou frekvenciou 200 Hz (vzorkovacia perióda 5 ms).

Okrem módu, šírky impulzu a vzorkovacej frekvencie je možné nastaviť prúd cez LED diódy, rozsah AD prevodníka a priemerovanie vzoriek. Priemerovanie vzoriek redukuje šum z prostredia. Nastavenie jednotlivých parametrov realizujeme cez funkciu MAX30102_setup, ktorá je opísaná v časti 1.3.

1.2 Komunikácia

MAX30102 komunikuje cez I2C rozhranie. Podporuje frekvenciu do 400 kHz (Fast speed). Adresa senzora (7-bit) pre I2C komunikáciu je 0x57 (0b1010111).

Zápis cez I2C

Zápis sa vykonáva zaslaním adresy senzora (Slave address) spolu s režimom zápisu (bit R/W ̅=0), t.j. 0b10101110 (0xAE). Následne sa zasiela adresa registra (Register address), do ktorého chceme dáta zapísať a následne samotné dáta (Data byte). Prenos je ukončený podmienkou STOP. Zápis jedného bajtu je ukázaný na Obr. 7.

Obr. 7   Zápis jedného bajtu do MAX30102 cez I2C.
Obr. 7 Zápis jedného bajtu do MAX30102 cez I2C.

Čítanie cez I2C

Aby sme mohli čítať obsah registrov senzora, musíme najprv zaslať adresu senzora s režimom zápisu, t.j. 0b10101110 (0xAE) a adresu registra (Register address), z ktorého chceme čítať. Potom musí byť zaslaná opakovaná podmienka štart. Následne je zaslaná adresa senzora s režimom čítania (bit R/W ̅=1), t.j 0b10101111 (0xAF). Po tomto kroku nám senzor zašle obsah registra z požadovanej adresy. Na záver pošleme podmienku STOP. Čítanie jedného bajtu je zobrazené na Obr. 8.

Obr. 8   Čítanie jedného bajtu z MAX30102 cez I2C.
Obr. 8 Čítanie jedného bajtu z MAX30102 cez I2C.

Adresa registra sa automaticky inkrementuje, to znamená, že môžeme čítať dáta z nasledujúcej adresy bez toho, aby sme museli znova posielať adresu senzora alebo registra. Čítanie registrov je možné dovtedy pokiaľ nepošleme podmienku STOP. Na Obr. 9 je ukážka čítania N bajtov počítajúc od predtým zaslanej adresy registra (Register address).

Obr. 9   Čítanie viacerých bajtov z MAX30102 cez I2C.
Obr. 9 Čítanie viacerých bajtov z MAX30102 cez I2C.

1.3 Knižnica funkcií

Cez I2C zbernicu sa dá prostredníctvom registrov nastaviť pomerne veľa parametrov a funkcionalít modulu MAX30102. Zostavenie vlastnej knižnice by bolo vzhľadom na množstvo registrov časovo náročné. Kvôli uľahčeniu práce s modulom použijeme knižnicu funkcií MAX30102.c. Jedná sa o upravenú knižnicu od spoločnosti Adafruit, ktorá taktiež predáva senzor MAX30102 na rozširujúcej DPS. Mapa registrov a deklarácia funkcií sú zahrnuté v hlavičkovom súbore MAX30102.h. V nasledujúcej časti si opíšeme iba tie funkcie, ktoré budeme používať v rámci laboratórneho cvičenia.

Deklarácia funkciebool MAX30102_init(uint8_t i2caddr)
Popis funkcieFunkcia slúži na inicializáciu I2C zbernice s frekvenciou 400 kHz a prečítanie identifikátora (ID) senzora s adresou i2caddr.
Vstupné parametrei2caddr – 7-bit adresa senzora MAX30102 posunutá o jeden bit vľavo (0xAE)
Výstupný parameterTrue - podarí sa prečítať identifikátor senzora správne.
False - nepodarí sa prečítať identifikátor senzora správne.

Deklarácia funkcievoid MAX30102_setup(uint8_t powerLevel,uint8_t sampleAverage, uint8_t ledMode, int sampleRate, int pulseWidth, int adcRange)
Popis funkcieFunkcia slúži na nastavenie senzora MAX30102.
Vstupné parametrepowerLevel – Nastavenie prúdu cez LED.
Hodnoty: <0÷255>. (0 = 0 mA; 255 = 50 mA).
sampleAverage – počet vzoriek, z ktorých sa robí priemer.
Hodnoty: 1, 2, 4, 8, 16, 32.
ledMode – výber medzi módom HR (aktívna iba červená LED) a SpO2 (aktívne obe LED).
Hodnoty: 1=HR mód (červená LED)
2=SpO2 mód (červená + infračervená LED)
3=Multi-LED
sampleRate – voľba vzorkovacej frekvencie pre oba kanály.
Hodnoty: 50, 100, 200, 400, 800, 1000, 1600, 3200.
pulseWidth – trvanie zasvietenej LED (spoločne pre obe LED) v [µs].
Hodnoty: 69, 118, 215, 411.
adcRange – plný rozsah AD prevodníka v [nA].
Hodnoty: 2048, 4096, 8192, 16384.
Výstupný parameter-

Deklarácia funkcievoid MAX30102_wakeUp(void)
Popis funkcieFunkcia slúži na "prebudenie" MAX30102 z power-safe módu.
Vstupné parametre-
Výstupný parameter-

Deklarácia funkcievoid MAX30102_shutDown(void)
Popis funkcieFunkcia slúži na "uspatie" MAX30102 do power-safe módu.
Vstupné parametre-
Výstupný parameter-

Deklarácia funkcieuint16_t MAX30102_check(void)
Popis funkcieFunkcia kontroluje nové PPG dáta. Ak sú k dispozícii nové dáta, tak aktualizuje FIFO zásobník (doplní ich). Funkcia sa musí volať pravidelne.
Vstupné parametre-
Výstupný parameterPočet nových vzoriek.

Deklarácia funkcieuint8_t MAX30102_available(void)
Popis funkcieZistí koľko vzoriek sa nachádza v FIFO zásobníku.
Vstupné parametre-
Výstupný parameterPočet vzoriek v FIFO zásobníku.

Deklarácia funkcieuint32_t MAX30102_getFIFORed(void)
uint32_t MAX30102_getFIFOIR(void)
Popis funkcieZíska najstaršiu vzorku z FIFO zásobníka pre červenú LED (getFIFORed) a pre infračervenú LED (getFIFOIR).
Vstupné parametre-
Výstupný parameterVráti najstaršiu hodnotu v FIFO zásobníku pre daný LED kanál.

Deklarácia funkcievoid MAX30102_nextSample(void)
Popis funkciePresunie ukazovateľ zásobníka na ďalšiu vzorku. Funkcia by sa mala volať po prečítaní vzorky/vzoriek z FIFO zásobníka. Ak používame oba LED kanály, tak funkciu voláme po MAX30102_getFIFORed a MAX30102_getFIFOIR.
Vstupné parametre-
Výstupný parameter-

Deklarácia funkcievoid MAX30102_timerProc(void)
Popis funkcieFunkcia zabezpečuje čakanie počas definovaného času na určitú odozvu. Funkcia sa musí volať v prerušení časovača každú milisekundu [ms].
Vstupné parametre-
Výstupný parameter-

2. Použité vybavenie

  1. Hardvér
    • Vývojová doska Mega Development Board 2 (MDB2)
    • PPG senzor MAX30102 (GY-MAX30102)
    • PC
  2. Softvér
    • MATLAB
    • Microchip Studio

3. Schéma zapojenia

Obr. 10   Pripojenie senzora MAX30102 k vývojovej doske MDB2.
Obr. 10 Pripojenie senzora MAX30102 k vývojovej doske MDB2.

4. Úlohy

  1. Podľa schémy zapojenia (Obr. 10) pripojte senzor MAX30102 k vývojovej doske MDB2. Použite napájanie z adaptéra. Pozície prepojok na MDB2 sú vyznačené červenou. Pre napájanie senzora zvoľte napätie 3,3 V.
  2. V jazyku C vytvorte program pre MCU, ktorý bude získavať zo senzora MAX30102 vzorky PPG signálov z oboch LED. Následne budú získané údaje zasielané do PC cez rozhranie UART. V kóde implementujte nasledujúce parametre a funkcionality:
    • Nastavte režim SpO2,
    • Prúd cez LED nastavte na hodnotu 200 (približne 39 mA),
    • Priemerujte 2 susedné vzorky PPG signálu,
    • Vzorkovaciu frekvenciu nastavte na 200 Hz,
    • Šírku impulzu nastavte na 411 µs,
    • Rozsah AD prevodníka nastavte na 8192 nA,
    • Rýchlosť prenosu cez UART nastavte na 76 800 Baud,
    • Údaje začnite posielať do PC až po prijatí znaku 'S', posielanie zastavte po prijatí znaku 'X'. Na detekciu prijatia znaku využite prerušenie od UART,
    • Pri tvorbe programu postupujte podľa nasledujúceho vývojového diagramu:
    • Obr. 11   Vývojový diagram programu pre MCU.
      Obr. 11 Vývojový diagram programu pre MCU.
    • Do pravej časti Obr. 11 vpíšte funkcie z knižnice MAX30102, ktoré zodpovedajú jednotlivým blokom vývojového diagramu.
  3. V jazyku MATLAB pomocou prostredia AppDesigner vytvorte aplikáciu s grafickým užívateľským rozhraním, ktorá bude zobrazovať PPG signály z červenej a infračervenej LED v reálnom čase (Obr. 12). Aplikácia musí obsahovať nasledujúce prvky:
    • Textové pole pre zobrazenie stavu zásobníka (počet bajtov),
    • Tlačidlá: 'Otvor port', 'Štart' a 'Stop'.
    Obr. 12   Aplikácia pre zobrazenie PPG signálu z červenej a infračervenej LED.
    Obr. 12 Aplikácia pre zobrazenie PPG signálu z červenej a infračervenej LED.
  4. Zhodnoťte priebeh laboratórneho cvičenia. Zamerajte sa na nasledujúce body:
    • Písanie kódu pre MCU, problematické časti,
    • Písanie kódu pre aplikáciu v MATLABe.

 Na stiahnutie

MAX30102.h
MAX30102.c