Hallo Forum,
ich baue gerade einen Geschwindigkeitsmesser für Modellbahnen. Jetzt
kommt die Krugs: Das ganze ist nicht die Wegstrecke, das heißt man misst
die Zeit von einem Sensor zum nächsten im definierten Abstand - das wäre
ja simpel. Sondern ich habe einen Rollenprüfstand. An diesem ist ein
Hallsensor und Magnet. 1 Impuls Pro Umdrehung. Wie kann ich (insb.
rechnerisch) hier die Geschwindigkeit messen.
Meine PRobleme sind hier etwas das Verständis:
Jede Lok hat einen anderen Raddurchmesser, nur der Durchmesser wo der
Magnet dran klebt, also vom Rollprüfstand ist immer gleich. Die Lok und
dessen Raddurchmesser ist variabel. Ich habe aktuell ein Intervall von 5
sek. Das ist aber auch sehr semi, wenn ich seeeehr langsam fahre, brauch
ich für eine Umdrehung länger als 5 sek. => Fehelr. Andere Idee war die
Zeit zwischen 2 Impulsen zu nehmen. Allerdings wenn die Lok nicht fährt,
müsste man dann wieder eine Art timeout haben das man dann sagt Gesch =
0.
Wie kann man das rechnerisch gut und sinnvoll lösen. Das weitere ist
noch der Maßstab, Ich Kann ich dann die ermittelte Geschwindigkeit
einfach * 87 nehmen für H0 bspw.?
Tuffi schrieb:> ich baue gerade einen Geschwindigkeitsmesser für Modellbahnen. Jetzt> kommt die Krugs:
Crux bzw. Krux heißt die. Hat nix mit Krügen zu tun.
> Das ganze ist nicht die Wegstrecke, das heißt man misst die Zeit von einem> Sensor zum nächsten im definierten Abstand - das wäre ja simpel. Sondern ich> habe einen Rollenprüfstand. An diesem ist ein Hallsensor und Magnet. 1> Impuls Pro Umdrehung. Wie kann ich (insb. rechnerisch) hier die> Geschwindigkeit messen.
Umfang * Impulsrate = Geschwindigkeit. Umfang ist π * Durchmesser.
> Meine PRobleme sind hier etwas das Verständis:>> Jede Lok hat einen anderen Raddurchmesser, nur der Durchmesser wo der> Magnet dran klebt, also vom Rollprüfstand ist immer gleich.
Der ist ja auch entscheidend.
> Die Lok und dessen Raddurchmesser ist variabel. Ich habe aktuell ein> Intervall von 5 sek. Das ist aber auch sehr semi, wenn ich seeeehr langsam> fahre, brauch ich für eine Umdrehung länger als 5 sek. => Fehelr.
Was heißt "sehr semi"?
> Andere Idee war die Zeit zwischen 2 Impulsen zu nehmen.
Das ist bei so geringen Drehzahlen wesentlich sinnvoller.
> Allerdings wenn die Lok nicht fährt, müsste man dann wieder eine Art timeout> haben das man dann sagt Gesch = 0.
Ja, das müsstest du. Ansonsten halt mehrere Magnete an der Rolle
anbringen.
> Wie kann man das rechnerisch gut und sinnvoll lösen. Das weitere ist> noch der Maßstab, Ich Kann ich dann die ermittelte Geschwindigkeit> einfach * 87 nehmen für H0 bspw.?
Damit errechnest du die Geschwindigkeit, die eine echte Lok hätte bei
gleichem "Geschwindigkeits-Eindruck".
Rolf M. schrieb:> Tuffi schrieb:>> Impuls Pro Umdrehung. Wie kann ich (insb. rechnerisch) hier die>> Geschwindigkeit messen.>> Umfang * Impulsrate = Geschwindigkeit. Umfang ist π * Durchmesser.>
Vielen Dank für die Antwort. Ich habe es jetzt mal so gemacht, das ich
die Zeit zwischen 2 Impulsen messe, bei 25 sek. ohne Impuls = Speed 0.
Diese "Todzeit" passe ich dann noch exakt an, was die kleinste
Geschwindigkeit ist.
Eine Auflösung von 409,6 us kann ich max. auflösen. Das ist mein
Timerintervall. Wenn ich jetzt einen Wert von 10 erhalte, bedeutet das
10 * 409,6us = 4096 us zwischen dem Impulsen. Meine Berechnung wäre
jetzt:
Wert 1mio 60 = Impuls/Minute
Richtig?
Tuffi schrieb:> Jede Lok hat einen anderen Raddurchmesser, nur der Durchmesser wo der> Magnet dran klebt, also vom Rollprüfstand ist immer gleich. Die Lok und> dessen Raddurchmesser ist variabel.
Für die Geschwindigkeitsmessung kommt es drauf an, wer auf wem abrollt
und wie die Abmessungen (Durchmesser) sind. Vielleicht machst du mal
eine Skizze, aus der ersichtlich ist, wie alles zusammenhängt.
Normalerweise ist ein Rollenprüfstand so aufgebaut, dass die
Abrollfläche die Straße/Schiene ersetzt, auf der das Fahrzeug
normalerweise fährt. Warum soll sich der Raddurchmesser am
Rollenprüfstand anders auswirken, als wenn die Lok auf der Schiene
fährt.
Wolfgang schrieb:> Tuffi schrieb:>> Jede Lok hat einen anderen Raddurchmesser, nur der Durchmesser wo der>> Magnet dran klebt, also vom Rollprüfstand ist immer gleich. Die Lok und>> dessen Raddurchmesser ist variabel.>> Für die Geschwindigkeitsmessung kommt es drauf an, wer auf wem abrollt> und wie die Abmessungen (Durchmesser) sind. Vielleicht machst du mal> eine Skizze, aus der ersichtlich ist, wie alles zusammenhängt.>> Normalerweise ist ein Rollenprüfstand so aufgebaut, dass die> Abrollfläche die Straße/Schiene ersetzt, auf der das Fahrzeug> normalerweise fährt. Warum soll sich der Raddurchmesser am> Rollenprüfstand anders auswirken, als wenn die Lok auf der Schiene> fährt.
Das ist einfach nur ein Prüfstand, wo die Lok drauf steht und dessen
Räder auf 16mm (außendruchmesser) großen Kugellagern sind, an diesem
Kugellager ist ein Magnet, darunter ein Sensor.
Ich habe hier irgendwie noch ein Denkfehler, könnte mir jmd. mit der
Berechnung helfen.
Nach dem aktuellen Schema ist es so, je schneller sich das Rad dreht,
desto kleiner wird die Geschwindigkeit. Klar macht auch Sinn, da die
Impulsbreite kleiner wird, also die Zeit zwischen 2 Impulsen und damit
nach meiner Rechnung auch die Geschwindigkeit.
Wie muss das richtig aussehen?
Tuffi schrieb:> Nach dem aktuellen Schema ist es so, je schneller sich das Rad dreht,> desto kleiner wird die Geschwindigkeit.
Die Momentangeschwindigkeit wird aus dem Quotienten einer Wegdifferenz
und einem Zeitintervall berechnet. Je kleiner die Zeit, um so größer die
Geschwindigkeit. Das ist in der Schule normalerweise Thema in der 9.
Klasse (Kinematik und Dynamik linearer Bewegungen). Du solltest deine
Rechnung darauf nochmal überprüfen.
Tuffi schrieb:> Dim mySpeedInt As Double
Warum nennt man eine Double Variable ..Int?
Das führt doch nur zu Verwirrungen.
Und vielleicht könnte man mehr Hilfvariablen wie
Umfang = 2 * 3.1415926535 * 8
einführen. Dann könnte es klarer sein als alles nur in einer Variablen
zu berechnen.
Der Compiler optimiert nachher sowieso das unbenutzte wieder weg.
> Wenn ich jetzt einen Wert von 10 erhalte, bedeutet das>10 * 409,6us = 4096 us zwischen dem Impulsen. Meine Berechnung wäre>jetzt:>16mm (außendruchmesser) großen Kugellagern sind,
PI*16mm/4096µs = 12'272mm/s
Hier musst Du aber noch bedenken, die gemessenen 10 auch eigentlich 10,9
sein könnten. Für die 11 hats quasi knapp nicht mehr gereicht. Der
nächste Impuls kam knapp zu spät.
11 -> 11'156mm/s
Du hast also in dieser Messung 1'116mm/s Toleranz (9%) drin. Wirst Du
schneller, wird es schlimmer.
Tuffi schrieb:> Sondern ich habe einen Rollenprüfstand. An diesem ist ein> Hallsensor und Magnet. 1 Impuls Pro Umdrehung. Wie kann ich (insb.> rechnerisch) hier die Geschwindigkeit messen.
Umfang (Strecke) = Pi mal Durchmesser.
> Allerdings wenn die Lok nicht fährt, müsste man dann wieder> eine Art timeout haben das man dann sagt Gesch = 0.
Das ist bei jedem digitalen Tacho so - kennst du bestimmt vom Fahrrad.
> Ich Kann ich dann die ermittelte Geschwindigkeit> einfach * 87 nehmen für H0 bspw.?
Wenn es denn der Maßstab 1:87 ist, dann ja.
Hi
Nur noch ein kleiner Tip. Immer, wenn ich Verständnisprobleme habe, dann
skizziere ich kurz mein Problem. So bekomme ich ein Bild und ich finde
(meist) schnell die Lösung.
Gruß oldmax
> PI*16mm/4096µs = 12'272mm/s
Formal richtig, allerdings könnte man hier auf den Gedanken kommen, dass
eine Geschwindigkeit von zwölf Meter pro Sekunde = mehr als 40 km/h für
eine Modelleisenbahn ja völlig unrealistisch ist und die Sache deshalb
irgendwo noch einen massiven Bug haben muss.
Dass du immer die selbe Variable für unterschiedliche Größen verwendest,
macht es etwas unübersichtlich.
Tuffi schrieb:> Dim mySpeedInt As Double = CInt((HI * 256) + LO)
Also, hier steht in mySpeedInt offenbar dein gemessener Wert in
Zähler-Zyklen drin.
> mySpeedInt = (mySpeedInt * 409.6) 'convert to us base
Hier wird es dann eine Zeit in Mikrosekunden, die eine Umdrehung braucht
- wohlgemerkt keine Geschwindigkeit oder Drehzahl, sondern eine Zeit.
Die Einheit ist also Mikrosekunden pro Umdrehung.
> mySpeedInt = (mySpeedInt / 1000000) 'convert to second> mySpeedInt = (mySpeedInt * 60) 'convert to minute
Immer noch eine Zeit, nur in Minuten pro Umdrehung statt in
Mikrosekunden.
> mySpeedInt = (mySpeedInt 2 3.1415926535 * 8) '2pi r, r = 8> (diameter is 16mm from ball bearing)
Hier multiplizierst du diese Zeit mit dem Umfang. Dein Ergebnis ist also
in der Einheit Minuten mal Millimeter. Eigentlich müsstest du den Umfang
durch die Zeit teilen. Dann hättest du Millimeter pro Minute. Es ist
immer gut, bei solchen Rechnungen einen Einheiten-Check zu machen.
Übrigens: Warum teilst du erst den Durchmesser durch 2 und
multiplizierst dann wieder mit 2?
> mySpeedInt = (mySpeedInt / 1000000) 'convert from mm/min to km/min> mySpeedInt = (mySpeedInt * 60) 'convert from km/min to km/h
Tatsächlich hast du hier nicht km/h, sondern km*s.
> mySpeedInt = (mySpeedInt * getScaleFacor()) 'convert to model scale
factor
Rolf M. schrieb:>> mySpeedInt = (mySpeedInt / 1000000) 'convert to second>> mySpeedInt = (mySpeedInt * 60) 'convert to minute>> Immer noch eine Zeit, nur in Minuten pro Umdrehung statt in> Mikrosekunden.
Bestimmt nicht. Für die Umrechnung von Sekunden in Minuten müsste man
den Zahlenwert durch 60 teilen.