ECG Patiënt Simulator - De Hardware.


En dan nu de schakeling:

 

Eén van de uitgangspunten van dit project was een schakeling te maken die eenvoudig reproduceerbaar is. 
Voor dit projectje heb ik een printplaatje ontworpen, maar zelfs op een gaatjesbord kan deze schakeling perfect nagebouwd worden.  De Gerber-Files voor het maken van de printplaat kan je downloaden bij dit project.
Er werd geen gebruik gemaakt van exotische onderdelen. Alle componenten zijn zeer goed en bij diverse verdelers van elektronica onderdelen verkrijgbaar.

In de ontwikkelingsfase maakte ik gebruik van een Arduino UNO met hierop de Atmega328 microcontroller in een 28-Pin DIL behuizing.  Om een zo compact mogelijk afgewerkt product te verkrijgen werden enkel de microcontroller, het kristal van 16Mhz, een paar condensatortjes en een weerstandje van het Arduino UNO bordje mee overgenomen naar het eindresultaat op de zelfontworpen PCB.  De andere onderdelen van het Arduino UNO bordje zoals het voedingsgedeelte met o.a. de spanningsregelaar, de USB interface, de connectoren en andere componentjes werden voor ons projectje overbodig of werden in de nieuwe schakeling met andere onderdelen terug opgebouwd. 

Het volledige schema van de ECG Patiënt Simulator (Klik op de afbeelding om te vergroten).

In de schakeling zijn 3 blokken te onderscheiden,  het voedingsgedeelte,  de microcontroller met interfacing en bedieningsonderdeeltjes ,en de conditionering van de uitgangssignalen.

Hierna zal ik de blokken apart behandelen.

Het Voedingsgedeelte.

De schakeling wordt gevoed met een batterijtje van 9V dat aangesloten wordt op de "+ Batt." pinconnector op het printplaatje.  Deze aansluiting tolereert echter een ingangsspanning tot 18Vdc, al moet er dan rekening mee gehouden worden dat de waarde van de verzwakkingsweerstand voor het luidsprekertje ook herzien wordt.  Hier komen we later nog op terug.  De 9V spanning van de batterij komt via diode D5 terecht op MOSFET Q1 en trekt, door middel van de weerstand R1, de gate van deze MOSFET naar hetzelfde niveau als zijn source pinnetje. 

Het voedignsdeel van de schakeling met de LE50ABZ als low drop lineaire spanningsregelaar. (Klik op de afbeelding om te vergroten.)

Hierdoor is  MOSFET Q1 gesperd.  Aangezien dit een “P-Channel Enhancement”  type MOSFET is moet de gate negatief gepolariseerd worden t.o.v. de source om deze transistor in geleiding te brengen.  Dit kan door op druktoets SW1A te drukken, waardoor via diode D1, de gate van Q1 richting massapotentiaal gaat. 
Een tweede manier om de gate van Q1 naar omlaag te brengen is door middel van MOSFET Q2.  De gate van deze MOSFET Q2 wordt door weerstand R2 naar de massa getrokken. Aangezien dit een N-Channel Enhancement Type MOSFET is zal deze Q1 niet in geleiding kunnen brengen zolang de gate van Q2 niet door de microcontroller aangestuurd wordt. 

En hiermee is meteen een groot deel van voedingsconcept uit de doeken gedaan.  

De lineaire spanningsregelaar U2, die voor de 5V voorziening van de schakeling moet zorgen krijgt ingangsspanning door op druktoets SW1A te drukken waardoor Q1 geleidt en de "+ Batt" spanning naar deze spanningsregelaar U2 gestuurd wordt.  Via spanningsregelaar U2 krijgt de microcontroller nu zijn 5V voeding.  De software van de microcontroller heeft als één van zijn eerste taken om uitgang PD5 hoog te maken en stuurt hiermee de gate van Q2 aan.  Hierdoor staat een geleidende Q2 in parallel met de nog steeds ingedrukte druktoets SW1A.  De microcontroller houdt Q2 in geleiding waardoor de microcontroller van 5V voorzien blijft.  We kunnen nu rustig SW1A loslaten want Q2 neemt de taak van dit drukschakelaartje nu over.  Wanneer de microcontroller beslist om zichzelf uit te schakelen maakt hij digitale uitgang PD5 terug laag en stopt Q2 met geleiden.  De source-gate spanning van Q1 valt hierdoor weg en Q1 spert.  Er is nu geen ingangsspanning meer aan de spanningsregelaar U2 waardoor de 5V van de microcontroller wegvalt.  Hierdoor schakelt ons bordje uit.  C1, C2 en C3 zorgen voor conditionering van de voedingsspanning en diode D5 zorgt voor een foolproof beveiliging tegen inverse ingangsspanning op de " + Batt " voedings connector.

 

