|
Preiswerter induktiver Näherungssensor im EigenbauWozu?Der hier beschriebene induktive Näherungssensor wurde von mir im Rahmen einer Modellbahn-Steuerung selbst gebaut und eingesetzt. Bis zu sieben Messstellen können an einem Mikrocontroller betrieben werden. Die einzelnen Sensoren sind klein und kommen mit wenigen preiswerten Bauteilen aus. Die Einsatzmöglichkeiten beschränken sich nicht nur auf den Modellbahn-Bereich. Überall da, wo die Anhäherung bzw. der Bewegungsablauf von leitfähigen Teilen erfasst werden soll, kann der Sensor gute Dienste leisten. Die Auswertesoftware im Microcontroller entscheidet darüber, ob letztendlich nur ein binäres Signal erzeugt wird oder ob der Grad der Annäherung ausgewertet wird.Wie funktioniert's?Unten stehendes Bild 1 zeigt den Sensor, der aus einer Induktivität plus einem Kondensator, also einem Schwingkreis, besteht. Über ein verdrilltes Adernpaar ist der Schwingkreis an die Auswerteelektronik (Mikrocontroller) angeschlossen. Die maximal mögliche Länge der Leitung habe ich nicht ausprobiert. Bei o.g., gut funktionierender Modellbahn-Anwendung gibt es Leitungslängen von 80 cm.Mit kurzen Impulsen aus dem Microcontroller wird die Schaltung zum Schwingen angeregt. Da der Schwingkreis eine hohe Güte besitzt, kann man nach einmalger Anregung ein Ausschwingen über mehrere Dutzend Perioden beobachten und durch den Microcontroller auszählen lassen. An der Stirnseite der tonnenförmigen ungeschirmten Induktivität tritt dabei das Wechsel-Magnetfeld in die Umgebung aus. Bringt man nun Metall (muss nicht ferromagnetisch sein) in die Nähe, so werden darin energiezehrende Wirbelströme induziert, die die Güte des Schwingkreises und damit die Anzahl der zählbaren Ausschwingperioden reduzieren. Dieser Effekt ist deutlich und ist gut auswertbar. Die Schwingfrequenz ändert sich dagegen kaum. Mit dem Sensor des Testaufbaus ergaben sich mit einem dicken Stück Aluminium die in neben stehendem Diagramm gezeigten Empfindlichkeiten bei verschiedenen Abständen. Wie schaut die Hardware aus?Die beiden Komponenten des Schwingkreises müssen folgende Voraussetzungen erfüllen:
Der schon mehrfach erwähnte Mikrocontroller spielt eine entscheidende Rolle. Wie auch bei anderen Projekten verwende ich dafür das Mikrocontroller-Board Pro Mini (Arduino bzw. kompatible) in der 5V/16MHz-Ausführung. Falls Ihr mit dieser Technik noch nicht vertraut seid, findet Ihr auf meiner speziellen Seite nähere Anleitungen. Der dort verbaute ATmega-Prozessor bietet alles was man bei vorliegender Anwendung braucht, um mit wenig externen Bauteilen auszukommen: nämlich Tri-State-Aus-/Eingänge, Analog-Multiplexer und Analog-Komparator. Es braucht keine spezielle, schwer durchschaubare Oszillatorschaltung, die u.U. nicht zuverlässig anschwingt. Vor allem lassen sich bis zu sieben Sensoren anschließen, wobei als zusätzliches Bauteil je Anschluss lediglich ein Widerstand benötigt wird. Unten stehendes Bild 4 zeigt die verwendete Beschaltung. Die Sensor-Schaltungen sind auf der einen Seite jeweils mit den Analog-Eingängen A0, A1 ... verbunden und hängen auf der anderen Seite gemeinsam an einer festen mittleren Bezugsspannung, die durch einem Spannungsteiler (2 x 1kΩ) plus Elko (4,7 μF) erzeugt wird. Diese Spannung ist zudem auf den positiven Eingang AIN0 des Anlalog-Komparators geführt. Per integriertem Mulitplexer kann der Prozessor die Eingänge A0 bis A6 (nicht A7) intern auf den AIN1-Pin, also den negativen Komparatoreingang durchschalten. Zudem lassen sich alle Pins, und eben auch A0 bis A6, beliebig als Ausgang (zieht Strom nach Masse bzw. nach VCC) oder als Eingang (hochohmig) schalten. Anregung, anschließendes Auszählen der Schwingungen und Verarbeitung der Zählwerte ist damit nur noch eine Sache der Software. Was macht die Software?Das Microcontroller-Programm (Arduino-Sketch) muss folgende Kernfunktionen für jede Messung ausführen:
In der Interrupt-Serviceroutine des Timers „ISR(TIMER2_COMPA_vect, ISR_NOBLOCK)“ kommt der Abschluss für die ggf. zuvor gestartete Messung im Programmablauf zuerst. Dann folgt der Start einer neuen Messung, indem der Schwingkreis durch einen negativen (pull down) und einen positiven (pull up) Impuls „angezupt“ wird. Das Auszählen geschieht in „ISR(ANALOG_COMP_vect)“. „TEN_TIMES_NOP“ ist ein Makro, das zehn leere Takte (6,25 μs bei 16MHz Takt) einschiebt. „comparator_count“, „measuring_count“ und „measurement_in_progress“ sind globale Variablen. Den vollständigen Arduino-Sketch, der als Einstieg für Eure Anwendung gedacht ist, könnt Ihr hier herunterladen. Die Abtastfrequenz ist dort über die Konstanten „INTERRUPT_INTERVAL“ („Output Compare“-Wert des Timers), „SAMPLE_INTERVAL“ (Software-Teiler) und den Prescaler des Timers (32) auf 100Hz eingestellt. Das Zeitfenster je Sensor für das Auszählen der Schwingungen beträgt ca. 0,3 ms. Bei den oben erwähnten 280 kHz haben da ca. 80 Perioden Platz. Nicht mehr als 60 werden typischerweise gebraucht. Es ist auch noch eine einfache Filterung des Messergebnisses implementiert (siehe „measurement_filtered[]“). Die dort vorkommende Konstante „ZERO_MEASUREMENT“ gibt die Anzahl der gezählten Schwingungen ohne Beeinflussung (kein Metall in der Nähe) an. Diese müsst Ihr an Eure Verhältnisse anpassen. Bei meiner Anwendung im Modellbahn-Gleis haben sich 32 ergeben. Bei der Testschaltung mit der größeren Induktivität und ohne Metall in der Nähe waren es 59. Je nach Güte der verwendeten Bauteile und der Nähe von Metallteilen im eingebauten Zustand, habt Ihr da wahrscheinlich andere Werte. Die Programmteile, die durch den Compiler-Switch „SAMPLING“ aktiviert werden, geben Euch eine Messreihe von 512 Werten auf der seriellen Schnittstelle aus, die Ihr mit dem Seriellen Monitor oder dem Seriellen Plotter der Arduino-IDE anschauen könnt. Ich habe übrigens erfreulicherweise nur eine geringe Temperaturempfindlichkeit feststellen können. Beim Testen der Schaltung zwischen 4 und 22 °C ergab sich bei ausreichend langer Temperaturanpassung aller Komponenten keine Veränderung der Zählwerte. Schnelle Temperaturwechsel führen vorübergehend (10-20 Minuten) zu Verschiebungen um bis zu vier Zähler. Worauf ich Euch noch hinweisen möchte:
Viel Erfolg bei der Verwendung des Sensors! Wollt Ihr einen Kommentar loswerden oder habt Ihr eine Frage? Schickt mir eine Mail |