mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Digitales Filter


Autor: Deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

als Lehrabschlussarbeit habe ich ein Projekt erhalten bei welchem
eine analoge Spannung in 12-Bit digital umgewandelt wird. 8 Eingänge 
werden
über einen Multiplexer, nacheinander zum A/D Wandler geschaltet und 
gewandelt. Die Kanalwahl wird über einen Master ausgewählt.

Zu meinem Problem:
Wandle ich nun z.B. einen 5V analog Wert, so erhalte ich digitale Werte 
von 2045-2055. Diese Streuung ist viel zu gross. Zu erwähnen ist, dass 
sonst ein schönes Histogramm(schöne Gausskurve), mit 2 Hauptwerten und 
Werten die teilweise daneben liegen, entsteht. Nun möchte ich diese 
Werte digital Filtern damit keine grosse Streuung mehr entsteht. Wie man 
das Programmieren könnte um dies zu Filtern weiss ich leider nicht!
Im Internet findet man FIR oder IIR-Filter, leider hat es mich dies 
nicht weitergebracht.

Vielleicht könnt Ihr mir helfen!?

Besten Dank für eure Bemühungen!

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich würde zuerst einmal klären, ob dein 5V-signal oder deine 
referenz-spannung nicht verrauscht ist, ansonsten bringt dir ein filter 
sowieso nicht viel...

Autor: Glurus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ein schwarzes Problem

Autor: Chrislight (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht liegt es an der Frequenz deiner CPU? Oder du könnstet einen 
AD-Wandler mit weniger Streuung verwenden...

Autor: Deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Spannung ist nicht verrauscht und somit auch sehr schön.
Mit der Wandlung bin ich sehr zufrieden, allerdings muss ein
digitales Filter programmiert werden. Diese Abweichungen bei den Werten,
liegen daran dass die Wandlung teilweise durch die Kommunikation gestört 
wird. Diese kleine Streuungen möchte ich nun per digitales Filter 
herausfiltern.

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Filter bringt Dir nur etwas wenn Du die Störung im Frequenzbereich 
lokalisieren kannst. Aber so einfach mit "Hau-Ruck" ein Filter 
anzuwenden ohne zu wissen was es tut oder tun soll ist nicht der beste 
Weg.
Wenn ich mal Zeit habe (seufz... Sch... Konjunktiv) werde ich mal ein 
Tutorium für digitale Filter hier reinstellen.

Autor: Jadeclaw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Deluxe:
Was du machen willst, ist eine Mittelwertbildung.
Dazu kannst du z.B. 8 ADC-Ergebnisse addieren, dann teilst du das dann 
durch 8, in dem du das Ganze 3 Binärstellen nach rechts schiebst. Das 
verlangsamt die Messerei zwar, aber das Resultat wird merklich ruhiger, 
d.h. weniger springen zwischen den Werten.
Bei 12Bit geht das problemlos in einem 16Bit-Register ab.

Gruß
Jadeclaw.

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ob er das machen will weiß er ja noch nicht. Eine Tiefpaß-Filterung 
wird sicher gegen hochfrequente Störungen helfen. Aber konnte man nicht 
bei vielen Mikrocontrollern den CPU-Kern für die Wandlung stillegen - 
extra um solche Interferenzen zu vermeiden?
Mein Rat wäre die Störung im Frequenzbereich zu analysieren.

Autor: Jadeclaw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig. Das wichtigste ist es, erstmal das Signal selbst nicht zu 
verschmutzen.
> Aber konnte man nicht bei vielen Mikrocontrollern den
> CPU-Kern für die Wandlung stillegen - extra um solche Interferenzen zu
> vermeiden?
Richtig, die AVR-Controller haben einen Noise-Reduction-Mode, bei dem 
für die Wandlung der Kern in den Sleep geschickt wird. bei anderen Typen 
--> Datenblatt studieren.

Gruß
Jadeclaw.

Autor: Deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun ja dass mit der mittelwert Berechnung wäre eine gute Idee.
Die gewandelten Werte sind sehr genau, diese habe ich einmal ohne 
Kommunikation abgespeichert. Läuft die Kommunikation, so unterbricht 
diese teilweise die Wandlung und stört diese damit.

Gibt es noch andere Möglichkeiten, die der mittelwert Berechnung 
gleichen?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Digitale Filterung hin oder her...
>Läuft die Kommunikation, so unterbricht
>diese teilweise die Wandlung und stört diese damit.
Dann behaupte ich mal, Dein Programm ist falsch gestrickt!
Fehler beheben, bisschen mitteln -> gut is!

Autor: Deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Kommunikation hat Priorität und ist in den FIQ gelöst.
Die Wandlung in den IRQ`s. Da ein FIQ Priorität hat, wie soll ich dann 
die Wandlung realisieren ohne dass diese unterbrochen werden kann?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne Deinen Controller nicht (zumindest kenn ich FIQ nicht).
Ich meinte nur, dass es meiner Meinung nach ein Programmfehler ist, wenn 
eine ADC-Messung unterbrochen wird, dadurch einen falschen Messwert 
liefert und dieser trotzdem verwendet wird.
Irgendwie würde ich mir eine Logik ausdenken, die den Messwert verwirft, 
wenn die Kommunikation dazwischengefunkt hat...
... oder natürlich noch besser: Das Dazwischenfunken kommt erst gar 
nicht vor!

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die Wandlung in den IRQ`s. Da ein FIQ Priorität hat, wie soll ich dann
>die Wandlung realisieren ohne dass diese unterbrochen werden kann?
Wie wär's den ADC-IRQ während der Kommunikation temporär zu 
deaktivieren...?

Autor: Jadeclaw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Grunde genommen bleiben nur 2 Möglichkeiten:
Entweder die IRQs tauschen, sprich den FIQ für die Wandlung und einen 
normalen IRQ für die Kommunikation oder, wenn das Protokoll es 
ermöglicht, die Kommunikation mit einem Busy-Code für den Zeitraum der 
Wandlung zu blockieren, wie früher bei Modems mit XON / XOFF. Das 
Platinenlayout/Schaltung könnten hier auch eine Rolle spielen, speziell 
wenn der Kommunikationsport nicht galvanisch getrennt ist.

Gruß
Jadeclaw.

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da fallen mir mehrere Möglichkeiten ein:
1. gleitendes Mittelwertfilter nach jeder Wandlung:

Mittelwert += ADCwert - (Mittelwert >> 3);

das bewirkt, dass der Mittelwert auf den 8-fachen Wert des ADCwertes 
ansteigt.
Willst Du den Wert auswerten (übertragen), verwende Mittelwert >> 3.

Wenn der Wertebereich es erlaubt (Vorzeichen und Overflow der 16-Bit 
beachten) kannst Du auch statt 3 4 verwenden, dann wird die 
Filterwirkung stärker, aber die Reaktion auf Änderungen langsamer.


Ist der Messwert eine konstante Spannung, dann könntest Du ein 
gewichtetes Filter verwenden, bei dem Werte, die weiter vom Durchschnitt 
liegen, schwächer oder garnicht gewertet werden.

2. echtes Digitalfilter (FIR oder IIR) ginge zwar auch, ist aber schwer 
zu verstehen, anzupassen und zu debuggen (falls es nicht gleich klappt). 
Man kann hier viel falsch machen und es gar nicht merken.

3. Untersuchen, warum und wann genau falsche Werte kommen. Das sollte 
eigentlich nicht sein!  Am besten nicht (oder nur wenig) an den Werten 
rumfiltern, sondern nach der Ursache suchen.

Welchen Controller verwendest Du?

Autor: Deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank für eure Hilfe.

Ich verwende den ADuC7021! Ich werde eure Tipps sicher einmal
versuchen.

Antwort schreiben

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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.