Hallo, Ich habe eine Frage zu einem Projekt: Ich hab einen Controller, der alle 20 ms ein Sensorsignal einliest. Dieses Signal wird in einem Ringpuffer gespeichert, aufsummiert und dann durch die grösse des Ringpuffers geteilt. Also ein klassisches Mittelwertfilter. Dieses gefilterte Signal wird zur Anzeige auf einem Display benötigt. Nun besteht meine Aufgabe diesen Mittelwertfilter durch ein IIR Filter zu ersetzen. Mit den Filtern kenne ich mich etwas aus, auch wenn bisher nur in der Theorie. Ich habe auch schon einen IIR Filter programmiert und er liefert mir fast identische Werte wie der Mittelwertfilter. Da ich das ganze nun simulieren möchte um den optimalen Filter für diese Anwendung zu finden benötige ich ja die Grenzfrequenz des Sensors. Da ist mein grosses Problem, da ich keinen Ansatz finde wie ich diese Frequenz bestimmen könnte. Für ein paar Anregungen wäre ich sehr dankbar!
Pit schrieb: > benötige ich ja die Grenzfrequenz des Sensors. Da ist mein grosses > Problem, da ich keinen Ansatz finde wie ich diese Frequenz bestimmen > könnte. Du musst viele Daten aufzeichnen und dann mit einer FFT nachschauen, welche Frequenzen da so auftreten. Aber eigentlich ist die Grenzfrequenz eines Sensors uninteressant. Sie muss nur hoch genug sein, um alle gewünschten Signale der Strecke/des Prüflings aufnehmen zu können. Oder du verrätst einfach, was das für ein geheimer Sensor ist und an welcher Strecke der montiert ist. Evtl. hat schon mal jemand sowas ähnliches gemacht...
Es handelt sich um einen Drehzahlsensor, der mir 100 Pulse pro Umdrehung liefert. Die max. Drehzahl des Motors liegt bei ca. 350 1/min.
Pit schrieb: > Es handelt sich um einen Drehzahlsensor, der mir 100 Pulse pro Umdrehung > liefert. Die max. Drehzahl des Motors liegt bei ca. 350 1/min. Das sind 583 Hz. Ich glaube das ist für jede Art von Sensor die ich mir vorstellen kann ziemlich langsam. Pit schrieb: > Ich hab einen Controller, der alle > 20 ms ein Sensorsignal einliest. Der Drehzahlsensor erhält Impulse mit max. 583 Hz und Dein Controller liest mit 50 Hz aus. Pit schrieb: > Dieses Signal wird in einem Ringpuffer > gespeichert, aufsummiert und dann durch die grösse des Ringpuffers > geteilt. Also ein klassisches Mittelwertfilter. Dieses gefilterte Signal > wird zur Anzeige auf einem Display benötigt. Also, alle 20 ms liest Du den Ringpuffer aus und ermittelst Deinen Mittelwert. Im Ringpuffer kann man ja irgendwann die ersten Werte überschreiben. Verwaltest Du da einen Zeiger der den Anfang und ggf. das Ende speichert? Wozu ein Ringpuffer. Zähle doch einfach die Impulse und bilde alle 20 ms den Mittelwert. Gruss Klaus.
:
Bearbeitet durch User
Guten Morgen, Die Pulse werden zuerst in 1/min umgerechnet und dann in den Puffer geschrieben. Ja der Ringpuffer wird mit Zeigern realisiert und die Tiefe ist über ein define bestimmt.
Ich frage mich, WAS das eigentliche Problem hier ist. WARUM soll denn hier das Sensorsignal gefiltert werden? WAS soll mit diesem Filter erreicht werden? Denn wenn der Sensor mit 500Hz misst und mit 50Hz ausgelesen wird, dann muss der Sensor schon "intelligent" sein. Eine Filterung hinterher ist nur noch Gebastel mit Tiefpassfunktion...
Hallo, du brauchst einmal mindestens ein Tiefpassfilter, dass dir relevante Anteile ab fabtast/2 herausfiltert, damit das Abtasttheorem erfüllt ist. Diese kann man digital überhaupt nicht filtern, weil sie sich an fabtast in deinen Nutzsignalanteil "spiegeln" können - auch nach DC. Ob es solche Anteile gibt, kannst du mit einem Oszilloskop mit FFT-Funktion prüfen. Die Filterordnung muss dann so gewählt werden, dass der Fehler kleiner als der maximal zulässige Fehler ist - gehe davon aus, das die gemessenen hochfrequenten Anteile 1:1 im Nutzsignalbereich sein werden. Am besten die Abtastfrequenz sehr viel größer wählen als die max. Sensorsignalfrequenz (d.h. die Frequenz von den Anteilen, die du wirklich haben möchtest), dann kann man das Filter mit niedrigerer Ordnung bauen. z.B. 5kHz für 50 Hz, wenn es leicht möglich ist. Um niederfrequentere Anteile kann sich dein IIR-Filter kümmern.
Hallo, da habe ich Käse geschrieben. Heißen muss es natürlich dass die Abtastfrequenz 5kHz sein müsste, nicht die Grenzfrequenz des Filters. Die muss natürlich kleiner sein, z.B. 250Hz. Man sollte nicht so früh aufstehen...
Lothar Miller schrieb: > Ich frage mich, WAS das eigentliche Problem hier ist. WARUM soll denn > hier das Sensorsignal gefiltert werden? WAS soll mit diesem Filter > erreicht werden? Zuerst geht es halt um die Anzeige des Wertes auf einem Display. Man will halt nicht laufend Sprünge der Drehzhal sehen. Hier könnte man natürlich auch an der Updaterate des Displays drehen. Später soll die Drehzahl in andere Rechnungen eingehen und daher will man die Drehzahl glätten.
Pit schrieb: > Es handelt sich um einen Drehzahlsensor, der mir 100 Pulse pro Umdrehung > liefert. Die max. Drehzahl des Motors liegt bei ca. 350 1/min. Bei einer Drehzahlmessung braucht man kein Filter. Man mißt einfach so lange wie möglich. Da es angezeigt werden soll, ist eine Meßzeit von 200..500ms ergonomisch.
Pit schrieb: > Man > will halt nicht laufend Sprünge der Drehzhal sehen. Wo sollen die Sprünge denn herkommen? Mechanische Systeme haben eine Trägheit. Bzw. wenn man eine Notbremsung macht, will man den "Sprung" auch sofort sehen und die Anzeige nicht sekundenlang hinterher schleichen lassen.
Man will einfach nicht das "gezappele" von 280 1/min auf 279 1/min oder 281 1/min sehen. Letztendlich ist es auch egal, ob sowas Sinn macht oder nicht. Meine Aufgabe besteht darin das IIR Filter zu realisieren. Zur Abtastung: Die Frequenz des Sensors kommt von einer Biosfunktion des Controllers. Abgetastet wird mit 6,5 kHz und ein analoger Tiefpass ist schon integriert. Ich rufe die Funktion, die mir die Frequenz gibt alle 20 ms auf. Sorry dafür! Ergo ist der Abtastvorgang vollkommen ok aber nun bin ich wieder am Punkt, wie ich meine Daten filtere. Wahrscheinlich nimmt man einfach ein Filterdesigntool, packt seine Daten rein und implementiert das Ergebnis?!
Pit schrieb: > Man will einfach nicht das "gezappele" von 280 1/min auf 279 1/min oder > 281 1/min sehen. Letztendlich ist es auch egal, ob sowas Sinn macht oder > nicht. Meine Aufgabe besteht darin das IIR Filter zu realisieren. Das ist aber ein rein numerisches Problem und verschiebt sich durch einen Filter höchstens. Was dir da eher Hilft ist ein Threshold für Übernahmen in der Anzeige.
Pit schrieb: > Man will einfach nicht das "gezappele" von 280 1/min auf 279 1/min oder > 281 1/min sehen. Schwankungen um 1 LSB sind bei allen digitalen Messungen Pflicht, daran kannst Du nichts ändern. Du könntest einen Schlupf programmieren, d.h. ein neuer Wert wird erst übernommen, wenn er um 2 LSB abweicht.
Ehe man filtert, muß man erstmal wissen, was man filtern soll. D.h. man muß wissen, wie und welche Störungen entstehen. Da Du was von BIOS sagst, vermute ich mal, daß die Meßmethode ungünstig ist und einen Jitter erzeugt. Die einfachste Art der Filterung wäre dann, den Jitter zu verringern, z.B. durch eine bessere Meßmethode. Z.B. haben viele MCs eine Input Capture Unit. Damit kann man Drehzahlen unabhängig von Programmlaufzeiten und Interruptlatenzen messen, also jitterfrei.
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.