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
Hier noch das Programm was ich bis jetzt geschrieben habe.
@ Tommy (Gast) >Wie kann ich nun diese Taktzahl in eine Frequenz bzw. Drehzahl umrechen >? f = 1/T MFG Falk
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)
Du musst doch nur wissen, wie lang ein Timertakt ist. Der Rest ist ein klassischer Dreisatz:
1 | 1 Timertakt = n µs (oder ms oder wasauchimmer) |
2 | x Timertakte = x*n µs |
Dann noch die oben schon erwähnte Division und fertig...
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!
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
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!
ist doch egal, ob Drehzahl oder Geschwindigkeit. Messen kannst du die Periodendauer eines Signals, haben willst du die Frequenz.
@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...
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
>Die Frequenzänderung liegt in der Periodendauer. Das heißt, einmal ist >sie länger und einmal kürzer. Interessante Aussage...
>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..
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ß
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.