Hallo Zusammen
in diesen Thread habe ich über den Bau meines universellen Rollenprüfstands berichtet:
Universalprüfstand für H0 Lokomotiven gebaut, Funktionsupdate
Was mir wie dort beschrieben noch fehlte, war eine Messeinrichtung zum bestimmen der Fahrgeschwindigkeiten von Lokomotiven. Das ist nützlich zum genauen Einmessen, Überprüfen und Abstimmen von Loks (Geschwindigkeit, Gleichlauf etc…)
Zunächst hatte ich es auf die von Märklin in der Vergangenheit angebotene Messeinrichtung abgesehen (78111 oder 78158). Die sind jedoch schon lange vergriffen.
Kürzlich habe ich mir noch den Messwagen 49960 besorgt, um mal zu sehen wie das mit der Messung seitens Märklin überhaupt umgesetzt wurde und wie sich das real darstellt. Ergebnis:
Ist alles „ganz nett“ aber doch recht grob, speziell im langsamen Geschwindigkeitsbereich. Unter (umgerechnet aufs Vorbild) 3,6 km/h ist nichts zu messen. Kein Wunder: Es gibt nur drei Messimpulse pro Radumdrehung. Die Messzeit ist ca. 1s. Es kann also minimal 1 Puls pro Sekunde aufgelöst werden. Das Rad der Messachse des Wagens hat 10mm Durchmesser. Das gibt also als minimal zu messende Geschwindigkeit ganz grob „echte“ 10 mm/s.
Aufs Vorbild umgesetzt (*87) sind das 3,12 km/h. Das passt ganz gut zu der minimalen Anzeige von 3,6 km/h.
Wie dem auch sei: Dem Techniker ist das alles viel zu grob und zu undynamisch. Es musste was besseres her :D.
Für den von mir benutzten Rollenprüfstand(Märklin) kann man nichts kaufen. Auch für andere Prüfstände gibt es meiner Ansicht nach nur unzulänglichen Mist für genaue Messungen. Und ich hab ja nunmal auch den Märklin/SMT Prüfstand. Funktional, optisch und von der Stabilität der Beste.
Demnach: Selber was bauen, was meinem Anspruch gerecht wird und zuverlässig und genau funktioniert.
Die Hardware:
Als Messcomputer und Controller kommt zunächst (für die Testphase) ein Arduino UNO zum Einsatz. Der bietet zwei interruptfähige Eingänge (später mehr dazu) und ist mit 16 MHz mehr als schnell genug.
Der Geber ist ein industrieller Inkrementalencoder (Megatron MIB22) mit 100 Pulsen je Umdrehung. Der Encoder ist 2-kanalig, bei voller Auswertung sind das dann 400 Zustandsänderungen je Umdrehung.
Die Welle des Gebers fungiert gleichzeitig als Messwelle. Eine aufgepresste Hülse mit 6mm Außendurchmesser gleicht den Durchmesser dem der übrigen Laufrollen des Prüfstands an. Da die Geberwelle sehr leicht läuft wird sie sicher vom drehenden Rad der Lok mitgenommen und angetrieben.
An den Prüfstand wird der Geber über ein gedrucktes Teil angeflanscht. Das Adapterteil ersetzt dabei einen kompletten Rollenbock eines Rollenbockpaares. Bedingt durch den Geber musste das Adapterstück etwas breiter werden als die originalen Böcke. Auch bei engen Achsständen geht das aber trotzdem noch auf.
Komplettiert wird der Messaufbau durch ein paar Knöpfe und ein LC-Display zur Ausgabe der Messwerte an den Benutzer (also an mich :D)
Messwertaufnahme /-auswertung /-ausgabe:
Der Geber gibt wie berichtet 400 Zustandsänderungen je Umdrehung aus, 200 pro Umdrehung auf jedem Kanal.
Die müssen jetzt in den Arduino. Das geschieht über 2 digitale Eingänge. Jeder Eingang ist so beschaltet:
2,2kOhm externer Pull-up auf 5V (hier optimaler Wert für steile, „eckige“, Signalflanken)
Der jeweilige Kanal des Gebers ist ein Open Collector, be aktivem Kanal wird der Ausgang auf Ground gezogen. Der verbundene Digitale Eingang des Arduino wird LOW.
Dieses Wechselspiel passiert dann wie gesagt 200 mal je Kanal und Umdrehung des Gebers.
Jetzt muss der Arduino das auch mitbekommen. Dafür die Interrupts. Auf dem Arduino läuft ein Programm, welches die Messwerte verwertet, umrechnet und ausgibt. Das läuft in einer Dauerschleife (Ablaufprogramm).
Kommt nun eine Zustandsänderung über einen Geberkanal rein, unterbricht der Arduino das, was auch immer er gerade tut und führt prioritär ein Unterprogramm aus, was mit dem Interrupt verknüpft ist (InterruptServiceRoutine, ISR). Hier: Speichere (zähle) den die Änderung am Eingang als Wert in einer Variablen. Mehr nicht.
Und jetzt gehts los. Wir zählen nun alle eingehenden Zustandsänderungen (ich nenn es ab jetzt einfach Pulse). Fein. Um eine Geschwindigkeits- bzw. Drehfrequenzinformation zu bekommen benötigen wir noch eine Zeitinformation (Geschwindigkeit = Weg/Zeit)
Wir summieren in meinem Fall die Pulse pro Zeit. Die Pulse sind durch den bekannten Umfang der Messwelle direkt in eine Weginformation umzurechnen.
Die Messperiode beträgt 60ms. Jede Messperiode wird über einen Timerinterrupt genau eingehalten. Fünf aufeinander folgende Messperioden werden gemittelt (glätten der Werte). Dann wird der Mittelwert in verschiedene Abrufgrößen umgerechnet (km/h Vorbild, m/s Real, 1/min) Auch die gesamte Strecke wird summiert. Je nach gewählter Betriebsart werden die Werte dann auf dem LCD ausgegeben.
Durch die Mittelwertbildung aus 5 Perioden à 60ms erfolgt ein Refresh der Anzeige alle 300ms. Das ist dynamisch und trotzdem stabil für saubere Werte ohne gezitter.
Auflösung / Genauigkeit:
Die Messwelle hat 6mm Durchmesser, der Umfang ist demnach rund 18,84mm. Jeder Puls (400 pro Umdrehung) löst demnach auf 0,047mm auf.
Pro Messperiode wird mindestens 1 Puls benötigt um was messen zu können. Die kleinste theoretische Geschwindigkeit ist demnach 0,047mm/60ms….oder handlicher 0,785mm/s
Aufs Vorbild sind das 0,25 km/h.
Das ist wenig genug um den von mir angestrebten Wunsch vmin= 1km/h sicher erfassen zu können.
Die Messung ist präzise sofern das drehende Rad der Lok steif mit dem Geber verbunden wäre. Hier haben wir aber einen Reibradantrieb: das drehende Rad der Lok nimmt die Geberwelle aufgrund der Reibung zwischen den beiden mit. Dadurch ist immer ein gewisser Schlupf vorhanden. Den Wert kann ich nicht bestimmen. Er ist für jede Lok anders (Gewicht, Schwerpunkt, Achslast, Treibraddurchmesser, Zustand der Haftreifen). Dazu müsste man direkt an der Motorwelle der Lok, drehsteif gekuppelt, eine vergleichende Messung machen. Damit könnte man den Schlupf berechnen. Darauf verzichte ich. Die Lok soll „wie sie ist“ vermessen werden können.
Tests ergeben, dass die Geberwelle dynamisch und dauerhaft folgt. Kleinste Geschwindigkeiten stehen stabil (da würde man starken Schlupf zumindest sehen können). Eine sorgfältige Positionierung der Rollenbockpaare vor Messbeginn ist obligatorisch.
Zusammenfassend denke ich, dass eine Genauigkeit von +/- 1km/h (Vorbild) realistisch darstellbar ist.
Grenzen
Nach unten ist die Grenze aufgrund der Auflösung des Gebers wie beschrieben bei 0,25km/h. Nach oben wird der maximale Messwert durch die mechanische Grenzdrehfrequenz des Gebers bestimmt: 6000 1/min. Die maximale Messgeschwindigkeit liegt demnach bei 590km/h (Vorbild). Das ist schnell genug für jeden Rekordzug und schnell genug für mich :D.
Hier folgen nun noch einige Bilder zur Verdeutlichung:
->Die Elektronikeinheit als Testaufbau. Momentan Batteriegespeist (der Encoder braucht mindestens 8V Versorgungsspannung).
->Hier seht ihr die Encodersignale bei sich drehendem Encoder, dargestellt auf dem Oszilloskop. Die oberen beiden Linien stellen Kanal A dar, die unteren beiden Kanal B. Sehr schön kann man die um 90° Phasenversetzt laufenden Signale sehen. Die Flankenanstiege und -abfälle sind scharf und steil, so wie es sein soll. Fehlerpeaks, oder sonstige Störungen sind nicht zu sehen. Eine Fehlerkorrektur der Signale wird nicht durchgeführt.
-> Lokrad und Messwelle mit Encoder im Detail
-> Hier nochmal von der Innenseite. Der gedruckte Rollenbock ist gut zu erkennen. Rechts neben der Messwelle ein normales Kugellager auf seinem Lagerzapfen. Die Aussparung über dem rechten Kugellager dient der Erreichbarkeit der Befestigungsschraube. Die Welle des Encoders ist selbst mit 2 Kugellagern gelagert. Die ist stabil genug um die Last aufnehmen zu können. Zu meinem Encoder lässt sich das Datenblatt zur zulässigen Radiallast nicht aus. Der Nachfolgetyp ist beim Hersteller mit bis zu 80N angegeben. Wenn mein Geber nur 10 Prozent davon hätte, wäre es immernoch genug... das passt also, auch für den Dauergebrauch
-> Hier mal eine Übersicht zur Größeneinordnung. Der Encoder hat einen Außendurchmesser von nur 22mm.
-> Hier noch ein Bild aus dem frühen Prototypenstadium: Drahtverhau auf dem Steckbrett.
Was ist noch zu tun?
Was jetzt noch folgt ist weitere Optimierung des Programmcodes (im Rahmen meiner eher grundlegenden Kenntnisse).
Außerdem muss noch eine hübsche „Verpackung“ gebaut werden um das Produkt komplett zu machen. Da werde ich nochmal überlegen. Das zeig ich gern auch wenn es fertig ist.
Vielleicht ist das ja Anregung für euch, um sowas auch selbst in Angriff zu nehmen. Ich muss zugeben, dass der passende Geber (Baugröße, Schnittstelle etc.) genau im richtigen Moment in der Bucht auftauchte und ich gleich beide verfügbaren eingekauft habe (es gibt weitere Ideen :D) Diese industriellen Teile sind von privat schwer zu bekommen. Viele Hersteller liefern nur B to B.
Zur Ergänzung noch:
Ich habe im Vorfeld zunächst mit einem Hall Sensor (A3144) und Neodymmagneten, die ich an eine Motorwelle geklebt habe, experimentiert um das Prinzip für mich zu validieren. Das entspricht dem Märklin Konzept und auch bei anderen hab ich das schon so gesehen. Da hab ich mir das abgeschaut. Hier das schöne Beispiel vom Mitglied Uwe (Bubikopf) hier aus dem Forum wie mit wenig Hardwareaufwand ein kompakter Messwagen entstehen kann:
RE: Arduino - Messwagen "kompakt" - Neue Fotos vom fertigen Wagen!
Mein erworbener Geber arbeitet nach dem gleichen Prinzip, nur mit höherer Auflösung (feine Magnetisierung, mehrkanalige Auswertung).
Wer eine geringe Auflösung oder eine lange Messperiode toleriert ist sicher auch mit der „Bordmittelmethode“ sehr gut bedient!
Viele Grüße,
Daniel