Hallo, ja lacht mich ruhig aus :-) Ich versuche hier krampfhaft die Geschwindigkeit (km/h) zu errechnen. Gegeben ist der Radumfang mit 2214mm und die Zeit die vergangen ist fuer eine Radumdrehung (10800 Einheiten, entspricht 1 sekunde) Das ganze wird mit einem Atmega8 gemacht. Ich suche einen weg der Recht genau ist, und denoch ohne float division auskommt.
Ich rechne sowas immer in Angström/Woche. Gibt größere Zahlen und macht mehr her.
Das ganze müsste sich auf folgende Rechnung reduzieren: kmh = (0,002214 x 10800 x 3600) / Zeitwert Um die Division wirst du wohl nicht rum kommen. Wenn man nachkommastellen haben will wird man wohl auch um float nur schwer rum kommen.
Also rechnen wir mal: Annahme: Maximal messbare Geschwindigkeit: 100km/h (= 27.8m/s) Zeit für eine Umdrehung: t = 2.214m/(27.8m/s) = 79.7ms Um diese Geschwindigkeit mit 1% Genauigkeit zu messen (Grüsse an µA-Thread), muss der Kontakt demnach ca. alle 79.7ms/100 = 797µs abgetastet werden. Bei 100km/h läuft Dein Zähler somit auf einen Wert von 100. Bei Minimalgeschwindigkeit, sagen wir mal 1km/h dauert die Umdrehung des Rades 100 mal solange. Folglich läuft Dein Zähler dann bis 10000. Du brauchst also einen 16-Bit-Zähler. Wenn wir exakt mit 797µs abtasten, errechnet sich die Geschwindigkeit wie folgt: v[km/h] = 10000 / Z Mit Festkommaarithmetik gerechnet: v[km/h*10] = 100000 / Z Bei der Anzeige muss dann die Kommastelle wieder eingefügt werden. Ein Rechnung mit Floatzahlen erübrigt sich, ein long int reicht locker. Wenn Du statt mit den krummen 797µs lieber mit geraden 800µs abtastest, muss lediglich Deine Konstante korrigiert werden von 100000 auf 99630. Witzigerweise ist dieser Wert sogar exakt und nicht gerundet.
Marius S. schrieb: > Um die Division wirst du wohl nicht rum kommen. Wenn man > nachkommastellen haben will wird man wohl auch um float nur schwer rum > kommen. Wo hast du denn das her? --> Festkommarithmetik.
Danke fuer die Antworten. Ich koennte ja bei diesem Beispiel: kmh = (0,002214 x 10800 x 3600) / Zeitwert auch kmh = (2214 x 10800 x 3600) Zeitwert 1000 rechnen, oder?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.