Abkürzungsverzeichnis
PC RISC ADC ISR UART SPI MOSI SD Personal Computer Reduced Instruction Set Computer Analog-to-Digital Converter Interrupt Service Routine Universal Asynchronous Receiver/Transmitter Serial Peripheral Interface Master Out-Slave In Secure Digital
MOSFET Metal–oxide–semiconductor field-effect transistor USB JTAG IC LED CSV ASCII FIFO CPU DMA Universal Serial Bus Joint Test Action Group Integrated Circuit Light-emitting Diode Comma-separated Values American Standard Code for Information Interchange First In First Out Central Processing Unit Direct Memory Access
7
1 Einleitung
Die Verbreitung von Sensorsystemen und -netzen nimmt stetig zu. Die Weiterentwicklung der Halbleitertechnologie, der Batterietechnik und verbesserte Möglichkeiten des Energy Harvesting erschließen neue Einsatzmöglichkeiten, deren Anforderungen an Miniaturisierung, Laufzeit und Leistungsfähigkeit zuvor nicht erfüllt werden konnten. Eine besondere Bedeutung hat bei der Entwicklung dieser Systeme die Minimierung der Leistungsaufnahme. Neben sorgfältiger Dimensionierung der Hardware muss hierzu auch bei der Softwareentwicklung auf die Auswirkungen auf den Energieverbrauch geachtet werden. Um die Wirksamkeit von Änderungen bewerten zu können und die Bereiche mit dem größten Optimierungspotential zu identifizieren bedarf es eines Messsystems, das die Leistungsaufnahme in verschiedener zeitlicher Auflösung beobachtbar macht. Es muss möglich sein Vorgänge im Submillisekundenbereich zu analysieren, aber auch eine Übersicht über verschiedene Aktivitätsphasen zu gewinnen, die sich über längere Zeiträume verteilen. Genauso lassen sich auf dem Markt verfügbare Systeme vergleichen und bewerten und es kann mit eigenen Messungen eine bessere Auswahl zwischen mehreren Lösungen getroffen werden. Die vorliegende Arbeit beschreibt den Entwurf des Messsystems. Es wird zunächst die Grundlage des Messverfahrens erarbeitet und die Anforderungen an die Messmodi beschrieben. Anschließend werden detailliert die Entwurfsentscheidungen zu Hardware, Mikrocontrollersoftware und dem Auswertungsprogramm, und die Implementierung dargelegt. Nach kurzen Erklärungen zur Benutzung wird eine Testmessung an einem Temperaturlogger analysiert und Ideen zur Weiterentwicklung des Systems beschrieben.
8
2 Konzept
2.1 Leistungs- und Energiemessung
Die elektrische Leistung in einem Gleichstromsystem ist wie folgt definiert: P =U ·I (2.1)
Kann man zu einem Zeitpunkt Spannung über und Stromstärke durch eine Last zuverlässig bestimmen, kennt man auch die momentane Leistungsaufnahme dieser Last. Diese kann sich bei einem Sensorsystem schnell ändern. So ist es denkbar, dass ein Sensor lange in einem Ruhezustand verweilt, in dem er wenig Leistung benötigt, dann aber zeitgesteuert aktiviert wird und für die Dauer der Messung eine erheblich höhere Leistung aus seiner Energieversorgung bezieht. Besitzt ein Sensorsystem eine Funkschnittstelle, so ist bei einer Datenübertragung für kürzeste Zeit ein hoher Leistungsbedarf zu erwarten. Die Leistungsaufnahme eines Sensormesssystems muss demnach mit einer angepassten Abtastrate überwacht werden, welche die auftretenden Leistungsspitzen detektierbar macht. Ist das Ziel einer Sensorsystemanalyse eine Aussage bezüglich dessen Laufzeit im Batteriebetrieb zu treffen, so ist es nötig von Samples der momentanen Leistungsaufnahme auf die verbrauchte Energie zu schließen. Für die elektrische Energie, bzw. die elektr. Arbeit gilt allgemein: t1 E= t0 u(t) · i(t) dt
(2.2)
Für den Fall zeit- und wertdiskreter Abtastwerte nimmt man vereinfachend an, dass Strom und Spannung zwischen zwei Samples konstant sind und erhält näherungsweise: n E= k=1 Uk · Ik · ∆t
(2.3)
Worin Uk und Ik Spannung und Stromstärke über den Zeitraum zwischen 2 Samples sind und ∆t die Samplingperiode. Abbildung 2.1 zeigt den prinzipiellen Aufbau zur Leistungsmessung mit Hilfe zweier Voltmeter und eines Shunts. Kennt man den Widerstandswert des
9
2 Konzept
Abbildung 2.1: Spannungsrichtige Messung mit Shunt Shunts hinreichend genau, so lässt sich mit Hilfe des Spannungsabfalls über diesen sehr einfach die Stromstärke durch Shuntwiderstand und Last, welche in Reihe geschalten sind, berechnen. Es gilt das Ohmsche Gesetz: IL = IS = US RS (2.4)
Ist der Widerstandswert des Shunts mit einer großen Toleranz versehen, so multipliziert sich diese mit der Messungenauigkeit des verwendeten Voltmeters. Auch muss der Widerstandswert so an die Last angepasst werden, dass zum einen der Spannungsabfall über dem Shunt im Messbereich des Voltmeters liegt, zum anderen die Messgrößen an der Last nicht über Gebühr beeinflusst werden. Hilfreich kann hier bei kleinen Stromstärken eine Verstärkung der Shuntspannung vor der Messung sein. Dann kann der Widerstand um den Faktor der Verstärkung kleiner dimensioniert werden.
2.2 Aufbau
Herzstück des Messsystems ist ein MSP430 Mikrocontroller von Texas Instruments. Mit dem integrierten Analog Digital Wandler werden die zwei Messgrößen, Spannungsabfall über dem Messobjekt und Spannung am Shuntwiderstand RS , periodisch abgetastet. Die Weiterverarbeitung der Messdaten kann je nach Betriebsmodus unterschiedlich erfolgen. Bei Messungen, bei denen eine hohe Abtastrate entscheidend ist, werden die Daten unmittelbar an den Auswertungsrechner übertragen und dort von der Empfängersoftware gespeichert. Die verwendete Kommunikationsschnittstelle auf Seiten des MSP430 ist ein UART, welcher über einen Umsetzer an den USB Port des Rechners angebunden ist.
10
2 Konzept
Abbildung 2.2: Blockschaltbild Messsystem Dieser Betriebsmodus heißt im Folgenden “UART Modus“. Bei Messungen über einen längeren Zeitraum ist es von Vorteil, keine Verbindung mit einem PC aufrechterhalten zu müssen. Bei solchen autarken Messungen speichert der Mikrocontroller die Daten auf einer SD Speicherkarte und nach Abschluss der Messung können die Messwerte mit einem Kartenleser auf den PC übertragen und ausgewertet werden. Die Abtastrate ist niedriger als im UART Modus. Dieser Betriebsmodus heißt im Folgenden “SD Card Modus“.
2.3 UART Modus
Beim Betriebsmodus mit hoher Abtastrate werden die Messdaten unmittelbar nach Erfassung und Vorverarbeitung im Mikrocontroller über den UART an den Host PC übertragen. Bei Mikrocontrollern ist die Kommunikation asynchron mit zumindest einem Start und einem Stopp Bit, zwischen denen 8 Nutzbits eingefasst sind, ein Prüfbit ist optional. Zudem muss auf Sende- und Empfängerseite die Baudrate eingestellt werden. Das Baudratentaktsignal wird im Mikrocontroller durch einen externen Schwingquarz mit nachgeschalteter interner Frequenzteilung erzeugt.
11
2 Konzept
2.4 SD Card Modus
Beim Betriebsmodus mit niedriger Abtastrate werden die Messdaten auf einer Speicherkarte nach dem Secure Digital (SD) Standard gespeichert. Das System ist dadurch während einer Messung nicht mehr auf die Verbindung mit einem Host PC angewiesen. Nach einer oder mehrerer Messungen können die Daten auf der SD Card mit einem handelsüblichen USB Kartenleser auf den PC übertragen werden. Die SD Card ist ein äußerst kostengünstiges Flash Speichermedium mit integriertem Controller, welches sich mit vertretbarem Aufwand an einen Mikrocontroller anbinden lässt. Die Kommunikation erfolgt über den SPI Bus. Eine SD Card lässt sich neben SPI auch über 2 Arten des ihr eigenen SD Busses ansteuern.[6] Für eine einfachere Implementierung ist der SPI Bus jedoch vorzuziehen, da der MSP430 ein konfigurierbares SPI Modul besitzt und mit diesem CPU Rechenzeit eingespart werden kann. Über den SPI Bus sendet der Mikrocontroller im SD Standard[2] definierte Befehle, auf die die SD Card je nach Befehl mit verschiedenen Antworttypen reagiert. Der Flash Speicher der SD Card ist in 512 Byte Blöcke aufgeteilt. Ein Block ist die kleinste adressierbare Einheit und bei einem Schreib- oder Lesezugriff muss immer ein ganzer Block übertragen werden.[1] Lässt man Betrachtungen bezüglich eines Filesystems zunächst außen vor, lässt sich trotzdem leicht einsehen, dass zum Hinzufügen von einigen Byte zu einem 512 Byte Block der ganze Block zunächst gelesen, die neuen Daten eingefügt und dann der veränderte Block komplett an seine ursprüngliche Adresse zurückgeschrieben werden muss. Dies bedeutet einigen Zusatzaufwand von Speicher und Zeit. Geht man von einer Datengröße pro Sample von 4 Byte aus, so stellt der blockweise Zugriff innerhalb der festen Samplingperiode eine besondere Herausforderung dar.
Abbildung 2.3: Schreibzugriff Einzelblock [2, S. 117] Ein naheliegender Ansatz zur Vermeidung des Lesezugriffs beim Hinzufügen
12
2 Konzept von Daten zu einem Block ist die Nutzung eines ganzen Blockes pro Sample. Dies reduziert allerdings die Kapazität der Speicherkarte auf N utzbytes ihrer 512 eigentlichen Kapazität und es müssen trotzdem pro Sample 512 Byte über den Bus verschickt werden wenn man den Rest des Blocks z.B. mit Nullen auffüllt. Der Ansatz scheint wenig praktikabel. Die durch den Befehlssatz des SD Standards festgelegte Beschränkung auf 512 Byte Daten Blöcke lässt sich allerdings doch umgehen wenn man sich die Master-Slave Beziehung zwischen Mikrocontroller und SD Card im SPI Bussystem zu Nutze macht. Der Master eines synchronen also taktgetriebenen Bussystems wie SPI treibt den Takt und bestimmt die Taktfrequenz. Findet am Takteingang des Slaves, in diesem Fall die SD Card, keine Zustandsänderung statt, so wertet dieser auch die Master Out-Slave In (MOSI) Datenleitung nicht aus. Es ist also möglich einen Block Schreibzugriff zu beginnen, indem der Mikrocontroller den WRITE_BLOCK Befehl sendet (in Abb. 2.3: command) und die Antwort auswertet. Damit wird der Controller der SD Card in einen Zustand versetzt, in dem er nun den Empfang eines 512 Byte Blocks erwartet. Liegt kein Takt an, bleibt der Zustandsautomat im SD Card Controller ewig in diesem Zustand. Man kann jetzt Byte für Byte Daten liefern, wobei immer nur dann das Taktsignal getrieben wird, wenn gültige Daten am Bus anliegen. Man führt aus Sicht des SD Card Controllers quasi einen normalen Transfer durch, welcher vom Master eben mit langen Pausen versehen wurde, in denen sich der Pegel der Taktleitung nicht ändert. In diesen Pausen wird Sampling und Verarbeitung durch die CPU durchgeführt. Nach dem 512ten Byte schließt man den Transfer gültig ab. Die Speicherkarte sendet eine sog. Data Response und geht nach Verarbeitung des Flash Zugriffs in ihren Grundzustand zurück. Sie ist dann bereit für den nächsten Blockzugriff oder einen anderen Befehl.
2.5 Verarbeitung auf Host-System
Sind die aufgenommenen Messdaten über eine Speicherkarte oder während der Messung über USB an den Verarbeitungsrechner übertragen worden, müssen sie dort visualisiert und in einem für die weitere Auswertung nutzbaren Format abgespeichert werden. Es sollte ein Graph der gesamten Messung gezeigt werden, in dem interessante Zeitabschnitte der Messung zur genaueren Betrachtung ausgewählt werden können. Die Speicherung sollte in einer einfach aufgebauten Struktur erfolgen, so dass die Messreihe von gängigen Programmen zur Datenvisualisierung eingelesen werden kann.
13
3 Implementierung
3.1 Hardware Entwurf
Bei Tests mit zwei MSP430 Testboards wurde deutlich, dass die Anforderungen an das Messsystem mit auf Evaluierungsplattformen aufsetzender Hardware nicht zu erfüllen sind. Problematisch zeigte sich dabei die Vielzahl der benötigten Zusatzbauteile und deren Verbindung mit dem Testboard. Nötig sind eine externe Strommessschaltung und die Kontaktierung dieser zum Messobjekt, eine stabile Referenzspannung für den Analog-Digital-Wandler, die Möglichkeit zum Batteriebetrieb, eine schnelle Kommunikation mit dem Auswertungsrechner und ein Speicher für Messdaten bei vom Rechner getrennter Messung. Ebenso suboptimal schienen die Bedienelemente und die grundsätzliche Handhabung des zusammengefügten Systems. Unter diesen Eindrücken entstand der Entwurf für eine auf die Anwendung zugeschnittene Schaltung. Ein Foto der entworfenen Platine ist in Abb. 3.1 dargestellt. Sie lässt sich in 5
Abbildung 3.1: Bestückte Platine, Oberseite Hauptbestandteile gliedern: MSP430 Mikrocontroller, Spannungsversorgung, Strommessschaltung, Ein- und Ausgänge und Benutzerschnittstelle.
14
3 Implementierung
3.1.1 MSP430 Mikrocontroller
Zum Einsatz kommt die F2618 Variante der 16Bit Controller von Texas Instruments. Die gewählte Variante besitzt 8KB RAM und 116KB Flash Speicher. Der Haupttakt wird aus einem 16MHz Quarz Oszillator gespeist und die Programmierung erfolgt über ein JTAG Interface. Die Versorgungsspannung kann zwischen 1,8 V und 3,3 V liegen. Da sie das obere Limit der messbaren Spannung durch den ADC festlegt, wird sie auf der Platine mit 3,3 V gespeist.
3.1.2 Spannungsversorgung
Die Versorgungsspannung für Mikrocontroller, SD Card, Strommessschaltung und USB Interface wird von einem LTC3534 Buck-Boost Spannungswandler bereitgestellt. Es handelt sich um einen Schaltregler, was bei einem batteriebetriebenen System wegen der höheren Effizienz unbedingt der Verwendung eines Linearreglers vorzuziehen ist. Der Einsatz eines Auf- und Abwärtswandlers (Buck-Boost) erlaubt die Speisung sowohl von 5V USB Versorgungsspannung, als auch von einem Akku. Gegenüber einem reinen Abwärtswandler kann der Auf- und Abwärtswandler auch noch bei einem fast entladenen Akku, dessen Spannung sich im Bereich der 3,3 V Versorgungsspannung des Messsystems bewegt, arbeiten. Der Spannungswandler benötigt als Außenbeschaltung eine Spule als Energiespeicher und ein Netzwerk von Spannungsteilern und Kondensatoren, welche die Rückführung des Regelkreises bilden. Bei Erstbestückung und -test der Platine wurde festgestellt, dass eine Störung des Regelkreises durch Berühren der Außenbeschaltung zu einer Beeinträchtigung oder gar Zerstörung des Spannungswandlers führen kann. Diese Bauelemente müssen daher mechanisch vor Fremdeinwirkung geschützt werden um versehentliche Berührung bei z.B. Messungen an der Platine auszuschließen. Als Akkumulator wurde eine moderne Lithium-Ionen Rundzelle vom Typ 18650 ausgewählt, wie sie z.B. in leistungsstarken LED Taschenlampen Verwendung findet. Die Nennspannung solcher Zellen beträgt 3,7V und sie besitzen eine Kapazität zwischen 1000 und 3000 mAh. Damit der Akku zum Laden nicht aus dem Gehäuse entnommen werden muss, besitzt das Messsystem eine Ladeschaltung direkt auf der Platine. Sie ist aufgebaut aus einem LTC4056 Li-Ion Charger Baustein und einem PNP Transistor über den der IC den Ladestrom durch den Akku steuert. Aktiviert wird ein Laden des Akkus automatisch wenn dieser eine Spannung von unter 4,05V besitzt und das System über die USB Buchse an einen Rechner oder ein USB Netzteil angesteckt wird. Da es sich um einen speziellen Li-Ionen Lade IC handelt, ist die Ladekennlinie genau angepasst und eine automatische Umschaltung auf Erhaltungsladung
15
3 Implementierung vorgesehen. Zur Einhaltung der USB Spezifikation ist die Stromstärke, welche über die USB Verbindung gezogen wird, auf 500 mA begrenzt. Ist das System mit einer externen Spannungsversorgung verbunden, wird auch der 3,3V Spannungswandler und damit der funktionale Teil der Platine von extern gespeist. Dies erfordert den Einsatz eines sog. Power Path Controllers, der zwischen autonomer und externer Versorgung umschaltet. Der verwendete LTC4412 steuert dazu zwei MOSFETs, wovon einer im Batterie und einer im 5V USB Zweig sitzt. Bei vorhandener USB Verbindung wird der Batterie MOSFET nichtleitend und der USB MOSFET leitend geschalten, bei Versorgung durch den Akku andersherum.
3.1.3 Strommessschaltung
Als Shunt für die Strommessung wird ein Widerstand in Durchsteckmontage (Genauigkeit ±1%) genutzt. Der Spannungsabfall an diesem wird in von einem Shunt Monitor INA195 verstärkt. Dieser besitzt eine Verstärkung von V /V = 100, es sind aber im gleichen Gehäusetyp Varianten mit V /V = 50 (INA194) und V /V = 20 (INA193) verfügbar.
3.1.4 Ein- und Ausgänge
Das Messsystem ist prinzipiell mit zwei anderen Geräten verbunden, dem Messobjekt und dem Auswertungsrechner. Über eine Mini-DIN Steckverbindung sind die Messleitungen an das Messobjekt geführt. Die Pin Belegung der Buchse kann Abb. 3.2 entnommen werden. Shunt+ wird mit dem Plus Pol der Spannungsversorgung (z.B. eine Batterie) Pin Pin Pin Pin 1: 2: 3: 4: Ref−/GND Ref−/GND Shunt− Shunt+
Abbildung 3.2: Belegung Mini-DIN Buchse [5] des Messobjekts verbunden. Der Strom durchläuft den Shunt des Messsystems und fließt über Shunt− zum Messobjekt zurück (z.B. Plus Pol der Batteriefassung). Da nicht nur der Strom durch das Messobjekt, sondern auch der Spannungsabfall über selbigem zu messen ist, muss auch die Masse (im Bsp. Minus Pol der Batteriefassung) mit dem Bezugspotential Ref− des Messsystems verbunden werden.
16
3 Implementierung Mit dem Auswertungsrechner kann entweder direkt über USB kommuniziert werden oder indirekt, indem die Messdaten auf einer SD Speicherkarte gespeichert und vom Rechner ausgelesen werden. Das USB Interface stellt ein FTDI FT232RL Schaltkreis zur Verfügung. Dieser ist mit dem UART des MSP430 Controllers verbunden und setzt in Sende- und Empfangsrichtung byteweise zwischen der USB Verbindung mit dem Auswertungsrechner und dem UART um. Die Verbindung ist auf 920000 Baud konfiguriert, was nahe der maximal möglichen Rate liegt, bei der noch eine zuverlässige Übertragung möglich ist. Auch teilt der FTDI Chip dem angeschlossenen Rechner mit, dass das System bis zu 500mA Stromstärke benötigen kann. Aus der Vielzahl von möglichen USB Steckverbindungen wurde wegen seiner kompakten Bauform der Mini-B Typ gewählt. Der Speicherkarteneinschub hat SD Standardgröße. Es können einfache SD Karten, Karten vom Typ SD-HC (High Capacity) und über einen Adapter die jeweiligen micro Varianten verwendet werden. Um eine Kartendetektierung im Mikrocontroller zu ermöglichen wird bei Pin 1 (Card Select) des Einschubes im Gegensatz zu den Daten Pins kein Pull Up Widerstand verwendet. Wenn auch nicht im SD Standard vorgesehen, so treiben quasi alle Karten diese Leitung initial auf HIGH Pegel, was eine leichte Erkennung ermöglicht.
3.1.5 Benutzerschnittstelle
Der Benutzer interagiert mit dem Messsystem über zwei Schnittstellen. Mittels der Software auf dem Auswertungsrechner werden Messparameter eingestellt und die aufgenommenen Daten ausgewertet. Am Gerät selbst wird dessen Status über Leuchtdioden angezeigt und über zwei Taster kann der Messmodus gewählt und eine Messung gestartet werden. Mit dem grünen Taster wird der Modus zwischen autonomer und gekoppelter Messung umgeschaltet. Einzelne Messreihen werden mit dem gelben Taster gestartet und bei nochmaligem Druck wieder gestoppt. Die Status LEDs können nicht direkt über die Logik Pins des Mikrocontrollers getrieben werden, wie es bei Hobby Mikrocontroller Projekten oft Praxis ist. Die Spezifikation gibt bereits bei einer Gesamtbelastung der Ausgänge mit über 12 mA eine Verfälschung des High und Low Ausgangspegels um über 250 mV an. [4, S. 36] Geschalten werden alle LEDs deshalb über MOSFETs. Im Gegensatz zu Bipolartransistoren, bei deren Einsatz der Logik Pin immer noch mit dem Basis Strom belastet wird, ist im statischen Zustand bei MOSFETs quasi keine Last an der Ausgangsstufe des Controllers. Verwendet werden NXP NX3008NBK (VGSth ≈ 0, 9V ) und die LED Vorwiderstände sind auf 10 mA Stromstärke pro Leuchtdiode dimensioniert. Eine Besonderheit bildet die LED
17
3 Implementierung zur Anzeige des Messmodus, bei der ein zweifarbiger LED Typ verwendet wird. Die Ansteuerung findet über komplementäre Transistoren statt. So schaltet ein n-Kanal MOSFET die Farbe Rot und ein p-Kanal MOSFET die Farbe Grün. Dadurch ist es möglich den selben Logik Ausgang des Controllers für die Gate Anschlüsse von beiden Transistoren zu verwenden. Das hat zur Folge, dass immer eine Farbe leuchtet bzw. die LED nie ausgeschalten ist, was aber zur Modusanzeige passt, da immer entweder der UART oder der SD Modus aktiv ist. Im weitesten Sinne zur Benutzerschnittstelle gehörig ist auch der Ein-Aus Schalter. Dieser trennt im Aus Zustand den Plus Pol des Akkus vom Rest der Schaltung. Ohne externe Versorgung ist das Gerät dann folglich aus. Bei vorhandener USB Verbindung wird mit dem Schalter jedoch nur das Laden des Akkus deaktiviert. Der funktionelle Teil der Schaltung ist in diesem Fall unabhängig von der Stellung des Schalters aktiv!
3.1.6 Gehäuse
Platz findet die beschriebene Hardware in einem Kunststoffgehäuse. Für den Prototypen wird ein angepasstes Universalgehäuse verwendet. Die Abmaße der Platine ermöglichen jedoch ein für einen späteren Einsatz besser geeignetes schmaleres und vor allem kürzeres Gehäuse.
18
3 Implementierung
3.2 Mikrocontrollerprogramm
Abbildung 3.3: Programmablauf: Mikrocontroller
3.2.1 Leistungs- und Energiemessung
Die Spannung über dem Shuntwiderstand und die Spannung über der Last werden periodisch durch den 12bit ADC des MSP430 gesamplet. Ein Sample wird ausgelöst durch den Ablauf des Timer B. Dieser zählt bis zu dem im Timer Capture/Compare Register festgelegten Wert und bezieht sein Taktsignal von einem externen Quarz. Nach Ablauf beginnt der Timer sofort erneut zu zählen. Der ADC wird so ohne Nutzung der CPU mit wählbarer Periode zum Sampling angeregt. Ist die Analog-Digitalwandlung abgeschlossen erhält die CPU einen Interrupt, kopiert die zwei Werte aus den ADC Ergebnisregistern und hat jetzt Zeit bis zum nächsten Interrupt eine Vorverarbeitung und Speicherung/Übertragung der Messwerte vorzunehmen. Die Interrupt Service
19
3 Implementierung Routine (ISR) ist im Programmablaufplan in Abb. 3.3 rechts dargestellt. Die richtige Konfiguration des Analog-Digitalwandlers ist für die zeitlich korrekte Abtastung der zwei Eingangskanäle äußerst wichtig. Soll pro Abtastzeitpunkt mehr als ein Kanal abgetastet werden kann der ADC nicht im Repeat Sequence of Channels Modus betrieben werden. Die Bezeichnung leitet hier in die Irre. Die Automatengraphen zur Funktion der ADC Modi [3, S. 581ff] zeigen, dass pro Anregungsimpuls durch den Timer nur ein Kanal gesampelt wird und ein Interrupt erst nach dem Ende der Sequenz, also dem Sampling aller gewählten Kanäle, ausgelöst wird. Für ein Spannungs- und Stromwertepaar wären also 2 Impulse nötig. Der Timer müsste demnach mit halber Periodendauer betrieben werden. Eine solche Konfiguration bedeutet aber, dass Spannungs- und Stromsample nicht zum gleichen zeitlichen Abtastpunkt gehören. Zwischen ihnen liegt genau eine Periodendauer des Timers. Besser geeignet ist der Sequence of Channels Modus. Hier ist eine Konfiguration möglich, in der der ADC nach einer Anregung durch den Timer alle gewählten Kanäle schnellstmöglich abarbeitet. Nach Analog-Digital-Wandlung des letzten Kanals wird ein Interrupt ausgelöst. Damit der Wandler auf den nächsten Timer Impuls wieder reagiert muss aber in der ADC Interrupt Service Routine das Enable Conversion (ENC) Bit im ADC12 Control Register 0 herunter- und wieder heraufgesetzt werden. Für jeden ADC-Kanal erhält man einen 12bit Wert (0..4095), welcher das Verhältnis der abgetasteten Spannung zur verwendeten Referenzspannung des ADC angibt. Es gilt nach [3, S. 576]: UIN = NADC · Uref + − Uref − 4096 (3.1)
Absolutes Maximum für eine messbare Eingangsspannung mit Uref − als Bezugspotential ist demnach die Referenzspannung. Diese kann aus verschiedenen Quellen gewählt werden, wobei sie immer im Bereich 1.4V-VAV CC liegen muss. VAV CC ist im Allgemeinen auf 3,3V festgelegt. Negatives Bezugspotential ist das Massepotential. Es ist wünschenswert bereits nach der Analog-Digital-Wandlung von den 12bit Rohwerten zu abstrahieren und in nachfolgender Verarbeitung Spannungs- und Stromwerte zu verwenden. Die dazu nötige Vorverabeitung muss im Mikrocontroller aus Performance Gründen in Ganzzahlarithmetik durchgeführt werden. Die implizierte Kommaverschiebung muss bei der Auswertung in Volt am Hostsystem rückgängig gemacht werden. Listing 3.4 zeigt den zugehörigen C-Code. Die Referenzspannung wird hier als Konstante mit L Suffix angegeben. Nur so erzeugt der Compiler msp430gcc Assemblercode, der die Multiplikation effizient ausführt. Prinzipiell müsste
20
3 Implementierung union long_union{ unsigned long value; struct{ unsigned int lower; //lsb unsigned int upper; //msb }split; }; union long_union un_adc_v; // Vref = 3.298V un_adc_v.value = adc_n_v.value * 32980L; un_adc_v.value = un_adc_v.value 32Bit) und belegt im schlimmsten Fall ((NADC = 4095)·32980) maximal 28 Bit. Dadurch kann die Rechtsverschiebung durch eine Linksverschiebung um 4 Stellen ersetzt werden, nach der das Ergebnis in den oberen 16 Bit der Variable liegt. Für deren Heraustrennung wird mit einem union Typ gearbeitet. An dieser Stelle sollte genauer auf den Memory Mapped Hardware Multiplizierer eingegangen werden. In vielen MSP430 CPUs gibt es eine Multiplikationseinheit obwohl der Befehlssatz (RISC Architektur) keinen Multiplikationsbefehl beinhaltet. Anstatt eines Befehlsaufrufs MULT füllt man spezielle Operandenregister und 3 CPU-Takte später liegt das Ergebnis ohne weiteres Zutun gültig in einem Ergebnisregister vor. Die Verwendung erfolgt nur über Zugriff auf die im Datenblatt definierten Registeradressen, ist also memory mapped. Zur Unterscheidung von vorzeichenbehafteter und vorzeichenloser Multiplikation existieren separate Register für Operand 1. So wird Operand 2 immer an die selbe Adresse geschrieben, Operand 1 aber für vorzeichenlose
21
3 Implementierung Multiplikation nach 0x0130, für vorzeichenbehaftete Mult. nach 0x0132. [3, S. 358 ff] Die Operandenregister sind jeweils 16 Bit breit, das Ergebnis besitzt 32 Bit Breite und liegt geteilt in einem “Lower 16 Bit“- und einem “Upper 16 Bit“ Register. Teilt man dem Compiler msp430-gcc mit, dass die Ziel-CPU eine Multiplikationseinheit besitzt, kann man im erzeugten Assembler Code die beschriebenen Abläufe bei Multiplikationen beobachten. Auch werden bis zum Vorliegen des Ergebnisses alle Interrupts mit dem DINT Befehl deaktiviert um das Timing der Operation in jedem Fall einzuhalten. Der Programmierer muss sich bewusst sein, dass in dieser Zeit auftretende Interrupts nicht sofort in der zugehörigen ISR verarbeitet werden.
3.2.2 UART
Ist das Messsystem über die USB Schnittstelle mit einem Rechner verbunden, auf dem das Auswertungsprogramm ausgeführt wird, können die Messdaten während der laufenden Messung mit hoher Datenrate übertragen werden. Ursprünglich sollte auch im Modus mit hoher Abtastrate die Umrechnung auf Spannungswerte in Volt, respektive Stromstärkewerte in mA, im Mikrocontroller Programm erfolgen. Damit wäre ein gleiches Datenformat für beide Betriebsmodi möglich gewesen und das Auswertungsprogramm hätte ohne Kenntnis von Shuntwiderstandswert, Referenzspannung oder Verstärkungsfaktor des Shunt Monitors die Anzeige der Daten übernommen. Die für diese Berechnungen nötige Rechenzeit ist neben der Datenübertragungsrate ein entscheidender Faktor für die maximal erreichbare Abtastrate des Gesamtsystems. Während der Entwicklung zeigte sich, dass eine ausreichend hohe Rate so nicht zu erreichen ist. Der MSP430 lässt sich aufgrund seiner Ausrichtung auf geringe Leistungsaufnahme nur mit maximal 16 MHz CPU Takt betreiben. Da auch bei der maximalen Taktfrequenz die benötigte Rechenzeit zu lange war wurde für den Zugewinn an möglicher Abtastrate die Umrechnung in das Auswertungs/Empfängerprogramm verlagert. Damit werden im Mikrocontroller zwischen 2 Abtastzeitpunkten nur noch die 24 Bit Rohdaten aus den zwei Kanälen des Analog-Digital-Wanders umkopiert und gesendet. Da die Rohwerte der Spannungs- und Strommessung jeweils 12 Bit groß sind, die Übertragung aber byteweise (8 Bit) erfolgt, werden diese aufgetrennt. Die jeweils höherwertigsten 4 Bit der zwei Rohwerte werden zusammengefügt und als erstes gesendet. Das zweite Byte bilden die verbliebenen 8 Bit des Spannungswertes und der Rest des Stromstärkewertes bildet das dritte und letzte Byte. Die Senderoutine ist als kurzes Precompiler Makro realisiert. In diesem wird das UCBUSY Flag im Statusregister des UART Moduls abgefragt und falls dieses gesetzt ist, gewartet bis das Modul bereit ist. Danach wird das an das
22
3 Implementierung Sendereihenfolge Byte 1 Byte 2 Byte 3 Inhalt NU [11..8] NI [11..8] NU [7..0] NI [7..0]
Variable[Bits]
Abbildung 3.5: Übertragungsreihenfolge im UART Modus Makro übergebene Byte ins Senderegister kopiert. Die Verwendung eines Makros vermeidet für die wenigen Befehle einen Unterprogrammaufruf, welcher mehr Zeit in Anspruch nehmen würde. Mit der beschriebenen Implementierung lassen sich Abtastraten bis zu 9200 Samples pro Sekunde erreichen.
3.2.3 SD Card
Bei autonomen Betrieb des Messsystems werden die Messdaten auf einer SD Card gespeichert. Die Benutzung von Speicherkarten erfordert allerdings etwas Zusatzaufwand. Nach dem Einschieben der SD Card in den dafür vorgesehenen Slot muss die Speicherkarte zunächst initialisiert werden. Die Speicherkarte erwacht im SD Modus und muss erst nach Abb. 3.6 umkonfiguriert werden. Man wechselt in den SPI Modus durch Senden des Reset Befehls bei auf LOW Pegel gezogener nCS Leitung. Da alle Befehle des SD Protokolls mit einer gültigen Prüfsumme versehen sind, muss auch der Wechsel in den SPI Modus noch mit Prüfsumme gesendet werden. Diese kann anstatt sie aufwändig zu berechnen jedoch für den Reset Befehl (CMD0) im Speicher abgelegt werden, da danach keine Prüfsumme mehr benötigt wird. Dann muss eine Sequenz von Befehlen durchlaufen werden, um die Art der Karte zu erkennen. Besonders wichtig ist hierbei ob es sich um eine High Capacity Karte handelt. Der Standard sieht bei diesem Typ eine andere Adressierung vor. Der Grund für die unterschiedliche Adressierung ist die maximale Größe von Standard Capacity Karten. Beim Standard Capacity Typ werden die Adressen byteweise gezählt. Die kleinste adressierbare Einheit ist aber ein 512 Byte Block und eine Standard Capacity Karte quittiert einen Speicherzugriff auf eine Adresse, die nicht Vielfaches von 512 ist, mit einem Fehler. Es liegt also nahe, die Speicheradressen bei High Capacity Karten den ohnehin schon atomaren Blöcken zuzuordnen, was auch so im Standard umgesetzt wurde. Damit überwindet
23
3 Implementierung
Abbildung 3.6: Flussgraph zur Initialisierung im SPI Modus[2, S. 115] man die sich bei Byteadressierung und 32 Bit Adressbreite ergebende theoretische Obergrenze von 4095 Megabyte. Dateisystem Soll eine Reihe von Messdaten auf einem Speicher abgelegt und später wieder zuordenbar ausgelesen werden bedarf es grundsätzlich einer Konvention bezüglich des Ortes und der Ordnung der Daten. Dieses Dateisystem kann sehr einfach ausfallen, wenn es nur einer speziellen Anwendung genügen muss. Wichtig ist im Fall des Messsystems die in 2.4 beschriebenen Blockzugriffe auf das Nötigste zu beschränken. Das Konzept, den Block Schreibzugriff über eine Folge von Samples zu dehnen wird mit dem hier beschriebenen Dateisystem aufgegriffen.
Abbildung 3.7: Layout Simples Dateisystem Abb. 3.7 stellt die Partitionierung der Speicherkarte dar. Entscheidend ist die Messreihen Tabelle, welche an einer definierten Adresse abgelegt ist, die dem Messsystem und der Auswertesoftware bekannt ist. Sie enthält Anfangsund Endpointer auf die von den Datenreihen belegten Blöcken. Setzt man die Größe der Tabelle auf genau einen 512 Byte Block lassen sich maximal 63 Datenreihen referenzieren. Dies sollte für den Einsatzzweck zunächst genügen. Sind mehr Datenreihen gefordert, so lässt sich das Dateisystem erweitern indem der nächste Block als Fortführung der Tabelle verwendet wird. Die Datenreihen selbst können beliebige Länge besitzen wenn der Platzbedarf nicht die Kapazität der Karte überschreitet. Die ersten 4 Byte des Blocks, in dem die Tabelle abgelegt wird, sind ein festes Muster zur Vermeidung von ungültigen Zugriffen durch Interpretation eines falschen Blocks als Messreihen Tabelle. Daran schließt sich die Anzahl der Datenreihen auf der Karte an. Mit dieser Zahl wird die Anzahl gültiger
Abbildung 3.8: Layout der Messreihen Tabelle Anfangs- und Endadressen kontrolliert. (Nicht genutzte Plätze in der Tabelle werden mit 0x00000000 gekennzeichnet) Für jede Messreihe wird die Adresse des ersten und des letzten Blocks, in dem Daten der Messreihe gespeichert sind, abgelegt. Die Messreihe schließt die referenzierten Blöcke und alle dazwischenliegenden Blöcke ein. Ist nur ein Block mit Daten belegt, so sind Anfangs- und Endadresse identisch. Eine Datenreihe über 2 Blöcke ist in Abb. 3.9 dargestellt. Hier ist die Ordnung der Spannungs- und Stromsamples zu erkennen, die sich aus der Verarbeitung im Mikrocontroller ergibt. Um eine reguläre Anordnung der Daten zu gewährleisten wurden jedem Spannungs- oder Stromwert 2 Byte zugeteilt obwohl sie eigentlich nur maximal 12 Bit breit sein können (Auflösung des ADC). Dadurch lässt sich auch 0xFFFF als ein Marker für das Ende einer Messreihe bzw. für ungenutzte Bytes eines Blockes verwenden, da ein gültiger Messwert maximal 0xFFF betragen kann.
3.2.4 Konfiguration des Messsystems
Verschiedene Parameter müssen zur Nutzung des Messsystems festgelegt werden. Die Speicherung dieser Parameter sollte zum einen nichtflüchtig sein, also auch das Abschalteten des Systems überdauern, zum anderen sollte sie nicht auf einem externen Rechner erfolgen, sondern auf dem Mikrocontroller. Diese Forderung ergibt sich direkt aus der Möglichkeit des autonomen Messens, ist aber auch dann äußerst nützlich wenn das Messsystem mit mehreren Auswertungsrechnern genutzt wird. Unter den Rechnern muss so keine Konfigurationsdatei ausgetauscht werden, da die Konfiguration immer vom Gerät übertragen wird. Abgelegt werden die Einstellungen im Flash Speicher des MSP430 und bleiben damit auch ohne Spannungsversorgung erhalten. Der Austausch von Parameterwerten zwischen Messsystem und Auswertungsrechner erfolgt wie die Messdatenübertragung über den UART und gehorcht einem simplen Protokoll. Die Abläufe lassen sich leicht anhand des in Abb. 3.10 dargestellten Automatengraphen nachvollziehen, der das Verhalten der Mikrocontroller Software darstellt. Das Auswertungsprogramm kann die aktuell im Flash gespeicherten Parameter mit einem Lesekommando anfordern, welches auf ein Byte mit Inhalt 0x55 festgelegt ist. Hierauf antwortet der Mikrocontroller mit der gespeicherten Konfiguration, die in der abgebildeten Reihenfolge Byte für Byte aus dem Flash gelesen wird. Soll die Konfiguration geändert werden muss die Übertragung der neuen Parameter mit dem Schreibkommando 0x11 initiiert und mit 0x22 gültig ab-
27
3 Implementierung geschlossen werden. Andernfalls werden die Änderungen verworfen. Außerdem prüft das Auswertungsprogramm anschließend selbst die neue Konfiguration indem es die Parameter wieder ausliest und mit den neu eingestellten Werten vergleicht.
Abbildung 3.10: Automatengraph - Konfiguration über UART Beim Zugriff auf den im MSP430 integrierten Flash Speicher muss dessen Segmentierung beachtet werden. Ein Löschvorgang kann nicht auf Byteebene erfolgen, sondern umfasst immer ein ganzes Segment, welches mindestens 64 Byte groß ist. Da die Speicherzellen ihren Zustand einzeln nur von logisch “1“ auf logisch “0“ ändern können, muss vor dem Schreiben von einem oder mehreren Bytes der Zielbereich gelöscht, also auf “1“ gesetzt werden. Wie beschrieben wird dazu das gesamte betroffene Segment gelöscht. Aus diesem Grund werden die Parameter immer gemeinsam geschrieben. Eine Funktion flash_settings(..) kapselt die dazu nötigen Schritte: Entsperren, Löschen des Segments, Schreiben der Parameter, Sperren. Die Daten liegen von Adresse 0x1000 bis 0x1004 in Segment D des Information Bereichs des Flash Speichers, in dem keine zusätzlichen Daten abgelegt sind.
28
3 Implementierung
3.3 Auswertungs-/Empfängerprogramm
Das kombinierte Empfänger- und Auswertungsprogramm ist in der Skriptsprache Python umgesetzt und bietet eine graphische Benutzeroberfläche auf Basis der Qt Bibliothek. Durch die Verwendung von Python und Qt lässt sich das Programm auf verschiedenen Betriebssystemen nutzen, sofern die verwendeten Bibliotheken1 installiert wurden.
Abbildung 3.11: Graphische Oberfläche des Auswertungsprogrammes Das Programm ist nach den zwei Modi des Messsystems in UART und SD Card Funktionalität geteilt. Dies gilt sowohl für die graphische Oberfläche, in der die Modi durch zwei Karteireiter getrennt sind, als auch für den darunterliegenden Entwurf. Hier fungieren eine UART Klasse und eine SD Klasse als Datenquellen und eine gemeinsame Darstellungsklasse visualisiert deren Daten in einem Graph oder exportiert sie in eine CSV Datei. Diese Datei kann dann zu einem späteren Zeitpunkt im Reiter “CSV Import“ wieder eingelesen und die Auswertung fortgesetzt werden. Im UART Modus wird die serielle Schnittstelle geöffnet und dann der Eingangspuffer (FIFO) periodisch abgefragt. Zunächst wartet das Programm auf das Auftauchen des Start Symbols, mit dem das Messsystem den Beginn einer Messung signalisiert. Die UART Übertragung ist bytebasiert, so ist das
1
3 Implementierung Start Symbol auf ASCII Start of Text 2 festgelegt. Auf das Start Symbol folgen unmittelbar die Daten des ersten Samples. Pro zeitlichem Abtastpunkt fallen 3 Byte (24 Bit) Daten im Eingangspuffer des UART an. Da die Rohwerte der Spannungs- und Strommessung jeweils 12 Bit groß sind, die Übertragung aber byteweise (8 Bit) erfolgt, werden die jeweils höherwertigsten 4 Bit der Rohwerte zusammen übertragen. Der Empfänger trennt deswegen das erste (gemischte) Byte auf, und fügt aus dem oberen Halbbyte und dem zweiten empfangenen Byte den Spannungsrohwert zusammen, sowie aus dem unteren Halbbyte und dem dritten Byte den Stromstärkerohwert. Die Berechnung des Spannungswertes in Volt aus dem Rohwert NU ergibt sich nach Gleichung 3.1 zu: Uref + − Uref − 3, 298V = NU · (3.2) U = NU · 4096 4096 Die Umrechnung des Stromstärkewertes erfolgt nach: I = NI · 1 VIN A195 · Uref + − Uref − 1 · 4096 RShunt (3.3)
1 3, 298V 1 · · (3.4) 100 4096 RShunt Bei dieser Berechnung wird berücksichtigt, dass die Spannung über dem Shuntwiderstand vor der Analog-Digital-Wandlung durch den Shuntmonitor INA195 verstärkt wurde. Dessen Verstärkungsfaktor (V=100) wird im UART Modus an dieser Stelle herausgerechnet. Die so erhaltenen Werte werden im Python Sequenztyp list abgelegt. Neben den Listen für Spannung und Stromstärkewerte wird eine Liste mit deren Produkt, der Momentanleistung, geführt. Nach Ende der Messung können diese Datensätze leicht in einem Graphen über der Zeit aufgetragen dargestellt oder in eine CSV Datei exportiert werden. Die Visualisierung erfolgt mittels der Bibliothek Matplotlib. Bereits bei kurzen Messungen mit hoher Abtastrate fallen Datenmengen an, deren vollständige graphische Darstellung für Probleme sorgen kann. Tests mit Gnuplot, Excel und LibreOffice Calc zeigten, dass manche Programme hierfür sehr viel Rechenzeit benötigen oder im Falle von Excel schlicht mit einer Warnung abbrechen. Vor diesem Hintergrund zeigt sich die leistungsstarke Matplotlib wesentlich besser geeignet. Bei Testmessungen verlief die Darstellung und Bereichsauswahl konstant flüssig. Als Möglichkeit zum Export der Messdaten in andere Auswertungsprogramme und zur Archivierung kann eine CSV Datei erstellt werden. Es handelt sich um eine Textdatei, in die Daten mit simpler Konvention geschrieben werden I = NI ·
2
ASCII STX: Wert 02h
30
3 Implementierung können. Die erzeugten Dateien enthalten eine Kopfzeile mit den Spaltenüberschriften, die restlichen Zeilen enthalten durch Semikolon getrennte Zahlenwerte. Abb. 3.12 zeigt ein Minimalbeispiel.
Time(s);Voltage(V);Current(mA);Power(mW) 0.00000;2.39108137;73.82745983;176.52746379
Abbildung 3.12: Aufbau CSV Datei Neben direkt über UART übertragenen Messwerten können mit dem Programm auch auf einer SD Card gespeicherte Messreihen ausgewertet werden. Das Programm öffnet über die SD Card Klasse die entsprechende Gerätedatei (z.B. /dev/sdc) und liest die in 3.2.3 beschriebene Messreihen Tabelle. Die in der Tabelle eingetragenen Messreihen werden dem Nutzer nummeriert in einer Liste angezeigt und bei Auswahl einer Messreihe die zugehörigen Messwerte von der Speicherkarte gelesen und verarbeitet. Es finden dabei mehrere Tests auf Validität der Daten auf der Speicherkarte statt. Zunächst wird überprüft ob sich ein Marker “MYFS“ an der vorgesehenen Stelle befindet und ob das Feld “Anzahl Datenreihen“ einen sinnvollen Wert enthält. Damit wird sichergestellt, dass auf dem Speichermedium überhaupt eine Messreihen Tabelle existiert. Weiterhin wird immer geprüft, ob die Adresse des letzten Blocks einer Datenreihe hinter der Anfangsadresse liegt und dass sich Endmarker nur innerhalb des letzten Blocks befinden.
31
4 Benutzungshinweise
In diesem Kapitel wird eine kurze Anleitung zur richtigen Benutzung des Messsystems gegeben. Es ist in Schritte gegliedert, um ein schnelles Nachschlagen des Anwenders zu vereinfachen.
4.1 Auswahl des Shuntwiderstands
Zunächst muss eine Abschätzung getroffen werden, welche maximale Stromstärke gemessen werden soll. Bei Leistungsmessung an einem Sensorsystem handelt es sich um die Stromstärke, die das Objekt von seiner Stromversorgung bezieht. Diese Stromstärke fließt auch durch den Shuntwiderstand des Messsystems und der Widerstandswert muss an den zu erwartenden Wert angepasst sein. Ist der Widerstandswert zu hoch für die auftretende Stromstärke, fällt eine zu hohe Spannung über dem Shuntwiderstand ab. Die verstärkte Spannung liegt möglicherweise oberhalb des messbaren Bereichs des Mikrocontrollers oder es wird sogar die maximal zulässige Verlustleistung am Widerstand überschritten. Dies kann zu einer Beschädigung des Messwiderstands oder von anderen Teilen des Messsystems führen. Ist die erwartete Stromstärke sehr klein, kann diese mit einem zu klein gewählten Shuntwiderstand nicht messbar sein. Der Shunt Monitor INA195 benötigt als Eingangsspannung Usense mindestens 5 mV um am Ausgang den korrekt verstärkten Wert zu liefern. Die aufgenommene Uout − Uin Kennlinie zeigte zwar bereits ab 1 mV Linearität, doch durch Variation bei Bauteilen muss dies nicht garantiert sein. Nach den Gleichungen 4.1 und 4.2 wurde die in Abb. 4.1 dargestellte Tabelle erstellt, welche die Grenzwerte für verschiedene Präzisionswiderstände beinhaltet. Imess,max = 1 3, 3V 1 Umess,max · = · VIN A195 RShunt 100 RShunt Usense,min 5mV = RShunt RShunt (4.1) (4.2)
4.2 Auswahl der Abtastrate
Bei kurzen Messungen sollte mit der maximalen Abtastrate von 9,2 kS/s gemessen werden. Die Abtastrate legt fest welche kürzeste Änderung der Eingangsgrößen noch erfasst wird. Die Zeitdauer ergibt sich nach: tmin = 2 · 1 fSample (4.3)
Für 9,2 kS/s liegt diese Grenze bei 217 µs. Bei Langzeitmessungen sollte die Abtastrate verringert werden um die Datenmenge der aufgenommenen Messdaten zu begrenzen. Bei maximaler Abtastrate steigt die Rohdatenmenge mit folgender Rate: R = 24Bit · 9200Hz = 220800Bit/s = 26, 95KB/s (4.4)
Es ist anzumerken, dass eine Textdatei (bzw. CSV), in der diese Daten gespeichert werden, wesentlich schneller wächst, da nicht vorzeichenlose Binärwerte abgelegt werden, sondern die Dezimalzahlen in einem Zeichensatz wie ASCII kodiert werden. Im Auswertungsprogramm macht sich dieser Effekt noch deutlicher bemerkbar. In die CSV Dateien werden die Werte als Kommazahlen geschrieben, wobei jede Ziffer der Zahlen ein Zeichen darstellt, für dass kodiert ein Byte benötigt wird.
4.3 Verbinden der Messleitungen
Es müssen 3 Verbindungen zwischen dem Messsystem und dem Messobjekt hergestellt werden. Die Shunt+ Messleitung wird mit dem Plus Pol der Spannungsversorgung des zu messenden Gerätes verbunden, die Shunt- Messleitung mit dem Plus Anschluss des Gerätes. Damit ist der Shuntwiderstand zur High Side Messung der Stromstärke in den Zuleitungspfad eingesetzt. Die Ref- Messleitung wird mit dem Minus Pol bzw. der Masse verbunden. Die Messung des Spannungsabfalls erfolgt von Shunt- nach Ref-.
33
4 Benutzungshinweise
Abbildung 4.2: Verbindung mit dem Messobjekt Mit dem Auswertungsrechner kann entweder direkt über USB kommuniziert werden oder indirekt, indem die Messdaten auf einer SD Card gespeichert und vom Rechner ausgelesen werden. Soll mit hoher Abtastrate gemessen werden, ist die Verbindung zum PC mit einem Mikro USB Kabel herzustellen. Soll ohne PC gemessen werden, muss vor dem Einschalten des Messsystems eine SD Card in den Speicherkarteneinschub gesteckt werden.
4.4 Messung
Der eingestellte Betriebsmodus kann mit der zweifarbigen LED überprüft und mit dem grünen Taster gewechselt werden. Ist keine SD Card vorhanden, kann dieser Modus nicht ausgewählt werden. Im UART Modus muss am PC die Auswertungssoftware gestartet und in dieser die UART Schnittstelle geöffnet werden. Das Starten und Stoppen der Messung erfolgt mit dem gelben Taster.
4.5 Auswertung
Im UART Modus können nach Stoppen der Messung die aufgenommenen Daten mit dem Button “Plot“ in einem Graphen über der Zeit dargestellt werden. Im unten rechts zu findenden Drop-Down Menü lässt sich die Darstellung zwischen Spannungs-, Stromstärke und Leistungswerten umschalten. Mit “Export to CSV“ werden diese drei Datenreihen zur weiteren Auswertung in eine kommaseparierte Datei geschrieben. Der “Clear Data“ Button bereitet eine neue Messung vor und verwirft die zuletzt empfangenen Daten. Wurden Messdaten auf eine SD Card geschrieben, lassen sie sich im zweiten Karteireiter des Auswertungsprogramms importieren. Die SD Card muss in einem Kartenleser an den PC angeschlossen werden und kann dann geöffnet werden. Die enthaltenen Datenreihen werden rechts nummeriert aufgelistet und lassen sich per Mausklick auswählen. Dann erst erfolgt die Übertragung der
34
4 Benutzungshinweise Daten von der SD Card und sie können gleich wie im UART Modus ausgewertet werden.
35
5 Beispielmessung an Temperaturlogger
Als Beispiel für mit dem Messsystem mögliche Untersuchungen soll die Analyse eines Datenloggers für Temperaturwerte dienen. Der Datenlogger besteht im wesentlichen aus einem digitalen Temperatursensor vom Typ TMP275 und einem MSP430 Mikrocontroller, der diesen ausliest. Für die Messung wurde der Datenlogger an einem Labornetzteil betrieben und zwischen Netzteil und Datenlogger das Messsystem angeschlossen. Es wurde für ca. 20 Sekunden im UART Modus gemessen und eine Auswertung mit der entwickelten Software durchgeführt.
Abbildung 5.1: Abgeschlossene Beispielmessung Ein Aufnahme des Programmfensters direkt nach der Messung mit dem Graph
36
5 Beispielmessung an Temperaturlogger der gemessenen Stromstärke über der gesamten Messzeit ist in Abb. 5.1 dargestellt. Da die durch das Netzteil erzeugte Versorgungsspannung bei der geringen Belastung durch den Datenlogger über den Messzeitraum konstant ist und daher der Verlauf der Leistungskurve dem der Stromstärke gleicht, kann die Auswertung am Stromstärkegraph vorgenommen werden. Anhand der sich ändernden Stromstärke und Leistungsaufnahme des Datenloggers lässt sich dessen Arbeitsweise leicht nachvollziehen und es sind gut die verschiedenen aktiven Phasen erkennbar. Der Mikrocontroller liest den Sensor 12 mal über dessen I2 C Schnittstelle aus und legt die Werte im Arbeitsspeicher ab. Dieses periodische Auslesen ist im Graph an den wiederholten “kleinen“ Peaks im Abstand von 2 Sekunden erkennbar. Auf die Erfassung aller 12 Peaks wurde bei der in Abb. 5.1 dargestellten Messung verzichtet. Nach der Übertragung des 12. Wertes versendet der Mikrocontroller die aggregierten Daten über einen UART, was im Graphen durch den “großen“ Peak repräsentiert ist. Umschlossen sind diese Ereignisse von längeren Phasen geringer Leistungsaufnahme.
Abbildung 5.2: Auslesen des Temperatursensors Abbildung 5.2 zeigt die Vergrößerung von einem der “kleinen“ Peaks. Der schnelle Anstieg markiert den Zeitpunkt, zu dem der Mikrocontroller von einem Timer ausgelöst aus dem Low Power Mode erwacht und vorher abgeschaltete Module wieder in Betrieb nimmt. Nachdem der Temperaturwert ausgelesen und zwischengespeichert ist kehrt er in den Stromsparmodus zurück. Es fällt auf, dass nach dieser Aktivität die vom Temperaturlogger aufgenommene Stromstärke noch für 200 ms auf einem um 50 µA erhöhten Plateau bleibt. In diesem Zeitraum führt der Sensor die eigentliche Temperaturerfassung durch. Die Messung erfolgt automatisch nach dem Auslesen des alten Wertes und der
37
5 Beispielmessung an Temperaturlogger TMP275 hält den ermittelten Wert dann bis zur nächsten Abfrage vor. Eine weitere zeitlich genauere Darstellung des Peaks ist in Abb. 5.3 abgebildet. Der Mikrocontroller aktiviert seine CPU, wobei sich der Haupttakt im Bereich einiger hundert Kilohertz bewegt. Zusätzlich wird die I2 C Übertragung initiiert und die fließende Stromstärke steigt steil bis auf 470 µA.
Abbildung 5.3: Auslesen des Temperatursensors Detail
Abbildung 5.4: Controller verschickt gebündelte Werte per UART In Abbildung 5.4 ist der Zeitraum um den “großen“ Peak dargestellt. Im direkten Vergleich zur vorherigen Abbildung muss die unterschiedliche Einteilung der Stromstärkenachse beachtet werden. Der Mikrocontroller holt in dieser
38
5 Beispielmessung an Temperaturlogger Phase zunächst wie oben beschrieben den letzten Temperaturwert vom Sensor, deaktiviert sich aber nicht sofort, sondern initiiert eine Übertragung der gesammelten Daten über den UART. Hierbei wird der Haupttakt von einem 8 MHz Quarz gespeist, was sich in einer Gesamtstromstärke von maximal 3,56 mA bemerkbar macht. Nach abgeschlossener Übertragung wird wieder in den Low Power Mode umgeschaltet und die Kurve fällt steil ab.
39
6 Verbesserungsmöglichkeiten
Auch wenn das entworfene Messsystem in der beschriebenen Form gut nutzbar ist, lassen sich einige Möglichkeiten zur Verbesserung des Systems nennen, die während der Entwicklung und des Tests des Prototypen deutlich wurden. Bei einer Revision könnten damit unter Umständen die Einsatzmöglichkeiten erweitert werden. Eine signifikante Steigerung der Abtastrate lässt sich unter Umständen mit der Nutzung des im MSP430 integrierten Direct Memory Access Controllers erreichen. Diese Steigerung lässt sich dann erreichen wenn die Interrupt Service Routine für das Umkopieren der ADC Werte komplett entfallen kann weil deren Aufgabe im Hintergrund vom DMA Controller übernommen wird. Zusätzlich muss eine Lösung gefunden werden, mit der der Repeat Sequence of Channels Modus verwendet werden kann, bei der Spannungs- und Stromsample ebenfalls zeitlich kurz hintereinander ausgelöst werden. Sonst besteht weiterhin die in 3.2.1 beschriebene Notwendigkeit in der ISR das Steuerbit ENC neu zu setzen. Etwas umständlich für den Nutzer ist die Auswahl des Shuntwiderstandes. Es ist denkbar mehrere Widerstände mit gestaffeltem Widerstandswert auf der Platine einzusetzen, welche über einen Multiplexer oder eine vergleichbare Schaltung vom Mikrocontroller ausgewählt werden können. Damit ließe sich in Software eine automatische Bereichsauswahl implementieren, die langsam Widerstände mit höherem Widerstandswerte wählt bis eine Detektion der fließenden Stromstärke möglich wird. Derzeit ist die Messung auf Systeme mit einer Versorgungsspannung von maximal 3,3 V beschränkt. Die Ursache ist der im MSP430 integrierte Analog Digital Wandler, der nur Referenzspannungen zulässt, die die eigene Versorgungsspannung nicht überschreiten. Soll ein System mit höherer Spannung untersucht werden, muss diese über einen Spannungsteiler in den zulässigen Bereich gebracht werden. Alternativ könnte für diese Fälle ein anderer ADC verwendet oder das bestehende System für reine Stromstärkemessung angepasst werden. Oft würde dies bei kurzen Messzeiträumen für eine Analyse ausreichen, da die Spannung in vielen Fällen keiner beobachtbaren Schwankung unterliegt. Es wäre es nötig, die Leiterbahn, die die Spannung and den Eingangspin A7 führt zu unterbrechen. Im Layout ist dies bereits berücksichtigt.
40
6 Verbesserungsmöglichkeiten Im Pfad zum Spannungseingangspin ist ein Null-Ohm Widerstand (R29) plaziert, der für ein Exemplar des Systems zur reinen Stromstärkemessung nicht bestückt wird. Dann könnte über die PC Software das Messsystem umkonfiguriert werden, dass nur noch die Stromstärkewerte aufgenommen werden. Dieser neue Modus hätte zwei Vorteile. Es könnten vorher nicht untersuchbare Systeme verbunden werden und der durch das Weglassen der Spannungswerte halbierte Datendurchsatz könnte eine höhere Samplingrate für die Stromstärkewerte ermöglichen. Bei der Implementierung der Auswertungssoftware musste auf eine nützliche Funktion verzichtet werden. Es war geplant den Graphen während der Messung kontinuierlich aufzubauen bzw. diesen ständig zu aktualisieren. Beim Test mit der Live Graphendarstellung zeigte sich, dass die dadurch erhöhte Auslastung des PCs einen gelegentlichen Pufferüberlauf beim Messdatenempfang verursachte. Es wird dabei die Abfrage des USB Treibers durch die Berechnung der Darstellung verzögert und ein Durchgangspuffer im Treiber scheint vollzulaufen. Dieser Effekt wurde mit kurzen Testprogrammen für PC und Mikrocontroller weiter untersucht. Der Mikrocontroller wurde so programmiert, dass mit maximaler Geschwindigkeit Daten über den UART an den PC geschickt werden. Die Testdaten wurden dabei durch einfaches Hochzählen generiert, womit für das Empfängerprogramm Datenverlust dadurch erkennbar ist, dass eine Lücke in der Zahlenreihe entsteht. Die nicht empfangenen Datenpakete wurden gezählt und der Prozentsatz zur Gesamtpaketzahl angegeben. Datenverlust trat dabei nur auf wenn die empfangenen Zahlen in der Konsole ausgegeben wurden. Schon diese Aktivität verzögert die USB Abfrage und löst bei den schnell eintreffenden Daten einen Pufferüberlauf aus. Trotzdem sollte die Live Darstellung möglich sein. Die Menge an darzustellenden Messpunkten muss dafür geschickt beschränkt werden. So ist es z.B. denkbar zunächst nur jeden 10ten Wert zu zeichnen oder zu einem gegebenen Zeitpunkt immer nur die Messwerte der letzten 5 Sekunden im Live Graph darzustellen.
41
7 Zusammenfassung
In der Arbeit wurde ein System zur Leistungsmessung an batteriebetriebenen Sensorsystemen konzipiert und entwickelt. Realisiert wurden dabei Hardware, Software für den eingesetzten Mikrocontroller und eine plattformübergreifende PC Software. Damit ist eine komplette Lösung für Messung und Auswertung entstanden, die sich vielseitig einsetzen lässt. Das Messsystem kann zur Untersuchung von schnellen Änderungen der Leistungsaufnahme eines Messobjekts verwendet werden. In diesem Betriebsmodus ist es mit einem Auswertungs-PC gekoppelt, der die Messdaten speichert und darstellt. Eine Langzeitmessung kann durch die Verwendung einer SD Card autark, also ohne die Verbindung zu einem PC, durchgeführt werden. Bei der Implementierung des aufgestellten Konzepts mussten Lösungen für die effektive Bewältigung der auftretenden Datenmengen und die strikte Einhaltung der konstanten Samplingrate mit den knappen Ressourcen des Mikrocontrollers gefunden werden. Das System ist auf verschiedene Messbereiche und Abtastraten anpass- und umkonfigurierbar und eignet sich so gut als Hilfsmittel bei der Programmierung von Sensor- und Mikrocontrollersystemen, bei denen eine Optimierung auf geringen Energieverbrauch erforderlich ist. Ebenfalls nützlich kann das Messsystem bei der Überprüfung von Leistungsbeschreibungen kommerziell vertriebenener, autarker Systeme z.B. im Bereich Heimautomatisierung sein.
42
Literaturverzeichnis
[1] Chan ELM. How to use mmc/sdc, 2012. [Online; accessed 15-August-2012]. [2] SD Group. SD Specifications - Part 1 Physical Layer Simplified Specification, Mai 2010. [Version 3.01]. [3] Texas Instruments. Msp430x2xx family - user’s guide. http://www.ti. com/litv/pdf/slau144i, Dezember 2004. [Rev. I 01/2012]. [4] Texas Instruments. Msp430f241x, msp430f261x mixed signal microcontroller. http://www.ti.com/litv/pdf/slas541k, Juni 2007. [Rev. K 11/2012]. [5] Wikimedia. File:minidin-4 connector pinout.svg — wikimedia commons, 2006. [Online; accessed 04-December-2012]. [6] Wikipedia. Secure digital — wikipedia, the free encyclopedia, 2012. [Online; accessed 15-August-2012].
43
Selbstständigkeitserklärung
Hiermit erkläre ich, daß ich die vorliegende Arbeit selbstständig angefertigt, nicht anderweitig zu Prüfungszwecken vorgelegt und keine anderen als die angegebenen Hilfsmittel verwendet habe. Sämtliche wissentlich verwendete Textausschnitte, Zitate oder Inhalte anderer Verfasser wurden ausdrücklich als solche gekennzeichnet. Chemnitz, den 22. Februar 2013