EKG mit XMC µC: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Keine Bearbeitungszusammenfassung
(Erweiterung des Artikels)
Zeile 8: Zeile 8:
[[Datei:EKG Platine unbestückt.jpg|300px|thumb|right|Unbestücktes EKG Board]]
[[Datei:EKG Platine unbestückt.jpg|300px|thumb|right|Unbestücktes EKG Board]]


'''Artikel im Aufbau'''


In diesem Artikel möchte ich die Funktion und die Ergebnisse meines DIY EKG's vorstellen. Die Groben Features sind folgende:
In diesem Artikel möchte ich die Funktion und die Ergebnisse meines DIY EKG's vorstellen. Die Groben Features sind folgende:
Zeile 51: Zeile 52:
Auch in dieser Doku verwende ich das Wort "EKG" mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.
Auch in dieser Doku verwende ich das Wort "EKG" mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.


Die meisten modernen EKG's nehmen nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen "Blick" auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden am Körper angebracht und die Differenzen zwischen verschiedenen Elektrodenkonstellationen gemessen - die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:
Die heutigen EKG's nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen "Blick" auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:


===Ableitung nach Einthoven===
===Ableitung nach Einthoven===
Hierbei werden Elektroden an den rechten Arm (RA), den linken Arm (LA), sowie an den linken Fuß (LF oder LL für left leg) angebracht. Das Englische Fachwort für diese drei Elektroden lautet ''Limb Lead's''. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet ''Limb Lead's''. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.


<math>
<math>
Zeile 86: Zeile 87:


===Ableitung nach Wilson===
===Ableitung nach Wilson===
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Als Bezugspunkt dient uns das sogenannte ''Wilson Central Terminal'' - ein
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das ''Wilson Central Terminal'' - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.




Zeile 93: Zeile 94:
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right|Blockschaltbild]]
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right|Blockschaltbild]]


Die Hardware ist im Prinzip recht schlicht gehalten. Da ich einen ADS1298, ein hoch intigriertes EKG-IC, verwende, sind nur wenige externe Bauteile notwendig. Da das IC ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805 (ich verwende ausschließlich SMD Teile).
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.<br /><br />
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 20mm x 50mm groß.
<br />
<br />
<br />
<br />
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so "realitätsnah" wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut.  
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U<sub>forward</sub> bzw. VSS - U<sub>forward</sub>. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.
 
 
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so "realitätsnah" wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut.  
<br />
<br />
<br />
<br />
Zeile 189: Zeile 197:
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.


Ich habe versucht die Oberfläche halbwegs Modular aufzubauen. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für evtl. folgende Versionen eingebaut habe.
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.<br /><br />
Das Entwickeln der Oberfläche war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht. <br /><br />
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.
Eine große Hilfe beim Entwickeln der Software war das Tool "Hterm"
Eine große Hilfe beim Entwickeln der Software war das Tool "Hterm"
Zeile 249: Zeile 256:
|-
|-
| NewLOFF
| NewLOFF
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände eingelesen hat.
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.
|-
|-
| NewData
| NewData
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler eingelesen wurden.
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.
|}
|}


===ZedGraph===
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.
Im folgenden kleinen Codeschnipsel sieht man die Instanziierung einer RollingPointPairList in denen die EKG Samples gespeichert werden. Die Länge der Liste wird dabei auf 1000 Samples begrenzt.
<syntaxhighlight lang="csharp">
//Setzt alle Parameter für das Graph Fenster
void SetupGraph()
{
      //Erstelle Liste für LEAD I
RollingPointPairList LEAD1_list = new RollingPointPairList(1000);
//Erstelle Kurve für LEAD I
LineItem LEAD1 = GraphWindow.GraphPane.AddCurve("L1",LEAD1_list,Color.FloralWhite,SymbolType.None);
//Antialiasing für diese Kurve aktivieren
LEAD1.Line.IsAntiAlias = true;
}
</syntaxhighlight>


Um nun ein neues Sample in die Liste zu schreiben


== Das Protokoll ==
== Das Protokoll ==

Version vom 10. Juli 2014, 19:51 Uhr

von Jost H.

Dieser Artikel nimmt am Artikelwettbewerb Infineon XMC Design Contest 2014 teil.
Unbestücktes EKG Board

Artikel im Aufbau

In diesem Artikel möchte ich die Funktion und die Ergebnisse meines DIY EKG's vorstellen. Die Groben Features sind folgende:

  • Aufnahme eines 12 Kanal EKG's
    • max. 24 Bit Auflösung
    • max. 500 Samples/Second
  • Reduzierung von Störungen durch Right-Leg-Drive
  • Überprüfung der Elektroden auf richtigen Kontakt
  • Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)



Warnung

Widerstand Alufolie.jpg
Widerstand Elektroden.JPG

Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.

Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!

Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen:

  • Metall-Haut: 34 Mega Ohm
  • EKG Elektroden: 105 Kilo Ohm

Ich weiß nicht in wie fern ich den beiden Werte glauben kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist die Differenz - und die ist ja nicht gerade gering! Also in jedem Fall Vorsicht mit Schaltungen die direkt an den Körper angeschlossen werden!


Was ist ein EKG?

Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen

Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten.
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts). Das Wort "EKG" ist ein Akronym und bedeutet Elektrokardiogramm. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:

  • Elektrokardiographie - Das Verfahren im allgemeinen
  • Elektrokardiogramm - Der Graph der aufgezeichneten Herzspannungskurven
  • Elektrokardiograph - Das Gerät mit dem das Elektrokardiogramm aufgezeichnet wird

Auch in dieser Doku verwende ich das Wort "EKG" mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.

Die heutigen EKG's nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen "Blick" auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:

Ableitung nach Einthoven

Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet Limb Lead's. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.

[math]\displaystyle{ Lead I + (-Lead II) + Lead III = 0 }[/math]

Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt.

[math]\displaystyle{ Lead I = Lead II - Lead III }[/math]


Ableitung nach Goldenberg

Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:

[math]\displaystyle{ aVR= \frac {-(Lead I + Lead II)}{2} }[/math]

[math]\displaystyle{ aVL= \frac {Lead I - Lead II}{2} }[/math]

[math]\displaystyle{ aVF= \frac {Lead II + Lead III}{2} }[/math]


Ableitung nach Wilson

Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das Wilson Central Terminal - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.


Hardware

Blockschaltbild

Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.

Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 20mm x 50mm groß.

Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:

  • Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen
  • Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.
  • Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + Uforward bzw. VSS - Uforward. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.


Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so "realitätsnah" wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut.

Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED's (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt.
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC's genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED's hängen, nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED's auf dem XMC2GO sollten auch locker reichen.

Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC's des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.



ADS1298

Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den ADS1298 aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde. Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differential PGA's(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC's. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan.
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen (Sogenannte Common-Mode Störungen), die eine Größe von bis zu 1,5V haben können. Sie schleichen sich überall ins System ein, um unser EKG Signal zu ruinieren. Aus dem Grund wurde das Right Leg Drive erfunden. Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.

  • 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)
  • 17 Bit ADC Auflösung bei 32KSPS
  • Programmable Gain Amplifier
  • Lead off detection
  • Wilson Central Terminal
  • Right Leg Drive
  • SPI Interface
  • Interne Referenzsspannung
  • Internes Testsignal

XMC2GO

Das XMC2GO ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC's: Ein XMC4200 und ein XMC1100.
Der 4200'er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist.
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED's auf dem Board, die ganz normal über Portpins angesteuert werden können.

  • ARM M0 (32 Bit)
  • 32MHz
  • 64kByte Flash
  • 16kByte Ram
  • Vier 16 Bit Timer
  • 12 Bit ADC
  • RTC
  • Zwei Kanal USIC (SPI, UART, I2C...)
  • Interner Temperatursensor
  • On Chip Voltage Regulator


EKG - Kabel

Pinbelegung des EKG Kabels (evtl. Standard?)

Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten. Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf DIESER Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.

Pinbelegung des 15 Poligen SUB D Steckers
Elektrode Pin
RA 9
LA 10
RL 14
LL 11
V1 12
V2 1
V3 2
V4 3
V5 4
V6 5


Software - EKG Viewer

Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.

Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben. Als Entwicklungsumgebung habe ich das Open Source Programm SharpDevelop benutzt.

Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.

Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat. Eine große Hilfe beim Entwickeln der Software war das Tool "Hterm"

Die Klasse "EKG"

Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine Auto Lead Off Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.

Methoden der EKG Klasse
Methode Beschreibung Parameter Rückgabeparameter
Connect() Versucht eine Verbindung mit der Hardware aufzubauen / bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen
Disconnect() Beendet evtl. noch laufende Messungen und disonnected die Hardware. / /
StartSampling() Startet die Messung / /
StopSampling() Stoppt die Messung / /


Properties der EKG Klasse
Property Read Write
IsConnected True = mit Hardware verbunden, False = nicht verbunden Read only
IsRunning True = Sampling läuft, False = Sampling gestoppt Read only
Samplerate Liest aktuell eingestellte Samplerate Setzt die Samplerate (auch im laufenden Sampling)
AutoLeadOffEnabled True = Automatisches Aktiviert bzw. deaktiviert das AutoLOFF
AutoLeadOffIntervall Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird Setzt dieses Intervall


Events die von der EKG Klasse ausgelöst werden können
Event Beschreibung
NewLOFF Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.
NewData Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.

ZedGraph

Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im ZedGraph-Wiki eine große Auswahl an beispiel Code.


Im folgenden kleinen Codeschnipsel sieht man die Instanziierung einer RollingPointPairList in denen die EKG Samples gespeichert werden. Die Länge der Liste wird dabei auf 1000 Samples begrenzt.

 
//Setzt alle Parameter für das Graph Fenster
void SetupGraph()
{			
       	//Erstelle Liste für LEAD I
	RollingPointPairList LEAD1_list = new RollingPointPairList(1000);
			
	//Erstelle Kurve für LEAD I
	LineItem LEAD1 = GraphWindow.GraphPane.AddCurve("L1",LEAD1_list,Color.FloralWhite,SymbolType.None);
	//Antialiasing für diese Kurve aktivieren
	LEAD1.Line.IsAntiAlias = true;
}

Um nun ein neues Sample in die Liste zu schreiben

Das Protokoll

Das Protokoll für die Kommunikation zwischen