Erster Praxistest
Nachdem wir nun ein (hoffentlich) µController-freundliches Spannungssignal haben ist es an der Zeit, einen ersten Praxistest zu starten. Dazu habe ich eines der Beispielprogramme für den Arduino (AnalogReadSerial) genommen und minimal modifiziert (konkret: die Datenübertragung über die serielle Schnittstelle auf 115200 bps hoch gesetzt). Das Programm tut nicht anderes, als den vom ADC gelesenen Rohwert über die serielle Schnittstelle zu funken. Mit seinen 16MHz Takt sollte der Arduino locker in der Lage sein, dem Spannungssignal zu folgen. Die Schnittstelle ist hier klar der Flaschenhals, dennoch sieht der erste Test sehr erfreulich aus. Ich habe einfach die Daten einen Moment lang mit geloggt und in eine Datei geschrieben und dann ein paar Datenpunkte einfach der Reihenfolge nach geplottet, d.h. die Zeitachse ist nicht notwendigerweise vertrauenswürdig. Dennoch sieht das Ergebnis einer sinusförmigen Halbwelle schon erfreulich ähnlich:
Quiz
Was wir hier messen ist ja die positive Halbwelle der Wechselspannung. Also sollte die Periode ohne Spannung genauso lang sein, wie die sichtbare Halbwelle. Ist sie aber im obigen Plot nicht! Es sieht eher nach einem Verhältnis von ca. 1:2 aus. Zuerst war ich verwirrt. Könnte es sein, daß die Geschwindigkeit des ADC von der anliegenden Spannung abhängt? Unwahrscheinlich, außerdem ist der ADC um einiges schneller, als die Schnittstelle. Aber welches Geheimnis steckt dann dahinter? Dann dachte ich, es verstanden zu haben und schließlich bin ich wieder verwirrt.
Preisfrage: Wie kommt dieses Artefakt zustande?
Wer es zuerst rauskriegt bekommt einen selbstgebastelten IR-Tester von mir ;-)
Ausblick
Jetzt muss ich nur noch die Software ein bisschen aufbohren: Peak-Spannung über ein bestimmtes Zeitfenster mitteln und die Daten auf SD-Karte speichern. Danach heißt es dann eine ganze Weile Geduld haben, denn wir wollen ja Statistik über ein paar Wochen betreiben.
Du bist ja schon sehr weit gekommen, super! Macht mich noch mehr neidisch ;-). Bekommst du das Artefakt auch, wenn du dich mit dem Oszi direkt auf den ADC Eingangspin des Micro draufhängst?
AntwortenLöschenVielleicht könntest du die Schaltung kurz posten. Foto von Handskizze reicht.
Hi Chris,
AntwortenLöschenDas Signal sieht auf dem Oszi astrein aus. Ich habe es an diversen Stellen abgegriffen, bis hin zu den entsprechenden Pins des ATmega Chips.
Mein erster Verdacht war, daß es schlicht daran liegt, daß hohe Werte mehr Stellen haben, als kleine (insbesondere Null) -> es dauert länger, diese auf er seriellen Schnittstelle zu übertragen. Aber wenn das unser Problem wäre, dann müsse es genau umgekehrt sein: die Nullen sind schneller ausgegeben, daher könnten im gleichen Zeitraum mehr davon ausgegeben werden. Ich habe auch schon versucht, da echte Zeiten mitzunehmen - sowohl extern (also wann die Übertragung erfolgt), als auch auf dem Arduino (also wann die ADC angefordert wurde) – beide Methoden liefern sehr wackelig aussehende Kurven. Das liegt zum einen an der unzureichenden Zeitauflösung der Timer in PC und Arduino und zum anderen daran, daß die Zeitabfrage selbst auch Zeit verschlingt und ich mir nicht sicher bin, ob diese konstant ist. Und so sind die "Zeitkalibrierten" Kurven mit weniger Punkten gesegnet und sehen nicht gut aus. Dennoch zeigen sie ebenfalls das mysteriöse 1:2 Verhältnis.
Mein momentane Arbteitshypothese ist aber eine ganz andere: Ich glaube, daß es etwas mit einem Potentialunterschied der Nullpunkte zu tun hat. Ich schalte den Mittelpunkt (-) meines Spannungsteilers auf GND am Arduino und die andere Seite (+) auf den ADC PIN. Erschien mir vernünftig und geht ja im Prinzip auch. Aber vielleicht habe ich was übersehen und der Arduino GND hebt meine Halbwelle irgendwie an, so daß ich zuviel davon sehe? Oder der Trafo ist doch nicht wirklich galvanisch getrennt und zieht die Masse irgendwohin?
Für diese Hypothese spricht auch, daß die Absoluten Höhen am ADC über der Erwartung liegen: wenn 5V 1024 sind, dann sollten 2V so ca. 410V sein. Der ADC spuckt aber Maxima von ca. 550 aus.