Hallo
ich experimentiere gerade mit einem ADC als Bewegungsmelder.
Dabei treten diese Sinuswellen auf, woher kommen die?
Vom ADC, vom onboard Spannungsregler,....
1
/*
2
Hardware: Arduino R3
3
Do it yourself kapazitativer Näherungssensor
4
5
* Keine Bewegung: Sinusverlauf - warum
6
Bewegung: Verzerrungen, wie erwartet.
7
8
* Den Serialplotter öffnen (Strg-Shift-L) dann
9
bekommt man nen Graphen
10
11
Aufbau:
12
isolierten Draht in A0,
13
anderen isolierten Draht in GND und miteinnader verdrehen
14
*/
15
16
17
void setup() {
18
Serial.begin(115200);
19
delay(500);
20
}
21
22
23
void loop() {
24
uint16_t wert=analogRead(A0);
25
26
Serial.println(wert);
27
28
// < 120 : Überlagerungen zu sehen wie bei AM-Radio
29
// 120: ab hier sind dann die Überlagerungen weg,saubere Line
Hans Kohlmeis schrieb:> Dabei treten diese Sinuswellen auf, woher kommen die?
könnte 50 Hz Netzbrummen sein.
Leider hat Dein Diagramm oben an beiden Achsen keine sinnvollen
Einheiten. Damit kann man weder über Amplitude noch Frequenz etwas
sagen. Das wäre aber wichtig um die Quelle identifizieren zu können.
Hans Kohlmeis schrieb:> Dabei treten diese Sinuswellen auf, woher kommen die?
Da gibt es verschiedene Möglichkeiten. Das hängt von deinem Aufbau ab.
Hans Kohlmeis schrieb:> Periodendauer ist 120ms * ca 56 Samples = 6,72s => f= 0,148 Hz.
Das ist unwahrscheinlich. Bei 120ms Abtastzeit verstößt du vermutlich
gegen das Abtasttheorem, d.h. du kannst die wahre Frequenz nicht mehr
eindeutig aus deiner Messung ermittelt.
Probiere mal 10ms.
Hans Kohlmeis schrieb:> Periodendauer ist 120ms * ca 56 Samples = 6,72s => f= 0,148 Hz.
Das ist ganz eindeutig die Modelleisenbahn deines Nachbars, die etwa
alle 7 Sekunden ein mal im Kreis fährt.
10ms:
Da kommt wieder diese überlagerte Darstellung bei raus.
Messe ich von "Knubbelanfang zu Knubbelende": 3Hz
Spikes innerhalb des Knubbels: ~40 Hz. Sind dann wohl doch 50Hz
Netzbrummen.
Hans Kohlmeis schrieb:> Messe ich von "Knubbelanfang zu Knubbelende": 3Hz
Die Knubbelei bedeutet, dass deine Schleife nicht genau 10ms, sondern
etwas länger braucht.
Mit einem Delay von 20ms dürftest du dann eine langsame Sinusschwingung
sehen ;-)
Hans Kohlmeis schrieb:> Spikes innerhalb des Knubbels: ~40 Hz. Sind dann wohl doch 50Hz> Netzbrummen.
Nein. Die Empfindlichkeit deines Bewegungssensors ist genial! 20Hz ist
exakt die Drehzahl der Märklinmotoren. Die symmetrische Schwungmasse
führt dann zur doppelt schnellen Annäherung/entfernung.
Das musst du unbedingt weiter verfolgen. Bei der Empfindlichkeit kannst
du die Bewegung von Leuten hinter Betonwänden darstellen. Da gab es
schon große Forschungsprojekte zu, allerdings haben die mit Radar oder
so gearbeitet.
Bei 20ms (oder auch 120ms) habe ich nen saubere Linie mit einem Sinus,
das ist wohl die Hüllkurve dieser Knubel mit der langen Periode von
knapp einer 1s bis mehreren Sekunden je nach delay. Man kann zuschauen
wie der gezeichnet wird, eben wegen der langen Periodendauer, das sind
keine 50Hz.
Die 50 Hz habe ich nur wenn ich keinen glatten Sinus wie im 1. Bild sehe
sehe sondern sowas wie in Bild 2. wo innerhalb der Hüllkurve nochmal
Sinuswellen verlaufen und die haben immer 50Hz egal welches Delay man
wählt. Bei 20ms und 120ms (und vielleicht noch andere Werte) delay
wird der 50Hz-Sinus glatt ausgebügelt.
Sieht so aus als ob die 50Hz selbst wohl nochmal peridisch abgeschwächt
werden, das gibt dann diese Sinus mit langer Periode.
Naja egal jetzt weiss ich wo dieses Signal herkommt und kann es
wegrechnen.
Hans Kohlmeis schrieb:> Bei 20ms (oder auch 120ms) habe ich nen saubere Linie mit einem Sinus,> das ist wohl die Hüllkurve dieser Knubel mit der langen Periode
Nein, bei Einstellung "20ms" bzw. "120ms" tastest du die 50Hz-Schwingung
immer ungefähr an der selben Stelle ab, aber eben nur ungefähr, weil
deine Schleife etwas länger als das eingestellte Delay() dauert. Die von
dir beobachtete Schwinggeschwindigkeit sagt dir, wie weit deine
Abtastfrequenz von exakten 50 Hz (20ms) bzw. 8 1/3 Hz (=50Hz/6) (120ms)
abweicht.
Bei 10ms erwischt du bspw. abwechselnd ein Berg und ein Tal der 50Hz (in
den Gnubbeln), oder die Nulldurchgänge (wenn sich in deinem Signal
nichts tut)
Hier zeigt sich mal wieder schön: Wer misst, misst Mist.
Besorge dir ein kleines Oszilloskop! Schon eines der Chinateile für 30€
würde reichen für soetwas. Oder gleich ein USB Oszi (~60€).
Sobald man analoge Schaltungen anfasst, sollte man das einfach haben.
Edit: Wenn diese Stõrung signifikant über deinem Nutzsignal liegt, wirst
du mit Wegrechnen eher nicht weit kommen...
Besser wäre ein Filter in hardware.
Alex G. schrieb:> Besser wäre ein Filter in hardware.
Noch besser wäre ein ordentlicher Aufbau des "Do it yourself
kapazitativer Näherungssensor"
Wie sieht denn der Schaltplan und der Aufbau dazu aus?
Alex G. schrieb:> Hier zeigt sich mal wieder schön: Wer misst, misst Mist.
Warum soll das Mist sein?
Jedes Stroboskop funktioniert genau nach diesem Prinzip, um z.B. bei
genauer Übereinstimmung von Abtastfrequenz und Systemfrequenz eine
Bewegung einzufrierend. Empfindliche Abtastsysteme benutzen das auch zur
Störungsunterdrückung (netzsynchrone Abtastung zur Brummunterdrückung).
Bei Abtastsystemen, bei denen die halbe Abtastfrequenz für den
Frequenzbereich den Maßsab darstellt (Shannon ABtasttheorem) gibt es
eben ein paar andere Spielregeln als bei zeitkontinuierlichen Systemen.
Wenn man dies Spielregeln natürlich nicht kennt, können einem die
Messeergebnisse schon mal wie Mist vorkommen.
Wolfgang schrieb:> gibt es> eben ein paar andere Spielregeln als bei zeitkontinuierlichen Systemen.
Und eine dieser Spielregeln ist ein Anti Aliasing Filter.
Ob das in deinem Fall jetzt das Problem ist, kann man so nicht sagen,
aber trotzdem die Frage: Hast du einen eingebaut?
Der Wolfgang hat das Problem doch gar nicht...
Wolfgang schrieb:> Jedes Stroboskop funktioniert genau nach diesem Prinzip
Aber das Ziel eines Stroboskops ist eben ein anderes. Und auch das
Ergebnis der Messung mit dem Stroboskop muss man erst mal interpretieren
können.
Hans Kohlmeis schrieb:> ich experimentiere gerade mit einem ADC als Bewegungsmelder.
Zeig doch mal deinen Aufbau...
Und beschreibe die Funktion deines "Bewegungsmelders". Auf welchem
physikalsichen Effekt beruht der?
Schlumpf schrieb:> Und eine dieser Spielregeln ist ein Anti Aliasing Filter.
Nein, du hast es nicht verstanden.
Ein Anti Aliasing Filter brauchst du nur, wenn du aus den abgetasteten
Werten das ursprüngliche Signal wieder rekonstruieren möchtest.
Zur Unterdrückung von Netzbrumm ist es viel günstiger, genau mit
Netzfrequenz abzutasten. Im Nulldurchgang abgetastet, hat man dadurch
nichtmal einen Offset.
Lothar M. schrieb:> Aber das Ziel eines Stroboskops ist eben ein anderes.
Nein, ist es nicht. Den TO stört die Schwingung durch das
unterabgetastete 50Hz-Signal des Stromnetzes.
Ein Stroboskop dient genau dazu, eine Bewegung durch synchrone Abtastung
einzufrieren. Und wenn die Bewegung richtig eingefroren ist, bewegt sich
da nichts mehr - Schwingung weg.
Der "Aufbau" ist im Sourcekommentar beschrieben: Zwei isolierte Drähte
(Dupontkabel) verdrillt, einer geht in GND, der andere in
A0=ADC-Eingang. Es reicht auch einfach ein Kabel in A0, das gegen GND
kann man auch weglassen, funktioniert genauso.
Habe jetzt mal mit einen Kondi zwischen A0 und GND experimentiert,
< 1nF bis 6,8nf, da geht dann die Welligkeit weg aber Ausschläge bei
Änderung werden weniger deutlich, muss man dann halt das
Triggerintervall kleiner machen, eigentlich gewinnt man dadurch gar nix,
die Auswertung wird eher schwieriger weil die Ausschläge nicht mehr so
deutlich sind und der Bereich wo überhaupt was passiert kleiner wird,
Störungen innerhalb des verkleinerten Bereichs sind schwieriger vom
Triggersignal auseinanderzuhalten.
Am besten ist nur ein Draht in A0, delay so dass man die
Knubbeldarstellung erhält und wertet auf extreme Wechsel aus, die gehen
bei deutlicher Bewegung schnell in den 1000er Bereich (ADC hat 10 Bit
also 0..1023) und wieder gegen Null, da hat man dann klare Trigger,
sonstige Störungen kann man ignorieren, dazu gehört dann auch die 50Hz
ausm Netz weil sie keinen Einfluss mehr auf die Triggerpunkte hat.
Ja ich habe kein Oszi, sowas kaufe ich mir irgenwann noch, ich merke es
ja selbst, dass das Murks ist. War halt ne Idee sowas mal selber zu
auszuprobieren in wie weit das praktisch verwendbar ist. Um
vorbeilaufende Tiere oder Personen zu detektieren funktioniert es besser
als ich dachte, ohne Radarsensor oder PIR. Die Auswertung funktioniert
auch trivial, hätte mit mehr Störungen und einer "aufwendigen
Filterschaltung" gerechnet.
Wolfgang schrieb:> Den TO stört die Schwingung durch das unterabgetastete 50Hz-Signal des> Stromnetzes.
Da Dann muss er netzsynchron abtasten. Weil er das aber nicht kann,
wird er immer einen undefinierten Offset haben.
Wolfgang schrieb:> Zur Unterdrückung von Netzbrumm ist es viel günstiger, genau mit> Netzfrequenz abzutasten. Im Nulldurchgang abgetastet, hat man dadurch> nichtmal einen Offset.
Zur Ünterdrückung des Netzbrumms ist es am einfachsten, integrierende
Wandler (Dual Slope) zu nehmen und den über einen kompletten Zyklus
integrieren zu lassen. Dann muss man sich nicht extra um den
Nulldurchgang scheren. Sowas ist aber leider nur in den wenigsten µC
eingebaut.
T. H. schrieb im Beitrag #5495376:
> Wer lesen kann, ist klar im Vorteil.
Völlig unnötiger Kommentar. Aber manche sind halt so gestrickt...
> Prinzip der Ladungsverschiebung.
Und WO kann man das lesen?
Natürlich funktioniert ein jeder kapazitiver Sensor auf dem Prinzip der
Ladungsverschiebung. Aber das ist wie wenn du sagst: eine Solarzelle
fuktioniert auf dem Prinzip der Lichteinstrahlung. Völlig korrekt, aber
nutzlos.
Deshalb habe ich nach dem Aufbau gefragt. Oder ist dir der Aufbau
klar? Dann kannst du ihn ja mal skizzieren.
Hans Kohlmeis schrieb:> Habe jetzt mal mit einen Kondi zwischen A0 und GND experimentiert,> < 1nF bis 6,8nf, da geht dann die Welligkeit weg aber Ausschläge bei> Änderung werden weniger deutlich
Stichwort dazu: kapazitiver Spannungsteiler.
T. H. schrieb im Beitrag #5495412:
> Was für ein Schwachsinn.
Sorry, nur weil es deinen Horizont überschreitet ...?
Lese dir mal durch, was Analog Devices in der Application Note AN-611
zur Unterdrückung von 50Hz/60Hz zu sagen hat. Die Entwickler würde ich
an deiner Stelle nicht als schwachsinnig bezeichnen, solange du nicht
sehr gute Argumente lieferst.
http://www.analog.com/media/en/technical-documentation/application-notes/AN-611.pdf
Hans Kohlmeis schrieb:> Es reicht auch einfach ein Kabel in A0, das gegen GND> kann man auch weglassen, funktioniert genauso
Eine Antenne.
Hol dir ein Oszi.
Damit macht das mehr Spaß, weil man das Ergebnis gleich sieht.
Lothar M. schrieb:> Dann muss er netzsynchron abtasten. Weil er das aber nicht kann, ...
Und warum kann er nicht netzsynchron abtasten?
Geschenkt wird einem das nicht, aber ein steiles Antialiasing-Filter per
HW gibt es auch nicht umsonst. Und außerdem macht das die Erkennung
träge.
Eine Alternative auf Software-Basis wäre, eine schnelle Abtastung zu
verwenden, die das 50Hz Signal vernünftig erfasst und dann per Software
den Wert bei den Nulldurchgängen rauszufischt, also
Nulldurchgangserkennung und synchrone Abtastung in die Software zu
verlagern.
> ... wird er immer einen undefinierten Offset haben.
Bei der Bewegungserkennung muss er sowieso auf Änderungen reagieren,
d.h. der Offset, solange er sich nur langsam genug ändert, kann ihm
ziemlich egal sein. Da muss die Software eben die Schaltschwelle
dynamisch, anhand des aktuellen (gut gemittelten) Offsets, festlegen.
Lothar M. schrieb:> Zur Ünterdrückung des Netzbrumms ist es am einfachsten, integrierende> Wandler (Dual Slope) zu nehmen und den über einen kompletten Zyklus> integrieren zu lassen. Dann muss man sich nicht extra um den> Nulldurchgang scheren. Sowas ist aber leider nur in den wenigsten µC> eingebaut.
Oder so. Bei 50Hz kann man das auch gut in die Software verlagern. Das
wäre vielleicht noch die bessere Alternative zu
Wolfgang schrieb:> ... und dann per Software den Wert bei den Nulldurchgängen rauszufischt
Die Integrationszeit muss aber auch dann für optimale Brummunterdrückung
genau zur Netzperiode passen. Jede Abweichung von den 20ms führt zu
einer, durch Unterabgetastetung entstehenden, überlagerten Schwingung.
T. H. schrieb im Beitrag #5495412:
> Wolfgang schrieb:>> Zur Unterdrückung von Netzbrumm ist es viel günstiger, genau mit>> Netzfrequenz abzutasten. Im Nulldurchgang abgetastet, hat man dadurch>> nichtmal einen Offset.>> Was für ein Schwachsinn.
Du machst das hauptberuflich? Was genau? Ist das Betriebsblindheit? Wenn
man eine bekannte Störgröße (= Netzsignal) hat, aber eine andere Größe
erfassen will, die sich mit unbekannter Frequenz und sich nicht
periodisch ändert, ist es natürlich logisch und geschickt, immer genau
dann abzutasten, wenn die Störgröße 0 ist. Was soll daran "Schwachsinn"
sein und was hat das mit einem Seiltänzer tu tun? Oder kläre uns bitte
auf, welche Probleme ggf. durch die Abtastung bei Netz-Nulldurchgängen
auftreten, wenn das, wie Du meinst, ein falscher Ansatz ist.
T. H. schrieb im Beitrag #5495500:
> Bloß weil du auf das Stichwort "netzsynchron" anspringst, heißt das> nicht, dass du selbstständig Lösungen zu dem Thema entwickeln kannst. Du> hast einfach keinen Plan.
Dann zeig uns doch Deine Lösung! Bislang hast Du in diesem Thread ja
noch nichts konstruktives beigetragen, sondern nur herumgetrollt.
Mich würde aber auch mal das geplante Messverfahren des TO interessieren
- eine Ladungsverschiebung bei Annäherung eines Objekts kann es
eigentlich nur geben, wenn das Objekt gegenüber der Sensorfläche einen
Potentialunterschied hat, und das nicht zu knapp, wenn das in mehr als
1-2 Millimetern Entfernung durch simples Abtasten per ADC detektiert
werden soll.
Thomas E. schrieb:> T. H. schrieb im Beitrag #5495412:>> Wolfgang schrieb:>>> Zur Unterdrückung von Netzbrumm ist es viel günstiger, genau mit>>> Netzfrequenz abzutasten. Im Nulldurchgang abgetastet, hat man dadurch>>> nichtmal einen Offset.>>>> Was für ein Schwachsinn.>> Du machst das hauptberuflich? Was genau? Ist das Betriebsblindheit? Wenn> man eine bekannte Störgröße (= Netzsignal) hat, aber eine andere Größe> erfassen will, die sich mit unbekannter Frequenz und sich nicht> periodisch ändert, ist es natürlich logisch und geschickt, immer genau> dann abzutasten, wenn die Störgröße 0 ist. Was soll daran "Schwachsinn"> sein und was hat das mit einem Seiltänzer tu tun? Oder kläre uns bitte> auf, welche Probleme ggf. durch die Abtastung bei Netz-Nulldurchgängen> auftreten, wenn das, wie Du meinst, ein falscher Ansatz ist. Bislang> hast Du in diesem Thread ja noch nichts konstruktives beigetragen,> sondern nur herumgetrollt.
Erstmal dürfte das schwierig sein, denn man müsste sich ständig auf
diese 50Hz synchronisieren und sich dabei nicht vom Nutzsignal
beeinflussen lassen.
Zweitens macht das ja nur dann Sinn, wenn die Nutz-Frequenz die man
ermitteln will, deutlich kleiner ist, als die der Störfrequenz.
Genau genommen dank Abtast-Theorem, also im Falle der Netzfrequenz,
maximal 25hz.
EDIT: Garnicht gemerkt dass diese Diskusion auf therrman basiert... Das
meiste was der erzählt ist halbwegs durchdachter Quatsch.
Btw. mich würde auch interessieren wie sich die Lösung des TE gegen die
hier schlägt:
https://playground.arduino.cc/Main/CapacitiveSensor?from=Main.CapSense
Alex G. schrieb:> Erstmal dürfte das schwierig sein, denn man müsste sich ständig auf> diese 50Hz synchronisieren und sich dabei nicht vom Nutzsignal> beeinflussen lassen.
Was soll daran schwierig sein? Sowas wird (bzw. wurde) schon seit zig
Jahren gemacht, um Uhren Netzsynchron laufen zu lassen.
Alex G. schrieb:> Zweitens macht das ja nur dann Sinn, wenn die Nutz-Frequenz die man> ermitteln will, deutlich kleiner ist, als die der Störfrequenz.
Davon kann man wohl ausgehen, wenn der TO bei seinen Tests mit 120ms
Zeitabstand sampled. Also gehe ich davon aus, daß der Sensor die
Annäherung von einem Objekt (z.B. Finger) detektieren soll und nicht
etwa die Zähne eines schnell rotierenden Zahnrads.
Thomas E. schrieb:> Alex G. schrieb:>> Erstmal dürfte das schwierig sein, denn man müsste sich ständig auf>> diese 50Hz synchronisieren und sich dabei nicht vom Nutzsignal>> beeinflussen lassen.>> Was soll daran schwierig sein? Sowas wird (bzw. wurde) schon seit zig> Jahren gemacht, um Uhren Netzsynchron laufen zu lassen.
Das ist hier nicht das Selbe. Gehe mal nicht davon aus dass der
Microcontroler auch Zugang zum Stromnetz hat.
Er hat nur ein einziges Input-Signal auf dem die Netzfrequenz, auf einem
Nutzsignal überlagert ist.
> Alex G. schrieb:>> Zweitens macht das ja nur dann Sinn, wenn die Nutz-Frequenz die man>> ermitteln will, deutlich kleiner ist, als die der Störfrequenz.>> Davon kann man wohl ausgehen, wenn der TO bei seinen Tests mit 120ms> Zeitabstand sampled. Also gehe ich davon aus, daß der Sensor die> Annäherung von einem Objekt (z.B. Finger) detektieren soll und nicht> etwa die Zähne eines schnell rotierenden Zahnrads.
Da hast du wohl Recht.
Alex G. schrieb:> Das ist hier nicht das Selbe. Gehe mal nicht davon aus dass der> Microcontroler auch Zugang zum Stromnetz hat.> Er hat nur ein einziges Input-Signal auf dem die Netzfrequenz, auf einem> Nutzsignal überlagert ist.
Er hat aber auch nicht geschrieben, daß er KEINEN Netzzugang hat.
Abgesehen davon wurde auch oben schonmal erwähnt, daß man auch durchaus
das Signal öfter abtasten kann, um dadurch die Phasenlage des
Störsignals zu ermitteln, und dann eben nur die Samples im Nulldurchgang
für das Nutzsignal zu verarbeiten.
@therrman:
Ich habe keine Lust, auf Deine Frechheiten einzugehen.
In meinen Augen verstoßen einige Deiner Beiträge hier eindeutig gegen
die Nutzungsbedingungen diese Forums (Beleidigung, Trollerei).
Es wundert mich, daß Du Dich das als angemeldeter Nutzer traust - oder
hast Du versehentlich übersehen, daß Du nicht als Gast unterwegs bist?
Alex G. schrieb:> Ist T.H. der selbe wie Therrman?
Sieht so aus, als hätte man seinen Account gesperrt. Vorhin waren alle
seine Beiträge hier noch unter user "T.H. (therrman)" verfasst, nun
steht da überall "T.H. (Gast)" Oder er hat sich schnell deregistriert,
nachdem er durch meinen Hinweis gemerkt hat, daß er die Ganze Zeit
eingeloggt war... ;)
Dass es hier für das allgemeine Klima evtl. vorteilhaft wäre, wenn nur
registrierte Nutzer schreiben könnten, denke ich mir auch manchmal,
müssen aber die Forenbetreiber für sich entscheiden. Wenn man lauter so
User hat, wie T.H., braucht man keine Gäste mehr, damit sich die User
gegenseitig völlige Inkompetenz, Schwachsinnigkeit und Analphabetismus
vorwerfen.
Ich schlage vor, das Signal exakt mit dem doppelten der Netzfrequenz
abzutasten (d.h. 100 Hz) und immer den Mittelwert von je zwei
aufeinander folgenden Samples auszuwerten. Damit löscht sich die
positive und negative Halbwelle des Störsignals immer aus, unabhängig
von der absoluten Phasenlage. Ob es noch einen Vorteil bringt, die
Samples ungefähr auf den Nulldurchgang zu legen, müsste man untersuchen
- theoretisch sollte es aber egal sein, ob man im Nulldurchgang, im
Scheitel oder irgendwo dazwischen abtastet.