Nadelimpuls mit schwankendem Amplituden und Zeitverlauf erkennen

OP #7299053
Lesenswert?

Hallo Freundinnen und Freunde der Signalerkennung,

ich habe ein Problem, welches mich schon Tage beschäftigt und ich keine 
zufriedenstellende Lösung finde. Es geht um die optische Abtastung bzgl. 
einer relativ genauen Drehzahlermittlung einer Welle die sich recht 
langsam dreht (max. 1 U/sek oder sogar stehen bleibt). Die Welle hat 
eine optische Kennzeichnung und ist nur über eine Art Schaufenster zu 
erkennen. Leider ist die Oberfläche der Welle mit der Kennzeichnung 
nicht ideal sauber und somit entsteht kein "sauberer" Impuls.

Das größte Problem ist jedoch, dass die Amplitude mit zunehmender 
Drehzahl auch einbricht, der Funktionsverlauf jedoch bleibt. Siehe 
Bilder. Ein einfacher absoluter Trigger ist daher wohl eher nicht 
zielführend. Abgetastet wird das Signal alle 10ms. Das ist auch die 
einzig bekannte Konstante.

Gleitender Mittelwert, sammeln der letzten Höchstwerte, Varianz, etc. 
brachten keinen Erfolg, da ja die max. Periode theoretisch unendlich 
lang sein kann.

Bei plötzlicher Drehzahländerung nach oben werden keine Impulse mehr 
erkannt, bei Änderung der Drehzahl nach unten, doppelte durch die 
"Vorspitze".

Dachte nicht, dass es so kompliziert ist - oder ich sehe den Wald vor 
Bäumen nicht. Jemand eine Idee?
Angehängte Dateien:
OP #7299112
Lesenswert?

Christoph db1uq K. schrieb:
> Ich würde mal die Geschwindigkeits-Hallsensoren von Allegro anschauen,
> die haben in den neueren Typen eine ausgetüftelte Impulsformung:
> https://www.allegromicro.com/en/products/sense/magnetic-speed
> Bei manchen in der Tabelle steht "self-calibrating", das könnten sie
> sein.

