Hallo.
Ich würde gerne eine Frequenz über einen Poti steuern. Dafür benutze ich
den 10 Bit AD-Wandler des Controller.
Meine Referenzspannung ist Avcc [ADMUX |= (1<<REFS0);]. Diesen Wert
würde ich dann gerne benutzen um meine
Frequenz zu verändern. Das heißt ich lade diesen Wert nach OCR1A. Der
Timer 1 läuft in Mode 15 (Fast PWM).
Es funktioniert soweit ganz gut, nur habe ich das Problem das der
gewandelte Wert immer um 1 bis 2 Bit springt.
Kann es sein das die Avcc um 5V/1023 schwankt? Kann ich das mit einem
Trick Programmtechnisch lösen?
Achso, mein Prozessor ist ein ATmega328P.
Grüße
Marcel schrieb:> der> gewandelte Wert immer um 1 bis 2 Bit springt
+/- 1 Bit ist normal, denke ich.
Zeig' mal dein Schaltbild incl. aller (Abblock-) Kondensatoren.
Und auch den Aufbau (Foto oder Layout).
Gruss
Marcel schrieb:> Kann es sein das die Avcc um 5V/1023 schwankt?
Wenn, dann würde sie um 5V/1024 schwanken, aber das Problem ist
vermutlich eher, dass die zu messende Spannung in Bezug zu AGND
zappelt/schwankt/rauscht...
Sabberalot W. schrieb:> Falls das nicht gut ist, filtern. zB mit einem Tiefpass> Out = Speicher = In/64+Speicher(1-1/64) oder aehnlich.
Das hilft nichts gegen das "Schwanken" um 1 LSB. Denn wenn hier der
Eingangswert dauernd z.B. zwischen 57 und 58 hin- und herzappelt, dann
tut das auch der Ausgang des Filters.
Der Trick hier ist, das Ergebnis der Filterberechnung nur dann zu
ändern, wenn das Poti bewegt wird. Das Stichwort dazu heißt "Hysterese".
such mal im Forum hier nach "poti hysterese"
https://www.mikrocontroller.net/search?query=poti+hysterese&forums[]=1
und du findest sowas wie den
Beitrag "Re: Dezimalwert aus A/D-Wert ableiten"
Das beobachtete Verhalten ist ein ganz wesentlicher Grund dafür, dass
man üblicherweise für solche Anwendungen kein Potentiometer einsetzt,
sondern einen Inkrementalgeber mit phasenversetzten Ausgängen. Solch ein
Inkrementalgeber hat entweder eine mechanische Rastung, die dafür sorgt,
dass die Ausgangswerte stabil bleiben, oder man löst das Problem in
Software, d.h. indem man zwar alle Impulse mitzählt, aber nur Bewegungen
um mindestens zwei Inkremente zur Aktualisierung des Sollwertes führen.
Marcel schrieb:> Kann es sein das die Avcc um 5V/1023 schwankt?
Um ein knappes Promille? Ja. Da geht sogar locker das Zehnfache, wenn
die MPU gerade zu rechnen anfängt oder Ströme über die Ports ausgibt.
Was hast du da angeschlossen?
Lothar M. schrieb:> Der Trick hier ist, das Ergebnis der Filterberechnung nur dann zu> ändern, wenn das Poti bewegt wird. Das Stichwort dazu heißt "Hysterese".> such mal im Forum hier nach "poti hysterese"
Unter der Annahme, dass die Schwelle dann minimal 2 sein müsste, eher
noch größer, dann "springt" der Wert auch bei geringer gewollter
Veränderung um mindestens um diesen Schwellwert. Auch nicht sehr schön.
HildeK schrieb:> Unter der Annahme, dass die Schwelle dann minimal 2 sein müsste, eher> noch größer, dann "springt" der Wert auch bei geringer gewollter> Veränderung um mindestens um diesen Schwellwert. Auch nicht sehr schön.
Du kannst bei einem normalen Poti mehr als 500 Zwischenstellungen
einstellen?
Marcel schrieb:> Es funktioniert soweit ganz gut, nur habe ich das Problem das der> gewandelte Wert immer um 1 bis 2 Bit springt.
Um weniger als 1 Bit kann es wohl kaum "springen". Liegt der reale Wert
zwischen zwei Bits, zappelt es (Quantisierungsfehler).
Bei der Diskussion um mehr als einem Bit geht es zwar um Stabilisierung,
Filterung, Rauschen etc, aber dann müßte man wissen wie die
Rahmenbedingungen ausehen und was da eigentlich genau gemacht wird. So
ist z.B. völlig unklar was die "Frequenz" mit dem Ganzen zu tun hat.
Soll es eine Art Signalgenerator/Sinusgenerator werden?
Der Andere schrieb:> Du kannst bei einem normalen Poti mehr als 500 Zwischenstellungen> einstellen?
Guter Einwand. Aber wenn ich es irgendwo hin drehe, dann habe ich
theoretisch einen von 1024 Werte.
In der Praxis würde ich ein Poti eh nur mit dem Highbyte auswerten und
dann noch den Mittelwert von 2 oder 4 Messungen nehmen.
Lothar M. schrieb:> Der Trick hier ist, das Ergebnis der Filterberechnung nur dann zu> ändern, wenn das Poti bewegt wird. Das Stichwort dazu heißt "Hysterese".
Was soll das denn? Das läßt vielleicht Bastlersherz höher schlagen, ist
aber nur ein Kaschieren eines schlechten Layouts oder auch zu hoher
Abtastrate.
Bei einem AVR ist es eigentlich nicht schwierig, dem ADC einen stabilen
Wert zu entlocken.
HildeK schrieb:> In der Praxis würde ich ein Poti eh nur mit dem Highbyte auswerten und> dann noch den Mittelwert von 2 oder 4 Messungen nehmen.
Ja eben.
Wobei ich aber Lothars Vermutung beipflichten würde:
Lothar M. schrieb:> dass die zu messende Spannung in Bezug zu AGND> zappelt/schwankt/rauscht...
Je nachdem wo der Poti an Gnd hängt und wie der µC an Gnd angebunden ist
können da schnell mal ein paar mV Differenz zusammenkommen.
m.n. schrieb:> Bei einem AVR ist es eigentlich nicht schwierig, dem ADC einen stabilen> Wert zu entlocken.
Ich halte dagegen: schon prinzipiell ist das nicht möglich.
Denn selbstverständlich kann das Poti immer an einem Übergang stehen,
an dem das LSB schon bei einer Spannungsschwankung von 10µV hin- und her
kippt.
Und es hilft auch nicht, das niedrigste Bit zu "ignorieren", denn das
kann sich genauso prinzipiell durch alle 10 Bits hindurchziehen, wenn
der ADC gerade so "an der Kippe" steht:
0111111111 <- 10µV hin+her -> 1000000000
HildeK schrieb:> Unter der Annahme, dass die Schwelle dann minimal 2 sein müsste, eher> noch größer, dann "springt" der Wert auch bei geringer gewollter> Veränderung um mindestens um diesen Schwellwert. Auch nicht sehr schön.
Also erstens implementiert man das sinnvollerweise als Umkehrhysterese,
dann gibt es diesen Spring nur an den Umkehrpunkten, nicht aber bei
monoton wachsenden oder fallenden Werten. Auch (und gerade dann) nicht,
wenn sie mit Rauschen unterhalb der Hystereseschwelle behaftet sind.
Und zweitens kann man natürlich, wenn die Konstruktion vor allem
besonders ästhetische Kurvenverläufe erzeugen soll, die Umkehrhysterese
auch noch mit einem nachfolgenden Tiefpass mit passend gewählter
Zeitkonstante ergänzen. Praktisch besonders sinnvoll oder gar unbedingt
nötig ist das aber so gut wie nie.
Der Versuch dazu ist praktisch immer ein Offenbarungseid für: "ich
versuche jetzt mit Rumbasteln an der Software den bereits im
Konzept/Hardwaredesign angerichteten Schaden zu verstecken".
Fakt ist jedenfalls: um das unvermeidliche Wackeln bei einer AD-Wandlung
(unvermeidlich mindestens im letzten Bit bei bestimmten Wertebereichen
der analogen Eingangsgröße) zu unterdrücken, gibt es nur eine einzige
zuverlässige Lösung: die Hysterese. Ende der Ansage.
Lothar M. schrieb:> Und es hilft auch nicht, das niedrigste Bit zu "ignorieren", denn das> kann sich genauso prinzipiell durch alle 10 Bits hindurchziehen, wenn> der ADC gerade so "an der Kippe" steht:> 0111111111 <- 10µV hin+her -> 1000000000
Genauso ist das. Ich kann nicht verstehen, dass es immer wieder Leute
gibt, die die Unvermeidlichkeit des Wackelns im letzten Bit nicht
begreifen können.
Kosmetischer Overkill:
Per Pwm und Spannungsteiler empirisch eine minimale Offsetspannung auf
den Eingang mischen, bis man mittig zwischen 2 Schwellen liegt und das
Wackeln minimiert ist. :-)
c-hater schrieb:> HildeK schrieb:>>> Unter der Annahme, dass die Schwelle dann minimal 2 sein müsste, eher>> noch größer, dann "springt" der Wert auch bei geringer gewollter>> Veränderung um mindestens um diesen Schwellwert. Auch nicht sehr schön.>> Also erstens implementiert man das sinnvollerweise als Umkehrhysterese,> dann gibt es diesen Spring nur an den Umkehrpunkten, nicht aber bei> monoton wachsenden oder fallenden Werten. Auch (und gerade dann) nicht,> wenn sie mit Rauschen unterhalb der Hystereseschwelle behaftet sind.
Du hast mich nicht richtig verstanden.
Beispiel mit Umkehrhysterese, mit z.B. Hysterese=10:
- ich drehe das Poti hoch von z.B. 15 nach 30. Gut, die Werte folgen
brav.
- ich drehe das Poti wieder runter. Erst wenn ich bei 20 bin, wird dann
der Wert wieder verändert, er springt also von 30 auf 20.
Wie bei einer Mechanik mit lästigem Spiel.
Das meinte ich mit 'Auch nicht sehr schön'.
Kann man nicht per Oversampling die Auflösung vergrößern und dann die
Hysterese drauf legen?
Wenn man 16 mal misst, sollte sich nach
http://www.atmel.com/images/doc8003.pdf
der Wert um 2 Bit erweitern lassen. Diese beiden Bits könnte man dann
doch als Hysterese verwenden, oder nicht?
Horst S. schrieb:> Wenn man 16 mal misst, sollte sich nach> http://www.atmel.com/images/doc8003.pdf> der Wert um 2 Bit erweitern lassen. Diese beiden Bits könnte man dann> doch als Hysterese verwenden, oder nicht?
Ja, aber mit einem Poti kann man sowieso nicht mehr als 8 Bit
reproduzierbar einstellen. Von daher kann man die Hysterese auch auf den
letzten 2 Bits des 10 Bit Wertes laufen lassen...
Wenn ich feiner auflösen will, dann nehme ich einen Drehgeber mit
Beschleunigung.
Horst S. schrieb:> Kann man nicht per Oversampling die Auflösung vergrößern und dann die> Hysterese drauf legen?
Das funktioniert nur, wenn du genügend Rauschen auf dem Signal hast.
Erstmal sollte man trotzdem gucken, dass der Digitalteil nicht in AVCC
und die Potiverdrahtung rein spuckt (Filter VCC->AVCC, Massekonzept) und
außerdem gucken, ob die Signale stabil und niederohmig genug sind
(Kondensator für Referenzspannung VRef und Signal). Falls der
Kanalmultiplexer für den ADC umgeschaltet wird, hilft ein bisschen Zeit
gegen Übersprechen.
HildeK schrieb:> Du hast mich nicht richtig verstanden.
Doch, das habe ich sehr wohl.
> Beispiel mit Umkehrhysterese, mit z.B. Hysterese=10:> - ich drehe das Poti hoch von z.B. 15 nach 30. Gut, die Werte folgen> brav.> - ich drehe das Poti wieder runter. Erst wenn ich bei 20 bin, wird dann> der Wert wieder verändert, er springt also von 30 auf 20.> Wie bei einer Mechanik mit lästigem Spiel.
Genau. Und woher das kommt, beschreibt der Rest meines Artikels.
Kurzfassung: wenn es nötig erscheint, eine Hysterese zu wählen, die
wirklich "störende" Sprünge bewirkt, stimmt etwas am Konzept der Sache
grundsätzlich nicht. Capisce?
Lothar M. schrieb:> Wenn ich feiner auflösen will, dann nehme ich einen Drehgeber mit> Beschleunigung.
Naja, Mehrgangpotis gibt's ja auch noch. Und z.B. ne Fernsteuerungsachse
(Poti mit Hebel) hat üblicherweise auch 10Bit.
Leider hat der TE nicht geschrieben, wie fein seine PWM auflösen soll.
Wenn er nen 8-Bit-Timer verwenden würde, hättest Du sicher recht. Er
nimmt aber wohl den 16-Bit Timer1.
Wolfgang schrieb:> Das funktioniert nur, wenn du genügend Rauschen auf dem Signal hast.
Ich hab ne ganze Weile nachgedacht, warum das funktioniert. Ich bin zu
dem Schluss gekommen: Ob Du nun gleichverteiltes Rauschen auf den
Eingang legst oder einfach nur +/-1Bit Sägezahn, sollte eigentlich egal
sein.
1
57----------------+--
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
56--------+----------
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
55--------------------
Warum die AN von "just a few LSB" spricht, erschließt sich mir
allerdings auch nach heftigsten geistigen Anstrengungen immer noch
nicht.
Horst S. schrieb:> Ob Du nun gleichverteiltes Rauschen auf den Eingang legst oder einfach> nur +/-1Bit Sägezahn, sollte eigentlich egal sein.
Es reicht ein Sägezahn von +-1/2 LSB...
Und du bekommst dann "Subbits", die zwischen den nichtlienaren Bits der
ADC sitzen. Diese Bits entsprechen dann nicht unbedingt dem, was du
erwartest. Denn der ADC z.B. der ATtiny85 ist ja von sich aus schon
+-1 LSB nichtlinear!
Es grenzt also eigentlich an "schönsaufen", wenn z.B. in eine solche
Übertragungsfunktion noch Zwischenschritte eingefügt werden:
1
59------------------------------------+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
58----------------------------+
10
++++
11
++++
12
57------------------+
13
++
14
++
15
++
16
++
17
56--------+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
55+
Denn die Software nimmt ja jeden der '+' Zwischenschritte als
äquidistant an. Und geht daher von falschen Voraussetzungen aus...
Ich hab's jetzt mal ausprobiert, einfach einen Trimmer an einen AD-Port
gesteckt, den ATMega168 programmiert und über BT mitgelesen:
1
MaxMinOvOvHOut
2
61,60,243,244,61
3
61,60,243,244,61
4
61,60,243,244,61
5
61,60,243,244,61
6
61,60,242,244,61
7
61,61,244,244,61
8
9
...Potiruntergedreht
10
61,60,240,240,60
11
60,60,240,240,60
12
61,60,240,240,60
13
60,60,240,240,60
14
60,59,237,240,60
15
60,59,236,236,59
16
59,58,235,236,59
17
58,57,231,231,57
18
58,57,228,231,57
19
57,56,227,227,56
20
57,56,225,227,56
21
57,56,224,227,56
Max und Min sind jeweils die Maxima/Minima einer 16er Messreihe.
Ov ist der 12 Bit Oversampling-Wert (Summe der 16 Messwerte um 2 Bits
nach rechts geschoben)
OvH(old) ist der Merker für die Hysterese (if (abs(Ov - OvH) > 4) OvH =
Ov;)
Out ist der jitterfreie Wert mit den ursprünglichen 10 Bit Auflösung(OvH
>> 2).
Prost!
Hmm interessant und was bewirkt das jetzt? Daß der Wert sich immer um
ein volles LSB (Zielauflösung) ändern muß, bevor er übernommen wird?
Also alles unter 1/1024 Änderung wird ignoriert?
Man kann auch (ähnlich wie bei der Entprellung) eine Serie von Werten in
einem definierten Zeitfenster einlesen und mit dem alten Wert
vergleichen. Nur wenn die ganze Serie sich ausnahmslos vom alten Wert
unterscheidet, wird sie als neuer Wert übernommen.
batman schrieb:> Hmm interessant und was bewirkt das jetzt? Daß der Wert sich immer um> ein volles LSB (Zielauflösung) ändern muß, bevor er übernommen wird?> Also alles unter 1/1024 Änderung wird ignoriert?
Im Grunde werden Schwellen durch das Oversampling hinzugefügt. Die
Hysterese nimmt sie wieder bis zur ursprünglichen Auflösung zurück,
setzt sie aber flexibler.
Wenn ich mich nicht irre, wirkt das Oversampling auch als Tiefpass,
(Summenbildung, Teilung). Zumindest sehen die Ov-Werte ziemlich danach
aus.
Horst S. schrieb:> Wenn ich mich nicht irre, wirkt das Oversampling auch als Tiefpass,> (Summenbildung, Teilung). Zumindest sehen die Ov-Werte ziemlich danach> aus.
Sehe ich ebenso.
Wenn ich Zeit habe, hole ich mehrere Werte, mache zwischen den Messungen
jeweils eine Pause und werfe Minimum und Maximum weg.
Manfred schrieb:> Wenn ich Zeit habe, hole ich mehrere Werte, mache zwischen den Messungen> jeweils eine Pause und werfe Minimum und Maximum weg.
Nochmal grundlegend: auch ein Medianfilter hilft prinzipiell nicht
gegen den Effekt, den ich dort im
Beitrag "Re: AD-Wert springt" beschrieben habe...
Um das aber noch klarzustellen. Auf Entstörung verzichten sollte man
trotzdem nicht.
Schalte ich die Nachbarn des AD-Pins asynchron zur Messroutine als
Ausgänge hin und her, ist die Jitterfreiheit Vergangenheit.
1
MaxMinOvOvHOut
2
143,125,520,520,130
3
143,125,511,511,127
4
143,125,511,511,127
5
143,125,511,511,127
6
143,122,510,511,127
7
143,125,511,511,127
8
143,125,511,511,127
9
143,125,514,511,127
10
143,125,520,520,130
11
143,125,511,511,127
12
144,125,512,511,127
13
143,125,515,515,128
14
143,125,515,515,128
Ich habe jetzt keinen Kondensator am Messpin und auch keinen als
Abblockung am Controller (ARef = Ub).
Horst S. schrieb:> Schalte ich die Nachbarn des AD-Pins asynchron zur Messroutine als> Ausgänge hin und her, ist die Jitterfreiheit Vergangenheit.
So, wie Deine Meßwerte aussehen, wird Dein Schaltungsaufbau vermutlich
'unterirdisch' sein. Mit ordentlicher Versorgungsspannung und halbwegs
solider Masse- und Signalführung dürften keine nennenwerten Störungen
auftreten. Dein Poti hat hoffentlich keine 1 MOhm, sondern eher <= 10
kOhm?
Horst S. schrieb:> Ich habe jetzt keinen Kondensator am Messpin
Nimm besser einen großen mit mehr Picofarad ;-)
Wo ist denn unser "Autor: Marcel (Gast)" abgeblieben?
Warte noch auf das Schaltbild ....
m.n. schrieb:> Horst S. schrieb:>> Ich habe jetzt keinen Kondensator am Messpin>> Nimm besser einen großen mit mehr Picofarad ;-)
Ein Kondensator, zwischen AnalogInput und GND, ist bei einer
ratiometrischen Messung nicht unbedingt hilfreich.
Denn wenn die Versorgungsspannung schwankt, ergibt sich eine Schwankung
im gewandelten Wert.
Gerade das, sollte doch die ratiometrische Messung verhindern.
Und damit ist der größte(?) Vorteil der ratiometrischen Messung dahin.
Horst S. schrieb:> Schalte ich die Nachbarn des AD-Pins asynchron zur Messroutine als> Ausgänge hin und her, ist die Jitterfreiheit Vergangenheit.
Hmm..
Versetze den Prozessor, während des Messzyklus, in den "noise reduction"
Schlaf.
Arduino F. schrieb:> Ein Kondensator, zwischen AnalogInput und GND, ist bei einer> ratiometrischen Messung nicht unbedingt hilfreich.> Denn wenn die Versorgungsspannung schwankt, ergibt sich eine Schwankung> im gewandelten Wert.> Gerade das, sollte doch die ratiometrische Messung verhindern.> Und damit ist der größte(?) Vorteil der ratiometrischen Messung dahin.
Du gehst von einem idealen ADC aus: extrem hoher Rin und Leckströme im
fA-Bereich? Ein ATmega328 ist davon weit entfernt.
Wir kennen weder die Schaltung noch die Abtastrate. Daher ist ein
ADC-Eingang zunächst möglichst niederohmig anzusteuern.
Wenn ich die Abblockung 100nF direkt am Controller nachhole, sehe ich,
...
1
143,125,510,511,127
2
143,125,511,511,127
3
143,125,511,511,127
4
143,125,514,511,127
5
143,123,510,511,127
6
143,125,511,511,127
7
143,125,511,511,127
8
143,125,515,515,128
9
143,125,520,520,130
10
143,125,511,511,127
11
143,125,510,511,127
...das war's nicht (kein Wunder, die Kapazitäten vom Regler sitzen hier
auf der Schaltung nur 'nen guten Zentimeter vom Controller weg).
Schalte ich noch 1nF am Messeingang dazu (das Poti hat 50k*), sieht die
Sache wieder wesentlich freundlicher aus.
1
128,126,505,504,126
2
127,126,504,504,126
3
128,126,505,504,126
4
128,126,505,504,126
5
127,126,504,504,126
6
127,126,504,504,126
7
128,126,504,504,126
8
127,125,504,504,126
9
128,126,504,504,126
10
128,126,504,504,126
11
127,125,503,504,126
12
127,126,504,504,126
13
128,126,504,504,126
14
127,126,504,504,126
(nicht wundern, die absoluten Werte sind anders, weil ich
zwischenzeitlich am Poti geschraubt habe).
m.n. schrieb:> Du gehst von einem idealen ADC aus:
Nein!
m.n. schrieb:> Daher ist ein> ADC-Eingang zunächst möglichst niederohmig anzusteuern.
Das sagtest du vor her schon!
Habe ich das kritisiert?
Nein!
Ich glaube, dass du mich nicht verstanden hast.
Ich sprach nur davon dass dort ein Kondensator evtl kontraindiziert sein
könnte, sein wird. Da kannst du mit den Füßen auf der Erde rum stampfen,
solange du möchtest. Ein Kondensator kann an der Stelle mehr Schaden
anrichten, als Nutzen bringen.
Horst S. schrieb:> (das Poti hat 50k*)
Das Datenblatt des 168 sagt kleiner als 10kOhm.
(laut meiner Erinnerung)
Bei 50k ist der Kondensator wohl unabdingbar.
Die Vorteile wirken sich dann stärker aus, als die Nachteile.
Arduino F. schrieb:> Da kannst du mit den Füßen auf der Erde rum stampfen,> solange du möchtest.
Macht man das so? Zum Verdichten nehme ich einen Rüttler.
> Ein Kondensator kann an der Stelle mehr Schaden> anrichten, als Nutzen bringen.
Man sieht ja, welcher (Frost-)Schaden durch 1 nF entstanden ist. Die
Mittelwerte sind eingefroren ;-)
Horst S. schrieb:> Ich habe jetzt keinen Kondensator am Messpin und auch keinen als> Abblockung am Controller (ARef = Ub).
Bevor du das nicht gemacht hast und AVcc nicht vernünftig abgeblockt
ist, misst du in den unteren Bits Hausnummern.
Horst S. schrieb:> Schalte ich die Nachbarn des AD-Pins asynchron zur Messroutine als> Ausgänge hin und her, ist die Jitterfreiheit Vergangenheit.
Gut, dass du nach zweieinhalb Tagen selber drauf gekommen bist ...
Wolfgang schrieb:> Erstmal ...
Arduino F. schrieb:> Das Datenblatt des 168 sagt kleiner als 10kOhm.> (laut meiner Erinnerung)> Bei 50k ist der Kondensator wohl unabdingbar.> Die Vorteile wirken sich dann stärker aus, als die Nachteile.
Aus Ermangelung eines 10k Potis habe ich hier 2* 4k7-R's als Ersatz für
ein 10k-Poti in Mittelstellung eingesetzt. Den 1nF habe ich entfernt:
1
520,508,2045,2046,511
2
520,510,2048,2046,511
3
520,510,2046,2046,511
4
520,510,2045,2046,511
5
520,508,2045,2046,511
6
520,510,2048,2046,511
7
520,510,2050,2050,512
8
520,510,2045,2045,511
9
520,510,2050,2050,512
10
520,510,2046,2046,511
11
520,510,2046,2046,511
12
520,510,2046,2046,511
13
520,510,2045,2046,511
14
520,510,2050,2050,512
Die 10k-Angabe bezieht sich auf die Impedanz der Quelle, Die S/H-Stufe
(geschaltete Kapazität) saugt eine höhere Impedanz quasi leer. Die 10k
musst Du also einhalten, wenn Du sich schnell ändernde Werte misst oder
wenn Du den ADMUX bemühst.
Ich tue hier beides nicht, aber Du siehst anhand der oben gezeigten
Werte: Durch die niedrigere Impedanz der Quelle bekomme ich die Störung
vom Nachbarpin nicht weg.
Horst S. schrieb:> Durch die niedrigere Impedanz der Quelle bekomme ich die Störung> vom Nachbarpin nicht weg.
Nunja, das Datenblatt empfiehlt ja auch den Schlaf, um solche Störungen
fern zu halten.
Aber das willst du ja nicht.
Also nimm den Kondensator.
Horst S. schrieb:> Aus Ermangelung eines 10k Potis habe ich hier 2* 4k7-R's als Ersatz für> ein 10k-Poti in Mittelstellung eingesetzt.
Gut, dann hast du die maximal 10k Quellimpedanz auch deutlich
unterschritten: es sind jetzt 4k7/2 = 2k35. Ein 50k Poti erfüllt das ja
fast auch noch: Mittelstellung, zwei mal 25k macht 12k5 Quellimpedanz -
als Maximum. Jede andere Stellung des Potis liefert kleinere Werte für
die Quellimpedanz.
m.n. schrieb:>> Ein Kondensator kann an der Stelle mehr Schaden>> anrichten, als Nutzen bringen.>> Man sieht ja, welcher (Frost-)Schaden durch 1 nF entstanden ist. Die> Mittelwerte sind eingefroren ;-)
Der Kondensator kann unter bestimmten Bedingungen falsche Werte liefern,
was nicht heißt, dass sie deshalb nicht weitgehend konstant sind.
Das passiert dann, wenn die Abtastfrequenz hoch ist und die durch den
Samplekondensator entnommene Ladungsmenge auf Grund einer hohen
RC-Zeitkonstante am Eingang innerhalb der Zeit 1/fa den C nicht wieder
ausreichend aufgeladen werden kann.
Ob das merklich ist, hängt natürlich auch noch vom inneren Aufbau und
Ablauf des Abtastvorgangs ab (Mulitplexbetrieb, Leeren des
Samplekondensators bei jedem Vorgang etc.)
HildeK schrieb:> Das passiert dann, wenn die Abtastfrequenz hoch ist und die durch den> Samplekondensator entnommene Ladungsmenge auf Grund einer hohen> RC-Zeitkonstante am Eingang innerhalb der Zeit 1/fa den C nicht wieder> ausreichend aufgeladen werden kann.
Die Ladung für den Samplekondensator muss so oder so irgendwo her
kommen. Falls kein zusätzlicher Kondensator am Eingang vorhanden ist,
hat man beim Umladen des Samplekondensators eine Spannungsabfall am
Poti, der impedanz-/einstellungsabhängig zu einem Messfehler führt. Mit
Kondensator wird der Spannungssprung um das Verhältnis C zu Sample-C
kleiner, auch wenn man die RC-Zeitkonstante zum Nachladen hat.
Wolfgang schrieb:> Mit> Kondensator wird der Spannungssprung um das Verhältnis C zu Sample-C> kleiner, auch wenn man die RC-Zeitkonstante zum Nachladen hat.
So ist es. Und wenn die RC-Zeitkonstante wegen hoher Abtastrate zu hoch
wird, muß man ggf. noch einen zusätzlichen OPV verwenden - ohne auf den
Kondensator verzichten zu können.
Der Andere schrieb:> Der TO: Marcel hat sich seit dem Eröffnungspost nicht mehr gemeldet.
Marcel hat eine Umschulung begonnen, er studiert jetzt Philosophie.
Wolfgang schrieb:> Mit> Kondensator wird der Spannungssprung um das Verhältnis C zu Sample-C> kleiner, auch wenn man die RC-Zeitkonstante zum Nachladen hat.
Ja, aber dieses Verhältnis kann man so wählen, dass es < 1/2 LSB bleibt.
Wenn aber dieser Betrag z.B. nur zur Hälfte wieder durch das Nachladen
des externen C ausgeglichen werden kann, dann summiert sich das ev. auf
einige LSBs auf, bis sich ein Gleichgewicht einstellt. Dies kommt dann
daher, dass bei einer größer werdenden Differenz zwischen der Spannung
am externen C und der EMK der Quelle sich auch der Ladestrom in den
externen Cs erhöht, so dass sich irgendwann Ladung und Entladung
ausgleichen. Die fester Ablage bleibt aber.
Damit gibt es einen optimalen Wert für die externe RC-Kombination. Zu
kleine Zeitkonstanten filtern ungenügend und liefern ein schlechtes
Verhältnis beider Cs, zu hohe Werte bringen Ablagen.
Das Ganze bleibt auch abhängig, wie das Abtastsystem arbeitet: Wird der
Sample-C nach dem Vorgang entladen, werden im Mulitplexbetrieb mit dem
selben C noch andere Signale zwischendurch gemessen und welche Werte
hatten diese. Oder, ist im AD-Wandlereingang vielleicht sogar noch ein
Buffer.
Ich weiß, das ist etwas akademisch, ist aber als Fehlerquelle in der
Literatur bzw. in App-Notes von Herstellern (selten mal) vermerkt und
sollte bei hohen Genauigkeitsanforderungen mit hoher Auflösung und
schneller Abtastung zumindest betrachtet werden.
Mich hatte vor einigen Jahren ein Xilinx-FAE darauf hingewiesen und auch
Gleichungen geliefert. Leider habe ich darauf keinen Zugriff mehr.
HildeK schrieb:> sollte bei hohen Genauigkeitsanforderungen mit hoher Auflösung und> schneller Abtastung zumindest betrachtet werden.
Da auf jeden Fall. Schaltungsbeispiele für die Signalaufbereitung
schneller ADCs findet man vielfach in den Datenblättern schneller OPVs.
Fehler bei zu hoher Ausgangsimpedanz am ADC-Eingang merkt man auch
daran, daß die Linearität 'flöten geht'. Bei den 10 Bit eines AVR ADCs
ist das alles weniger problematisch.
HildeK schrieb:> Ich weiß, das ist etwas akademisch, ...
Für sooh akademisch halte ich das gar nicht. Jedem, der über den 10-Bit
Tellerrand hinaus guckt und mal genauer drauf achtet, was sein
Messsystem eigentlich so treibt, sollten derartige Problemstellen schon
aufgefallen sein. Nimm z.B. PC-Messkarten von NI. Der unvoreingenommene
Nutzer glaubt ein Plug&Play 16-Bit Messsystem einzusetzen. Diese heile
Welt bricht schnell zusammen, wenn man hinguckt. Da ist
Kanalübersprechen über den Multiplexer ein ernstes Thema.
Arduino F. schrieb:> Nunja, das Datenblatt empfiehlt ja auch den Schlaf, um solche Störungen> fern zu halten.
Einschränkung dazu: Der Schlaf reduziert den Radau, den der Controller
selbst produziert. Führe ich die Störung von Extern in den Nachbarpin
(zweiter AD-Messkanal), hilft das nicht.
batman schrieb:> Wird das Poti direkt vom AVcc gespiesen?
Ub = AVCC = ARef
Ich missbrauche hier für die Tests eine uralte Platine, mit der mein
Sohn früher mal Servos und Motoren gesteuert hat. Vier der Pins an PORTC
laufen auf Servostecker, an einen davon patche ich hier das Poti. Als
wir (er) das Teil gebaut haben, war er noch in der Grundschule, da
wollte ich ihm neben den ganzen Größenwahndiskussionen ("ich brauche
mindestens 30 Servos" - "Du brauchst vier Servos, LEDs und 'nen
TWI-Erweiterungsport") nicht auch noch den ADC unter die Nase reiben.
Ich hab noch was ausprobiert, den 1nF am Poti wieder angelötet, ein
kleines Fernsteuerungsservo angeschlossen und mit einem Jittersignal am
PWM-Eingang versehen, um mal Spikes auf der Versorgung des Controllers
zu erzeugen. Das zuckt jetzt also munter vor sich hin.
1
MaxMinOvOvHOut
2
318,318,1272,1272,318
3
318,318,1272,1272,318
4
327,318,1274,1272,318!!!
5
318,318,1272,1272,318
6
318,318,1272,1272,318
7
318,318,1272,1272,318
8
328,317,1274,1272,318!!!
9
318,318,1272,1272,318
10
318,318,1272,1272,318
Trotzdem die Versorgung jetzt >200mV-Spikes (Hameg bemüht) aufweist, ist
das Ergebnis immer noch gut.
Drehe ich das Poti gegen Ub, wirkt die Gleichtaktunterdrückung auf die
Spikes am besten (Ub, ADC-Eingang, AVCC und ARef haben alle die gleiche
Quelle).
1
MaxMinOvOvHOut
2
1005,1004,4018,4020,1005
3
1005,1004,4019,4020,1005
4
1005,1005,4020,4020,1005
5
1005,1005,4020,4020,1005
6
1010,1005,4017,4020,1005!!!
7
1005,1005,4020,4020,1005
8
1005,1005,4020,4020,1005
Drehe ich das Poti gegen Masse, sind die Spikes erwartungsgemäß am
besten in den Messwerten zu sehen:
1
MaxMinOvOvHOut
2
6,6,24,24,6
3
6,6,24,24,6
4
27,2,27,24,6!!!
5
6,5,23,24,6
6
6,6,24,24,6
7
6,6,24,24,6
8
26,2,27,24,6!!!
9
6,6,24,24,6
Wenn ich jetzt anfange, an AVCC zu filtern, müsste ich das Poti
idealerweise mit hinter die Filterschaltung von AVCC/ AREF nehmen, damit
ich mit Filter kein schlechteres Ergebnis bekomme als ohne.
Sehe ich das richtig so?
Horst S. schrieb:> Wenn ich jetzt anfange, an AVCC zu filtern, müsste ich das Poti> idealerweise mit hinter die Filterschaltung von AVCC/ AREF nehmen, damit> ich mit Filter kein schlechteres Ergebnis bekomme als ohne.> Sehe ich das richtig so?
das ist natürlich logisch da die AVCC/AREF die Ref ist, wieso fragst du?
und ohne Spannungsumweg als radiometrische Messung ist ADC das
Teilerverhältnis
Eigentlich dachte ich bisher, du hättest dir schon Mühe gegeben einen
sauberen Aufbau hin zu stellen..........
Tipp:
Wer Schrauben in eine Waschmaschine wirft, darf sich über wackelnde ADC
Werte nicht beschweren.
Ja, das Poti ruhig hinter den Filter.
Du solltest Aref nicht belasten.
Also, wenn, dann an Avcc.
Horst S. schrieb:> Führe ich die Störung von Extern in den Nachbarpin> (zweiter AD-Messkanal), hilft das nicht.
Nicht ohne Grund, kann man den Digitalteil der Analog Pins deaktivieren.
Das spart etwas Strom, und verringert das Gezappel.
Joachim B. schrieb:> das ist natürlich logisch da die AVCC/AREF die Ref ist, wieso fragst du?
War ne Fangfrage, sorry.
Beim Poti kann ich das machen, bei 'nem einfachen Temperatursensor
KTY... auch.
Wenn ich 'nen Sensor nehme, der analog ausgibt, aber die Versorgung
pulst (z.B. Sharp IR Abstandssensoren, 1A), werde ich wohl nicht
umhinkommen, das Teil einzeln zu entstören.
Ehrlich gesagt wäre ich allerdings bis dato auch nicht auf die Idee
gekommen, nen Eingabepoti einfach mit an AVCC zu hängen.
Arduino F. schrieb:> Nicht ohne Grund, kann man den Digitalteil der Analog Pins deaktivieren.> Das spart etwas Strom, und verringert das Gezappel.
Der wichtigste Hinweis aus der AN fehlt noch: Vermeide steilflankige
Signale an den Nachbarpins.
Hätte ich auch nicht getan, wenn es nicht so schön in der Praxis
Störungen (Übersprechen) auf der Zuleitung des AD-Pins simulieren würde.
Arduino F. schrieb:> Eigentlich dachte ich bisher, du hättest dir schon Mühe gegeben einen> sauberen Aufbau hin zu stellen..........
Ich habe hier letztens im Forum die Idee gelesen: "Löte alle Filter erst
zum Schluss ein. Teste dabei für jeden einzelnen Filter die Wirkung".
Ich wollte das mal ausprobieren und das bot sich hier mit dem
Oversampling regelrecht an.
Achso....
Da wird mir ja einiges klarer...
Du willst Störungen provozieren, anstatt diese vermeiden zu wollen, wie
die meisten anderen.
Dann wünsche ich dir noch viel Erfolg, auf allen deinen Wegen!
Horst S. schrieb:> Verklickt?> (Verstehe den Kontext zum Verlinkten gerade nicht)
nö,
es ging um Filterung der Versorgung um Störungen von Analogwerten
fernzuhalten, im TSOP sind Analogschaltungen.
Will man also radiometrische Messungen oder Spannungsmessungen zu einem
ADC leiten scheint es mir logisch die Versorgung der Quelle besser zu
filtern.
Ach, ich hatte Dich so verstanden, dass es Standard ist, hinter den
AVCC-Filter des Controllers zusätzliche Peripherie zu hängen (und der
Link sei ein konkretes Beispiel dafür). Sorry, mein Fehler.