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. :-(
Mir geht es nur um die aufwendige Impulsaufbereitung, die man auch auf eine optische Abtastung anwenden könnte.
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.
Es gibt schon ein paar Applikationstexte von Allegro, aber die lassen sich nicht weit in die Karten schauen: https://www.allegromicro.com/-/media/files/application-notes/an296222-input-signal-variation.pdf?sc_lang=en https://www.allegromicro.com/-/media/files/application-notes/an296240-speed-sensor-fundamentals.pdf?sc_lang=en Eventuell würden zwei Sensoren dicht nebeneinander noch eine Verbesserung bringen, hier eine ältere Appnote zu einem doppelten Magnetsensor: https://www.allegromicro.com/en/insights-and-innovations/technical-documents/hall-effect-sensor-ic-publications/magnetic-encoder-design-electrical-motor-driving-ats605lsg
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.
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.
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.