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
Ja, der Wert kann springen. Falls das nicht gut ist, filtern. zB mit einem Tiefpass Out = Speicher = In/64+Speicher(1-1/64) oder aehnlich.
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"
:
Bearbeitet durch Moderator
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
:
Bearbeitet durch Moderator
Bei einem Bit ist das noch so aber ab 2 Bit (=4 Quanten) Schwankungsbreite greifen Gegenmaßnahmen.
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 | Max Min Ov OvH Out |
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 | ...Poti runter gedreht |
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.
:
Bearbeitet durch User
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...
:
Bearbeitet durch Moderator
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 | Max Min Ov OvH Out |
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 | Max Min Ov OvH Out |
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 | Max Min Ov OvH Out |
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 | Max Min Ov OvH Out |
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.
Horst S. schrieb: > Ehrlich gesagt wäre ich allerdings bis dato auch nicht auf die Idee > gekommen, nen Eingabepoti einfach mit an AVCC zu hängen. ist aber Standard, z.B. so https://forelectronics.files.wordpress.com/2014/05/tsop-ckt1.jpg
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!
Joachim B. schrieb: > Horst S. schrieb: >> Ehrlich gesagt wäre ich allerdings bis dato auch nicht auf die Idee >> gekommen, nen Eingabepoti einfach mit an AVCC zu hängen. > > ist aber Standard, z.B. so > > https://forelectronics.files.wordpress.com/2014/05/tsop-ckt1.jpg Verklickt? (Verstehe den Kontext zum Verlinkten gerade nicht)
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.
Horst S. schrieb: > Sorry, mein Fehler. kein Problem, aber ein geeignetes Poti am gefilterten AVCC aich nicht ;)
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.