Forum: Mikrocontroller und Digitale Elektronik Konvertierung Zeitbereich/Frequenzbereich


von Schigndix Z. (schigndix)


Lesenswert?

Hallo Zusammen,

ich bin bei der Arbeit an einem Drehzahlmesser auf folgendes Problem 
gestoßen:

Ich kriege pro Umdrehung einen Impuls und ich messe die Zeit zw. 
aufeinanderfolgenden Impulsen um die Drehzahl zu berechnen:
RPM = (timer_frequency * 60) / ticks

Für einen Eingangsfilter der für die nächste Messung nur ein Intervall 
[old_RPM - 100; old_RPM + 100] erlaubt müsste ich nun wissen, wieviel 
ticks denn (old_RPM +/- 100) entspricht.

Der direkte Weg ist klar:
1. ticks in RPM       :     RPM = (timer_frequency * 60) / ticks
2. RPM = RPM + 100    :     RPM += 100
3. RPM in ticks       :     filter_high = (timer_frequency * 60) / RPM

Ich würde hier gerne die fiesen Divisionen vermeiden!

Kennt jemand ne Methode wie ich direkt im Zeitbereich rechnen kann?

Vielen Dank
schigndix

von Schigndix Z. (schigndix)


Lesenswert?

...keiner ne Idee?

von Andreas K. (a-k)


Lesenswert?

Vielleicht hat dich auch niemand verstanden. Ich jedenfalls nicht.

Da Frequenz der Kehrwert von Zeit ist, kommst du bei Umrechnung Zeit => 
Frequenz um eine Division schlecht herum, wenn alles was du hast eine 
Zeit ist.

Wenn du allerdings die Anzahl Impulse pro Zeiteinheit misst, dann hast 
du die Frequenz direkt. Nur möglicherweise etwas ungenau.

von Thorsten (Gast)


Lesenswert?

Deine Timer-Frequenz ist ja sicher konstant. Warum rechnest du dann 
nicht einfach:

filter_high = ticks + (timer_frequency * 60) / 100

ticks ist dabei der Wert des letzten Durchlaufs und der hintere Teil der 
Gleichung ist konstant und kann somit doch direkt zur Compile-Zeit 
berechnet werden.

Ich bin mir nun nicht sicher, ob ich dein Problem richtig verstanden 
habe.

von Peter (Gast)


Lesenswert?

es geht auch ohne Division (hatte genau das gleiche Problem)

ziehe einfach den Teiler von der Zahl ab bis die zahl <= 0 ist und zähle 
dabei die Anzahl der Subtraktionen.
(Ich weiss es ist nicht sehr elegant)

von Moi (Gast)


Lesenswert?

Was ist denn bitte sonst eine Division?!

von Andreas K. (a-k)


Lesenswert?

@Peter: Das ist auch nichts anderes als eine Division, nur i.A. weniger 
effizient.

@Moi: Die übliche binäre Division funktioniert so wie die schriftliche, 
nur eben binär statt dezimal. Das ist nicht ganz das gleiche wie solange 
abziehen bis 0 rauskommt (das könnte bei einer 64bit Division ein 
bischen dauern).

von Peter (Gast)


Lesenswert?

@Andreas Kaiser
@Moi
Ja das ist mir ja auch klar, aber das kann man in einer kleinen Schleife 
ohne libs machen, denn von selber kann es ja der AVR nicht.
Und wenn es für die Anzeige ist (max 5 mal in der sec), Reicht die 
geschwindigkeit auch locker aus.

Beim letzten Projekt habe ich auch auf die Binäre Division gesetzt, weil 
die Geschwindigkeit wichtiger war.

von ballkack (Gast)


Lesenswert?

wie wärs mit ner approximation mit summe (1/2^n) mit entsprechenden n? 
das entspricht einfach n rechtsshifts
also beispielsweise ist x/3,5 ungefähr = (x+x/8+x/32)/4

von Schigndix Z. (schigndix)


Lesenswert?

Ok, ich hab mich wohl etwas verworren ausgedrückt....

mein Eingangsfilter erlaubt nur ein Intervall im Zeitbereich (in ticks). 
Die Intevall-Grenzen ergeben sich aber aus dem Frequenzbereich (in RPM 
nämlich +/- 100RPM zum letzten Wert)

Es ist mir wichtiger den die Intervall-Grenzen schnell zu berechnen 
anstelle von super genau!

@Thorsten: Wie kommst du auf die Formel? Ich krieg da auf alle Fälle nix 
Richtiges bei raus...

@ballkack : wie soll ich eine Division approximiern wenn ich den Divisor 
nicht kenne?

von Thorsten (Gast)


Lesenswert?

@ Schigndix Z.

Die Formel ist so auch falsch. Mir war deine Problemstellung nicht ganz 
klar und ich bin daher auf diese falsche Formel gekommen.

Daher jetzt eine andere Idee:
Wenn es dir auf Geschwindigkeit ankommt, Genauigkeit aber nicht so 
wichtig ist, dann wäre vielleicht eine Lookup-Table das beste.

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
Noch kein Account? Hier anmelden.