De Microcontroller.

De integratie van een microcontroller in een schakeling is altijd heel plezant.  Het maakt het geheel niet alleen heel flexibel en aanpasbaar maar reduceert eveneens enorm de omvang van de totale schakeling.  Dit komt doordat heel wat van de logica opgevangen wordt door de software i.p.v. door digitale componentjes.   De componenten die nog nodig zijn dienen om een correcte interfacing naar de microcontroller te bewerkstelligen. 

 

In het Microcontroller gedeelte is de Atmega328 de spilfiguur.  Het is de escape versie van een Arduino Uno. (Klik op de afbeelding om te vergroten.)

 

Eén van de taken van de microcontroller is de bewaking van de batterij.  Tussen MOSFET Q1 en spanningsregelaar U2 vertrekken we naar een spanningsdeler die gevormd wordt door weerstand R5 en R6.
Met deze spanningsdeler wordt van de 9V batterijspanning, die verminderd wordt met de spanningsval over diode D5 van ongeveer 0,8V,  en via de geleidende Q1 een spanning aangeboden aan I/O pin PC0 van de microcontroller.  De spanning die uit de spanningsdeler komt en naar de microcontroller gaat vertegenwoordigt perfect de spanning van de batterij.  Bij een 9Vdc batterijspanning is dit ( (9 - 0,8)/(2700 + 5600) ) * 2700) = 2,6....Vdc.

I/O pin PC0 van de microcontroller is de analoge input A0, zoals we deze van de Arduino UNO kennen. Het is daarmee duidelijk dat we, door middel van een stukje programma, de gemeten analoge batterijspanning kunnen gebruiken om bv. aan te geven dat de batterij aan vervanging toe is of om het inschakelen met een te zwakke batterij te verhinderen.
Condensatortje C7 dient om deze meetwaarde wat te vrijwaren van rommel op de voedingslijn of door externe storingbronnen.  Diode D4 voorkomt dat de spanning van analoge I/O PC0 hoger kan worden dan de voedingsspanning van de microcontroller want dat heeft deze laatste niet zo graag.

Duracell MN1604 ZnMn/O2 van 9V.

De software baseert zich op de ontlaadcurve van een 9V batterij om diverse acties te nemen.  De spanning van een 9V batterij zal onder bepaalde belasting al snel naar ongeveer 8V wegzakken om vervolgens tot ongeveer 6V een minder stijl verval te vertonen in functie van de tijd bij constante belasting.  De lineaire spanningsregelaar LE50ABZ is een low drop type dat nog net tevreden is met een ingansspanning van 5,2V.  Dat wil zeggen dat, vooraleer de uitgangsspanning van de spanningsregelaar onvoorspelbaar wordt, de minimum spanning van de batterij mag zakken tot 5,2V plus de spanningsval van 0,8V over D5 hetgeen 6V bedraagt .  Dit is nu net het punt waarop de batterijspanning in onze ontladingskarakteristiek steiler begint te zakken bij dezelfde belasting.  De spanningsval over Q1 is te verwaarlozen.

Ontlaad karakteristiek van een Duracell MN1604 batterij van 9V.

In de software wordt ervoor gezorgd dat het kantelpunt van de batterijspanning, waaronder de ECG Patiënt Simulator niet meer kan worden ingeschakeld, op ongeveer 6,3V ligt.  Door het 0,3V verschil tussen deze 6,3V en het 6V kantelpunt van de batterij, krijgen we nog net genoeg ruimte voor een emergency startup om in geval van hoogdringendheid toch nog even een simulatie te kunnen doen.  Hoe we een emergency startup kunnen uitvoeren is terug te vinden in de becommentariëring van de software of in de beknopte handleiding bij dit toestelletje. 

Drukknopje SW1A heeft een dubbele functie.  Enerzijds het aanzetten en uitzetten van de ECG Patiënt Simulator, zoals hierboven beschreven, en anderzijds kan met SW1A ook het ritme van het geproduceerde ECG signaal verhoogd worden.  Hiervoor moet de microcontroller de toestand van dit druktoetsje kunnen waarnemen.  De I/O pin PD3 van de microcontroller neemt deze taak voor zijn rekening.  Deze pin is via diode D2 verbonden met het druktoetsje.  Als SW1A niet ingedrukt is leest PD3 een hoge waarde omwille van de interne PULLUP weerstand op deze pin.  Diode D2 zorgt ervoor dat  I/O pin PD3 gevrijwaard blijft van spanningsinvloeden die vanuit de batterij via D5, R1 en D1 op deze pin zouden terechtkomen en voorkomt eveneens dat de gate van Q1 door PD3 bediend zou kunnen worden.

I/O pin PD6 stuurt via MOSFET Q3 en de verzwakkingsweerstand (attenuation resistor) het (piëzo)luidsprekertje aan.  De verzwakkingsweerstand is niet op de printplaat gesoldeerd maar kan op de printplaat geplugd worden d.m.v. de vrouwelijke pinconnector J4. 
De reden hiervoor is dat de waarde van deze verzwakkingsweerstand aangepast zou kunnen worden om naar wens het geluidsniveau van de luidspreker aan te passen.  De pinconnector geeft ook de mogelijkheid om een potmeter met voldoende vermogen aan te sluiten en zo een continue volumeregeling te verkrijgen.  Een derde denkpiste is het aansturen van bv. een relais of een andere component dat door eventuele herprogrammering van PD6 weer nieuwe dimensies opent.  Diode D3 is een freewheeling diode om eventuele inductieve belastingen op J3 te temmen.

Om terug te komen op mijn opmerking  in het voedingsgedeelte wil ik er op wijzen dat de speakeraansluiting aan de positieve kant verbonden is vóór de spanningsregelaar.  Dit wil zeggen dat in geval er gebruik gemaakt wordt van een hogere voedingsspanning dan de 9V van een batterijtje, ook de waarde van deze verzwakkingsweerstand (attenuation resistor) herzien moet worden.  Dit is vooral belangrijk wanneer er geen gebruik gemaakt wordt van een, bij voorkeur, piëzo speakertje.  Een klassiek luidsprekertje zal dan best een impedantie van 8Ohm of hoger hebben.  De typische waarde voor de attenuation resistor, bij gebruik van een speakertje van 8 Ohm en bij een voedingsspanning van 9Vdc, kies je dan best ergens in de buurt van 100 Ohm.  Zorg er steeds voor dat de stroom door MOSFET Q3 niet groter wordt dan 200mA bij de keuze van deze weerstand.

Met de twee polige DIP switch SW4, aangesloten op I/O pinnen PD4 en PD5, kan respectievelijk met schakelaartje 1 de bieptoon op hartritme uitgezet worden en met schakelaartje 2 het opstarttoontje.  Deze DIP Switches kunnen eventueel via software een andere functie krijgen.  Beide schakelaartjes zijn laag actief en aan de microcontroller kant worden beide I/O pinnen hoog getrokken door hun interne pullup weerstand.

Verder is er nog onze LED die op het ritme van de ingestelde hartslag pinkt en die door I/O pin PD3 aangestuurd wordt.  Weerstand R3 zorgt voor de nodige stroombeperking door de LED en PD3.  De reset pin van onze Atmega328 wordt hoog gehouden door weerstand R4 waardoor de reset non-actief blijft.  De klokoscillator van de microcontroller wordt bemand door het 16MHz kristal Y1 samen met beide condensatortjes C5 en C6 van 22pF elk.

