BWP-WS19-02/Praktische Arbeiten/Drehzahlmessung

Aus Verteilte Systeme - Wiki
Zur Navigation springen Zur Suche springen

Drehzahlmessung

Drehzahlmessung mit Gabellichtschranke

Erste Versuche die Drehzahl über eine IR-Diode QCX48 (950 nm Wellenlänge) und einen Phototransistor SFH309 (380 nm bis 1180 nm) liefern keine stabielen Signale.

Weiterer Versuch mit verschiedenen Gabellichtschranken:

1.) LTH-301-07 und LTH-309-08

(Datenblatt LTH-301-07)

2.) HOA0872

(Datenblatt HOA0872 )


Zu 1.)

Die LTH Gabellichtschranken der Firma LITEON erweisen sich für unsere Drehzahlmessung als untauglich, da der Abstand zwischen IR-Diode und Phototransistor mit 5mm für unsere 1mm Lochscheibe zu groß ist. Außerdem ist das Licht der IR-Diode nicht gut gebündelt, wodurch der Phototransistor bei nicht vollständiger Abdeckung der IR-Diode teilweise leitfähig wird.

Auf diesem Photo sieht man auf der linken Seite wie die Spannung sich langsam erhöht, wenn ein schwarzes Plättchen zwischen IR-Diode und Phototransistor geschoben wird. Zwischen dem ersten erkennbaren Spannungsanstieg und dem voll durchgesteuerten Phototransistor wird mit dem Plättchen ein Weg von fast 3mm zurückgelegt, wodurch die Streuung der IR-Diode sehr deutlich wird. Auf der Rechten Seite sieht man wie die Spannung schwankt wenn man das 1mm dicke Plättchen zwischen Phototransistor und IR-Diode hin und her bewegt.

Gabellichtschranke LTH


Zu 2.)

Wesentlich bessere Ergebnisse erzielen wir mit der Gabellichtschranke von Honeywell HOA0872. Der Abstand zwischen IR-Diode und Phototransistor beträgt hier 3,3mm. Außerdem kann man eine eindeutige Schaltschwelle auf 0,5 mm beobachten, wodurch unsaubere Zwischenwerte für unsere Anwendung ausgeschlossen sind.

Im linken Photo sieht ist ein schwarzes Plättchen zwischen IR-Diode und Phototransistor. Im Rechten wurde das Plättchen entfernt.

Gabellichtschranke Honeywell Gabellichtschranke Honeywell


Skizze:

In der Skizze sieht man wie das Ausgangssignal des Phototransistors über einen LM258N OP im Aufbau als 'Nicht-invertierender Operationsverstärker' unendlich verstärkt wird. Die Verstärkung berechnet sich aus dem 1M Widerstand und dem Vorwiderstand am Negativen Eingang des OP. Da es keinen Vorwiderstand gibt, dieser also gleich Null ist, ist die Verstärkung V=1000000/0 = Unendlich = 3,3V (Versorgungsspannung des OP).

Gabellichtschranke Skizze

Beim Versuch die Signale der Gabellichtschranke über GPIO Polling ein zu lesen ist uns aufgefallen das die Verstärkerschaltung das Signal zwar maximal verstärkt, die Low Impulse bei höheren Frequenzen jedoch nicht unter den benötigten Low Pegel des GPIO des feather boards fallen. Dies wurde durch austauschen der Widerständen am OP angepasst. Das Signal kommt der Gabellichtschranken kommt nun unter den benötigten Low Pegel von 1V und über den benötigten High Pegel von 1,3V.

Gabellichtschranke_onOff Pegel


Messung mit ADC an Analogeingängen, ohne Operationsverstärker

Eine weiter Möglichkeit die Drehzahl auszuwerten bieten uns die Analogeingänge des feather boards. Zum einlesen der Drehzahl könnte man den Phototransistor an einen Analogeingang anschließen und die Schaltschwelle entweder über eine interne oder externe Referenzspannung festlegen. Somit könnte man den Operationsverstärker einsparen dessen einzige Aufgabe es war 'saubere' Rechteckimpulse zu erzeugen. (Ob wir dies tun ist jedoch noch nicht sicher. Ein möglicher Nachteil hierbei könnte sein das wir die Drehzahl 'aktiv' einlesen müssen und nicht über einen Counter der möglicherweise auch im Schlafzustand des feather boards weiter zählen könnte. Ob es sich lohnt den Operationsverstärker einzusparen hängt aber auch davon ob das feahter board im Schlafzustand deutlich mehr als 500µA einsparen kann, da der Verbrauch des LM258N bei 480-510 µA liegt [es wurde einer von 2 verfügbaren OPs des ICs verwendet, weitere Messung folgt])


Die eingebauten Gabellichtschranken

Gabellichtschranke Honeywell oben Gabellichtschranke Honeywell unten


Drehzahlmessung mit Reflexlichtschranke

Nachdem uns neue Motoren mit nur ca. 15 mA (bei 3,3V im Leerlauf) zur Verfügung standen war die Idee irgendwann nur mit Solar zu fahren wieder aufgeblüht. Da unsere ersten Motoren ca. 80 mA (bei 3,3V im Leerlauf) verbrauchten fielen die 20 mA der Gabellichtschranke prozentual nicht so sehr ins Gewicht. Nun aber mehr Strom für die Drehzahlmessung zu verbrauchen als zum Fahren schien uns absolut absurd. Daher begrenzten wir zunächst den Strom der Infrarot Diode auf 13 mA, womit die Amplitude am Ausgang des Operationsverstärkers gerade noch groß genug war um die Ein- und Ausschalt Pegel eines GPIO des featherboards zu erreichen. Eine weiter Idee zur Begrenzung des Stroms war eine Reihenschaltung von Operationsverstärkern, womit man die gesamte Schaltung auf etwa 6 mA begrenzen hätte können.

Da bei den neuen Motoren die Achse des Läufers auf der Rückseite nicht herausgeführt war, überlegten wir mit einer Reflexlichtschranke die Umdrehungen eines Getriebezahnrads zu erfassen. Hierfür wurde ein kleiner Versuchsaufbau mit IR-Diode, IR-Fototransistor und einer Lichtwellenleiter-Y-Weiche gemacht:

Reflexionslichtschranke mit Lichtwellenleiter:

Reflexlichtschranke Reflexlichtschranke ON Reflexlichtschranke OFF

In dem hier verwendeten Lichtwellenleiter (LWL) sind etwa 25 einzelne LWL-Strings. Durch verwenden von nur 2 LWL-Strings könnte man einzelne Punkte bis ca. 0,5mm auf dem Zahnrad detektieren. Ein Nachteil wäre allerdings das die LWL und die Zahnräder entsprechend gegen Licht abgeschirmt werden müssten und die Stromaufnahme höher wäre als bei einer Gabellichtschranke, da hierbei nur das reflektierte Licht zum Photostrom in der Photodiode beiträgt.


Drehzahlmessung mit Hallsensoren

Eine weitere Idee die Drehzahl mit minimalem Stromverbrauch zu ermitteln war es, den Läufer eines ohnehin mit Encoder ausgestatteten Motors durch den Läufer unseres 15 mA Motors zu ersetzen. Um den Schaden zu begrenzen schlugen wir die Achse eines Motors der sowieso etwas 'kratzte' aus dem Läufer heraus. Da diese sehr fest saß wurde der Läufer in eine Halterung eingespannt:

Achsenwechsel Halterung

Um die Achse heraus zu schlagen wurde eine Stahlnadel mit gleichem Durchmesser abgesägt. Leider sind beim heraus schlagen der Achse am Motor mit Encoder die Bürstenkontaktflächen auseinander gebrochen.

