V zadnjem času sem na televiziji videl številne oglase za KardiaMobile podjetja Alivecor. To je EKG monitor, ki odpravlja tri EKG žice/elektrode, ki se običajno uporabljajo za EKG meritve, in jih nadomešča z dvema majhnima kovinskima blazinicama, na kateri uporabnik med merjenjem položi palec.
Avtor: Brian Millier
Pri tem uporablja metodologijo senzorjev, ki jo za merjenje srčnega utripa uporabljajo naprave za vadbo (tekalne steze itd.). Ne vem, ali bi lahko vadbeni aparati s to tehnologijo zaznavanja izmerili uporaben EKG signal ali ne, KardiaMobilu pa to očitno uspeva. Upoštevajte, da se za te srčne signale uporabljata izraza ECG in EKG. V tem članku bom uporabljal izraz EKG.
Čeprav je iz oglasov razvidno, da KardiaModile kot uporabniški vmesnik uporablja mobilni telefon, pa ni jasno, kako to deluje. Predvideval sem, da gre za neko obliko Bluetooth povezave, vendar temu ni tako. Če namestite njihovo brezplačno aplikacijo (za Android in iOS), hitro opazite, da zahteva dostop do mikrofona telefona. Ne, aplikacija ni glasovno aktivirana kot Amazonov Echo ali Applova Siri. Namesto tega uporablja mikrofon telefona za poslušanje ultrazvočnih signalov. Nato izmeri frekvenco teh ultrazvočnih signalov in jih pretvori nazaj v EKG signal. To lahko deluje, ker so EKG signali nizkofrekvenčni signali v območju 1-2 Hz in zlahka frekvenčno modulirajo ultrazvočni nosilec. Če bi EKG KardiaMobile monitor uporabljal Bluetooth, bi družba Alivecor lahko določila Bluetooth profil po meri, značilnosti itd. in tako preprečila, da bi aplikacija delovala s katero koli napravo za spremljanje EKG, ki bi jo morda poskušal izdelati domači mojster. Vendar pri tej ultrazvočni shemi aplikacija ne more vedeti, katera naprava dejansko pošilja signal. Poleg tega sama aplikacija ne zahteva vnosa kod za avtorizacijo itd., ki bi lahko bile povezane z določeno napravo KardiaMobile. Čeprav se morate registrirati za (brezplačen) račun, sta potrebna le vaše ime in e-poštni naslov.
Ta vsebina je samo za naročnike
Pred nekaj leti sem izdelal EKG monitor z uporabo čipa AD8232 podjetja Analog Devices, ki je “EKG front-end” in je uporabljal običajno metodo zaznavanja s tremi elektrodami. Ena od prednosti naprave KardiaMobile je, da je njena aplikacija veliko bolj izpopolnjena od aplikacije, ki sem jo napisal za svoj projekt. Moja aplikacija je v bistvu samo prikazovala srčni utrip in grafično prikazovala EKG valove.
Odločil sem se, da bi bil zanimiv projekt, če bi vzel EKG vezje z AD8232 iz mojega starega projekta in ga prilagodil za delovanje z aplikacijo KardiaMobile. Najprej si oglejmo, kako sem zasnoval svoj prvotni EKG monitor.
Moj prvi projekt EKG monitorja
EKG signali imajo izjemno nizko amplitudo in so precej občutljivi na motnje običajnih naprav in omrežnih napeljav, ki jih najdemo doma. Analog Devices AD8232 čip je posebej zasnovan za obdelavo EKG signalov ob prisotnosti takšnih motenj. Zelo malo verjetno je, da bi lahko sami zasnovali prednji del EKG vezja, ki bi deloval enako dobro, tudi če bi uporabili drage ojačevalnike z zelo nizko stopnjo šuma.
AD8232 je na voljo samo v majhnih 20-pin LFCSP ohišjih in LFCSP_SS. Ta majhna ohišja so daleč od mojih zmožnosti, da bi jih namestil/spajkal na tiskano vezje po meri. Ko sem zasnoval svoj prvi monitor, je Sparkfun v ZDA prodajal razvojno ploščo za AD8232, ki sem jo uporabil pri tem projektu. Ne vem, kdo koga posnema, toda AliExpress zdaj prodaja isto razvojno ploščo za manj kot 5 €. Slika 1 prikazuje Sparkfunovo izhodno ploščo, ki sem jo uporabil. Opazili boste, da uporablja 3,5-milimetrski TRS priključek za EKG vodnike.
Izhodni signal na AD8232 razvojni plošči je analogen z referenčno napetostjo 1,65 V (½ 3,3 V napajanja). Amplituda izhodnega EKG signala je odvisna od spremljanega posameznika, namestitve elektrod itd.. Vendar pa znaša od 400 do 800 milivoltov. Zato je dober kandidat za merjenje z 10 ali 12-bitnimi ADC, ki jih najdemo v sodobnih MCU-jih.
V svojem prvotnem projektu sem želel uporabiti mobilni telefon za prikaz EKG diagrama in srčnega utripa. Za prenos EKG podatkov v telefon bi bilo smiselno uporabiti neko obliko Bluetooth povezave. Ker sem se ukvarjal s PSoC čipi podjetja Cypress, sem se odločil, da za projekt uporabim PSoC6 razvojni modul. Najtežji del projekta je bila programska oprema:
- Takrat sem imel samo iOS (iPhone/iPad) naprave in razvijanje aplikacij za iOS sploh ni enostavno. Zato sem uporabil TechBASIC aplikacijo, ki mi je omogočila, da sem na iPadu razvil BASIC program, ki je z mojim EKG monitorjem komuniciral prek Bluetooth LE povezave.
- Čeprav sem imel veliko izkušenj s Cypressovima MCU PsoC4 in PSoC5LP, še nikoli nisem napisal Bluetooth LE aplikacije z uporabo PsoC6. Bluetooth LE je precej zapleten protokol, ki ga je treba obvladati – tudi če ga uporabljate na zelo osnovni ravni.
Na sliki 2 je slika prejšnjega EKG monitorja. Ta projekt je deloval pravilno, vendar so pozneje posodobitve iOS sistema, ki sem jih moral namestiti, nekako “pokvarile” moj TechBASIC program. Zato sem iz tega projekta vzel AD8232 ploščo in začel načrtovati nov EKG monitor z uporabo te plošče. Nič drugega nisem uporabil iz starega projekta.
Ultrazvočni vmesnik
Kot smo že omenili, KardiaMobile EKG naprava komunicira z mobilnim telefonom prek mikrofona mobilnega telefona. Ugotovil sem, da gre verjetno za ultrazvočni signal. Pregledal sem specifikacije majhnih MEMS mikrofonov, ki se uporabljajo v mobilnih telefonih, in frekvenčno območje tistih, ki sem jih preveril, je bilo do 20 000 Hz.
Ko zaženete aplikacijo Kardia in pritisnete gumb z napisom “Record your EKG”, se prikaže zaslon, kot je prikazan na sliki 3. Na desni strani je majhen tribarvni graf, pod katerim je napis “No Signal” (Ni signala). Da bi preveril, na katero frekvenčno območje bi se odzval, sem uporabil svoj funkcijski generator in ultrazvočni pretvornik. Prevodnik sem dobil iz ultrazvočnega modula za razdalje HC-SR04 – ti so tako poceni, da se običajno prodajajo v paketih po 3-5 enot, jaz pa sem imel na voljo več rezervnih kosov.
Vključil sem signal 3 Vp-p in nastavil frekvenco od 15 kHz navzgor. Ko je frekvenca dosegla 18 kHz, so se črte v aplikaciji Kardia začele barvati zeleno in raven se je povečala, nato pa je okoli 19,8 kHz izginila. Pri frekvenci 18,8 kHz so bile črte največje, v sporočilu o stanju pa je bilo napisano “Great signal” (odličen signal).
Na tej točki sem vedel, da bom lahko uporabil HC-SR04 modul in da bo 3 voltni signal zadostoval za delovanje Kardia aplikacije. Ko sem poskušal ugotoviti, kako široka bi morala biti frekvenčna modulacija, da bi na zaslonu ustvarila uporabno obliko EKG valovanja, sem odkril nekaj koristnega. Ko sem frekvenco spreminjal od 18 kHz navzgor, se je EKG sled na zaslonu premikala navpično navzgor. Če pa sem pri določeni frekvenci ostal več kot delček sekunde (da bi to frekvenco izmeril na merilniku frekvence), se je EKG sled vrnila v osnovni položaj. To je pomembno, saj pomeni, da Kardia aplikacija uporabi visokoprepustni filter za vhodni signal – preden ga izriše ali opravi kakršne koli izračune. Pomen tega bo obravnavan pozneje.
Na tej točki sem vedel, da bom moral generirati 18,8 kHz nosilni signal, moduliran v območju +/- 500 Hz z izhodnim EKG signalom iz AD8232 EKG modula. AD8232 plošča generira približno 750 mV p-p signal, ko so trije vodi/elektrode povezani, kot je prikazano na sliki 4. Ugotovil sem, da to lahko dosežem na dva načina:
- Na osnovi MCU-ja. Izhodni signal AD8232 naprave prenesite v ADC MCU-ja in s to vrednostjo nastavite izhodno frekvenco DDS generatorja signalov (angl. Direct Digital Synthesis). Sinusni izhodni signal tega DDS-a se lahko nato vodi v DAC. Zahtevani DAC je lahko preprosto uporovni DAC R-2R, ki se napaja iz nekaterih GPIO MCU pinov. Izhod DAC-a bi bilo morda treba speljati v ojačevalnik, ki bi nato poganjal ultrazvočni pretvornik (čeprav je sam pretvornik piezo element in ima visoko impedanco).
- Vrnite se 30 let nazaj v preteklost in uporabite CMOS čip MC14046 (ali CD4046) s fazno zaklenjeno zanko. Te čipi so še vedno na voljo za manj kot 1 EUR. Vsebujejo VCO, ki ga potrebujemo za ta projekt, in fazni komparator, ki ga ne uporabljamo. To je popolnoma analogna rešitev – MCU ni potreben!
Možnost št. 1 sem preučil dovolj da vem, da bi jo bilo mogoče doseči z Microchipovim ATmega328 (tj. originalnim Arduino MCU). S 16-MHz taktom lahko ta AVR čip brez težav izvaja DDS funkcijo in zagotavlja dovolj visoko frekvenčno ločljivost za preslikavo AD8232 izhodnega signala v zahtevano frekvenčno območje 18,3-19,3 kHz. Čeprav uživam v programiranju MCU-jev, sem se odločil, da za spremembo poskusim z analogno metodo, opisano v možnosti 2.
Ko sem poiskal podatkovni list za 4046 PLL, sem ugotovil, da je količina informacij odvisna od tega, kateri podatkovni list proizvajalca sem uporabil. Opazil sem tudi, da je bil podatkovni list Texas Instrumenta le skenirana slika iz starega tiskanega priročnika, pretvorjena v PDF. Ko to vidiš veš, da imaš opravka s staro napravo! V podatkovnem listu podjetja Onsemi (Motorola) je bila naslednja enačba, ki določa frekvenco VCO:
fmin = 1/ (R2 * (C1+32 pf))
kjer je VCO input = VSS [1]
fmax = 1/(R1 * (C1 + 32 pf)) + fmin
kjer je VCO input = VDD [2]
kjer je R1 upor, priključen od priključka 11 do GND, R2 pa je upor od priključka 12 do GND. C1 je taktni kondenzator, priključen med priključkoma 6 in 7.
V podatkovnem listu ni navedeno, da so te enačbe približne in se spreminjajo glede na vrednost VDD. Glede na to odvisnost frekvence od VDD sem se odločil, da moram regulirati VDD, da bi ohranil konstantno razmerje med napetostjo in frekvenco. Pri eksperimentiranju sem tudi ugotovil, da pri zahtevani nosilni frekvenci 18,8 kHz CD4046 deluje veliko bolje, če se VDD poveča nad 3,3 V, ki jih zahteva AD8232 razvojna plošča.
Opazil sem, da CD4046 vsebuje notranjo Zenerjevo diodo z nazivno vrednostjo nekje med 6 in 7 volti. Zenerjeva dioda mojega CD4046 je bila 6 voltov, VCO CD4046 pa je bil precej stabilen, ko je bila napetost VCOIN nastavljena na VDD/2. S šestvoltnim virom napajanja sem z eksperimentiranjem ugotovil, da naslednje vrednosti R,C zagotavljajo signal 18,8 kHz pri napetosti VCOIN = VDD/2:
C1 = 2200 pf
R1 = 100k
R2 = 34k (27k + pot R3 v shemi)
Slika 5 prikazuje izhodni signal CD4046 VCO z zgoraj navedenimi vrednostmi komponent R1, R2, C1 in VCOIN = VDD/2. Slika 6 prikazuje sled Kardia signala, ko je bil izmenični signal 750 milivoltov p-p 1,7 Hz kapacitivno sklopljen na priključek CD4046 VCOIN (z R4,R5 je bil predimenzioniran na VDD/2). Presledek v sledi ni artefakt – ta presledek je prisoten vedno, ko aplikacija Kardia aktivno zbira podatke, in ločuje najnovejše zbrane podatke od starejših.
Zgornja kombinacija R1, R2 in C1 je proizvedla nosilno frekvenco 18,8 kHz z dovolj frekvenčne modulacije, da je na Kardia aplikaciji zagotovila poln EKG odziv, pri čemer jo je AD8232 razvojna plošča dovajala prek potenciometra za nastavitev amplitude (R6).
Ker sem želel VCOIN priključek na CD4046 postaviti na sredino 6 voltnega vira napajanja, sem dodal napetostni delilnik R4, R5 (oba 220k). Ker je bil izhodni signal AD8232 plošče 3,3 V/2, sem potreboval kondenzator 0,22 uF za povezavo AD8232 signala v 4046 VCO. Ker je aplikacija Kardia EKG signal tako ali tako spustila skozi visokoprepustni filter, ta izmenična povezava EKG signala ni negativno vplivala na signal.
Na sliki 7 si oglejte naslednje podatke. Za pravilno nastavitev vezja uporabite naslednji postopek:
- R6 potenciometer zavrtite v najnižji položaj.
- Nastavite POT R3 tako, da se v Kardia aplikaciji pojavi največji signal (za začetek snemanja pritisnite gumb “Record an EKG”). Pri tem se mora prikazati stanje “Great signal” (odličen signal).
- S priključenimi EKG elektrodami, kot je prikazano na sliki 4, začnite zajem in počasi obračajte potenciometer R6 v smeri urinega kazalca, dokler ne dobite EKG signala, ki zapolni večino navpičnega prostora, namenjenega za graf.
Čeprav sem imel pravilno priključene EKG elektrode (kot je prikazano na sliki 4), je bil EKG signal, ki sem ga opazoval, obrnjen. To mora biti običajno, saj Kardia aplikacija po potrebi samodejno invertira signal, preden ga izriše na koncu 30-sekundnega zbiranja. Slika 8 prikazuje poročilo, ki sem ga dobil iz Kardia aplikacije s tem vezjem.
Za napajanje CD4046 pri 6 voltih (z notranjo Zenerjevo regulacijo) sem vezje napajal z navadno 9-voltno baterijo. 100-ohmski upor (R7) znižuje napetost baterije na CD4046 in omejuje tok skozi Zenerjevo diodo. LDO regulator MCP1702-3,3 se uporablja za napajanje AD8232 plošče z napetostjo 3,3 V.
Uporabil sem ultrazvočni pretvornik, ki sem ga vzel iz modula za ultrazvočno merjenje razdalje HC-SR04, ki sem ga imel pri roki.
Slika 9 prikazuje modul HC-SR04, od katerega sem si “izposodil” pretvornik. Opazite črko “T” ob enoti, ki sem jo odstranil. To je oddajnik (Transmit), ki sem ga v tem primeru potreboval. KardiaMobile enota uporablja pretvornik, podoben tistemu na sliki 10. Fotografija vezja za moj monitor je prikazana na sliki 11.
Po podatkih mojega Agilentovega digitalnega merilnika celotno vezje med delovanjem porabi le 3 mA. To je veliko manjši tok, kot bi ga potreboval, če bi se odločil za digitalno tehniko in uporabil MCU.
Kardia aplikacijo najdete v trgovini Apple App Store in trgovini Google Play. Preizkusil sem jo tako na iPhonu/iPadu kot tudi na tabličnem računalniku s sistemom Android in na obeh je videti in deluje enako.
Alternativno digitalno vezje
Analogno vezje, ki sem ga opisal v prejšnjem razdelku, je precej preprosto in uporablja le nekaj poceni komponent. Vendar pa je določanje vrednosti R1, R2 in C1, potrebnih za delovanje vezja, trajalo dlje, kot sem pričakoval, in na tej poti sem uporabil veliko različnih uporov. Formule za frekvenco, omenjene v zadnjem razdelku (iz podatkovne kartice OnSemi), niso v veliko pomoč, saj je formula [1] frekvenca pri VCOIN =Vss, formula [2] pa je za VCOIN = VDD. V tem vezju je VCOIN osredotočen na 3 V in se spreminja v razmeroma majhni amplitudi okoli te vrednosti.
Medtem ko sem se ukvarjal s kalibracijo CD4046 VCO-ja, sem začel razmišljati, da vezje, ki temelji na MCU, morda ne bi zahtevalo veliko več truda. Hitro sem pomislil na Raspberry Pi Pico za ta namen. Je zelo poceni in ne potrebuje programatorja za nalaganje kode, kot bi jo potreboval Microchip ATtmega328 (razen če bi ga programirali z Arduino IDE z uporabo Uno plošče in nato MCU prenesli na ploščo EKG monitorja). Njegov 12-bitni ADC bi bil več kot primeren za merjenje EKG signala, ki prihaja iz AD8232. Ker uporablja 133 MHz za taktno frekvenco, bi bilo izvajanje DDS funkcije s frekvenčnim območjem 18,8 kHz +/- 500 Hz zelo enostavno v C++. Na voljo je veliko GPIO priključkov za implementacijo R-2R DAC za delovanje ultrazvočnega pretvornika. Pravzaprav je mogoče, da bi s tako visoko frekvenco takta uporabili samo kanal časovnika in dobili izhodne signale kvadratnega signala v območju 18,8 kHz +/- 500 Hz z zadostno frekvenčno ločljivostjo. Če bi uporabili digitalno metodo, bi odpravili CD4046 in s tem tudi potrebo po 9-voltnem napajalniku. Namesto tega bi lahko za napajanje Raspberry Pi Pico plošče (ki ima vgrajen lasten regulator buck-boost) uporabili eno LiPo celico. Vse to se sliši precej praktično, da bi poskusili – morda kdaj drugič….
Viri
AD8232 EKG vhodni čip:
https://www.analog.com/media/en/technical-documentation/data-sheets/ad8232.pdf
Sparkfun razvojna plošča, navodilo za porabo:
https://learn.sparkfun.com/tutorials/ad8232-heart-rate-monitor-hookup-guide?_ga=2.91200722.97141154.1663363319-2014912987.1656101628
MC14046 VCO-PLL čip:
https://www.onsemi.com/pdf/datasheet/mc14046b-d.pdf
MCP1702-3.3 LDO:
https://ww1.microchip.com/downloads/en/DeviceDoc/22008E.pdf
HC-SR04 ultrazvočni pretvornik:
Modul je mogoče dobiti iz številnih virov na spletu, tako da ga poiščete po imenu.