Het condensatortje C4 van 100nF is een ontkoppeling van de voedingsspanning en staat daarom kort bij de microcontroller opgesteld.

Hierbij is zowat alles gezegd betreffende de schakeling rond onze microcontroller Atmega328.

 

O ja,  natuurlijk,  de microcontroller produceert ook nog het ECG signaal!
Inderdaad,  last but zeker not least,  I/O pin PB1 oftewel pinnetje 15 levert de ECG waveform.  Omdat de Atmega328 niet voorzien is van een analoge uitgang en omdat we de digitale samplewaarden van het ECG signaal, dat is opgeslagen in een array met 300 samples in de microcontroller, op één of ander manier terug analoog aan onze ECG monitor moeten kunnen aanbieden maken we gebruik van de PWM modus van deze uitgang. 

Het (pulsbreedte gemoduleerd) PWM-signaal passeert door twee opeenvolgende laag doorlaat filters (R7, C8 en R8, C9) (tweemaal geïntegreerd dus) waardoor tussen R8 en R9 opnieuw het analoge ECG signaal verschijnt.  Het voordeel is dat we een D/A converter en wat plaats op onze printplaat uitsparen maar het nadeel is dat het ECG signaal aan de uitgang van onze laagdoorlaatfilters beïnvloed wordt door de frequentie of m.a.w. door de verschillende hartritmen.

Daarom sturen we dit signaal terug naar de analoge ingang PC1 van de microcontroller (A1 op het Arduino UNO).  Softwarematig wordt op het hoogste punt van de ECG wave een meting gedaan van de amplitude. Door gebruik te maken van de meetwaarden bij de verschillende hartritmes, is het mogelijk om de pulsbreedte te verlagen (meer verzwakken) bij lagere frequenties en zo uiteindelijk een ongeveer constante piek tot piek waarde van de ECG golf te bekomen.

Boven:  Het PWM signaal aan PB1 van de microcontroller en de golfvorm na de laagdoorlaatfilters.  Duidelijk is ook de faseverschuiving tussen het PWM signaal en de analoge golfvorm waar te nemen als gevolg van de RC-kring. 

Beneden:  De volledige golfvorm zoals deze aangeboden wordt aan het weerstandsnetwerk (spanningsdeler) aan de uitgang. Het signaal is hier op zijn maximum ingesteld.

(Klik op de afbeeldingen om te vergroten).

De conditionering van de uitgangssignalen.

De in serie geschakelde weerstanden aan de uitgang van onze ECG Patiënt Simulator R9, R10, R11, R12 en R13 moeten het signaal dat uit de laag doorlaat filters komt, en dat een amplitude van ongeveer 2 Vpp a 2,5 Vpp bedraagt, verlagen naar een reeks signalen met de piek-tot-piek waarde en polariteit zoals we deze meten aan de elektrodes van een patiënt.

Uit de Einthoven's Driehoek kunnen we opmaken dat de rechter-arm-elektrode, qua potentiaal, lager is dan de linker-arm-elektrode.  Eveneens zien we dat de rechter-arm-elektrode lager is dan de linker- voet-electrode en dat de linker-arm-elektrode eveneens op een lager potentiaal staat dan de linker-voet-elektrode.  Het is niet moeilijk te begrijpen dat het laagste potentiaal dus te vinden is aan de rechter arm en het hoogste potentiaal aan de linker voet.  Daar tussenin ligt ergens het potentiaal van de linker arm. De N of rechter-voet-elektrode is gekend als het massa potentiaal en dient vooral voor de reductie van externe storingsinvloeden.

Het potentiaal van de V1-electrode heb ik trachten te bekomen uit een aantal realistische ECG voorbeelden die op internet te vinden waren.  Het potentiaal van de V1-elektrode zweeft ergens tussen de 3 hoofdafleidingen en is iets lager dan de linker-arm-electrode.  In werkelijkheid wordt de V1-afleiding gevormd door het gemiddelde van de 3 hoofdafleidingen en de gemeten waarde aan de V1-electrode op de patiënt.

De 3 hoofdafleidingen met polariteit en elektrode weergave.

