Fahrrad Computer berrechnen

Gast #1306507
Lesenswert?

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.
#1306698
Lesenswert?

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.
Gast #1306764
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren