Forum: Mikrocontroller und Digitale Elektronik Grenzfrequenz eines Sensorsignals bestimmen


von Pit (Gast)


Lesenswert?

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!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Pit (Gast)


Lesenswert?

Es handelt sich um einen Drehzahlsensor, der mir 100 Pulse pro Umdrehung 
liefert. Die max. Drehzahl des Motors liegt bei ca. 350 1/min.

von Klaus R. (klara)


Lesenswert?

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
von Pit (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Dingens23 (Gast)


Lesenswert?

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.

von Dingens23 (Gast)


Lesenswert?

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

von Pit (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Pit (Gast)


Lesenswert?

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?!

von Maxx (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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