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
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.
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
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.
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.
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
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.
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.
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.
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.
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.
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.
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.