Entwicklung und Realisierung
von Winkelmessverfahren mit Magnetfeldsensoren
in den Bereichen Automobil-, Medizin- und Industrie
Development and implementation of angle measurement method with magnetic field
sensors in the fields of automotive, medical and industrial applications.
von David Venhorst (M. Sc.)
Hall Table Prototype
Kurzfassung
Diese Veröffentlichung befasst sich mit Hall-Effekt Winkelsensoren der Firma Micronas GmbH vom Typ HAL37xy, die in der Lage sind mit Hilfe des homogenen Magnetfeldes eines diametralen Permanentmagnets direkt einen Winkelwert, abhängig von der Position des Permanentmagnets, zu bestimmen. Die Sensoren stellen ein zum Winkel proportionales pulsweitenmoduliertes Signal zur Verfügung.
Dabei waren die Hauptziele der Arbeit zum einen, Messverfahren für verschiedene Anwendungen zu entwickeln, und zum anderen, die Genauigkeit gegenüber eines einzelnen Sensors durch das Messverfahren zu verbessern und Messfehler, die durch Fehlpositionierungen und thermischen Einflüssen auftreten, zu minimieren. Die Konzepte für die verschiedenen Anwendungen können im Zuge dieser Veröffentlichung aus Rechtsgründen nicht näher erläutert werden.
Die Veröffentlichung stellt einen Prototyp eines Positioniertisches vor, der als Demonstrator dient und mit dem sich verschiedene Winkel automatisiert einstellen lassen. Der Prototyp soll folgende Kriterien erfüllen:
Muss-Kriterien:
- Verwendung von Hall-Sensoren zur Steuerung eines DC-Motors
- Messgenauigkeit (99,7%) der Elektronik von 3σ ≤ ± 0,5°
- Winkelauflösung der analogen Anzeige des Positioniertisches ≤ 0,5°
- Positioniertisch mit Hohlwelle
Soll-Kriterien:
- Mobilität durch Verwendung von Akkus
- Bedienung durch TFT/Touchdisplay
- Datenspeicherung auf SD-Karte
- Konstruktion einer Mechanik durch Projektpartner
- Programm zur automatischen Positionierung
Kann-Kriterien:
- Entwicklung eigener Platinen als Ersatz für das Entwicklungsboard und die verwendeten Shields
- Konstruktion einer eigenen Mechanik
- Einbinden eines Bluetooth-Moduls
Messprinzip
Das Messprinzip beruht darauf, dass ein drehender diametraler Magnet ein sich änderndes Magnetfeld erzeugt. Ein Hall-Sensor ist in der Lage diese Änderung zu messen. Die Magnetfeldlinien, welche Ähnlichkeiten mit den Feldlinien der Erde haben, treten in den Hall-Sensor ein. Dabei ist der Messwert abhängig von dem Winkel, mit der die Feldlinien durch den Sensor verlaufen. Es werden die x- und y- Komponenten der Feldlinien von zwei Halbleiterplatten durch den Hall-Effekt in eine Spannung umgewandelt. Nach intern stattfindenden Berechnungen wird ein Signal am Ausgang des Sensors ausgegeben, welches sich in einen Winkel umrechnen lässt. Das kann z.B. eine zu dem Winkel proportionale analoge Ausgangsspannung sein, oder ein digitales PWM-Signal. Bei einem PWM-Signal wird der sogenannte Tastgrad berechnet. Dieser berechnet sich aus:
Multipliziert mit dem Winkel 360° ergibt das den aktuell gemessenen Winkel.
Mit dieser Formel kann der tatsächliche Wert des Winkels nur dann direkt richtig gemessen werden, wenn sich der sensitive Bereich des Sensors im homogenen Magnetfeld, also genau im Mittelpunkt über oder unter einem diametralen Scheiben- bzw. Ringmagneten befindet, oder genau im Zentrum eines Ringmagneten. Versetzt man einen Hall-Sensor und damit den sensitiven Bereich, kommt es zu großen Abweichungen. Diese Abweichunge können mit einem geeigneten Verfahren stark minimiert werden.
Entwicklungsboard
Die Hard- und Softwaremodule werden mit Hilfe der Entwicklungsumgebung Ardunio IDE und einem Arduino Entwicklungsboard aufgebaut. Derr Vorteil dabei ist, dass die Arduino Plattform eine große Anzahl von Bibliotheken besitzt, mit denen die Entwicklung eines Prototyps in kürzerer Zeit möglich ist, da viele Hardwarekomponenten mit bereits existierenden Befehlen und Funktionen programmiert werden können. Im Zuge dieser Arbeit wurde das Entwicklungsboard Arduino Mega2560 verwendet. Das Arduino MEGA 2560 Board verwendet den AVR Mikrocontroller ATmega2560. Er besitzt 256KByte Flash-Speicher, 8KByte SRAM und 4KByte EEPROM. Der ATmega2560 besitzt 54 digitale I/O Pins, wovon 15 in der Lage sind ein PWM Signal auszugeben, und 16 analoge Eingänge. Der Controller arbeitet mit einer Taktfrequenz von bis zu 16MHz.
Arduino ATmega2560 Entwicklungsboard
Der ATmega2560, sowie andere Mikrocontroller der Modelreihe, verfügen über eine Input Capture Funktion. Der ATmega2560 verfügt über vier ICPs. ICP1 liegt an Port D, Bit4. Mit dieser Funktion kann die Zeit zwischen Flankenwechsel extrem genau gemessen werden, da bei einem Flankenwechsel an einem der bekannten Ports der aktuelle Wert von Timer 1 in das ICR1 Register gespeichert wird. Daher kommt es durch Programmlaufzeiten, wie es bei einer Abfrage durch Interrupts der Fall wäre, nicht zu Messfehlern. Timer 1 hat eine Auflösung von 62,5 ns.
Elektronik
Der Prototyp beinhaltet drei Platinen. Eine Versorgungsplatine, die Hauptplatine mit dem Mikrocrontroller und die Sensorplatine mit der kompletten Sensorik. Die Sensorplatine wird in dieser Veröffentlichung aus Rechtsgründen nicht vorgestellt.
Versorgungsplatine:
Die Versorgungsplatine stellt drei benötigte Spannungen zur Verfügung. Zur Kommunikation mit der SD-Karte wird eine Spannung von 3,3 Volt benötigt. Die übrige Elektronik wird mit 5 Volt betrieben. Der verwendete Motor benötigt eine maximale Versorgungsspannung von 9 Volt bei maximal 1 Ampere. Die Platine trägt außerdem eine Ladereglung für zwei Li-Ion Akkus, sowie eine H-Brücke über die der Motor gesteuert wird.
Versorgungsplatine
Hauptplatine:
Auf der Hauptplatine befinden sich alle wichtigen Bauteile zur Auswertung der Sensordaten, Steuerung der Mechanik und die Bauteile zur Datensicherung und Kommunikation. Außerdem befindet sich auf dieser TFT-/Touch-Display. Die meisten Mikrocontroller, die auf einem Arduino Entwicklungsboard verbaut sind, verfügen über keine eigene USB-Schnittstelle, weshalb diese in der Regel nur über eine ICSP-Schnittstelle programmiert werden können. Es ist allerdings möglich einen weiteren Mikrocontroller zu integrieren, der die Aufgabe eines USB-Controllers übernimmt, wie es auch bei den meisten Arduino Entwicklungsboards praktiziert wird. Dadurch kann der Hauptmikrocontroller über eine USB-Schnittstelle und die Arduino IDE programmiert werden und mit dem PC kommunizieren.
Hauptplatine (links: Oben, rechts: Unten)
Mechanik
Ein schnelles und günstiges Fertigungsverfahren ist das „Selektive Lasersintern“. Dabei kann aus einem Pulver (in diesem Fall Kunststoff), mit Hilfe eines Lasers, eine 3D-Struktur gedruckt bzw. hergestellt werden. Dabei wird die Struktur in kleinen Schichten, Schicht für Schicht, gedruckt. Da das nicht geschmolzene Pulver erst am Ende des Druckprozesses entfernt wird und während des Prozesses die übrige Struktur umgibt, können Hinterschneidungen, also freistehende oder bewegliche Teile, in einem Prozess gedruckt werden. Das hat den Vorteil, dass man sehr komplizierte Konstruktionen ohne großen Aufwand kostengünstig herstellen kann. Die Komplexität der Struktur ist bei diesem Prozess nicht von Bedeutung. Es können z.B. ganze Kugellager in einem Prozess gedruckt werden. Für einen 3D-Druck werden keine technischen Zeichnungen benötigt, sondern lediglich eine Konstruktionsdatei im .stl-Format (STereoLithography). Bei diesem Format wird die Oberfläche der Konstruktion in Dreiecke aufgeteilt, deren Eckpunkte und zugehörige Flächennormalen entweder als ASCII-Code oder als Binärcode abge-speichert werden.
Positioniertisch (links: Normale 3D-Ansicht, rechts: 3D-Ansicht im .stl-Format)
Design & Bedienung
Verwendet wird ein 2,8‘‘ (Diagonale) großes Display mit einer Auflösung von 240 x 320 Bildpunkten. Das Display befindet sich auf einem Arduino Shield und wurde von der Firma Adafruit entwickelt. Es wird über SPI (MISO, MOSI, SCK, TFT_CS, TFT_DC) angesteuert. Das integrierte kapazitive Touch-Display wird über einen Touch-Screen-Controller per I2C Schnittstelle (SCL, SDA) ausgelesen. Auf ein Arduino Uno R3 – Entwicklungsboard kann dieses Shield ohne weiteres aufgesteckt und programmiert werden. Benutzt man das Arduino MEGA 2560 – Entwicklungsboard, müssen die Jumper an der ICSP-Schnittstellte durchtrennt werden. Grund dafür ist, dass sich bei den genannten Boards die SPI-Schnittstelle an unterschiedlichen Steckplätzen befindet. Das Shield hat außerdem einen Steckplatz für eine SD-Karte. Diese ist ebenfalls über die SPI-Schnittstelle mit dem Mikrocontroller verbunden.
Die Entwickler stellen umfangreiche Bibliotheken für das TFT-Touch-Display und ein Tutorial zur Programmierung zur Verfügung.
Für das TFT-Display gibt es die Bibliothek „Adafruit_GFX.h”. Sie beinhaltet alle Funktionen und Befehle um auf dem Display zeichnen zu können. Zusätzlich muss die Bibliothek „Adafruit_ILI9341.h” eingebunden werden, damit das Display mit der Arduino Entwicklungsumgebung kompatibel ist.
Das Touch-Display verwendet die Bibliothek „Adafruit_FT6206.h“. Mit Hilfe dieser Bibliothek können z.B. die Display-Koordinaten abgefragt werden, falls das Display berührt wurde. Zusätzlich wird die Bibliothek „Wire.h“ verwendet. Ebenfalls aus Kompatibilitätsgründen.
Das Touch-Display ist wie eine Matrix aufgebaut. Kleine kapazitive Sensoren an jedem Pixel detektieren Berührungen. Wurde eine Berührung festgestellt und die Koordinaten ermittelt, kann davon abhängig eine oder mehrere Anweisungen ausgeführt werden.
Das Design für das Display kann mit einem normalen Bildbearbeitungsprogramm erstellt werden. Dabei muss beachtet werden, dass die Bilder nach der Erstellung als .bmp-Datei mit einer Farbtiefe von 24 bpp (24 bits per pixel, oder auch 24-Bit-BMP) auf die SD-Karte abgespeichert werden, auf die der Mikrocontroller Zugriff hat. Ein weiterer Weg ein Design zu kreieren ist folgender: Man kann über geeignete Befehle jedem einzelnen Pixel einen Farbcode zuordnen. Das heißt, dass eine Bilddatei nicht erst von der SD-Karte gelesen werden müsste, sondern, dass dieses direkt im Pro-grammspeicher als Matrix gespeichert wird. Der Vorteil dabei ist, dass der Bildaufbau schneller ist. Nachteil bei diesem Weg ist der höhere zeitliche Programmieraufwand und die fehlende Flexibilität bei Änderungen.
Die Farben des Designs sind in den klassischen Micronas-Farben blau und grau gehalten, dazu kommen noch die Farben rot und grün für „Stopp“ und „Start“, schwarz und weiß:
Beim Starten des Geräts und bei jedem Wechsel in ein anders Menu öffnet sich das „Laden“-Fenster. Da die Bilder von oben nach unten aufgebaut werden sorgt dieses dafür, dass der Wechsel der Menus ansprechender aussieht. Einen anderen Nutzen hat dieses Fenster nicht. Dabei wird in kurzer Zeit mit dem Befehl
tft.fillRect(0, 0, 320, 240, BLACK);
ein schwarzer Bildschirm initiiert. Danach wird ein blauer Schriftzug in der unteren rechten Ecke des Bildschirms platziert. Die Befehle dafür lauten:
tft.setCursor(250, 220);
tft.setTextColor(MICRONAS_BLUE);
tft.setTextSize(1);
tft.print("load...");
Danach wird das neu ausgewählte Menu von oben nach unten aufgebaut.
Hauptmenu | Menu Keypad | Menu Graph |
In den einzelnen Menus können verschiedene Schaltfläschen ausgewählt werden, wodurch verschiedene Aktionen vom Programm ausgeführt werden. Dabei wird vom Touchdisplay und von der Software bei jedem Programmdurchlauf registriert, ob eine Berührung des Displays stattgefunden hat.
Die analoge Anzeige wird auf die Oberseite des Prototyps geklebt. Die Grafik dafür wurde ebenfalls mit einem geläufigen Bildbearbeitungsprogramm erstellt und danach auf Klebefolie gedruckt. Die Anzeige hat eine Auflösung von 0,5 Grad.
Messunsicherheit
Die Messunsicherheit des Prototyps wird bestimmt, indem automatisch Winkel von 0° - 360° in 5°-Schritten angefahren werden. Die angezeigten digitalen Werte sind dabei die vorgegebenen Sollwerte, die an der analogen Anzeige abgelesenen Werte stellen die Istwerte dar. Dabei wird die analoge Anzeige auf maximal 0,125° genau abgelesen.
Die Messwerte werden in der Abbildung unten graphisch dargestellt. Legt man eine Regressionskurve über die Messpunkte ist noch eine leichte systematische Abweichung zu erkennen. Diese ergibt sich aufgrund der Fertigungstoleranzen der Mechanik. Die berechnete Standardabweichung von (99,7%) 3σ=0,28° liegt in einem guten Bereich.
Messabweichungen Hall Table Prototype
Fazit
Während dieser Arbeit wurden verschiedene Messverfahren entwickelt, die für unterschiedliche Anwendungen geeignet sind. Der Prototyp „Hall-Table“, der aus dieser Arbeit hervorgegangen ist, wurde bereits auf der Summer School 2015 in Weltenburg als Demonstrator ausgestellt. Mit einer Messgenauigkeit von 3σ = ±0,28° und einer Winkelauflösung von ±0,25° für die analoge Anzeige liegen die Werte fast um den Faktor 2 unter der geforderten Messgenauigkeit. Somit wurden alle Muss-Kriterien erfüllt. Mit einer Reproduzierbarkeit von 3σ = ± 0,11° für die Elektronik, welcher durch einen Präzisionsmesstisch ermittelt wurde, liegt der Wert sogar um den Faktor 4 unter dem Muss-Kriterium von 3σ < ± 0,5°. Die Einflüsse von Temperatur und Fehlpositionierung wurden um ein vielfaches minimiert und haben Dank der Beschaffenheit der Sensorplatine und der Datenfusion nur noch minimale Abweichungen zur Folge.
Die Soll-Kriterien wurden ebenfalls erfüllt. Die Mechanik wurde allerdings nicht durch einen Projektpartner konstruiert, da dieser aufgrund fehlender Ressourcen von dem Projekt Abstand nehmen musste. Die Lösung mit einer 3D-gedruckten Mechanik war daher die einzige Möglichkeit, die Aufgabe in der vorgegeben Zeit zu vollenden. An dem 3D-Druck lässt sich feststellen, dass der Positioniertisch fertigungsbedingt mit ca. 1,5° relativ viel Spiel besitzt. Für die Messung selbst ist das unerheblich, da die Positionierung nicht über einen Schrittmotor stattfindet, bei dem die Mechanik berücksichtigt wird.
Die Kann-Kriterien wurden teilweise umgesetzt. Die drei entwickelten Platinen ersetzen und erweitern die Entwicklungsboards von Arduino. Das TFT/Touch-Shield wurde nicht verändert. Die Lösung, das Shield in die Hauptplatine zu integrieren ist für einen Prototyp ein guter Kompromiss. Das Bluetooth-Modul wurde ebenfalls nicht auf der Platine platziert. Es existiert ein Steckplatz, an dem das Modul von außen angebracht werden kann. Die Software für eine Übertragung an den Rechner wurde aus zeitlichen Gründen ebenfalls nicht mehr im Zuge dieser Arbeit entwickelt. In einem anderen Projekt, welches aus dieser Arbeit hervorgegangen ist befindet sich dieses Modul aber bereits voll funktionsfähig im Einsatz. Dort können auf Grundlage dieser Arbeit bereits Daten eines Winkelsensors von der SD-Karte per Bluetooth an den PC gesendet und mit einem MatLab-Programm geplottet werden. Weiterhin wird aufgrund der Erkenntnisse dieser Arbeit schon an einer neuen Mechanik aus Aluminium gearbeitet und ein leiserer und kleinerer Motor verwendet.