Auch beim 15 mA Motor ging die Achse nur sehr schwer heraus. Diesmal wurde die Achse in Richtung der Bürstenkontaktflächen herausgeschlagen um den selben Fehler nicht noch einmal zu machen. Dabei ist sind zu allem Überfluss die Bürsenkontaktflächen von den Spulen abgerissen. Diese konnten aber wieder erfolgreich angelötet werden. Eine Messung der Spulenwiderstände, die alle gleich groß waren, zeigte das alle Spulen wieder guten Kontakt haben.

Die neu verlöteten Motor-Spulen

Achsenwechsel Spule neu verlötet Achsenwechsel Spule neu verlötet mit Bürstenkontaktflächen


Nach erfolgreicher Montage der neuen Achse wurde der Motor wieder zusammengebaut

Achsenwechsel Motor fertig


Das Ergebnis war äußerst enttäuschend: Der neue Motor benötigt nun statt 15 mA 100 mA. Möglicherweise hatte die Achse des auseinander gebauten Motors schon einen Schlag, da dieser bereits zuvor kratzende Geräusche von sich gab. Wahrscheinlicher ist es jedoch das die Achse beim herausschlagen beschädigt wurde, da diese enorm fest saß.


Da nun auch dieser Versuch alles andere als zufriedenstellend war lag die Lösung auf der Hand :)

Ein ca 0,4 mm dicker Magnet

Lösung liegt auf der Hand


Es wurde getestet ob die Hallsensoren noch auf einen winzigen Magneten, der auf einem Zahnrad aufgebracht wurde, reagieren würden. Das Fräsen der Magnete nahm viel Zeit in Anspruch, da diese durch überhitzen ihren Magnetismus verlieren (oder etwas wissenschaftlicher ausgedrückt: Die weißschen Bezirke bei Überhitzung Ihre Orientierung verlieren.)

Die Idee das Zahnrad zu nehmen über dem ohnehin der meiste Platz wäre um den Hallsensor zu montieren funktionierte zwar gut, war jedoch nicht gut durchdacht. Die Drehzahl des gewählten Zahnrads war für eine ausreichend hohe Auflösung viel zu gering. Um den Hallsensor zu montieren wurde eine Ecke der Getriebehalterung abgetrennt. Damit kein Messingspäne ins Getriebe gelangen wurde dieses zuvor mit Frischhaltefolie gut verpackt:


Magnet auf vorletztem Zahnrad

Ecke von Motorhalterung ab - Getriebe verpackt Ecke von Motorhalterung ab


Um nun auch brauchbare Messwerte zu bekommen wurde der Magnet auf das dritte Zahnrad nach dem Motorritzel geklebt, hierfür musste jedoch das Getriebe auseinander gebaut werden und die mittlere Messingplatte der Getreibehalterung ausgeschnitten werden.

Magnet auf innerem Getriebezahnrad

Mittlere Getriebehalterung - Getriebe verpackt Getreibe mit Magnet - Getriebe verpackt

Es wurde eine entsprechende Halterung für den Hallsensor gebaut und der Hallsensor vom Encoder (44E-938) des zerlegten Motors 0,5 mm über dem Magnet montiert.

Der montierte Hallsensor

Hallsensor Halterung Sensor montiert

Das Ergebnis ist einigermaßen zufriedenstellend. Der Hallsensor registriert jede Umdrehung des Zahnrads zuverlässig. Leider kommt man auch mit diesem Zahnrad auf gerade mal 39 Impulse für eine Radnabenumdrehung. Eine doppelte Auflösung wäre durch einen zweiten Magneten auf dem Zahnrad möglich. Es besteht auch die Möglichkeit einen zweiten Hallsensor etwa 150° versetzt zu montieren, würde unser Auto jedoch wieder ca. 4 mA mehr Strom je Hallsensor kosten.


Beim Versuch den zweiten Hallsensor aus zu löten ist diesem ein Beinchen ausgerissen. Daher wurde der nächste Motor wurde dann mit einem AH180-PL-A Hallsensor ausgestattet, der wesentlich sensibler und stromsparender ist (siehe Tabelle). Dank der hohen Sensibilität konnte dieser Sensor sogar eine 0,3 mm dicke Magnetfolie registrieren. Eine passend ausgestanztes und zugeschnittenes Magnetfolienstück war dann aber leider doch zu schwach um den Sensor zu triggern.

Auch das Ergebnis mit einem gefrästen Magneten war leider enttäuschend: Die Entmagnetisierungszeit des Sensors war zu groß um die 'hohe' Geschwindigkeit des Zahnrads zu messen. Bei einer typischen Periodendauer von 75 ms (laut Datenblatt) sollte der Sensor zwar eine Frequenz von 1000ms/75ms = 13,3Hz messen können, übersprang aber regelmäßig die Messungen:

Messung des Zahnrads bei ca. 18 Hz. Der AH180-PL-A Sensor überspringt einige Messungen

AH180_Frequenz_zu_hoch


Es wurde nun ein 3144 Hallsensor eingebaut, der zwar wiederum weniger sensibel ist und auch einen höheren Stromverbrauch hat, dafür aber zuverlässig misst.

Mit einem 3144 Hallsensor funtioniert auch der zweite Motor zuverlässig

Motor mit Molex-Stecker Motor fertig 17Hz_44E-938_und_3144


Zum Vergleich hier noch eine Tabelle mit Kennwerten der Hallsensoren:

Hallsensoren Stromaufnahme
Hallsensor Mit Magnet (Low) Ohne Magnet (High) Gesamtverbrauch mit Motor (3,3V; Leerlauf)
44E-938 2200 µA 1800 µA 18,5 mA
3144 4100 µA 3600 µA 19,6 mA
AH180-PL-A 7 µA 29 µA Sensor Stromverbrauch zu vernachlässigen

1.) 44E-938 und 3144*

(Datenblatt 44E-938 und 3144 )

2.) AH180-PL-A

(Datenblatt AH180-PL-A )

  • 44E scheint zur der Reihe A3144E zu gehören. Es wird daher auf das selbe Datenblatt verwiesen.

Implementierung der Drehzahlmessung

Auch hier wurde mit Hilfe der vorgegebenen GPIO-Funktionen, der Zephyr Dokumentation gearbeitet. Der aktuelle Code ist unter Link-zum-Programmcode zu finden. Die Funktionalität wurde mit einer Kabelbrücke vom 3.3V Port und dem GPIO-Pin getestet.


Messung der maximalen Anzahl Interrupts

Erste Messungen zeigen das die UART Ausgaben des feather boards bei 1 Interruptpin noch bis 138.000 Interrupts/sec funktionieren, bei 2 verwendeten Interruptpins schaffen das board noch 125.000 Interrupts/sec. Bei einer höheren Anzahl Interrupts bekommt UART keine Zeitscheiben mehr zugeteilt.

Ohne UART können sogar bis zu 800.000 Interrupts/sec gemessen werden.


Eine theoretische Annahme über die benötigte Zeit der CPU bei 800.000 Interrupts/Sekunde:

Wenn die CPU 800.000 Interrupts/sec behandeln kann benötigt sie je Interrupt Service Routine 1/800.000 sec. Das heißt sie kann bei 1 Interrupt/sec 0,99999875 sec schlafen. Bzw. bei 300 RPM des Motors, dann 300 Interrupts/sec, 0,99962375 sec schlafen. Folglich wären Interrupts also eine gute Alternative zum counter. Dennoch probieren wir über das PPI (programmable peripheral interface) einen Pin des boards an einen Counter anzuschließen, da die CPU bei jedem Interrupt geweckt wird, ein Counter hingegen zählen kann ohne die CPU zu wecken.


Versuchsaufbau zur Bestimmung der maximalen Anzahl Interrupts/Sekunde:

Die CPU wacht mit 1Hz auf und gibt die gemessenen Interrupts an Pin A4 (Right) und A5 (Left) aus. Der Funktionsgenerator erzeugt eine Frequenz von 120 kHz. Die gemessenen Werte sind in RPS (rounds per second = Hz) angegeben.

Versuchsaufbau Motorspeed_120k.jpeg