mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Periodendauer messen und in Frequenz umwandeln


Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Habe folgendes Problem:

Will mir einen Bordcomputer fürs Motorrad bauen.
Dieser soll mehrere umschaltbare Screens mit verschiedenen Funktionen 
haben.
Der erste Screen soll Geschwindigkeit und Drehzahl und Ganganzeige 
besitzen.
Ganganzeige sowie Geschhwindigkeit funktioniert bereits.

Für die Drehzahl habe ich ein Rechteck zwischen 20 und 200 Hz.
Ich will nun die Periodendauer jedes Signals messen.
Dazu habe ich nun das Signal auf den ICP des Mega32 gelegt. Quarz ist 16 
MHz.

Am Display kann ich die gezählten Takte sehen. Bei 200 Hz circa 780.

Wie kann ich nun diese Taktzahl in eine Frequenz bzw. Drehzahl umrechen 
?

Progge mit Bascom.

Vielen Dank für eure Hilfe.

Gruß Tommy

Autor: Tommy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch das Programm was ich bis jetzt geschrieben habe.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Tommy (Gast)

>Wie kann ich nun diese Taktzahl in eine Frequenz bzw. Drehzahl umrechen
>?

f = 1/T

MFG
Falk

Autor: bascomer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist mit einer einfachen Division erledigt.
Drehzahl ist eine Frequenz, du misst die Periodendauer. Und die stehen 
in folgender Beziehung:
f=1/T
Dann noch auf die richtigen Einheiten achten (deine Timereinheit und 
Umrechnung in U/min).
Also eine Konstante durch deine gemessene Periodendauer teilen.
Beispiel: die 200Hz würden 200km/h entsprechen:
156000(Konstante)/780(Messwert)=200 (km/h)

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst doch nur wissen, wie lang ein Timertakt ist. Der Rest ist ein 
klassischer Dreisatz:
1 Timertakt = n µs (oder ms oder wasauchimmer)
x Timertakte = x*n µs
Dann noch die oben schon erwähnte Division und fertig...

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moment, es geht um die Drehzahl, die ist unabhängig der aktuellen 
Geschwindigkeit!

Also die 20-200Hz deuten ja darauf hin, dass der Motor bei jeder 
Umdrehung eine positive Taktflanke erzeugt. Das bedeutet, du muss 
einfach nur die Takte pro Sekunde zählen (also die Frequenz bestimmen) 
und diesen Wert mit 60 multiplizieren (200Hz --> 200 Umdrehungen pro 
Sekunde * 60 = 12000 Umdrehungen pro Minute). Der Wert kann dann zB 
sekündlich aktualisiert und angezeigt werden.
Ein bestimmen der Periodendauer ist meiner Meinung nach wirklich nicht 
nötig. Wenn Dir die Sekunde zu lang dauert, kannst du ja auch die Takte 
in 500ms zählen und den Wert dann halt mit 120 multiplizieren.
Viel Erfolg!

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die rechnung ist soweit klar.

