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?
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.
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. :-(
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.
Christoph db1uq K. schrieb:> Mir geht es nur um die aufwendige Impulsaufbereitung, die man auch auf> eine optische Abtastung anwenden könnte.
Leider kann ich den Dokus aber nicht entnehmen, wie die das machen.
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?
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?
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.
Rainer P. schrieb:> CSV wäre OK?
klar :)
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?
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 :-(
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.
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?
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.
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).
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!
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 ...." ?????
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
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.
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
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.
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.
... 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.
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.
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)
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 !!!!
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.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang