Forum: Fahrzeugelektronik Störsignale Drehzahlmessung filtern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Konrad B. (kobrasoft)


Angehängte Dateien:

Lesenswert?

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
von Michael B. (laberkopp)


Lesenswert?

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.

von Gerd E. (robberknight)


Lesenswert?

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?

von Konrad B. (kobrasoft)


Angehängte Dateien:

Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Kannste auch im Programm filtern, indem du prüfst, ob die Länge des pos. 
Pulses eine Mindestlänge hat. Kürzer wird verworfen.

von Mi N. (msx)


Lesenswert?

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.

von N. M. (mani)


Lesenswert?

12V Drehzahlmeldung lässt mich vermuten das ist im Auto.

Ist dem so?
Sag mal mehr zu der Applikation.

von Konrad B. (kobrasoft)


Lesenswert?

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.

von Konrad B. (kobrasoft)


Angehängte Dateien:

Lesenswert?

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?

von Konrad B. (kobrasoft)


Lesenswert?

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.

von Rainer W. (rawi)


Lesenswert?

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?

von Mi N. (msx)


Lesenswert?

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!

von Konrad B. (kobrasoft)


Lesenswert?

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

von Konrad B. (kobrasoft)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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

von Konrad B. (kobrasoft)


Lesenswert?

> 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

von Veit D. (devil-elec)


Lesenswert?

Hallo,

die Sprache nennt sich in Fachkreisen C++.

von Veit D. (devil-elec)


Lesenswert?

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?

von Rainer W. (rawi)


Lesenswert?

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.

von Mi N. (msx)


Lesenswert?

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.

von Konrad B. (kobrasoft)


Lesenswert?

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.

von Jens G. (jensig)


Lesenswert?

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.

von Konrad B. (kobrasoft)


Lesenswert?

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

von Chris S. (Firma: hier&da) (keiningenieur)


Lesenswert?

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
von Konrad B. (kobrasoft)


Lesenswert?

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?

von Jens G. (jensig)


Lesenswert?

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

von Jens G. (jensig)


Lesenswert?

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.

von Mi N. (msx)


Lesenswert?

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!

von Peter D. (peda)


Lesenswert?

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.

von Mi N. (msx)


Lesenswert?

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
Noch kein Account? Hier anmelden.