De laagdoorlaatfilters en de spanningsdeler aan de uitgang van de schakeling die de conditionering van van de verschillende signalen voor hun rekening nemen.

Wat is dan het resultaat?  Wel, het resultaat is dat de rechter-voet-electrode als massa gepositioneerd is (dus ook aan de massa van onze schakeling), dat de rechter-arm de laagste is van de 3 hoofdelektroden (net boven R13), dat de linker-voet de hoogste is van de 3 elektroden (net boven R10) en dat daar tussenin beide elektrodes V1 (net boven R12) en de elektrode van de linker-arm (net boven R11).  Als we dan weten dat afleiding II (RA-LL), die tevens de meest duidelijke/grootste afleiding is, in werkelijkheid ongeveer 1mVpp à 3mVpp bedraagt en dat andere afleidingen hier ergens tussenin liggen kunnen we met de wet van Ohm, samen met voorbeelden van bestaande ECG's en de weerstandswaarden uit de E12 reeks, het resultaat berekenen zoals de waarden voor R9 tem R13 in ons schema .  Dit wetende dat tussen R8 en R9 (SignalVoltage) de piekwaarde van de ECG ergens maximaal tussen de 1,5vpp en 2,5Vpp zal liggen.

De verhoudingen tussen de piekwaarden van de verschillend afleidingen zijn voor ons projectje niet zo belangrijk.  Trouwens,  in de praktijk levert o.a. de plaatsing van de electroden en de kwaliteit van de verbindingen met de patiënt eveneens wisselende verhoudingen in de piekwaarden van de onderlinge signalen op.  Afwijkingen op de algemene piekwaarde van het uitgangssignaal door toleranties op de weerstanden en condensatoren kunnen bijgeregeld worden door middel van een kalibratie functie in de software van onze ECG Patiënt Simulator.

Ziezo, hiermee hebben we nu echt elk aspect van de hardware besproken.  
Van het schema dat ik in KiCad tekende ontwierp ik een dubbelzijdige PCB met soldeermasker en silkscreen en liet deze maken door Eurocircuits, een Belgische fabrikant.  Het resultaat is topmateriaal.  Bij Eurocirquits kan je een kleine prototypeoplage van je printlaat (max 5 stuks) bestellen.  Deze wordt geleverd binnen een paar dagen na betaling.  De prijs mag dan wel hoger zijn dan de Chinese concurrentie maar mijn patriotisme drijft me dan weer naar de hogere service en kwaliteit van eigen bodem.

 

Links:  Het afgewerkte printplaatje met speaker, batterijklip en flat-cable voor de verschillende elektrodeklemmetjes.

Tot slot.

Zoals gezegd wordt, “de laatste doet het licht uit”, moeten we ook onze schakeling kunnen uitzetten als we deze niet meer nodig hebben.  De simulator wordt uitgezet door SW1A ingedrukt te houden.  Na een 3 -tal seconden zal de software I/O pin PD5 naar massapotentiaal trekken waardoor Q2 zijn taak om Q1 in geleiding te houden opgeeft.  Echter Q1 wordt op dit ogenblik nog steeds in geleiding gehouden door SW1A.   De schakeling valt pas uit bij het loslaten van SW1A.

Het schema en de printplaat, die ik in KiCad maakte, zijn te downloaden in de downloadsectie van dit projectje.

Ook de software code voor deze schakeling is op deze plaats in de vorm van een Arduino IDE sketch te verkrijgen en is volledige becommentarieerd in het Engels.

 

Veel plezier met het bouwen van je eigen ECG Patiënt Simulator.

 

Johan Smets

The STEAM Reactor/ Makerspace Genk.

Een kleine fotoshoot van de schakeling en de printplaat. Ook het aansluitschema waarop je kan zien hoe de verschillende leads aangesloten worden.(Klik op een afbeelding om te vergroten).


image/svg+xmlOpen Source Licenses HardwareSoftwareDocumentationCERN-OHL-S-2.0-or-laterGPL-3.0-or-laterCC-BY-SA-4.0

Dit ECG Patiënt Simulator project wordt beschermd onder een Creative Commons Attribution-ShareAlike 4.0 internationale licentie.