Sicherlich interessant, aber leider muss bzw. kann es nur über das 
optische Prinzip gehen. :-(
Gast #7299633
Lesenswert?

Rainer P. schrieb:
> Das größte Problem ist jedoch, dass die Amplitude mit zunehmender
> Drehzahl auch einbricht, der Funktionsverlauf jedoch bleibt. Siehe
> Bilder. Ein einfacher absoluter Trigger ist daher wohl eher nicht
> zielführend.

den Triggerwert so setzen, dass die hohen Impulse erkannt werden. Nach 
einem Impuls den Triggerwert um 200mV absenken und innerhalb von 5s 
wieder linear auf den Ursprungswert ansteigen lassen.

kommt auch drauf an, wie schnell sich die Drehzahl ändern kann. Wenn die 
Welle aus dem Stand anläuft und beim ersten Impuls schon die maximale 
Drehzahl erreicht ist, funktioniert es so nicht.
#7299830
Lesenswert?

Haste mal die Daten? Dann kann man etwas ausprobieren...

Aus der DSP Ecke fallen mir Sachen ein wie
- Savitzky Golay Filter, ggf. als Ableitungsfilter
- Hochpass/Bandpass
- Hilbert Filter um die Einhüllende zu berechnen
- Pattern matching?
- Wie sieht der Frequenzbereich aus?

Das sollte alles irgendwie gehen, besonders weil deine Abtastrate fix 
ist.

Wie schnell muss die Info der Drehzahl denn vorliegen? Worauf wird 
gerechnet?
OP #7299833
Lesenswert?

Robert K. schrieb:
> den Triggerwert so setzen, dass die hohen Impulse erkannt werden. Nach
> einem Impuls den Triggerwert um 200mV absenken und innerhalb von 5s
> wieder linear auf den Ursprungswert ansteigen lassen.
>
> kommt auch drauf an, wie schnell sich die Drehzahl ändern kann. Wenn die
> Welle aus dem Stand anläuft und beim ersten Impuls schon die maximale
> Drehzahl erreicht ist, funktioniert es so nicht.

Es ist ja so, dass bei höheren Drehzahlen die Amplitude bzw. der gesamte 
Funtionsverlauf gestaucht wird. (Die Periode natürlich auch.) Die Welle 
kann recht schnell die Drehzahl ändern.

Das Markante an dem Funktionsverlauf ist ja die immense Rückflanke des 
Hauptimpulses. Ich habe dahingehend experimentiert, dass ein Wert 
mitläuft, der solange um den aktuellen Messwert inkrementiert wird, wenn 
dieser kleiner als der vorherige war. Steigt der Messwert, wird der 
"Mitläufer" auf null gesetzt. Damit "filtere" ich zwar die kleinen 
Schwankungen sehr gut raus, bin auch von der Periodendauer unabhängiger, 
aber irgendwie müsste der Triggerwert für den "Mitläufer" sich auch 
ändern - aber wie?
OP #7299923
Lesenswert?

Jan K. schrieb:
> Haste mal die Daten? Dann kann man etwas ausprobieren...

CSV wäre OK?

> Aus der DSP Ecke fallen mir Sachen ein wie
> - Savitzky Golay Filter, ggf. als Ableitungsfilter
> - Hochpass/Bandpass
> - Hilbert Filter um die Einhüllende zu berechnen
> - Pattern matching?

... genau auf sowas habe ich gewartet lieber Jan. Davon habe ich nämlich 
keine Ahnung. Bin kein Nachrichtentechniker.

> - Wie sieht der Frequenzbereich aus?
Das geht ja aus den beiden Bildern hervor. Wenn die Welle steht, ist die 
Periode quasie unendlich lang. 10 Sekunden wären aber realistisch. Mit 
mehr wie 2 Hertz (0,5 Sek.) ist nicht zu rechnen.

> Das sollte alles irgendwie gehen, besonders weil deine Abtastrate fix
> ist.

Ja, aber ich habe nur begrenzten Speicher um die Samples/Werte 
vorzuhalten. Derzeit sample ich mit 10ms.

> Wie schnell muss die Info der Drehzahl denn vorliegen? Worauf wird
> gerechnet?

Vollkommen unkritisch. Es soll nur möglichst zuverlässig gezählt werden.
OP #7299995
Lesenswert?

Jan K. schrieb:
> Rainer P. schrieb:
> Ich kann man mit Matlab reinschauen, erwarte keine Wunder. Ich denke,
> die Kunst ist, das hinterher auf Hardware laufen zu lassen - oder kann
> das auch ein PC berechnen?

Nö, sollte kein PC berechnen.

Anbei die Daten aus dem ADC und mit Excel mal ein Diagramm dazu, um es 
noch ein wenig visueller zu machen.

Momentan mache ich es rein statisch, ich warte bis der Wert über 155 
liegt, und wenn er dann unter 74 liegt, dann habe ich es als Impuls 
erkannt. Ist aber kritisch, weil bei den "großen Nadeln" das ggf. bei 
dem "Vorimpuls" auch schon eintreten könnte :-(
Angehängte Dateien:
(Firma: Privat) #7300049
Lesenswert?

von Rainer P. schrieb:
>Leider ist die Oberfläche der Welle mit der Kennzeichnung
>nicht ideal sauber und somit entsteht kein "sauberer" Impuls.

Dann schickt man eben die Impulse durch ein Tiefpass und der
Impuls ist schon sauberer. Dann folgt ein Schmitt-Trigger
mit gleitenden Mittelwert, und du hast saubere Rechteckimpulse.
#7300474
Lesenswert?

Gast #7300500
Lesenswert?

ich habe hier eingezeichnet, wie der Verlauf des Triggerwertes nach 
meinem Vorschlag oben aussieht. Es werden alle Impulse korrekt erkannt.

Rainer P. schrieb:
> Die Welle
> kann recht schnell die Drehzahl ändern.

wenn du hier eine konkrete Angabe machen könntest, so mit Zahlen und so, 
könnte man sagen, ob es so geht.
Also welche Drehzahl kann die Welle aus dem Stillstand innerhalb 1 
Umdrehung erreichen? Ist das in deinem Beispiel die maximale 
Beschleunigung?
Angehängte Dateien:
OP #7300532
Lesenswert?

Günter L. schrieb:
> Dann schickt man eben die Impulse durch ein Tiefpass und der
> Impuls ist schon sauberer. Dann folgt ein Schmitt-Trigger
> mit gleitenden Mittelwert, und du hast saubere Rechteckimpulse.

Tatsächlich geht der Impuls schon durch einen Tiefpass, aber ich werde 
die Kapazität nochmals erhöhen, evt. bekomme ich dann den Vorimpuls weg.

Den Trigger mach ich ja jetzt schon softwaremäßig, das mit dem 
gleitenden Mittelwert ist aber so eine Sache, weil der ja immer 
hinterherläuft und dann bei einer plötzlichen Änderung mglw. nicht mehr 
im aktuellen Amplitudenbereich  oder zu tief liegt.

Werde das aber nochmal ausprobieren.
OP #7300540
Lesenswert?

Robert K. schrieb:
> ich habe hier eingezeichnet, wie der Verlauf des Triggerwertes nach
> meinem Vorschlag oben aussieht. Es werden alle Impulse korrekt erkannt.
>
> wenn du hier eine konkrete Angabe machen könntest, so mit Zahlen und so,
> könnte man sagen, ob es so geht.
> Also welche Drehzahl kann die Welle aus dem Stillstand innerhalb 1
> Umdrehung erreichen? Ist das in deinem Beispiel die maximale
> Beschleunigung?

In meinem Diagramm sind die Y-Werte links ganz klein zu sehen. In der 
Textdatei die Werte dazu.
Bei der kurzen Periode liegt der Minwert bei ca. 60 und der Maxwert bei 
ca. 175. Bei der Langen Periode 50 /350.

Die Welle kann aus dem Stillstand ganz langsam starten, max. aber mit 2 
U/sek.

Vielen Dank für deine Mühe mit der Zeichnung, aber es wird nicht 
funktionieren, wenn die Beschleunigung einmal ein wenig schneller ist, 
würde der Wert erst wieder bei langsamer Umdrehung greifen (siehe grün 
im Bild). Weiterhin, wenn der Vorimpuls noch höher wäre, könnte das 
doppelt gezählt werden (siehe rot im Bild).
Angehängte Dateien:
Gast #7300745
Lesenswert?

Rainer P. schrieb:
> Momentan mache ich es rein statisch, ich warte bis der Wert über 155
> liegt, und wenn er dann unter 74 liegt,

so wird das nichts.

Man muss mehrere Samples mit der Impulsform falten.
Nimm sowas wie eine x2 und ziehe den Gleichanteil ab, also

-10.5
-9.5
-7.5
-4.5
-0.5
4.5
10.5
17.5

Summe = 0

Das liefert dir ein Maximum an der Stelle, wo der Puls etwa sitzt. 
Sobald einer dieser Summenwerte zweimal kleiner ist, als einer davor, ->

Peak gefunden!
OP #7300842
Lesenswert?

Captain Zulu am Wochenende schrieb:
> Man muss mehrere Samples mit der Impulsform falten.
> Nimm sowas wie eine x2 und ziehe den Gleichanteil ab, also
>
> Das liefert dir ein Maximum an der Stelle, wo der Puls etwa sitzt.
> Sobald einer dieser Summenwerte zweimal kleiner ist, als einer davor, ->
....
> Peak gefunden!
SORRY, das verstehe ich nicht. Kannst Du mir das bitte mal genauer 
erklären oder hast du einen Link dazu? Wie gesagt, bin kein 
Nachrichtentechniker bzw. DSP-Spezi.

>".... mit der Impulsform falten ...." ?????
Gast #7300964
Lesenswert?

Du nimmst immer die letzten 8 samples und multiplizierst sie mit den 
Werten und addierst alles.

also Samples 0 ... 7,  1 ... 8, 2 ... 9

Der jeweilige Wert ist demnach:

-10.5 * x(t-7)
-9.5 * x(t-6)
-7.5 * x(t-5)
-4.5 * x(t-4)
-0.5 * x(t-3)
4.5 * x(t-2)
10.5 * x(t-1)
17.5 * x(t)

Das ergibt die Kurve
Gast #7300968
Lesenswert?

Was du brauchst, sind die gleitenden Mittelwerte des Signalminimums
und des Signalmaximums. Dann kannst du auf eine prozentuale Schwelle
in dieser Differenz zuverlaessig triggern.
Die Mittelwertbildung darf natuerlich nicht zu lang erfolgen.
Gegebenenfalls muss man auch eine Gewichtung in die Mittelwertbildung
einbeziehen.
Gast #7301374
Lesenswert?

Rainer P. schrieb:

Das größte Problem ist jedoch, dass die Amplitude mit zunehmender Drehzahl auch einbricht

Gibt es dafür einen Grund? Vielleicht wäre es möglich dieses Verhalten zu ändern -> Ursache abstellen. Einen Tiefpass gibt es ja schon, ggf. mit nicht ganz optimalen Parametern?

//hufnala

OP #7301551
Lesenswert?

Captain Zulu am Wochenende schrieb:

Du nimmst immer die letzten 8 samples und multiplizierst sie mit den Werten und addierst alles. Das ergibt die Kurve

Achso, die Werte -10,5 usw. sind also absolut ernst gemeint. Dachte es wären Beispielzahlen. Aber es handelt sich wohl um ein Polynom y=0,5x^2 - 0,5x -10,5

Warum auch immer ... :-)

Ich habe das mal mit den Werten gemacht und mit Excel geplottet (Bild T8). Blau der originale Wertbereich, Orange das Berechnete. Dann habe ich das nochmal mit 32 Werten gemacht ( y=0,5x^2 - 0,5x -170,5), in der Hoffnung das es irgendwie "glatter" wird, da ja mehr historische Messpunkte in die Berechnung einfließen, siehe Bild T32

Aber irgendwie eindeutig ist das auch nicht, bei x um die 5611 und 6711 sieht es aus wie bei 2600 bis 4500.

Sobald einer dieser Summenwerte zweimal kleiner ist, als einer davor, -> Peak gefunden!

Wird nicht funktionieren - oder ich habe es nicht verstanden.

Angehängte Dateien:
OP #7301556
Lesenswert?

hufnala schrieb:

Rainer P. schrieb:

Das größte Problem ist jedoch, dass die Amplitude mit zunehmender Drehzahl auch einbricht

Gibt es dafür einen Grund? Vielleicht wäre es möglich dieses Verhalten zu ändern -> Ursache abstellen. Einen Tiefpass gibt es ja schon, ggf. mit nicht ganz optimalen Parametern?

Das ist ein sehr guter Hinweis bzw. Anstoß. Ich werde mal den Wertverlauf aus dem ADC in Volt umrechnen und dann mit LT-Spice in den Tiefpass schicken und ein wenig experimentieren und vor allem die "Grenzfrequenz" deutlich erhöhen. Dann sollte die Amplitude auch nicht (merkenswert) einbrechen und ich kann sicher mit statischen Werten (80% vom Maxwert / 20% über den Minwert) einen Impuls triggern.

OP #7301558
Lesenswert?

... schrieb:

Was du brauchst, sind die gleitenden Mittelwerte des Signalminimums und des Signalmaximums. Dann kannst du auf eine prozentuale Schwelle in dieser Differenz zuverlaessig triggern. Die Mittelwertbildung darf natuerlich nicht zu lang erfolgen. Gegebenenfalls muss man auch eine Gewichtung in die Mittelwertbildung einbeziehen.

Das waren auch meine ersten Überlegungen und es funktioniert nicht wirklich, wenn die Welle zum stehen kommt bzw. sich sehr langsam dreht.

Gast #7301623
Lesenswert?

Ganz sicher funktioniert ein Trigger auf einen Wert zwischen Minimum und Maximum. Man darf dann eben keine ungewichtete Mittelwertbildung fuer die Ermittlung benutzen, sondern muss sie in S/H gewissermassen statisch speichern. Der Trigger selbst loest dann die Freigabe fuer eine neue Ermittlung von Minimum und Maximum fuer das naechste Ereignis aus. So passt sich das ganze von alleine an.

Gast #7302350
Lesenswert?

Captain Zulu am Wochenende schrieb:

Du nimmst immer die letzten 8 samples und multiplizierst sie mit den Werten und addierst alles.

Rainer P. schrieb:

Aber es handelt sich wohl um ein Polynom y=0,5x^2

Finde den Fehler!

Solche Filter funktionieren bekanntlich so:

Y(n) = X(n) * a(k) + X(k-1) * a(k-1) + ... + X (k-N+1) * a(k-N+1)

demnach:

Y(23) = X(23) * a(7) + X(22) * a(6) + ... + X(16) * a(0)

OP #7305147
Lesenswert?

hufnala schrieb:

Rainer P. schrieb:

Das größte Problem ist jedoch, dass die Amplitude mit zunehmender Drehzahl auch einbricht

Gibt es dafür einen Grund? Vielleicht wäre es möglich dieses Verhalten zu ändern -> Ursache abstellen. Einen Tiefpass gibt es ja schon, ggf. mit nicht ganz optimalen Parametern?

//hufnala

Hallo Hufnala,

ja, den Wald vor lauten Bäumen nicht gesehen: Tiefpass optimiert, und schon sind alle Amplituden gleich groß und können einfach ausgewertet werden.

Das System "lernt" den größten und niedrigsten Wert, was nach ein paar Umdrehungen erledigt ist. Mit einem Software-Trigger der bei 80% bzw. 20% auslöst arbeitet das System sehr zuverlässig, selbst wenn nun die Welle steht.

DANKE AN ALLE !!!!

#7306700
Lesenswert?

Rainer P. schrieb:

Drehzahlermittlung einer Welle die sich recht langsam dreht (max. 1 U/sek oder sogar stehen bleibt). Die Welle hat eine optische Kennzeichnung und ist nur über eine Art Schaufenster zu erkennen. Leider ist die Oberfläche der Welle mit der Kennzeichnung nicht ideal sauber und somit entsteht kein "sauberer" Impuls.

Ideale Bedingungen für eine optische Computermaus.

Persönliche Seite #7387140
Lesenswert?

Rainer P. schrieb:

Dann habe ich das nochmal mit 32 Werten gemacht ( y=0,5x^2 - 0,5x -170,5), in der Hoffnung das es irgendwie "glatter" wird, da ja mehr historische Messpunkte in die Berechnung einfließen,

Das ist schon richtig so. Die Betrachtungsstrecke hängt letztlich von der Frequenz ab, die man noch erwischen möchte.

Rainer P. schrieb:

Das System "lernt" den größten und niedrigsten Wert, was nach ein paar Umdrehungen erledigt ist. Mit einem Software-Trigger der bei 80% bzw. 20% auslöst arbeitet

Bei einer so großen Hysterese bekommt man oft einen großen Phasenjitter. Wenn man den Kurvenverlauf "analog" interpretiert, geht das weicher. Man kann sehr steile Flanken recht genau erkennen und trotzdem hochfrequente Störungen unterdrücken.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren