Seltsame Frequenz in Sensordaten

Ich habe ein ziemlich einfaches Temperaturprotokollierungsgerät auf einem Arduino Mega 2560 R3 gebaut. Ich verwende TMP36 , insgesamt 12 davon, um die Daten zu protokollieren. Die VS- und GND-Pins jedes Sensors sind mit Common Rails verbunden und jeder V_out-Pin ist dann direkt mit seinem eigenen analogen Sensor-Pin auf dem Arduino verbunden.

Die Methode zum Protokollieren der Temperaturen besteht darin, zehn aufeinanderfolgende Messungen an einem Sensor aufzuzeichnen (zwischen jeder Messung 20 ms Pause zu machen), dann diese zehn Werte zu mitteln, diesen Wert in einer Datendatei zu protokollieren, dann mit dem nächsten Pin fortzufahren und dies zu wiederholen, bis alle Sensoren aufgezeichnet haben ein Wert. Warten Sie dann, bis 10 Sekunden vergangen sind, und wiederholen Sie dann den Vorgang. (muss nicht schneller sein, da mein Experiment Stunden bis Tage dauert).

Das erste Bild (beschriftet mit Sensor 14) ist das Diagramm, das ich von einem der an meine Wärmequelle angeschlossenen Sensoren bekomme, was ungefähr dem entspricht, was ich erwarte (X-Achse ist Sekunden, Y-Achse ist Temperatur in Celsius).

Temperaturprotokoll von Sensor 14

Bei meinem letzten Test musste ich nur ein paar Standorte protokollieren und ließ den Rest der Sensoren auf dem Schreibtisch sitzen, um im Wesentlichen die Umgebungstemperatur zu messen, von der ich zu 90% sicher bin, dass sie konstant sein sollte. Ich habe jedoch trotzdem die Daten von den Sensoren protokolliert und sie zum Kichern geplottet und das folgende Diagramm erhalten (gleiche Achsen wie zuerst)

Fühler 3

Dieses Bild hat eine ziemlich deutliche periodische Temperaturänderung, wenn auch nur einen sehr kleinen Unterschied. Die Ergebnisse, die ich daraus erhalten habe, haben keinen Einfluss auf meine eigentliche Analyse, aber die Quelle für das periodische Signal ist das, worauf ich neugierig bin.

Ich bin kein Signalanalytiker oder Elektroingenieur. Ich frage mich, ob das Auftreten dieser Art von periodischem „Rauschen“ auf ein Problem mit meinem Prüfstand hinweist oder ob dies ziemlich normal ist. (Der Sensor hat eine angegebene Genauigkeit von +- 2 Grad C mit einer Linearität von 0,5 Grad C.)

Und als zweiten Teil der Frage, wäre etwas "falsch" daran, dieses periodische Signal aus meinen Temperaturdaten zu entfernen? (Führen Sie eine FFT auf dem Rauschsignal aus, identifizieren Sie die Frequenz und verwenden Sie dann einen Bandsperrfilter, um es zu löschen).

Vielen Dank für jeden Rat!

(Bearbeiten 1)

Ich habe in Python ein besseres Diagramm erstellt und einen Abschnitt vergrößert, um zu zeigen, wie die beiden Signale über einen kürzeren Zeitraum aussehen:

Kurzfristige Sensordaten

Sieht aus wie Quantisierungsrauschen.
Woher wissen Sie, dass der Sensor nicht korrekt auf thermische Schwankungen in seiner Umgebung reagiert? Kann man nicht einfach über mehrere hundert Samples mitteln?
Ich bin mir ziemlich sicher, dass der Raum während des Tests nicht schwankte, das HLK-System war ausgeschaltet, aber es ist sicher eine Möglichkeit. Ich habe es ausgeschlossen, nur weil die Fluktuation so konstant periodisch zu sein scheint
Wie wird 50-Hz-Netzleitungsrauschen in diese Rolle einfließen?

Antworten (3)

Wenn Sie in das obere Diagramm hineinzoomen, sehen Sie ungefähr dasselbe (sehen Sie sich die Breite der Linie an).

Dies ist ein Problem mit der automatischen Skalierung der Diagramme. Sie werden irgendwann etwas sehen, entweder Quantisierungsrauschen, wie @Ignaciao vermutet (höchstwahrscheinlich richtig), oder vielleicht ein Netzbrummen, das in Ihre Sample-Bandbreite eingeblendet ist (was etwas anders aussehen würde).

Wenn Ihr Datenerfassungssystem den internen ADC im 2560 verwendet, beträgt die Auflösung nur 10 Bit. Eine einfache Mittelung über viele Samples (die hier anscheinend vor sich geht) kann scheinbar eine höhere Auflösung ergeben, aber ohne richtiges Dithering und richtiges Filtern funktioniert es nicht so gut.

Denken Sie daran, dass Ihre ADC- Auflösung ohne Vorverstärker und mit der ADC-Referenz als Versorgung etwa 0,5 °C beträgt (die Genauigkeit und Linearität sind schlechter). Die Auflösung beträgt 4,9 mV und der TMP36-Ausgang beträgt 10 mV/°C.

Sie können feststellen, dass es um genau 0,5 ° C hin und her springt, dies ist kein Zufall . Die Zwischenwerte sind ein Beweis für die Mittelung, die Tatsache, dass es sich nicht reibungslos zwischen den Zuständen bewegt, liegt daran, dass die Signalverarbeitung und das Dithering unzureichend sind.

Ich habe ein Bild hinzugefügt, das eine etwas bessere Qualität hat, und die Daten vergrößert. Nachdem ich den Wikipedia-Eintrag zur Quantisierung gelesen habe, halte ich das für sehr sinnvoll. Unterstützt die zusätzliche Handlung diese Schlussfolgerung noch? Die Periodik scheint hier weniger ausgeprägt zu sein
Die "Periode" ist wahrscheinlich die Raumtemperatur, die sich ändert und durch die verschiedenen Codes gleitet. Je schneller sich die Sensortemperatur ändert, desto kürzer ist der Zeitraum. Sinn ergeben? In Ihrem Raumtemperaturdiagramm steigt die Temperatur langsam an (real) und Sie bekommen eine Menge Rauschen, weil der ADC Mist ist (nicht real).
AH!! Gothca, dieser 0,5-Sprung ist mir nicht entgangen, ich konnte mir einfach nicht vorstellen, warum. Das macht jetzt viel mehr Sinn. Ich war nicht allzu besorgt über die Änderung des Bereichs, da er im Vergleich zu dem, was ich analysieren möchte, so klein ist. Ich glaube, ich habe das Quantisierungsrauschen jetzt ein wenig im Griff. Ich werde mir einen besseren ADC ansehen und meine Filterung (Mittelwertbildung) überdenken. Ich werde versuchen, das Durchschnittsskript zu entfernen, die Aufzeichnungsrate zu erhöhen und dann zu versuchen, die Daten nach dem Experiment zu filtern. Danke vielmals!

Ein bisschen Spekulation:

Wenn Sie sich Abbildung 5 im Datenblatt für den TMP36 ansehen, können Sie sehen, dass die Lastregelung grob 0,006 Grad pro gezogenem Mikroampere beträgt: -

Geben Sie hier die Bildbeschreibung ein

Wenn während des ADC-Prozesses die Stromspitze (sagen wir) 1 mA beträgt (was sicherlich nicht ungewöhnlich ist), erhalten Sie einen Fehler von 6 Grad.

Wenn Ihr ADC also ein gemultiplexter und ungepufferter Typ ist, der während der Konvertierung eine Stromspitze zieht, erhalten Sie seltsame Ergebnisse. Wenn Sie die maximale Kapazität von 10 nF über den Sensorausgang an Masse anlegen, kann dieser Fehler möglicherweise dramatisch abfallen.

Hier ist meine Vermutung für das, was Sie sehen: Die Sensoren haben nur eine Auflösung von 0,5 c. Sie können also die Werte 19,8, 20,3 und 20,8 ausgeben. Das ist alles deutlich in Ihrer Grafik zu sehen. Was ist nun mit all den Punkten auf den Pisten, die nicht zu den 3 Werten gehören? Ich denke, diese treten auf, wenn sich der Sensor während Ihres 10-Lese-Durchschnitts ändert.

Die Frage bleibt also. Schwankt der Raum tatsächlich um ein halbes Grad hin und her, wie die Grafik zu zeigen scheint? Es ist schwer zu sagen. Ich denke, die einzige Schlussfolgerung, zu der Sie auf der Grundlage dieser Daten kommen können, ist, dass Sie eine höhere Auflösung benötigen, wenn Sie sich für Änderungen um 0,5 c interessieren. Ich kann aus Erfahrung sagen, dass eine Schwankung von 1-2 Zählern im Sensorwert "normal" ist.

Edit: Ich weiß nicht, wer mich runtergestimmt hat. Aber hier ist ein weiterer Beweis: Der TMP36 hat einen Skalierungsfaktor von 10mV/degC. Das Arduino hat eine Auflösung von 1024 Zählern und unter der Annahme einer vRef von 5 V ergibt dies 0,48 ° C pro Zählung. Fast genau das, was ich vorhergesagt habe. Ich sagte abstrakt "Sensor", aber was ich hätte sagen sollen, ist, dass das System eine Auflösung von 0,5 c hat.

Ich habe Sie nicht abgelehnt, aber die Sensoren sind analog und haben per se keine Auflösung. Aus Abbildung 21. Spektraldichte des Spannungsrauschens gegenüber der Frequenz, bei einer Bandbreite von 20 Hz beträgt die Spektraldichte des Rauschens von 1000 nV/sqrt (Hz) etwa 4,5 uV RMS, was 0,45 mK oder vielleicht 3 mK Spitze-zu-Spitze mehr entspricht als 1000 mal besser als das.
Sicher, aber es wird vom Arduino digitalisiert. Und wie Sie selbst sagten, hat das Arduino nur einen 10-Bit-ADC. Der TMP36 hat einen Skalierungsfaktor von 10mV/°C. Angenommen, das Arduino verwendet eine Vref von 5 V, 5 V / 1024 = 4,8 mV pro Zählung, was ... 0,48 ° C pro Zählung entsprechen würde.
Ich stimme Drew zu, aber ich denke, es ist besser, die Sensoren mit einer Kappe auf 20 Hz mit Kabel und Quellenimpedanz wie einem Dämpfer zu terminieren, aber nicht mit einer mikrophonischen Keramikkappe. 10 Samples reduzieren nur std Dev. von sq.rt(10), während lange UTP- oder besser STP-Kabel als Antennenrauschen für Streufelder wirken und eine sorgfältig platzierte Kappe zur analogen Masse das Rauschen weitaus stärker reduzieren kann