Frage:
Wie kann ich Rauschen von ADC-Leitungen ohne Verzögerung oder Signaländerung herausfiltern?
user862
2014-03-30 03:24:57 UTC
view on stackexchange narkive permalink

Ich arbeite an einem Projekt mit einem Joystick und versuche, alles so einfach wie möglich zu halten. Ich lese die Potis mit dem integrierten 10-Bit-ADC auf dem ATmega 32u4, aktualisiere aber möglicherweise entweder auf einen 16-Bit-ADC oder einen 24-Bit-ADC. Wie kann ich Rauschen aus den Signalen herausfiltern?

Haben Sie schon versucht, mehrere Messwerte zu mitteln? Verwenden Sie den ADC-Rauschunterdrückungsmodus?
werde es jetzt versuchen
Wie nutzt man die eingebaute Rauschunterdrückung des 32u4 aus der Arduino-Programmierumgebung?
Nicht direkt. Sie müssen zum rohen AVR-Code wechseln (nicht * Assembly *, sondern nur direkte Registermanipulation).
Ich habe keine Ahnung, wo ich damit anfangen soll
Ich bin mir auch nicht sicher, wie ich die mehreren Lesevorgänge am besten implementieren kann
Auch das Mitteln von Lesevorgängen wird nicht funktionieren. Ich möchte die Reaktion des Joysticks nicht mildern
Welche Art von Lärm bekommen Sie? Hohe oder niedrige Frequenz? Vielleicht ist es am besten, einen einfachen RC-Filter zu verwenden, Hoch- oder Tiefpass, basierend auf dem Rauschen, das Sie reduzieren möchten
Das Datenblatt enthält ein Kapitel zum ADC und befasst sich mit der Rauschunterdrückung. Es gibt viele Aspekte der Rauschunterdrückung, darunter Schlafzustände und gefilterte analoge Stromversorgungsschienen. Für die Verwendung von 16-Bit-ADC (geschweige denn 24-Bit-ADC, was dem Stand der Technik entspricht) benötigen Sie eine sehr gut gestaltete Schaltung sowie Leiterplatten- und Qualitätskomponenten. Ansonsten ist es nur eine Verschwendung Ihres Geldes. Sie können beginnen, indem Sie die Referenzspannung in eine der internen Bandlückenreferenzen ändern. * Was genau ist das Problem, das Sie lösen möchten? *
Dies klingt ein bisschen wie ein anderes XY-Problem http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem.
Was ist das Problem, das Sie lösen möchten? Selbst wenn Sie 2 Bit des 10-Bit-ADC aufgrund von Rauschen wegwerfen, haben Sie immer noch 256 diskrete Pegel - dies ist eine Menge Präzision. Ich denke die PS3 Controller haben nur 16!
Und in Bezug auf die Latenz - wissen Sie, wie viel Latenz zu viel Latenz ist? Es macht keinen Sinn, stundenlang zu versuchen, rauscharme 16-Bit-ADC-Werte von 1000 / s zu erhalten, wenn Sie nur einen Durchschnitt von 10-Bit-ADC-Werten von 100 / s erreichen könnten.
Drei antworten:
David Cary
2014-11-10 22:25:03 UTC
view on stackexchange narkive permalink

Im Atmel ATmega328-Datenblatt, Abschnitt 24.6.1, wird empfohlen, den analogen Eingangspin mit einer Ausgangsimpedanz von 10 KOhm oder weniger anzusteuern. Außerdem wird empfohlen, Hochfrequenzkomponenten mit einem Tiefpassfilter zu entfernen. (Dieser Tiefpass wird manchmal als Antialiasing-Filter bezeichnet.)

Das einfachste mögliche Tiefpassfilter ist ein Widerstand und ein Kondensator.

  + 5V + 5V | | (Sensor) --- Widerstand --- + --- (Arduino) | | | | Kondensator | | | | GND ---------------- GND -------- GND  

Entgegen der landläufigen Meinung ist es nicht möglich, eine zu erstellen Antialiasing-Filter in Software.

Bei einem ersten Prototyp mit niedriger Auflösung gilt als Faustregel, dass die RC-Zeitkonstante mindestens zehnmal so lang ist wie die Zeit zwischen den Abtastungen.

Wenn Sie also mit etwa 1000 Abtastungen / Sekunde (dh einem Abtastintervall von 1 Millisekunde) abtasten, sind möglicherweise 100 Ohm Widerstand und (ungefähr) 100 uF Keramikkondensator ausreichend. (Die RC-Zeitkonstante ist hier RC == 100 Ohm x 100 uF = 10 Millisekunden).

Viele Joysticks haben bereits eine relativ hohe Ausgangsimpedanz. Sie müssen einen Widerstand mit so viel weniger Widerstand verwenden, um dies zu kompensieren. (Manchmal benötigen Sie keinen zusätzlichen Widerstand; aber Sie benötigen immer noch diesen Kondensator zwischen dem analogen Arduino-Eingangspin und dem Arduino-Erdungsstift.) (Viele Sensoren haben eine Ausgangsimpedanz von mehr als 10 KOhm (Leute, die sie verwenden, sind ziemlich gezwungen, einen Operationsverstärkerchip zu verwenden, um saubere Signale zu erhalten).

Es wurden ganze Bücher über Signalfilterung geschrieben Viele andere Techniken, um analoge Signale mit höherer Auflösung zu erhalten, Daten schneller zu erfassen und zwischen ihnen auszutauschen - aber sie sind wahrscheinlich übertrieben, um die Position eines Joysticks zu lesen.

asheeshr
2014-03-31 08:29:01 UTC
view on stackexchange narkive permalink

Ein möglicher Ansatz besteht darin, eine vollständig softwareseitige Lösung zu wählen.

Microsmooth ist eine Signalverarbeitungsbibliothek, an der ich arbeite und die speziell für niedrige Latenzzeiten und niedrige Latenzzeiten ausgelegt ist Glättung des Speichersignals. Es befindet sich noch in der Entwicklung, aber selbst jetzt arbeiten die meisten Filter in weniger als 100 Mikrosekunden pro Anruf und bieten gleichzeitig eine ziemlich gute Genauigkeit und Glättung. Die Header-Datei ermöglicht auch eine einfache Konfiguration für bestimmte Filterparameter.

user7682
2015-03-04 14:19:10 UTC
view on stackexchange narkive permalink

Das Rauschen Ihrer Joystick-Potis übertönt unabhängig davon jede Auflösung über acht Bit. Sie wurden für den sehr groben Wildport auf einem PC entwickelt und verwenden einen Kupferwischer auf einer Kohlenstoffplatte. Kein schreckliches Rezept für einen Geräuschgenerator.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...