Forum: Mikrocontroller und Digitale Elektronik Drehzahl messen


von Marsi (Gast)


Lesenswert?

Hallo

Ich hab ein Problem und zwar, möchte ich mit einem Näherungsschalter die 
U/min
von einer Messerscheibe von einem Häcksler messen. Im unteren 
Drehzahlbereich passt alles, aber im höheren Drehzahlbereich wir die 
Messung ungenau, und ich weiß nicht wie ich die Genauigkeit erhöhen 
kann.

Mfg

Marsi

von Ingo (Gast)


Lesenswert?

Wie misst du denn? Vermutlich misst du die Periodendauer?

Ansonsten, wieviel Impulse/Undrehung?

Welche Drehzahlen?

von Gerd (Gast)


Lesenswert?

Inwiefern wird die Messung ungenau?
Welche Drehzahl misst du an welchen Messpunkten? welchen 
Näherungsschalter
verwendest du? wie wertest du das Signal aus?

Ohne das zu wissen ist alles nur raterei.
Ich vermute(rate) mal, dass die Drehzahl (Frequenz) zu hoch, bzw. der
Näherungsschalter (Auswertung) zu langsam ist.

In dem Fall anderen Messpunkt (zB. Getriebeeinganswelle),
oder nen schnelleren Näherungsschalter suchen.

von Marsi (Gast)


Lesenswert?

Hallo

Ich messe die Zeit pro Umdrehung. Also bis 1000 U/min hab ich eine 
Abweichung von 2 bis 3 Umdrehungen. Alles was größer wird desto größer 
wird die Abweichung. Ich messe mit einem Timer der jede ms in den 
Interrupt spring und eine Variable setzt, und am externen Interrupt habe 
ich den Näherungsschalter angeschlossen der dann eine andere Variable 
hochzält.

Mfg

Marsi

von Karl H. (kbuchegg)


Lesenswert?

Marsi schrieb:
> Hallo
>
> Ich messe die Zeit pro Umdrehung. Also bis 1000 U/min hab ich eine
> Abweichung von 2 bis 3 Umdrehungen. Alles was größer wird desto größer
> wird die Abweichung.

mit anderen Worten: je kürzer die zu messende Zeit wird, desto ungenauer 
wird die Messung.

> Ich messe mit einem Timer der jede ms in den
> Interrupt spring

klingt für mich danach, als ob
a) deine ms keine exakten ms sind

> und eine Variable setzt, und am externen Interrupt habe
> ich den Näherungsschalter angeschlossen der dann eine andere Variable
> hochzält.

dir ist auch klar, dass du schon alleine durch die Unsynchronisierung 
einen Fehler zu Stande bringst. Denn niemand sagt, dass der erste Puls 
in deinem Messintervall mit dem Start des Messintervalls zusammenfällt.

Steigere die Auflösung, indem du die Millisekunden nach unten treibst. 
Im Idealfall benutzt du auch den Capture Interrupt um die Zeit zwischen 
2 Pulsen zu messen. AVR Prozessoren haben sowas eingebaut. Ob dein 
unbekannter Prozessor das auch kann, weiß ich allerdings nicht.

von Marsi (Gast)


Lesenswert?

Hallo

Ich benutze einen Atmega8 mit 8 MHz. Das Problem ist das ich den Capture 
Interrupt nicht ganz Verstanden hab wie er funktioniert.

Mfg

Marsi

von Karl H. (kbuchegg)


Lesenswert?

Marsi schrieb:
> Hallo
>
> Ich benutze einen Atmega8 mit 8 MHz. Das Problem ist das ich den Capture
> Interrupt nicht ganz Verstanden hab wie er funktioniert.

Das ist ein ganz einfaches Ding.

Der Timer zählt vor sich hin. So wie er das immer macht.

Wenn am Capture Eingang eine entsprechende Flanke auftritt (du kannst 
programmieren ob du eine steigende Flanke oder eine fallende Flanke oder 
beides haben willst), geschehen 2 Dinge
a) der aktuelle Zählerstand des Timers wird in einem speziellen Register 
gesichert. Das macht die Hardware
b) ein Interrupt wird ausgelöst

In der zugehörigen ISR kannst du dann in aller Ruhe das Register 
auslesen, in dem der Timer den Zählerstand gesichert hat. Und da die 
Hardware diesen Zählerstand gesichert hat, ist es das genaueste, was du 
auf einem AVR kriegen kannst, wie du Flanken in einem Signal mit dem 
Zählerstand eines Timers korrelieren kannst. Noch genauer geht nicht.
Der Rest ist dann einfach. Einfach die Zählerstände 2-er 
aufeinanderfolgender Pulse voneinander abziehen und du kriegst die 
Anzahl der Timerticks, die der Timer zwischen diesen beiden Ereignissen 
gemacht hat. Da du weisst, wie schnell der Timer tickt, hast du damit 
auch die Zeit zwischen den Ereignissen.

: Bearbeitet durch User
von Marsi (Gast)


Lesenswert?

Muss ich den Timer aber ganz normal konfigurieren.

von Schlumpf (Gast)


Lesenswert?

Die Methode von Karl Heiz ist korrekt. Allerdings muss man sich auch bei 
der im klaren sein, dass bei sehr großen Frequenzen der Fehler größer 
wird.
Dazu müsste man wissen, wie genau deine Messung sein soll und welches 
die maximal zu erwartende Frequenz am Eingang ist.
Danach kann man entscheiden, mit welchem Takt man den Timer idealerweise 
laufen lässt. Und ob es sich bei hohen Frequenzen ggf anbietet, nicht 
mehr die Peridendauer des Signals zu messen, sondern in einem fixen 
Zeitfenster die Impulse zu zählen.

