Hallo, ich erhalte bei meiner Drehzahlmessung Störsignale. Diese Störsignale verursachen Fehlmessungen. Als Drehzahlsensor dient ein LJ18A3-8-Z/BX. Die "Schaltnocken" an der Welle sind ausreichend hoch, eine Metallerkennung zwischen den Nocken möchte ich ausschließen. Der Drehzahlsensor hat eine eigene (exklusive) Spannungsversorgung und ist per Optokoppler (PC817) an die Steuerung (ESP Devkit V4) angebunden. Siehe beiliegendes Bild. Ebenso habe ich ein Foto von meiner Oszi Messung angehängt. Diese Peaks sehe ich sowohl vor dem Optokoppler als auch danach. Ein Tausch des Drehzahlsensors brachte keine Änderung. Das Kabel zum Sensor ist ca 1m lang und ungeschirmt. Des weiteren hängt noch eine Waage (HX711) an der Steuerung dran, die aber tadellos funktioniert. Wie kann ich diese Peaks verhindern oder ausfiltern?
:
Verschoben durch Moderator
Konrad B. schrieb: > Wie kann ich diese Peaks verhindern oder ausfiltern? An der Quelle. Dem Sensor. Die Störsignale erfolgen dermassen regelmässig, dass es kein elektrisches sondern ein mechanisches Problem sein wird. Der Sensor wird getriggert.
Was hängt denn da noch an der 12V-Stromversorgung von diesem Sensor mit dran? Ist da vielleicht ein Motor mit dran oder etwas anderes was solche Störungen erzeugen könnte?
Michael B. schrieb: > Die Störsignale erfolgen dermassen regelmässig, dass es kein > elektrisches sondern ein mechanisches Problem sein wird. Der Sensor wird > getriggert. Nein die Störsignale sind nicht regelmäßig. Ich habe wohl nicht das optimale Bild ausgewählt. Hier ein anderes. Ich habe den Sensorabstand variiert, die Breite der High und der Low Pegel veränderte sich, aber die Peaks blieben.
Kannste auch im Programm filtern, indem du prüfst, ob die Länge des pos. Pulses eine Mindestlänge hat. Kürzer wird verworfen.
Konrad B. schrieb: > Wie kann ich diese Peaks verhindern oder ausfiltern? "Verhindern" läßt sich nicht beurteilen, da mußt Du selber suchen. Aber ein passender Kondensator am Eingang des Controllers beseitigt den kurzen Impuls hinreichend.
12V Drehzahlmeldung lässt mich vermuten das ist im Auto. Ist dem so? Sag mal mehr zu der Applikation.
Matthias S. schrieb: > Kannste auch im Programm filtern, indem du prüfst, ob die Länge des pos. > Pulses eine Mindestlänge hat. Kürzer wird verworfen. Habe ich versucht:
1 | durationHigh = pulseIn(DrehzahlsensorPin, HIGH, 40000); |
2 | mb.task(); |
3 | |
4 | durationLow = pulseIn(DrehzahlsensorPin, LOW, 50000); |
5 | mb.task(); |
6 | |
7 | if (durationHigh > 10){ |
8 | samples.add(durationHigh + durationLow); // nur gute Werte werden hinzugefügt |
9 | }
|
Es filtert zwar die kurzen Peaks aus, da aber durch den Highpeak das Lowsignal geteilt wird (es werden die Flanken ausgewertet) sind die Lowsignale zu kurz.
Mi N. schrieb: > ein passender Kondensator am Eingang des Controllers beseitigt den > kurzen Impuls hinreichend. Werde ich versuchen. Ich vermute der Kerko soll zwischen Eingang und Masse. Siehe beiliegender Schaltplan. Welche Größe könnte euren Erfahrungen nach passen?
Gerd E. schrieb: > Was hängt denn da noch an der 12V-Stromversorgung von diesem Sensor mit > dran? Ist da vielleicht ein Motor mit dran oder etwas anderes was solche > Störungen erzeugen könnte? Nein das ist nichts mit dran, der Sensor wird exklusiv von einem Netzteil versorgt.
Konrad B. schrieb: > Ich habe den Sensorabstand variiert, die Breite der High und der Low > Pegel veränderte sich, aber die Peaks blieben. In welchem Bereich bewegt sich die Breite der Störpeaks? Konrad B. schrieb: > Als Drehzahlsensor dient ein LJ18A3-8-Z/BX. Die "Schaltnocken" an der > Welle sind ausreichend hoch, eine Metallerkennung zwischen den Nocken > möchte ich ausschließen. Warum verwendest du einen kapazitiven Sensor für Schaltnocken einer Welle und nicht einen Hall-Sensor? Aus welchem Material ist die Welle? Wie ist die Versorgungsspannung vom Sensor abgeblockt? Sind die Störungen auch auf der Versorgung zu sehen?
Konrad B. schrieb: > Welche Größe könnte euren Erfahrungen nach passen? Auf Deinem Foto kann ich keine Informationen über Zeitbasis und Amplitude erkennen. 100 nF ist immer ein guter Wert ;-) Alternativ kann man auch immer den längeren '1' Pegel durch mehrfache Abtastung auswerten. Aber bei der mickymouse-Programmiersprache kann man wohl keine Aussage zum realen Timing treffen. Rainer W. schrieb: > Warum verwendest du einen kapazitiven Sensor für Schaltnocken einer > Welle und nicht einen Hall-Sensor? Das ist doch wurscht!
Mi N. schrieb: > Auf Deinem Foto kann ich keine Informationen über Zeitbasis und > Amplitude erkennen. Die Amplitude ist ca 3 V. Ich vermute "M: 10ms" ist die Zeitbasis. Das Ergäbe eine Periodendauer von ca 30 ms. Es sind zwei Schaltnocken auf der Welle (wegen Vermeidung von Unwucht) das ergäbe eine Drehzahl von 1000 rpm. Dies ist die Höchstdrehzahl der Maschine > 100 nF ist immer ein guter Wert ;-) Danke
N. M. schrieb: > 12V Drehzahlmeldung lässt mich vermuten das ist im Auto. > > Ist dem so? > Sag mal mehr zu der Applikation. Es handelt sich um eine fette Wirbelstrombremse deren Spulen mit einem 150A IGBT angesteuert werden. Die Bremse kann einen Traktor mit 250 PS mühelos abwürgen. Die Spulen der Bremse wurden zum Zeitpunkt der Drehzahlmessung jedoch nicht angesteuert.
Konrad B. schrieb: > Habe ich versucht: durationHigh = pulseIn(DrehzahlsensorPin, HIGH, > 40000); > mb.task(); > durationLow = pulseIn(DrehzahlsensorPin, LOW, 50000); > mb.task(); > if (durationHigh > 10){ > samples.add(durationHigh + durationLow); // nur gute Werte > werden hinzugefügt > } Was ist das für eine Sprache? Ich würde da einen Timer benutzen, wie bei der Abfrage eines Buttons. https://www.mikrocontroller.net/articles/Entprellung
> Was ist das für eine Sprache? Ich habs mit der Arduino IDE 2.x geschrieben. Die Funktion "pulseIn()" habe ich bei einem früheren Projekt schon benutzt und brachte die besten Ergebnisse. Dort hatte ich allerdings nicht mit diesen Peaks zu kämpfen > Ich würde da einen Timer benutzen, wie bei der Abfrage eines Buttons. > https://www.mikrocontroller.net/articles/Entprellung Das habe ich soeben durchgelesen. Für einen RC Entpreller bräuchte ich (wenn ich den Text richtig verstanden habe) noch einen zusätzlichen Widerstand. Die Werte müsste ich noch berechnen. Zur Abfrage mit einem Timer habe ich folgendes gefunden: https://github.com/khoih-prog/ESP32_New_TimerInterrupt/blob/main/examples/RPM_Measure/RPM_Measure.ino Dort kann man einen DEBOUNCING_INTERVAL_MS einstellen. Auch dass muss ich mir noch genauer anschauen
Konrad B. schrieb: > Habe ich versucht: >
1 | durationHigh = pulseIn(DrehzahlsensorPin, HIGH, 40000); |
2 | > mb.task(); |
3 | >
|
4 | > durationLow = pulseIn(DrehzahlsensorPin, LOW, 50000); |
5 | > mb.task(); |
6 | >
|
7 | > if (durationHigh > 10){ |
8 | > samples.add(durationHigh + durationLow); // nur gute Werte |
9 | > werden hinzugefügt |
10 | > } |
11 | >
|
> Es filtert zwar die kurzen Peaks aus, da aber durch den Highpeak das > Lowsignal geteilt wird (es werden die Flanken ausgewertet) sind die > Lowsignale zu kurz. Du filterst doch falsche Werte raus. Wie können diese in die Auswertung gelangen?
Mi N. schrieb: > Das ist doch wurscht! Offensichtlich nicht - sonst würde es im Automobilbereich Hersteller geben, die kapazitive Sensoren für die Erfassung der Nockenwellendrehung einsetzen.
Rainer W. schrieb: > Mi N. schrieb: >> Das ist doch wurscht! > > Offensichtlich nicht - sonst würde es im Automobilbereich Hersteller > geben, die kapazitive Sensoren für die Erfassung der Nockenwellendrehung > einsetzen. Lenk doch nicht vom Thema ab. Der TO hat diese Sensoren und sie liefern u.a. die benötigten Impulse. Konrad B. schrieb: > Für einen RC Entpreller bräuchte ich (wenn ich den Text richtig > verstanden habe) noch einen zusätzlichen Widerstand. Die Werte müsste > ich noch berechnen. Du hast schon zwei Widerstände in der Schaltung; die sollten reichen. Probieren reicht hier völlig aus und sollte längst passiert sein.
Veit D. schrieb: >> [/c] >> Es filtert zwar die kurzen Peaks aus, da aber durch den Highpeak das >> Lowsignal geteilt wird (es werden die Flanken ausgewertet) sind die >> Lowsignale zu kurz. > > Du filterst doch falsche Werte raus. Wie können diese in die Auswertung > gelangen? Ich filtere nur die HighPeaks aus. Ich müsste aber den ganzen Zyklus (Bestehend aus Highsinal, dem Lowsignal bis zum Peak, den Highpeak selbst und den Rest des Lowsignals) verwerfen. Habe aber keine Idee, wie ich das Bewerkstelligen sollte. Am Sinnvollsten wäre die Ursache zu beseitigen, da mir das aber nicht gelingt, werde ich versuchen die Peaks herauszufiltern.
Konrad B. schrieb: > selbst und den Rest des Lowsignals) verwerfen. Habe aber keine Idee, wie > ich das Bewerkstelligen sollte. > Am Sinnvollsten wäre die Ursache zu beseitigen, da mir das aber nicht > gelingt, werde ich versuchen die Peaks herauszufiltern. Dann nimm einen anderen Sensor, anstatt an den Symptomen herum zu doktor'n. Das wird doch hinten und vorne sonst nichts Gescheites.
Mi N. schrieb: > Du hast schon zwei Widerstände in der Schaltung; die sollten reichen. > Probieren reicht hier völlig aus und sollte längst passiert sein. Werde ich bald möglichst probieren. Das ist aber leider nicht so einfach: 1. Muß die Bremse aufgebaut und ein Traktor angeschlossen werden 2. Liege ich gerade im Krankenhaus, bekomme jetzt dann Abführmittel und habe morgen eine Magen und Darmspiegelung
Nun ich hätte die Last eher in den Kollektorkreis gelegt. Hintergrund befindet sich die LAst im Emitterkreis muss die Basis auch deutlich höher mit Spannung angesteuert werden. Da das aber nur ein einfacher Optokoppler ist wird das hier schwierig. Befindet sich die Last hingegen im Kollektorkreis kann man interne Pullups nutzen und das Steuersignal an der Basis bleibt recht identisch mit 0,6-0,7V
:
Bearbeitet durch User
Jens G. schrieb: > Dann nimm einen anderen Sensor, anstatt an den Symptomen herum zu > doktor'n. Das wird doch hinten und vorne sonst nichts Gescheites. Welcher Sensor ist was Gescheites?
Chris S. schrieb: > Nun ich hätte die Last eher in den Kollektorkreis gelegt. > > Hintergrund befindet sich die LAst im Emitterkreis muss die Basis auch > deutlich höher mit Spannung angesteuert werden. Einem Fototransistor ist das vollkommen wurscht, ob die Last in der C- oder E-Leitung liegt. Und für die nötige Basisspannung sorgt der Fotostrom ...
Konrad B. schrieb: > Welcher Sensor ist was Gescheites? Weiß ich nicht. Aber offensichtlich ist Dein Fabrikat wohl nichts wert. Die Dinger soll es ja auch von unterschiedlichen Herstellern geben (bei gleicher Bezeichnung). Da wäre es halt eine Idee, mal nach anderen Herstellern/Fabrikaten zu schauen. Oder die mechanische/geometrische Anordnung der beteiligten Teile ist bei Dir möglicherweise arg ungünstig.
Konrad B. schrieb: > 2. Liege ich gerade im Krankenhaus, bekomme jetzt dann Abführmittel und > habe morgen eine Magen und Darmspiegelung Es reicht, wenn Du das am Abend zuvor nimmst!
pulseIn() ist nicht für Drehzahlmessung geeignet und entprellt auch nicht. Wie der Name schon sagt, mißt sie die Pulsdauer, Du aber willst die Periodendauer. Sie ist außerdem blockierend programmiert, d.h. die Ausführung bleibt für die Messung stehen oder rennt ins Timeout. Du solltest erstmal anzeigen, wie lang die Störnadeln typisch sind, bei der gewählten Auflösung ist das nicht zu erkennen. Und dann sagen oder anzeigen, in welchem Bereich (min/max) Du die Drehzahl messen willst. Dann kann man sinnvolle Filterregeln aufstellen. Der 100nF kann richtig oder falsch sein, das kann man nicht erkennen. Eine Filterung in Software ist in jedem Fall besser, er ist also überflüssig.
Peter D. schrieb: > Eine Filterung in Software ist in jedem Fall besser, Banales Filtern? Autokorrelation ist angesagt! Auf keinen Fall die Ursache mit 100 nF 'bekämpfen'. Das wäre viel zu einfach und würde göttliche Entprellroutinen deklassieren.
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.