Hi Leute, ich steuere derzeit mit einem Beschleunigungssensor den Servo eines kleinen Roboterarms an (ist eher eine Art 2-achsen ´Gimbal - reines Spaßprojekt). Der schwenkt dann ein Kameramodul auf und ab. Die Lage des Servos (und somit der Kamera) soll dabei derjenigen des Sensors folgen. Richte ich den Sensor also in Richtung des Erdbeschleunigungsvektors aus, so meldet mir der Sensor 9,81m/s^2 und ich steuere den Servo per PWM voll aus. Drehe ich den Sensor um 180 Grad, so erhalte ich -9,81m/s^2 und ich steuere den Servo in die andere Richtung voll aus. Ergebnis: die Drehbewegung des Servos folgt der Drehbewegung des Sensors. So weit so gut. Mein Problem: Schon kleinste Zitterbewegungen des Sensors (den ich mit der Hand bewege) führen so großen Zitterbewegungen des Servos. Ich war erstaunt, wie stark die Auswirkungen sind. Diese Zitterbewegungen möchte ich mit einem Filter unterdrücken. Gleichzeitig soll der Servo aber immer noch gut und fix der Position des Sensors folgen (max 1 Umdrehung pro Sekunde). Welcher Filter eignet sich für solche Zwecke? Kennt Ihr Freeware/Websites, um solche Filter einfach zu berechnen? (möglicherweise gar C-Code auszuwerfen?) Letztlich möchte ich den Filter in C-Code auf meinem STM32F4-Discovery Board laufen lassen. Habe vor 20 Jahren meinen letzten FIR-Filter designed - seitdem alles vergessen. Könnt Ihr mir einen guten Link zum Wieder-Einlesen in digitale Filter empfehlen Es gibt ja tausende Skripte im Netz - aber welches davon ist wirklich gut? Darf ruhig bei Adam und Eva beginnen und sehr ausführlich sein. Insbesondere saubere Herleitungen interessieren mich. Würde mich über ein paar Tipps sehr freuen. Viele Grüße Igel1
:
Bearbeitet durch User
Hat keine eine Idee? Oder habe ich mein Problem zu ungenau beschrieben? Über ein paar gute Literaturtipps zu den Grundlagen und zum Design digitaler Filter würde ich mich auch schon freuen ... Viele Grüße Igel1
Tut mir leid für die plumpe Antwort, aber würde dir nicht schon ein simples Tiefpassfilter reichen?
Hier mal eine kleine Auswahl (habe ich vor kurzem gelesen, war also das erste was mir einfiel) Beitrag "Re: Kalman Filter in Bascom" (Muss natürlich kein Bascom sein) Dort sieht man auch schön die unterschiedlichen Auswirkungen der verschieden Filter. Aber ich denke auch, dass ein simpler Tiefpass reicht
Das Problem ist, dass du die Beschleunigung misst, aber eigentlich eine Drehung ausregeln willst. Das Zittern mag zwar nur kleine Auslenkungen hervorrufen, aber auch dabei können Beschleunigungen im Bereich 1g auftreten. Dazu kommt noch das Rauschen des Sensors. Sprich, jede translatorische Beschleunigung versaut das Ergebnis. Da kann man sicher anfangen zu tiefpasszufiltern, aber um auf gute Ergebnisse zu kommen, wäre eine Kombination aus Beschleunigungssensoren und Drehratensensoren (IMU) plus Sensorfusion unabdingbar. Hier wird das Problem noch einmal erläutert: https://www.youtube.com/watch?v=C7JQ7Rpwn2k
@N.G.: oh weh - Kalman war schwierig - den hatte ich schon vor 20 Jahren kaum verstanden - würde ich gerne erst einmal umgehen. @Mirko: Jawohl - ein simpler Tiefpass war natürlich meine Intention (stelle gerade fest, dass ich das gar nicht erwähnt hatte). Aber welcher genau? Butterworth, Chebyshev, Bessel, ... oder einfach nur FIR? Außerdem hatte ich insgeheim auf eine Super-Easy-Filter-Strickmuster-Website oder gar einen simplen Code-Generator gehofft ... Denn: wie gesagt - ich bin filtermäßig etwas "eingerostet". @IMU: Sehr interessant Deine Hinweise - genau wie das von Dir verlinkte Video. 1000 Dank für diesen Tipp. Da ich per Zufall einen Fusion-Mode Sensor einsetze, bislang aber nur einen Teil davon nutze und die Fusion-Technik gar nicht verwende, werde ich demnächst einmal den Fusion-Mode auch wirklich nutzen. Jetzt weiß ich ja, wofür der gut ist :-) Vorab möchte ich (aus reinem Experimentierdrang) es trotzdem erst einmal mit einem Tiefpass versuchen. Viele Grüße Igel1
Habt Ihr netterweise vielleicht noch einen Tipp auf eine Website, mit der ich schnell zum Erfolg kommen kann? Viele Grüße Igel1
http://www.earlevel.com/main/2003/03/02/the-digital-state-variable-filter/ http://musicdsp.org/archive.php?classid=3#23
Dankeschön für die Links - sieht gut aus ... Müßte ich hinbekommen können. Habt Ihr auch noch einen Tipp, mit welchem Tool man selbstgestrickte Filter gut und schnell außerhalb des Microcontrollers mal eben "trocken" testen kann? Viele Grüße Igel1
Andreas S. schrieb: > Habt Ihr auch noch einen Tipp, mit welchem Tool man selbstgestrickte > Filter gut und schnell außerhalb des Microcontrollers mal eben "trocken" > testen kann? Mit einem C-Compiler ;-) Baue dir einen Sinus-Generator, den du in einer for-Schleife verschiedene Frequenzen erzeugen lässt. Dieses Signal jagst du für einige Perioden lang durch deinen Filter, und bestimmst nach dem Filter die Amplitude. Wenn du dann deinen Frequenzbereich durchgesteppt hast, weisst du, wie die Charakteristik deines Filters aussieht. Man kann die Ausgabe des Testprogrammes z.B. als Tabelle in eine Datei schreiben, und sich dann in einer Tabellenkalkulation einen Plot basteln.
:
Bearbeitet durch User
Joe F. schrieb: > Andreas S. schrieb: >> Habt Ihr auch noch einen Tipp, mit welchem Tool man selbstgestrickte >> Filter gut und schnell außerhalb des Microcontrollers mal eben "trocken" >> testen kann? > > Mit einem C-Compiler ;-) > > Baue dir einen Sinus-Generator, den du in einer for-Schleife > verschiedene Frequenzen erzeugen lässt. > Dieses Signal jagst du für einige Perioden lang durch deinen Filter, und > bestimmst nach dem Filter die Amplitude. > Wenn du dann deinen Frequenzbereich durchgesteppt hast, weisst du, wie > die Charakteristik deines Filters aussieht. > > Man kann die Ausgabe des Testprogrammes z.B. als Tabelle in eine Datei > schreiben, und sich dann in einer Tabellenkalkulation einen Plot > basteln. Eeehrlich? Normalerweise beschwere ich mich ja nicht, wenn ich Hilfe suche und dann Ratschläge bekomme, aber dieser Tipp erscheint mir doch sehr aufwändig. Gibt's da wirklich nichts besseres? Da waren wir vor 20 Jahren irgendwie schon weiter. Ich habe damals meine Filter mit Matlab simuliert - funktionierte wunderbar. Nur habe ich heute leider kein Matlab mehr (... und auch keine Ahnung mehr ... was vermutlich das Hauptproblem ist ...) Viele Grüße Igel1 PS: das hier geht schon eher in die Richtung, die ich Suche: http://www.micromodeler.com/dsp/
:
Bearbeitet durch User
Andreas S. schrieb: > aber dieser Tipp erscheint mir doch > sehr aufwändig. Gibt's da wirklich nichts besseres? Naja, also der Aufwand ist überschaubar. Es sind 2 ineinander verschachtelte for-Schleifen, die äussere für dein Frequenz-Stepping, die innere, um dein Signal für eine Weile laufen zu lassen. Für den Sinus includest du math.h Amplitude nach dem Filter einfach über Spitzenwert-Bestimmung herausfinden. Das ganze garantiert dir halt, dass du exakt den Code testen kannst, der dann auf dem Mikrocontroller laufen soll. Ansonsten bastelst du dir einen Filter in einem Tool, übersetzt den in C, da ist ein Fehler drin, und du wunderst dich, dass dein uC-Filter etwas ganz anderes macht als gewünscht...
:
Bearbeitet durch User
Andreas S. schrieb: > Habt Ihr auch noch einen Tipp, mit welchem Tool man selbstgestrickte > Filter gut und schnell außerhalb des Microcontrollers mal eben "trocken" > testen kann? Ich benutze für sowas gerne Scilab.
Ahhhh - die letzten zwei Tipps von Stephan W. und DerGuteWeka (lustiger Name ...) passen vermutlich etwas besser für mich, denn ich möchte nicht nur das echte Signal, sondern auch den Amplituden- und Phasengang sehen können. Danke dafür! Wer noch eine speziell auf Filterdesign ausgelegte Freeware empfehlen kann: bitte ebenfalls hier melden. Viele Grüße Igel1
Matlab + Signal processing toolbox ist für Filterentwurf hervorragend. Für Privatleute gibt es m.E. bezahlbare Varianten. Aber etwas auf Kanonen mit Spatzen. Kostenlos: http://iowahills.com/ http://dspguru.com/dsp/links/digital-filter-design-software div. Testversionen Wenn Du keine genauere Spezifikation hast, ist das aber alles für die Katz. Wenns ein Buch sein darf: http://www.dspguide.com/pdfbook.htm (sehr gut, auch in Papierform erhältlich) Understanding DSP von Richard G Lyons (ebenfalls sehr gut) Am besten wäre es, Du könntest noch einen Gyro dazuschalten (Drehratensensor) und den Winkel per Kalman-Filter ("Sensor fusion") kombinieren, s. auch Link in 4. Beitrag.... und ich seh grade, den Hinweis gab es oben schon... Ich würde auch ganz einfach einen TP 1. Ordnung probieren. Einfach rekursiv (IIR) implementieren und mit der Zeitkonstante spielen. Oder einen gleitenden Mittelwert über n taps (FIR - was dann höherer Ordnung wäre, aber sei's drum) - Martin
Hi Leute, wunderbar - ich sehe: Ihr steht noch voll im (Filter)saft. Solche Beiträge zu lesen - das macht wirklich Spaß: Martin hat ebenfalls noch wunderbare Tipps und Links spendiert - dickes Dankeschön dafür! Mit allem zusammen sollte ich nun wirklich in der Lage sein, das Ziel zu erreichen. Jetzt muß ich nur noch Zeit freischaufeln und viel lesen. 1000 Dank nochmals an Euch alle! Igel1 PS: Ihr hört dann von mir, wenn mein Filter funktioniert (kann aber ein paar Wochen dauern, da ich aktuell noch an anderen Baustellen aktiv bin)
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.