Bei niedrigen Frequenzen hast du bei der Methode unter Umständen das 
Problem, dass dir dein Timer überläuft, was du dann per Software 
abfangen musst.

Also interessant wäre folgendes:
Maximale Frequenz
Minimale Frequenz
geforderte Genauigkeit

von Karl H. (kbuchegg)


Lesenswert?

Marsi schrieb:
> Muss ich den Timer aber ganz normal konfigurieren.

Ja, natürlich. Sagte doch schon: der Timer zählt ganz normal vor sich 
hin.

Der Rest steht im Datenblatt: wie aktiviert man den Capture Input Pin. 
Wie stellt man ein, auf welche Flanke er reagieren soll. Wie heisst der 
Interrupt und wie wird er frei gegeben.
Das ist nicht anders als bei anderen Dingen. Auch bei einer PWM musst du 
ja im Datenblatt nachsehen, welches Bit in welchem Register wie zu 
setzen ist, damit der Timer den Pin ansteuert.

von holger (Gast)


Lesenswert?

Viel heisse Luft ohne auch nur ein Stück Sourcecode zu sehen.
Vermutlich wird da wieder mal irgendeine Displayausgabe
im Interrupt gemacht. Oder auch nicht. Woher soll man
das wissen? Glaskugelraten.

Gute Ratschläge bekommt man so jedenfalls nicht.

von Schlumpf (Gast)


Lesenswert?

holger schrieb:
> Gute Ratschläge bekommt man so jedenfalls nicht.

Wieso nicht?
Der TO hat was zusammengebastelt und dann bemerkt, dass es 
offensichtlich doch nicht so einfach ist. Jetzt wendet er sich an das 
Forum.
Und er hat den GUTEN Ratschlag bekommen, die Capture Unit zu benutzen 
und er hat den GUTEN Ratschlag bekommen, sich Gedanken darüber zu 
machen, in welchen Grenzen seine Schaltung mit welcher Genauigkeit 
funktionieren soll und dann die geeignete Methode für das Messverfahren 
auszuwählen.

Ich sehe hier wirklich nichts Schlechtes.

Es gibt grundsätzlich zwei Methoden, an ein Problem ranzugehen.
1.) Man arbeitet mal drauf los, stolpert dann über die Fallen und 
fummelt dann so lange an der "Lösung" rum, bis es irgendwie 
funktioniert.
2.) Man überlegt vorher, WAS man will, dann legt man fest, WIE man es 
umsetzen will und dann baut man es.

Ich bevorzuge Methode 2) :-)

Karl Heinz hat ihm eine Möglichkeit für das WIE aufgezeigt, die mit 
Sicherheit in einer guten Lösung zu tragen kommt und ich habe ihn dazu 
angeregt, über das WAS nachzudenken.

von Mike (Gast)


Lesenswert?

Und er hat den GUTEN Ratschlag bekommen, seine Maximalfrequenz zu 
verraten
Und er hat den GUTEN Ratschlag bekommen, seinen Sourcode mal zu zeigen, 
um mögliche Prozessorblockaden in der ISR zu checken oder zumindest 
dadurch auftretende Fehlmessungen herauszufiltern.

von Rolf M. (rmagnus)


Lesenswert?

Marsi schrieb:
> Ich messe die Zeit pro Umdrehung. Also bis 1000 U/min hab ich eine
> Abweichung von 2 bis 3 Umdrehungen.

Woher weißt du denn die Abweichung?

Karl Heinz schrieb:
> Marsi schrieb:
>> Hallo
>>
>> Ich messe die Zeit pro Umdrehung. Also bis 1000 U/min hab ich eine
>> Abweichung von 2 bis 3 Umdrehungen. Alles was größer wird desto größer
>> wird die Abweichung.
>
> mit anderen Worten: je kürzer die zu messende Zeit wird, desto ungenauer
> wird die Messung.

Ist bei dieser Messmethode ja nicht ungewöhnlich. 1000/min heißt, daß 
eine Umdrehung 60 ms braucht. Wenn der Interrupt nur alle Millisekunde 
kommt, heißt das also, daß nur mit einer Granularität von 1/60 gemessen 
wird. Da wundert mich die oben genannte viel geringere Abweichung von 
nur 1/333.

von Marsi (Gast)


Lesenswert?

Hallo

Danke für eure hilfe. Ich hab es jetzt mit dem Capture Interrupt 
realisiert. Jetzt Funtionierts einwandfrei. Ich Prüf die Drehzahl mit 
einem Hand-Umdrehungsmesser.

von Bastler (Gast)


Lesenswert?

>Ich Prüf die Drehzahl mit einem Hand-Umdrehungsmesser.

Auch dieser hat eine Abweichung.

von MaWin (Gast)


Lesenswert?

Marsi schrieb:
> aber im höheren Drehzahlbereich wir die Messung ungenau,
> und ich weiß nicht wie ich die Genauigkeit erhöhen kann.

Vielleicht ist der Näherungssensor nicht schnell genug.

Marsi schrieb:
> Ich hab es jetzt mit dem Capture Interrupt
> realisiert. Jetzt Funtionierts einwandfrei.

Hmm, war wohl doch bloss ein Programmierfehler in einem nie gezeigten 
Programm.

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.