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
Wie misst du denn? Vermutlich misst du die Periodendauer? Ansonsten, wieviel Impulse/Undrehung? Welche Drehzahlen?
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.
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
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
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.
>Ich Prüf die Drehzahl mit einem Hand-Umdrehungsmesser.
Auch dieser hat eine Abweichung.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.