Habe mich glaub falsch ausgedrückt :-(

Ich habe den Wert des Timer1 Registers auf dem LCD stehen.

bei meinem Prescaler und 16 MHZ ist ein Zyklus 64µs. ???

Wenn ich nun zb. 780 * 64µs rechne sollten doch 50ms rauskommen für die 
Periodendauer.

diese dann 1/periodendauer und mal 60.

Und ich hab am LCD immer 0 stehen.

Das ist mein Problem

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dan zeig doch mal was du rechnest, eventuell machst du nur 
Ganzzahlarithmetik....?
Und JA du hast das extrem ungenau ausgedrückt... Das konnte man ja nun 
ÜBERHAUPTNICHT aus deiner Frage ablesen!

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist doch egal, ob Drehzahl oder Geschwindigkeit. Messen kannst du die 
Periodendauer eines Signals, haben willst du die Frequenz.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Manuel:
Ich (und vermutlich auch die anderen) habe das so verstanden, dass sein 
Drehzahl-Sensor ein Rechtecksignal mit Drehzahl-abhängiger Frequenz 
liefert (OK, dass da noch anscheinend ein Offset drauf ist, habe ich 
oben nicht berücksichtigt, allerdings macht der Offset auch Sinn, da man 
ansonsten bei Geschwindigkeiten in der Nähe von Null ziemliche Probleme 
bekommt) und er mittels ICP (was ebenfalls sinnvoll ist) die 
Periodendauer dieses Rechtecksignals bestimmt. Und da kommt nunmal 
zunächst einfach nur die Anzahl der Timertakte zwischen zwei 
Capture-Ereignissen raus. Die muss dann in die Geschwindigkeit 
umgerechnet werden. Und zwar so (oder so ähnlich) wie es oben besprochen 
wurde. Dazu kommt dann allerdings noch der Offset, der allerdings (falls 
der restliche Ausgabebereich des Drehzahlsensors linear ist) einfach 
subtrahiert werden kann.

EDIT:
Upps, da hab ich zu langsam getippt...

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal entschuldigung für meine unpräzise Aussage.

Bin neu auf dem Gebiet Mikrokontroller.

Also nochmal:

Das ankommende Signal ist ein sauberes Rechteck ohne Offset und mit 5V 
Spitze.

Je nach drehzahl ändert sich die Frequenz zwischen 20 HZ (1200 U/min) 
und 200 Hz (12000 U/min).

Die Frequenzänderung liegt in der Periodendauer. Das heißt, einmal ist 
sie länger und einmal kürzer.

Sprich bei 20 Hz habe ich 50ms und bei 200Hz 5 ms. Das ist ja auch 
normal.

nun stelle ich eine Drehzahl von 1200 U/min am Drehzahlmesser ein und 
gebe dieses Signal auf den ICP Eingang.

Habe 16 Mhz Quartz und Prescaler von 1024. Ergibt 64µs Zyklus. Soweit 
Richtig denk ich mal.

Bei 20Hz oder 50ms zählt mir der ICP-Timer1 nun auch richtigerweise 780 
Zyklen. Da ja die 64µs circa 780 mal in die 50ms rein passen.

die 780 hab ich nun am Display stehen.

Nun wollte ich mit Bascom diesen Wert umrechnen auf eine Drehzahl. Der 
mathematische Weg ist mir klar. Ich weiß nur nicht wie ich es in Bascom 
lösen muss. Welche Variablendimensionierung und so weiter.

So, ich hoffe diesmal ist es präzise ausgedrückt :-)

Gruß Tommy

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die Frequenzänderung liegt in der Periodendauer. Das heißt, einmal ist
>sie länger und einmal kürzer.

Interessante Aussage...

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>die 780 hab ich nun am Display stehen.
>Nun wollte ich mit Bascom diesen Wert umrechnen auf eine Drehzahl

Also: du hast: X Impulse, jeder stellt 64µs dar.

SOmit ist die gemessene Zeit (Periodendauer) X*64µs,
oder (X*64/1'000'000) sek.

Diese Zeit in den Kehrwert genommen, ergibt die Frequenz/Drehzahl in 
1/sek.

           1            1'000'000 [µs/sek]
f= ---------------- = --------------------
    X*64/1'000'000       X*64 [µs]

Da du vermutlich die Drehzahl in 1/min haben willst, musst du den 
Ausdruck mit 60[sek/min] erweitern:

    1'000'000 [µs/sek]                   60'000'000 [µs/min]   937'500
f= -------------------- *60 [sek/min] = ------------------- = ------- 
[1/min]
     X*64 [µs]                            X*64 [µs]              X

Somit musst du programmieren: f (in 1/min) = 937500/X (X:Anzahl, im Bsp 
780)

WIe das in Bascom geht, weiß ne. Ich nehm C.

Du musst aber auf folgendes Aufpassen:
- X darf nicht Null sein => Abfangen, zB, X:=X+1
- Der Datentyp bei der Berechung muss grßer 20bit sein, sonst kommt Mist 
raus.

Viel Spass..

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super !

Das war die Lösung !

Habe einfach folgendes Programmiert:

Drehzahl = 937500 / Counts

Variablen sind jeweils als Long dimensioniert.

Den Rest der Berechnungen habe ich aus dem Prog genommen.

Danke nochmal für die Hilfe.

Gruß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.