%
% The Hotspin 2 Instrument
% ===========================================================================
% This is part of the diploma thesis "The Hotspin 2 Instrument".
% (c) Michael Wack 2005,2006
%

\chapter{Software}

In modernen Messgeräten kommt der Software eine immer größere Bedeutung zu. Zum Einen lassen sich heute viele Aufgabenstellungen wie Logikschaltungen oder Regelungen mit programmierbaren Bausteinen wie FPGAs (Field Programmable Gate Arrays) oder Mikroprozessoren deutlich einfacher und kostengünstiger realisieren, als das früher mit diskreten Bauelementen möglich war. Zum Anderen ermöglicht die heute verfügbare hohe Rechenleistung eines handelsüblichen PCs die Auswertung deutlich komplexerer Messgrößen sowie eine komfortable und flexible Bedienung für den Benutzer.

Um diesen Anforderungen gerecht zu werden, wurden drei voneinander unabhängige Softwaremodule entwickelt, die im Folgenden beschrieben werden. Aufgrund des internationalen Umfelds in der Wissenschaft wurde sowohl die Benutzeroberfläche wie auch die Kommentare und Variablennamen in den Quellen in Englisch gehalten.

\section{Software zur Datenaufzeichnung}
\label{sec:software_datenaufzeichnung}

\subsection{Beschreibung der Funktionsweise}
Die Software zur Datenaufzeichnung \textit{Hotspin\_Main\_Control.vi} wurde mit LabView 6.1 entwickelt und läuft auf einem PC, der über zwei serielle Schnittstellen direkt mit der Haupteinheit der Elektronik (siehe Abschnitt \ref{sec:messanordnung_haupteinheit}) verbunden ist. Eine Leitung übernimmt die Kommunikation mit dem Eurotherm-Regler (siehe Abschnitt \ref{sec:messanordnung_eurotherm}). Die andere dient zum Auslesen der Messwerte aus dem Mikroprozessor-Board (siehe Abschnitt \ref{sec:messanordnung_microcontroller}).

Da eine vollständige Darstellung aller mit LabView erstellten Routinen sowohl den Platz einzelner Seiten aufgrund der Komplexität der Diagramme sowie den Rahmen dieser Arbeit sprengen würde, werden nur die wichtigen Routinen vorgestellt. Verzichtet wurde auf die Darstellung der Umsetzung der Benutzeroberfläche sowie die Funktionen zur Kommunikation mit dem Eurotherm-Regler, da diese Implementierungen nichts mit der eigentichen Messung oder der Datenauswertung zu tun haben. Die vollständigen Quellen für LabView Version 6.1 befinden sich auf der beiliegenden CD. Dies gilt auch für alle anderen in LabView programmierten Module sowie den Quelltext für den Mikroprozessor, der auch in Anhang \ref{cha:lstmicrocontroller} abgedruckt ist.

\subsubsection{Temperaturregelung}
Die Software erlaubt es, einen Temperaturverlauf in mehreren Schritten in Form von Zieltemperatur und Heizrate vorzugeben. Diese Werte werden, sobald die letzte Zieltemperatur erreicht wurde, als neue Zieltemperatur und Heizrate an den Eurotherm-Regler geschickt. Die Kommunikation erfolgt mit dem EI-BISYNCH Protokoll (siehe Kommunikationshandbuch [2000ch]) über eine serielle Schnittstelle nach dem RS232-Standard.

\subsubsection{Datenerfassung}
Die Daten, die vom Mikroprozessor über die serielle Schnittstelle geschickt werden, werden nach jeder vollständigen Umdrehung der Probenplattform kontinuierlich in einer Datei auf der Festplatte abgespeichert (siehe Modul \textit{ADC\_Read\_Sample.vi}, Abbildung \ref{fig:ADCReadSample}). Damit bleiben diese Daten auch bei Versagen des Computersystems erhalten. Diese Datei lässt sich auch während einer laufenden Messung in die im nächsten Abschnitt beschriebene Software zur Datenanalyse laden und auswerten.

\section{Software zur Datenanalyse}
\label{sec:software_datenanalyse}
\subsection{Beschreibung der Funktionsweise}
Das Softwaremodul \textit{Hotspin\_Analyzer.vi} wurde ebenfalls mit LabView 6.1 entwickelt. Damit lassen sich Dateien, die mit der im letzten Abschnitt beschriebenen Software zur Datenaufzeichnung erstellt wurden, auswerten.

Konkret stehen folgende Funktionen zur Verfügung.
\begin{itemize}
	\item Darstellung des Verlaufs von Soll- und Isttemperatur.
	\item Darstellung der Rotationsgeschwindigkeit in Umdrehungen pro Minute über der Zeit.
	\item Einstellung der Probenposition sowie des Winkelbereichs, der zur Datenauswertung genutzt werden soll.
	\item Einstellung eines Kalibrierungsfaktors für jeden der drei Gradientenkanäle. Diese lassen sich durch Eichproben und dem Anlegen eines identischen Signals an alle Kanäle bestimmen. Außerdem lässt sich pro Kanal ein Offset festlegen. Dieses hat jedoch keine Auswirkung auf die Auswertung der Daten, da es durch die Erweiterung der linearen Regression (Abschnitt \ref{sec:linstoer}) kompensiert wird.
	\item Festlegung der Sensorpositionen, die bei der Regressionsanalyse benutzt werden und der Anzahl der Messungen (entspricht der Anzahl der Umdrehungen der Probenplattform), die vor der Analyse gruppenweise gestapelt werden sollen.
	\item Die Regressionsanalyse der Daten, wie sie im Kapitel \ref{cha:analyse_der_messdaten} vorgestellt wurde, liefert für jeden gestapelten Datensatz die neun Komponenten des Vektors $\vec m$. Im Einzelnen sind dies die drei Komponenten der Magnetisierung sowie die Parameter der linearen Korrekturen. Diese lassen sich sowohl über der Zeit als auch über der Temperatur darstellen. Auch die Umrechnung in Inklination und Deklination und deren Darstellung in den üblichen Darstellungen wie Zijderveld- \citep{zijderveld} oder Polar-Diagrammen sowie die Darstellung der Magnetisierungsintensität über der Temperatur wurden implementiert. Eine Abspeicherung dieser Daten zur universellen Weiterverwendung in anderen Programmen ist als Textdatei möglich. 
\end{itemize}
Die Regressionsanalyse der Daten wird durch das in Abbildung \ref{fig:FitM} dargestellte Modul \textit{Fit\_M.vi} realisiert. Dabei wird durch \textit{Sij.vi} (Abbildung \ref{fig:Sij}) die Matrix $S_{ij}$ zur Verfügung gestellt und entsprechend, dem in Kapitel \ref{cha:analyse_der_messdaten} beschriebenen Verfahren, auf die Daten angewendet. Abbildung \ref{fig:xyz2IDF} zeigt die Umrechnung der x-, y- und z-Komponente der Magnetisierung in die entsprechenden Werte der Inklination, Deklination und Magnetisierungsbetrag.


\section{Mikroprozessor-Firmware}
\label{sec:software_microcontroller}
Um die verstärkten und gefilterten elektrischen Signale (siehe \ref{sec:messaufbau_verstaerkerfilter}) der Fluxgate-Sensoren zu digitalisieren, kommt eine Mikroprozessorplatine der Firma Silicon Laboratories (siehe Firmenverzeichnis in Anhang \ref{cha:firms}) mit einem integrierten Analog-Digital-Wandler (ADC) zum Einsatz (siehe \ref{sec:messanordnung_microcontroller}).

\subsection{Entwicklungsumgebung}
Für die Entwicklung und das Debugging des Quelltextes sowie die Übersetzung in Maschinencode und dessen Übertragung in den Programmspeicher des Mikroprozessors kam die mit der Hardware gelieferte Entwicklungsumgebung (Silicon Laboratories Integrated Development Environment) zum Einsatz. Als Programmiersprache wurde C gewählt. Der gesamte Quelltext ist in Anhang \ref{cha:lstmicrocontroller} abgedruckt.

\subsection{Beschreibung der Funktionsweise}
Das Hauptprogramm \textit{main(void)} führt zunächst einige interne Initialisierungen aus. Diese umfassen z.B. das Einstellen der Geschwindigkeit und Kommunikationsparameter der seriellen Schnittstelle, die Wahl der Taktquelle des Prozessors, die Konfiguration der Ein- und Ausgabeleitungen sowie die Kofiguration des integrierten Analog-Digital-Wandlers (ADC). Der weitere Programmablauf wird über Unterbrechungsroutinen (englisch: Interrupt) abgewickelt. Dies sind Funktionen, die aufgerufen werden, sobald ein bestimmtes Ereignis auftritt. Ihre Namen enden auf \textit{ISR} (Interrupt Service Routine) [C8051F35].

Die Unterbrechungsroutine \textit{Timer2\_ISR} wird nicht aktiv benutzt. Sie wurde nur zu Testzwecken implementiert und im Quelltext belassen. So ist es hier möglich, in regelmäßigen Abständen und somit unabhängig von anderen Abläufen bestimmte Funktionen (z.B. die Kommunikation über die serielle Schnittstelle) zu testen.

Die beiden Signalleitungen des Drehgebers lösen die Unterbrechungsroutinen \textit{INT0\_ISR} bei jedem Nulldurchgang und \textit{INT1\_ISR} bei jedem Schritt aus. Erstere setzt das als automatischer Zähler konfigurierte Register Timer0 zurück auf Null. Damit beinhaltet dieses immer den aktuellen absoluten Drehwinkel der Probenplattform. Zur optischen Funktionskontrolle wird durch beide Unterbrechungsroutinen jeweils eine der beiden auf der Platine integrierten LEDs ein- bzw. ausgeschaltet.

Die Funktion \textit{ADC0\_ISR} wird aufgerufen, sobald der ADC einen Wert digitalisiert hat und startet ihrerseits eine neue Digitalisierung; jedoch durch Neukonfiguration des integrierten Multiplexers auf dem nächsten Kanal. Dies führt zu der in Abbildung \ref{fig:ADC_sampling} dargestellten alternierenden Abtastung aller drei Signalkanäle. Bei jedem Schrittsignal des Drehgebers wird der Mittelwert der seit dem letzte Schritt digitalisierten Werte für jeden Kanal sowie der aktuelle Drehwinkel über die serielle Schnittstelle ausgegeben. Dieses Verfahren gewährleistet durch eine optimale Ausnutzung der Zeit zwischen zwei Drehgeberschritten eine gute Mittelung und Gleichzeitigkeit der Sensorsignale und damit eine Reduktion des Rauschpegels. Insbesondere passt sich dieses Verfahren automatisch an die Rotationsgeschwindigkeit an. Bei niedriger Geschwindigkeit steht mehr Zeit pro Schritt zur Verfügung. Dadurch ergeben sich mehr Werte, über die gemittelt werden kann.

\begin{figure}[htb]
    \begin{center}
    \includegraphics[width=7cm]{images/ADC_sampling}
    \end{center}
    \caption{Abtastung und Mittelwertbildung der Sensorsignale.}
    \label{fig:ADC_sampling}
\end{figure}



%
% EOF
%
