Forum: Mikrocontroller und Digitale Elektronik Fragen zu Frequenzzähler


von Blutiger Anfänger (Gast)


Lesenswert?

Hallo,

ich möchte die Motordrehzahl an einem Motorrad feststellen.
Da ich noch ziemlich ungeübter Anfänger bin, soll das auch
erst mal alles sein. Später kämen noch 2 weitere Aufgaben dazu:
die Auswertung eines fertigen Lambdasondenmoduls mittels ADC und
die Wassertemperatur (sehr niedrige Priorität, Kennlinie ist bekannt) 
und
wenn das der Controller alles verkraften kann auch gerne noch 
Ansaugdruck,
Umgebungsdruck und Öltemperatur. Aber mein erstes Ziel ist die 
Umdrehungen
zu messen.

Ich möchte am Kabelbaum einen Takt abgreifen. Mir ist bekannt, daß 
dieser
Takt genau 3x pro Umdrehung des Motors ausgegeben wird.

Der interessante Messbereich für mich ist 800 - 12000 U/min.
Das bedeutet also, daß ich mindestens 800/60*3=40Hz und höchstens 
12000/60*3=600Hz pro Sekunde messen muss.

Mit einem AVR und dem ICP + Timer kann ich mir das recht gut vorstellen.
Da ich hier schon viele Varianten des Frequenzzählers gesehen habe, die
auch teilweise viele MHz messen können, nehme ich an, daß ein AVR das
recht locker messen kann. Allerdings habe ich auch immer wieder gelesen,
daß es oft in kleineren Frequenzen oder in höheren Frequenzen dabei zu
starken Abweichungen kommen kann.

Meine Vorstellung dabei ist: 2 Motorumdrehungen zu messen und dann die
gemessenen Werte zu mitteln. Die Messung kann an dieser Stelle beendet
werden und nur in einer Variablen zwischen gespeichert werden. Reicht 
die
Torzeit dafür aus? Wie genau würden diese Ergebnisse ausfallen, denn 
einen
Fehler größer 2 Stellen wird letztlich für mich unbrauchbar.

Freue mich über eure Antworten und seid nicht zu hart, jeder hat mal 
klein
angefangen, oder? Ich möchte mich gerne mit den auf mich zukommenden
Problemen beschäftigen und Zeit habe ich auch jede Menge...

Gruß
Mart

von Harald Wilhelms (Gast)


Lesenswert?

Blutiger Anfänger schrieb:
> Hallo,
>
> ich möchte die Motordrehzahl an einem Motorrad feststellen.
> Ich möchte am Kabelbaum einen Takt abgreifen. Mir ist bekannt, daß
> dieser
> Takt genau 3x pro Umdrehung des Motors ausgegeben wird.
>
> Der interessante Messbereich für mich ist 800 - 12000 U/min.
> Das bedeutet also, daß ich mindestens 800/60*3=40Hz und höchstens
> 12000/60*3=600Hz pro Sekunde messen muss.
>
> Mit einem AVR und dem ICP + Timer kann ich mir das recht gut vorstellen.
> Da ich hier schon viele Varianten des Frequenzzählers gesehen habe, die
> auch teilweise viele MHz messen können, nehme ich an, daß ein AVR das
> recht locker messen kann. Allerdings habe ich auch immer wieder gelesen,
> daß es oft in kleineren Frequenzen oder in höheren Frequenzen dabei zu
> starken Abweichungen kommen kann.

Solch kleine Frequenzen misst man am besten durch Messung der
Periodendauer. Der AVR ist schlau genug, diese in eine Frequenz
umzurechnen.

> Meine Vorstellung dabei ist: 2 Motorumdrehungen zu messen und dann die
> gemessenen Werte zu mitteln.

Mehrere Messungen zu mitteln ist sicher sinnvoll, um eine einiger-
maßen stehende Anzeige zu bekommen. Du solltest auch nicht zu viele
Stellen anzeigen, da Du dann die Anzeige nicht mehr interpretieren
knnst. Am besten wäre die Ansteuerung eines Leuchtbandes durch den AVR.
Gruss
Harald

von Klaus D. (kolisson)


Lesenswert?

Genau,
da hat der Autor: Harald Wilhelms (Gast) ganz recht.
Wenn du noch sagst in welcher Sprache du das machen willst,
gibt es bestimmt irgendwo hier ein passendes Programmgerüst.

Klaus

Für Bascom inclusive Inline assembler hätte ich, glaube ich, etwas 
parat.
Müsste halt raussuchen und wieder selbst verstehen.

von Olaf (Gast)


Lesenswert?

Wie du schon richtig vermutest stellt die Sache fuer einen beliebigen 
Controller kein Problem dar. Die Genauigkeit haengt in der Hauptsache 
vom Quarz ab und ist sicher genauer als dein Motor laeuft. :-)
Im uebrigen kannst du auch die Periodendauer messen. Also wieviel Zeit 
zwischen zwei Impulsen vergeht.

Du wirst aber unerwartete Probleme von anderer Seite bekommen. Und zwar 
den schwierigen Umweltbedinungen am Motorrad. Also Vibrationen, 
Stoerungen auf dem Bordnetz, Temperaturschwankungen, Feuchtigkeit.


Olaf

von Harald Wilhelms (Gast)


Lesenswert?

Olaf schrieb:

> Du wirst aber unerwartete Probleme von anderer Seite bekommen. Und zwar
> den schwierigen Umweltbedinungen am Motorrad. Also Vibrationen,
> Stoerungen auf dem Bordnetz, Temperaturschwankungen, Feuchtigkeit.

Unerwartet?
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.23
Gruss
Harald

von Blutiger Anfänger (Gast)


Lesenswert?

Hallo Harald,

vielen Dank für deine Antwort.

Um das Ergebnis zu prüfen ist der LED-Balken eine tolle Idee.
Bin ich gar nicht drauf gekommen, werde ich aber genau so machen!

Unter Periodenmessung verstehe ich eine definierte Zeit zur Messung, um
anschließend daraus die Frequenz, bzw. die Drehzahl anhand der 
aufgetretenen Impulse zu errechnen, richtig?

Wie lang wäre eine geeignete Periodendauer dann?
Bei einer Länge von 1 Sekunde könnten also zwischen 40 und 600 Impulse
auftreten. Das Ergebnis wäre somit +/- 20 Umdrehungen abweichend und
für mich ok, aber die Dauer ist zu lang.
Eine Periodendauer von 10-100ms wäre für mich ok.

Wie wird das denn in der Praxis an einem Tachometer umgesetzt?
Ist mir echt ein Rätsel...

--Mart

von Blutiger Anfänger (Gast)


Lesenswert?

Hallo,

das Signal dürfte einen CMOS-Pegel haben und wird unmittelbar am
Steuergerät abgegriffen und daher hoffe ich auch, daß es deutlich
besser zu gebrauchen ist als von einer Zündspule oder Einspritzdüse.

Gruß,

Mart

von Blutiger Anfänger (Gast)


Lesenswert?

Sorry, kann den Text nicht editieren, daher jetzt so...

Das Programm schreibe ich in Assembler.

Gruß,

Mart

von Klaus D. (kolisson)


Lesenswert?

Irgenwie verstehe ich deine mangelde Wertschätzung
meines Beitrages nicht...  aber:

In Assembler geht das so(und ohne ICP) :

config INT0 auf z.B. Rising
beim ersten Entry in Int0 wird Timer gestartet
der läuft dann da so herum .....
ein auch konfigurierter Timer-Overflow-händler (<-- hihi)
verwaltet die overflows.
Die gesammelten Timerwerte und Overflows kommen in eine LONG Variable.
Int0 enthält eine Zählvariable (z.B. 10) die nach 10
Durchläufen des Int0 den Timer stoppt.

Dann hast du in der Long-Variable die Anzahl Systemclocks , die 
innerhalb
von 10 Low-to-high Trasitistions stattfanden.

haste also gleich ne Messung über 10 Perioden.


Gruss K.

von Blutiger Anfänger (Gast)


Lesenswert?

Hallo Klaus,

ich schätze jeden Beitrag und nehme gerne Ratschläge entgegen.

Die Grundidee -wie in meinem ersten Beitrag geschrieben- erkenne ich
hier wieder und werde mich nochmal hinsetzen und die theoretische
Genauigkeit dabei ausrechnen und schauen, ob ich das so umsetzen kann.

Die Richtung habe ich jetzt erst mal.

Herzlichen Dank!

Mart

von Klaus D. (kolisson)


Lesenswert?

viel erfolg wird gewünscht.....

..   Das update des Display benötigst du schlimmstenfalls 1 mal per 
Sekunde,
da du nicht schneller schauen kannst.
Wenn du also 1 Sekunde zugrundelegst und dieses paarst mit deiner 
maximalen
Drehzahl.. Pulsfrequenz ... dann kommst du auf die Anzahl Perioden ,
die für dich interessant sind.

Ich hoffe, du bist keine Frau, da ich sonst mit dem Periodenreden
schon verschissen hätte.

Klaus

von Ralph B. (rberres)


Lesenswert?

Wäre das nicht einfacher und wesentlich betriebssicherer, das ganze rein 
analog mit einen Integrierer zu machen? So wie man früher (und 
vermutlich heute auch noch ) Drehzahlmesser fürs Auto aufbaut? Analoge 
Ansteuerschaltungen für Leuchtbänder gibt es auch fertig als IC.

Warum muss man immer für jede kleinste ( banale )Anwendung immer einen 
Mikroprozessor bemühen? Nur weil das In ist?

Also Das Signal auf einen Komperator ( damit ein Rechteck raus kommt. 
Das ganze Integrieren ( also zweiter OP ) und damit auf das 
Leuchtbandmodul-

Ralph Berres

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.