Hallo Leute,
ich muss durch Oversampling meinen 10bit ADWandler auf 12bit erhöhen,um
die Genaugigkeit zu verbessern. Das Prinzip hab ich grob verstanden,bloß
ich bin einfach nicht in der Lage dies auf Atmel umzusetzen.
Programmieren ist grade nicht meine Stärke...
1AD-Wert macht schon einen Höhenunterschied von 10m
--> Professor will es auf 2,5m haben)
ich hoffe es kann mir wer da behilflich sein :)
Moin,
Mich beschleichen da zwar leichte Zweifel, ob das dann so klappt, wie
du's gerne haettest, aber der simpelste Weg waere wohl:
Du nimmst je 4 Samples à 10bit und summierst die auf zu einem 12bit
Wert. Fertsch.
"Schoener" gehts auch, wenn man dann eben mehr als 4 Samples nimmt und
die dann auch "schoener" (als mit einem FIR mit Koeffizienten [1,1,1,1])
tiefpassfiltert.
Gruss
WK
Ja, das ist Dein gewünschtes Oversampling.
Du kannst dann noch die linearen Fehler rausrechnen wenn Du die Offset
und Gain korrektur durchführst. Steht oben im #define.
Dann kann dir auch die meist falsche interne Referenz egal sein.
Gruß
Frank aus Köln
Diri schrieb:> ich schätz dann mal er will eine höhere Auflösung
Gespaltene Persönlichkeit ?
Diri schrieb:> an den Bauteilen darf ich nichts ändern
Ohne ausreichendes Rauschen wird das aber nichts.
Harald W. schrieb:> Ja, da steht auch "resolution" und nicht "accuracy".
Vielleicht mal mehr als die Überschrift lesen:
"In most cases 10-bit resolution is sufficient, but in some cases higher
accuracy is desired."
Bei einem mit symetrischen Fehler behafteten Signal kann man sehr wohl
die Genauigkeit durch Oversampeling erhöhen.
Harald W. schrieb:> Das geht nicht. Du kannst zwar die Auflösung auf 12 Bit steigern,> nicht aber die Genauigkeit.
Wie hoch die Genauigkeit ist, kannst du nicht beurteilen. Wenn das
Signal auf 14 bit genau ist, wird durch Oversempeling das Signal auch
genauer. Typisches mikrocontroller.net Bla Bla...
Diri schrieb:> 1AD-Wert macht schon einen Höhenunterschied von 10m> --> Professor will es auf 2,5m haben)
Was für einen Sensor benutzt du da?
Der ADC wird doch sicher mit irgendetwas elektrischem gefüttert.
Erfahrungsgemäß ist der interne ADC der AVR µC deutlich besser als im
Datenblatt steht, und das selbst bei höheren ADC-Frequenzen als 500kHz
noch.
Das klappt so schon ganz gut.
Wenn hohe Samplingraten gefordert sind, sollte man gucken dass man den
FIR-Filter mit Potenzen von 2 aufbaut, dann kann man auf kostspielige
Divisionen verzichten. Matlab hilft.
Dergute W. schrieb:> Du nimmst je 4 Samples à 10bit und summierst die auf zu einem 12bit> Wert. Fertsch.
Nee, da kommt auch bloß Mist raus. Ich hatte das so gemacht, daß ich auf
das Meßsignal einen winzigen Sägezahn draufmoduliert hab und dann so
über 128 Samples oder mehr gemittelt habe. Man braucht dazu nur ein
Portbein, einen C und 2 Widerstände.
Ja, das gibt mehr Auflösung, aber keinesfalls mehr an Genauigkeit. Ist
aleo eher was für's Auge...
W.S.
Harald W. schrieb:> Burgas schrieb:>>> Das ist deine AppNote: AVR121: Enhancing ADC resolution by oversampling>> Ja, da steht auch "resolution" und nicht "accuracy".
Harald, die Wahrscheinlichkeit, dass du diese AppNote gelesen hast,
setzte ich mit Null an.
Diri schrieb:> Wolfgang schrieb:>> Was für einen Sensor benutzt du da?>> Der ADC wird doch sicher mit irgendetwas elektrischem gefüttert.>> einen MPXHZ6115A6u
Da habe ich ja meine Zweifel, ob 12 Bit für diesen hochwertigen
Druckaufnehmer genug sind. Der hat schließlich eine Genauigkeit von +/-
1,5%. Dagegen sieht jede Küchenwaage blass aus.
MaWin schrieb:> Ohne ausreichendes Rauschen wird das aber nichts.
Das ist vollkommen korrekt und diese Erfordernis wird oft massiv
unterschätzt (nicht zuletzt von diversen Regulars dieses Forums).
Einige dieser Lichtgestalten haben sogar richtige "Versuchsreihen"
geposteted, die ihrer Meinung nach bewiesen haben, das die Erhöhung
der Auflösung garnicht funktioniert, dass die entsprechende Atmel-AN
also kompletter Bullshit ist.
Dabei haben sie eigentlich nur bewiesen, dass sie keine Ahnung von
Mathematik haben. Oder zumindest keine Ahnung von analoger Hardware...
Es ist nämlich überaus leicht, den AD-Wandler selber genügend Rauschen
produzieren zu lassen. Und das wirkt sich dann sogar noch in anderer
Richtung günstig aus...
Man muss Datenblätter eben nicht nur lesen und sträflich umsetzen
können, sondern manchmal auch einfach verstehen und fantasievoll
umsetzen.
Vorgefertigte C-Libs sind hier nicht unbedingt als Katalysator für die
Gewinnung neuer Erkenntnisse geeignet. Nichtmal dann, wenn sie aus
eigener Feder stammen und nicht per C&P beschafft wurden, was ich o.g.
Personenkreis durchaus zugestehen würde, der überwiegenden Mehrheit der
C-User allerdings erfahrungsgemäß nicht.
Für beide aber gilt gleichermaßen: Sie glauben ganz fest: Es gibt nix,
was meine einmal fertige, portable, was auch immer Lib nicht kann...
[EDIT Moderator: Beleidigung gelöscht]
Nimm doch einfach die Random-Funktion des Compilers, um Dir noch 2 Bits
in die Tasche zu lügen. Das macht überhaupt keinen Unterschied.
Ich hatte früher auch mal überlegt, mit der PWM ein Dreiecksignal auf
den Eingang zu modulieren, um mehr Bits rauszukitzeln.
Aber einen SPI-ADC mit der gewünschten Auflöung zu nehmen, ist einfacher
und außerdem funktioniert es.
Also eine Analogschaltung die sooo gut ist, das aus einem 10 Bit ADC
auch wirklich 10 verwertbare Bits raus kommen ist schon eine
Herausforderung.
Wahrscheinlich sind auf der Platine nur 8 Bits repräsentativ für den
Analogwert und die letzten beiden Bits einfach nur Müll.
Alles was da rüber hinausgeht wird wirklich sehr aufwändig.
Wenn man das dann mit Oversampling hochrechnet gibt das halt 9 Bit
Nutzwert und 3 Bit Müll.
Aus Scheiße lässt sich halt kein Gold machen, egal wie viel man rechnet.
Da hilft nur die richtige Hardware zu verwenden.
Ralph schrieb:> Also eine Analogschaltung die sooo gut ist, das aus einem 10 Bit ADC> auch wirklich 10 verwertbare Bits raus kommen ist schon eine> Herausforderung.>> Wahrscheinlich sind auf der Platine nur 8 Bits repräsentativ für den> Analogwert und die letzten beiden Bits einfach nur Müll.> Alles was da rüber hinausgeht wird wirklich sehr aufwändig.>> Wenn man das dann mit Oversampling hochrechnet gibt das halt 9 Bit> Nutzwert und 3 Bit Müll.>> Aus Scheiße lässt sich halt kein Gold machen, egal wie viel man rechnet.>> Da hilft nur die richtige Hardware zu verwenden.
Du reihst Behauptung an Behauptung - nur allein sehe ich weder einen
Beleg noch einen Beweis für diese. Sei doch bitte so lieb und reiche
beides nach.
Ansonsten: Wie sagt es der Pinguin so schön: Wenn man keine Ahnung hat
...
Burgas schrieb:>>> Das ist deine AppNote: AVR121: Enhancing ADC resolution by oversampling>>>> Ja, da steht auch "resolution" und nicht "accuracy".>> Harald, die Wahrscheinlichkeit, dass du diese AppNote gelesen hast,> setzte ich mit Null an.
Ich hab mich nur auf die Überschrift bezogen, habe aber selbst schon
Oversampling benutzt. Allerdings nicht, um die Genauigkeit zu steigern,
sondern um mir ein Antialiasingfilter zu ersparen.
Ich empfehle Abbildung 8 in diesem Datenblatt
http://www.nxp.com/files/sensors/doc/data_sheet/MPXA6115A.pdf
Der Fehler des Sensor ist Rechteck verteilt und hat +-1,5 KPa
Bei 15 kPa also sogar 10% Fehler.
Bei 115 kPa immerhion noch 1%.
Selbst wenn du 10 Bit Auflösung hast mach das dein Messergbniss nicht
besser. Alle Stellen die durch eine hohe Auflösung bekommst sind NICHT
SIGNIFIKANT! Sie sehen zwar gut aus sind aber Wertlos!
Diri schrieb:> ich muss durch Oversampling meinen 10bit ADWandler auf 12bit erhöhen,um> die Genaugigkeit zu verbessern.
So ziemlich alle Leser Deines Beitrages sind sich (hoffentlich) einig,
dass Du die Genauigkeit nicht verbessern kannst.
> Das Prinzip hab ich grob verstanden,
Scheinbar nicht, sonst könntest Du GENAUIGKEIT und AUFLÖSUNG
unterscheiden.
> 1AD-Wert macht schon einen Höhenunterschied von 10m> --> Professor will es auf 2,5m haben)
Zeige bitte die Aufgabe im originalen Wortlaut und den dazu gehörigen
Schaltplan.
Ohne Rauschen geht es nicht! Das steht auch in der App-Note. Kleines
(Gedanken)experiment:
Wenn kein Rauschen vorhanden ist, nimm mal immer nur die ersten n Bit
und betreibe damit Oversampling. Was du dann ausrechnest vergleichst du
mit dem Messergebnis mit voller Bitzahl.
Besonders anschaulich wird es, wenn man nur wenige Bit nimmt, n also
klein ist. Ohne Rauschen bleiben die ersten n Bit stabil. Man erhält
also immer die identischen Werte für diese ersten n Bits, egal wie oft
man die Messung durchführt. Da ist es dann egal wie oft am
"oversampled". Der Informationsgewinn ist "NULL"! Man kann daraus keine
Schlüsse ziehen wie das nächste Bit aussieht.
Ob ich nun das ganze mit nur den ersten n Bit, oder mit den ganzen 10
Bit veranstalte, ändert nichts am Prinzip. Ich habe nur ein kleines n
vorgeschlagen, damit es anschaulicher wird und damit man Bit n+1 noch
real messen kann um es mit dem Oversamplingergebnis vergleichen kann.
Ferner reicht nicht irgendein Rauschen. Es muß bestimmte Anforderungen
erfüllen. Aber bislang haben wir noch gar kein Rauschen, zumindest ist
es bislang noch nicht erwähnt worden beim Versuchsobjekt.
Welcher AVR genau wird eingesetzt? Manche haben die Möglichkeit das
Signal zu verstärken um so lokal für einen Ausschnitt des Wertebereichs
eine höhere Auflösung zu erzielen. Je nach Aufbau hat man ja auch nicht
das volle Spektrum, sondern das Signal wird in einem bestimmten Bereich
liegen.
c-hater schrieb:> MaWin schrieb:>>> Ohne ausreichendes Rauschen wird das aber nichts.>> Das ist vollkommen korrekt> [...]> [zig weitere Zeilen Einleitung]> [mit den obligatorischen Seitenhieben]> [...]> [EDIT Moderator: Beleidigung gelöscht]
Warum hörst Du nach der Einleitung auf? Ich dachte Jetzt kommt der
Hauptteil in dem Du erklärst wie man mit phantasievollem Umgang mit dem
Datenblatt dem ADC beibringt aus sich heraus ein geeignetes Rauschen mit
geeigneter Amplitude und Verteilung zu produzieren?
Benedikt S. schrieb:> Ich empfehle Abbildung 8 in diesem Datenblatt>> http://www.nxp.com/files/sensors/doc/data_sheet/MPXA6115A.pdf>> Der Fehler des Sensor ist Rechteck verteilt und hat +-1,5 KPa> Bei 15 kPa also sogar 10% Fehler.> Bei 115 kPa immerhion noch 1%.>> Selbst wenn du 10 Bit Auflösung hast mach das dein Messergbniss nicht> besser. Alle Stellen die durch eine hohe Auflösung bekommst sind NICHT> SIGNIFIKANT! Sie sehen zwar gut aus sind aber Wertlos!
Üblicher weise wird der Fehler immer auf den Nennwert des Aufnehmers
bezogen, und nicht auf den Istwert. Ferner ist die Aussage ob es
SIGNIFIKANT ist oder nicht nicht durch dich zu entscheiden. Wenn für die
Ergebnisse z.B. nur die relative Änderung maßgebend ist, der Fehler des
Sensors aber z.B. nur ein Offset ist, dann kann dass Ergebnis besser
werden. Weiterhin besteht die Möglichkeit den Sensor einzumessen und so
die Genauigkeit zu verbessern. Wichtiger als die Angabe einer absoluten
Genauigkeit ist für die meisten Aufgaben die Wiederholbarkeit.
>So ziemlich alle Leser Deines Beitrages sind sich (hoffentlich) einig,>dass Du die Genauigkeit nicht verbessern kannst.
Ich nicht.
Definiere doch mal "Genauigkeit" eines AD-Wandlers. Kann die Genauigkeit
höher als die Auflösung ( Quantisierungsfehler ) sein?
Falls nein: Könnte die Genauigkeit steigen, wenn die Auflösung steigt?
Also zu meinem Problem nochmal:
Wenn ich mit meiner Platine (+Drucksensor) 1 m hochgehe ,ändert sich der
AD-Wert um 1.1 , was einen Höhenunterschied von ca.10m beträgt
und das reicht meinen Professor nicht aus ist ihm zu viel
er meint wenn ich Oversampling nutze ,würde die Höhe sich dann um 2.5m
Unterscheiden statt den vorherigen 10m
microcontroller--Atmega48PA
Ich hoffe es ist jetzt etwas klarer geworden was gefragt ist
habt bissle Rücksicht bin was Programmieren/Digitaltechnik noch relativ
am anfang..^^
@ Diri (Gast)
>Wenn ich mit meiner Platine (+Drucksensor) 1 m hochgehe ,ändert sich der>AD-Wert um 1.1 ,
Kaum, denn der AD-Wandler liefert Integerzahlen, keine Fließkommazahlen.
Außerdem, wenn du nur um 1m die Höhe des Sensor veränderst, wieso sollte
das dann 10m Höhenunterschied entsprechen?
> was einen Höhenunterschied von ca.10m beträgt>und das reicht meinen Professor nicht aus ist ihm zu viel
???
Zuviel?
>er meint wenn ich Oversampling nutze ,würde die Höhe sich dann um 2.5m>Unterscheiden statt den vorherigen 10m
Also will er mehr AUFLÖSUNG! Nicht GENAUIGKEIT!
>Ich hoffe es ist jetzt etwas klarer geworden was gefragt ist>habt bissle Rücksicht bin was Programmieren/Digitaltechnik noch relativ>am anfang..^^
Was dich aber nicht von der Pflicht entbindet, die Netiquette zu
berücksichtigen.
Diri schrieb:> Wenn ich mit meiner Platine (+Drucksensor) 1 m hochgehe ,ändert sich der> AD-Wert um 1.1 , was einen Höhenunterschied von ca.10m beträgt
Du hast einen Rechenfehler im Programm. Der könnte aber auch auf einem
vorausgehenden Denkfehler basieren...
Ähmmm, nachgeschaut: es ist beides zusammen und dazu noch ein
Programmierfehler. Du solltest deine Umrechnung unbedingt nochmal
ansehen:
>>> 1AD-Wert macht schon einen Höhenunterschied von 10m
Was ist hier "1 AD-Wert"?
BTW:
ad_wert1 = ADCL + (ADCH<<8); // 10-Bit-Wert berechnen
Lass das doch den Compiler machen, der kann das schon:
ad_wert1 = ADC;
Diri schrieb:> er meint wenn ich Oversampling nutze ,würde die Höhe sich dann um 2.5m> Unterscheiden statt den vorherigen 10m
Es ist aber gut möglich, das meim nächsten sampeln der Wert auf einmal
10...15m danebenliegt, ohne das Du die Höhe geändert hast. Deine
ganze Messeinrichtung ist vermutlich für eine präzise Höhenmessung
viel zu ungenau.
Lothar M. schrieb:> Ähmmm, nachgeschaut: es ist beides zusammen und dazu noch ein> Programmierfehler. Du solltest deine Umrechnung unbedingt nochmal> ansehen: lcd_putc(i/100 + 0x30); // Hunderter ausgeben (°C Zehner)> i = i%100;> lcd_putc(i/10 + 0x30); // Zehner ausgeben (°C Einer)>> lcd_putc(i%10 + 0x30);> lcd_putc(0x2E);> lcd_putc(i%10 + 0x30);>
ja seh grad das meine Nachkommastelle falsch ist
Diri schrieb:> 1AD-Wert macht schon einen Höhenunterschied von 10m> --> Professor will es auf 2,5m haben)
Ich hoffe mal, dass es ums Prinzip geht und nicht darum, eine
Höhenmessung mit besser als 10m Auflösung zu machen.
Sonst würde ich auch den Weg von Peter empfehlen und mal über die
Bauteile nachdenken. Mit einem BMP280 oder besser noch MS5611 wäre man
mindestens einen Faktor 5 besser, als der Professor möchte. Intern
verwenden die auch mehr oder weniger kräftiges Oversampling.
Peter D. schrieb:> Aber einen SPI-ADC mit der gewünschten Auflöung zu nehmen, ist einfacher> und außerdem funktioniert es.
chris_ schrieb:> Definiere doch mal "Genauigkeit" eines AD-Wandlers. Kann die Genauigkeit> höher als die Auflösung ( Quantisierungsfehler ) sein?
Nanana..
Also, die Genauigkeit eines ADC kann tatsächlich deutlich höher sein als
dessen Auflösung.
Stell dir dafür (Gedankenexperiment) einen 1 Bit ADC vor,
Eingangs-Spannungsbereich von 0 bis 5 Volt.
Man kann dafür ein TTL-Gatter nehmen oder einen Präzisions-Komparator.
Beim TTL-Gatter ist uns allen klar, daß dessen Schaltschwelle irgendwo
im verbotenen Bereich liegt, also gerade ausreichend um sagen zu können
"Eingang ist etwa 0 Volt oder etwa 5 Volt".
Aber beim Komparator kann die Präzision der Schaltschwelle bedeutend
besser sein als die lumpige Auflösung von nur 1 Bit. Da kann man bei
geeignetem Komparator durchaus sagen "Eingang ist kleiner als 2.49 Volt
oder eben nicht".
ABER: Wer als Hersteller eine Technologie beherrschen würde, die
deutlich mehr Genauigkeit als die vorgesehene Auflösung bringen würde,
der würde seine Auflösung erhöhen, solange bis er grad noch so "no
missing codes" behaupten kann.
Fazit: Man findet ganz gewiß keinen ADC, der 12 bit genau ist aber nur
10 Bit liefert. Das wäre seitens des Herstellers rausgeschmissener
Fertigungsaufwand.
Was also kann man mit einem aufgeprägten Sägezahn oder Rauschen
erzielen? Man kann die Übertragungskurve zwischen den 10 Bit des
Wandlers auffüllen mit Zwischenwerten, die die Auflösung tatsächlich
erhöhen. Aber das ist dann keine Gerade mehr, sondern ein eher
unregelmäßig eckiger Verlauf, weil eben die Schaltschwellen des ADC
nicht mehr hergeben und ihrerseits NICHT auf einer wirklichen Geraden
liegen.
W.S.
W.S. schrieb:> Fazit: Man findet ganz gewiß keinen ADC, der 12 bit genau ist aber nur> 10 Bit liefert. Das wäre seitens des Herstellers rausgeschmissener> Fertigungsaufwand.
Der Fertigungsprozeß ist relativ unabhängig davon, was man für eine
Schaltung damit baut, insbesondere wieviel Bit sie am Ende ausgeben
soll. Einen besonders schlechten Analogteil zu fertigen, bloß um ihn
einer niedrigen digitalen Auflösung der Schaltung anzupassen, halte ich
für wenig plausibel.
>Fazit: Man findet ganz gewiß keinen ADC, der 12 bit genau ist aber nur>10 Bit liefert. Das wäre seitens des Herstellers rausgeschmissener>Fertigungsaufwand.
Mittle doch mal eine Stunde lang das Signal des Drucksensors und schaue,
ob Du einen Höhenunterschied genauer als die Angesprochenen 10m
detektieren kannst ( falls Du es schaffst, den Luftdruck während den
Messungen konstant zu halten )
W.S. schrieb:> Fazit: Man findet ganz gewiß keinen ADC, der 12 bit genau ist aber nur> 10 Bit liefert.
Das umgekehrte dagegen findet man deutlich häufiger. :-)
Man könnte versuchen, mit dem internen Komparator und etwas Hühnerfutter
einen Dual-Slope-ADC zu programmieren. Damit erreicht man deutlich
höhere Auflösungen.
batman schrieb:> Einen besonders schlechten Analogteil zu fertigen, bloß um ihn> einer niedrigen digitalen Auflösung der Schaltung anzupassen, halte ich> für wenig plausibel.
Um so plausibler ist es, dass beim Fertigungsprozess unterschiedlich
gute Wandler raus kommen und dass sie dann den Stempel je nach Güte
bekommen.
>Man könnte versuchen, mit dem internen Komparator und etwas Hühnerfutter>einen Dual-Slope-ADC zu programmieren. Damit erreicht man deutlich>höhere Auflösungen.
Der Parallax Propeller macht mit drei normalen Digital IOs einen ADC mit
14Bit Auflösung:
https://www.parallax.com/sites/default/files/downloads/AN008-SigmaDeltaADC-v1.0.pdf
Eigentlich wollte ich das Prinzip schon immer mal auf einem AVR mit
seinem Comparator probieren, aber leider kam ich nie dazu ...
Peter D. schrieb:> einen Dual-Slope-ADC zu programmieren.
Halte ich für Quatsch, denn guck mal was die meisten Anfragenden hier in
diesem Forum so für Fragen stellen. Selbst wenn einer nur 3 LED's in
Abhängigkeit von seiner Batteriespannung leuchten lassen will, hat er
Probleme mit seiner main(). Ach nö, für einen guten DualSlope-ADC und
den auch noch in Software würde es ne Kombination von HW-Verständnis
und Programmierfähigkeiten brauchen. Aber da kenne ich jemanden, der
mal behauptet hatte, daß sein ATtiny oder so ähnlich nur deshalb so gut
funktionieren würde, weil er das Abtasttheorem nicht kennt. Gelle?
Abgesehen davon dürfte heutzutage SigmaDelta wesentlich eher angesagt
sein. Sowas gibt's in Form kleiner Achtbeiner mit weniger als 1 mA
Gesamtstromaufnahme und 20 Bit, von denen man mindestens 17 Bit
gebrauchen kann. Da lohnt sich ein DualSlope in Software nicht mehr
wirklich. Guck dir mal an, was die Leute von Freescale bei ihren Kinetis
für Kopfstände anstellen, um ihre internen 16 Bit DualSlope-ADC's zum
benutzbaren Laufen zu bringen. Nee, wer sich das freiwillig antut,
hat's verdient...
W.S.
>Aber da kenne ich jemanden, der>mal behauptet hatte, daß sein ATtiny oder so ähnlich nur deshalb so gut>funktionieren würde, weil er das Abtasttheorem nicht kennt. Gelle?
Ah, Du spielst auf den Thread an, in dem Du das Problem nicht verstanden
hattest:
Beitrag "Re: Nicht-Sinus DDS"
W.S. schrieb:> Fazit: Man findet ganz gewiß keinen ADC, der 12 bit genau ist aber nur> 10 Bit liefert. Das wäre seitens des Herstellers rausgeschmissener> Fertigungsaufwand.
Das ist richtig. Aber genauso richtig ist: man findet ganz sicher
AD-Wandler, die nur auf 10 Bit genau sind und deshalb auch nur 10 Bit
liefern, aber eine Auflösung von 12 Bit liefern können (wenn man genug
Zeit für die Messung hat).
Genau das ist der springende Punkt, den die ganzen Blindflansche einfach
nicht verstehen...
Ich versuche mal, das an einem Beipiel darzustellen. Sagen wir mal, es
geht darum, einen bestimmten typischen Punkt im Verlauf der
Ladespannungskurve des Ladeprozesses eines Akkus möglichst genau zu
bestimmen. Die absolute Spannung, an der dieser Punkt auftritt, ist
wohlgemerkt nicht bekannt! Weil sie z.B. von der (eventuell nicht
messbaren) Innentemperatur des Akkus abhängt, dem Alterungszustand
seiner Elektroden und was weiss ich noch für Parametern.
Für diese Aufgabe kann man natürlich einen AD-Wandler entsprechend hoher
Genauigkeit einsetzen. *ABER*: (und das ist genau der Punkt) man muss es
nicht! Es genügt auch einer, der mit den Tricks der Wissenden nur eine
hinreichend hohe Auflösung liefern kann. Denn wie bereits aus der
Aufgabe bekannt, ist die absolute Größe hier ziemlich irrelevant, es
kommt nur auf die korrekte Bewertung des (relativen) Verlaufs der Kurve
an.
Sprich: Das System ist in der Lage, den Ladestrom bei der bestmöglichen
Spannung korrekt anzupassen. Es könnte allerdings nur mit der
tatsächlichen Genauigkeit des AD-Wandlers angeben, bei welcher
Spannung es das getan hat. Aber das interessiert ja auch niemanden
wirklich!
Begreifst du jetzt in etwa, worum es geht?
Frank aus Köln schrieb:> Schau mal hier, wird zwar nicht genauer, ist aber vielleicht das> was du> suchst.> Beitrag "ADC und Fixed-Point Arithmetik">> Gruß>> Frank aus Köln
lol die Appnote. Lamentiert rum von wegen:
"Mitteln mehrere Messungen erhöht nicht die Auflösung, es sei denn die
Anzahl ist 4^n (n:=Anzahl extra Bits) und man führt einen entsprechenden
Rechtsshift aus".
Ja ne is klar.
Außerdem: Oversampling verbessert die Genauigkeit.
Genauigkeit wird als Messunsicherheit ausgedrückt. Diese kann in eine
stochastische und in eine systematische Abweichung unterteilt werden.
Die stochastische ergibt sich aus stdev(x)/sqrt(N).
Ist ja auch logisch: Das Rauschen wird verringert -> höhere Präzision ->
höhere Genauigkeit bei gleicher systematischer Abweichung.
Auch müsste man laut der Appnote extra Rauschen einfügen, falls keins
vorhanden ist. Kann das jemand erklären? :D
>Außerdem: Oversampling verbessert die Genauigkeit.
Der akademischen Korrektheit geschuldet: Es gibt schon gewisse
Voraussetzungen an den Zufallsprozess. Das Rauschen das Rauschsignal
muss statistisch unabhängig vom Messprozess sein. Wenn z.B. irgend ein
Anteil mit der Abtastfrequenz des ADC oder irgendwie sonst mit der
Taktfrequenz der MCU korreliert ist, mittelt es sich nicht weg.
Die Störstrahlung der CPU ist schon erlaubt.
Geht ja nur drum, dass das letzte Bit des ADC Messergebnisses hin und
her toggelt, sodass man bei der Mittelwertbildung den Zwischenwert
erhält.
Da ist in der Appnote ja sogar ne schöne Visualisierung zu drin.
Erfahrungsgemäß braucht man kein Rauschen hinzu zu fügen. Bei 1MHz ADC
Takt macht das LSB schönes Dithering.
@manmanman: Der Zweck ist Dithering.
Da hab ich schon nen 256 Byte Ringpuffer gebaut und da mal mit
verschiedenen FIR Filtern ausprobiert was so rauskommt.
Ich glaube am Ende blieb ein mittelsymmetrischer FIR mit 7 Taps und
Faktoren in Zweierpotenzen übrig.
Durch Zusammenklappen in der Mitte ließ sich das zu 4 Taps
zusammenschrumpfen die allesamt nur noch aus Bitshift und Addition
bestanden, gefolgt von einer einzelnen Bitshiftoperation ganz am Ende,
die die kostspielige Division ersetzt.
Das ging alles ganz wunderbar, minimale Aussenbeschaltung vom µC (nur
ein Tiefpassfilter zwecks Antialiasing).
@ Sascha (Gast)
>Die Störstrahlung der CPU ist schon erlaubt.
Nö.
>Geht ja nur drum, dass das letzte Bit des ADC Messergebnisses hin und>her toggelt, sodass man bei der Mittelwertbildung den Zwischenwert>erhält.>Da ist in der Appnote ja sogar ne schöne Visualisierung zu drin.>Erfahrungsgemäß braucht man kein Rauschen hinzu zu fügen. Bei 1MHz ADC>Takt macht das LSB schönes Dithering.
Und schon wieder lehnst du dich viel zu weit aus dem Fenster und
trompetest Unsinn herum. Gratulation!
Der chris_ hat es richtig beschrieben!!!
@Peter Dannegger (peda)
>Eine andere Möglichkeit wäre ein SAR-Wandler mit dem Komparator, 2>gleichen Kondensatoren und 4 Analogschaltern (1*74HC4066).
Wollen wir nicht auch noch gleich unsere Transistoren selber feilen?
So ein Quark. Die Zeiten der selbstgestrickten ADCs sind lange vorbei.
Heute gibt es TONNENWEISE gute und sehr gute ADCs zum TOP-Preis, wie man
sie selber/diskret nie hinbekommt. Die nimmt man und ist fertig.
Alles andere sind nur nette Spielereien und Prinzipdemonstrationen.
Sascha schrieb:> Erfahrungsgemäß braucht man kein Rauschen hinzu zu fügen.
Dann hast du wohl andere Erfahrungen gemacht
Tom schrieb:> Ja, guck dir mal Temperaturwerte von einem DS18B20 an.
Falk B. schrieb:> @ Sascha (Gast)>>>Die Störstrahlung der CPU ist schon erlaubt.>> Nö.>>>Geht ja nur drum, dass das letzte Bit des ADC Messergebnisses hin und>>her toggelt, sodass man bei der Mittelwertbildung den Zwischenwert>>erhält.>>>Da ist in der Appnote ja sogar ne schöne Visualisierung zu drin.>>>Erfahrungsgemäß braucht man kein Rauschen hinzu zu fügen. Bei 1MHz ADC>>Takt macht das LSB schönes Dithering.>> Und schon wieder lehnst du dich viel zu weit aus dem Fenster und> trompetest Unsinn herum. Gratulation!>> Der chris_ hat es richtig beschrieben!!!
Ich sag meiner Schaltung nicht dass sie nicht funktionieren kann, wenn
du es nicht tust.
Deal?
Was sagst du, Randall? Ah! https://xkcd.com/386/
Hey Terry, altes Ofenrohr! Wie gehts? Was meinst du?
"Fünf Ausrufezeichen. Sicherer Hinweis auf geistige
Umnachtung." Ah. Verstehe.
Du entschuldigst. Ich muss die Realität kurz geradebiegen. Mein
Schreibtisch hängt grad an der Decke weil dem keiner gesagt hat er soll
aufm Teppich bleiben. Und es gibt da diese Studienarbeit die aus
irgendwelchen Gründen genau das tut, was Sie soll. Da kann doch auch was
nicht stimmen.
Mit dem Rauschen in deiner Schaltung bekommst du vielleicht 1 Bit mehr
und bist damit glücklich, anderen reicht das wiederum nicht. Für sehr
lange Oversampling-Serien kann man sich auch schön einfach nen
einstellbaren 50Hz-Ripple drauflegen.
>Für sehr>lange Oversampling-Serien kann man sich auch schön einfach nen>einstellbaren 50Hz-Ripple drauflegen.
Wenn Du die Samplingzeit auf N*20ms stellst, werden die 50Hz exakt
weggefiltert. Ein gleitender Mittelwertfilter kann als FIR filter
betrachtet werden und hat dann bei 50Hz eine Nullstelle.
Solange man nicht gerade mutwillig auf N*20ms synchronisiert, werden wie
gewünscht alle analogen Zwischenwerte durchlaufen und gehen ins
Oversampling ein.
>man nicht gerade mutwillig auf N*20ms synchronisiert
Es muss nichts synchronisiert werden. Man kann entweder immer über eine
Zeit von N*20ms mitteln oder einen gleitenden Mittelwert mit der
Fensterlänge N*20ms verwenden, dann bekommt man für jeden Abtastwert
auch einen Ausgangswert.
chris_ schrieb:> Ah, Du spielst auf den Thread an, in dem Du das Problem nicht verstanden> hattest..
Ähem - falsch getippt. Das Ganze liegt etwas weiter zurück. Es ging um
das Grundverständnis davon, daß ein µC ein getaktetes System ist und
deshalb alle (ja, ALLE) Signale, die man an irgendwelche Portpins
anlegt, gesamplet (sch... denglish) werden. Deswegen kann auch ein
Counter im µC nicht wirklich von einem Signal am Portpin getaktet
werden, da dieses Signal ja nur als Sample vorliegt - eben das
Zuschlagen des Abtasttheorems.
Ja - irgendwie trifft sich das mit diesem Thread. Damals ging es um
zeitliche Auflösung zwischen den Schaltflanken des Systemtaktes, hier
geht es jetzt um das um 90° gedrehte Problem, nämlich um die
amplitudenmäßige Auflösung zwischen zwei ADC-Stufen.
Tja, man sollte wirklich sich dazu durchringen, Naturgesetze
anzuerkennen. Wirklich... auch dann wenn einem eines nicht schmecken
will.
W.S.
c-hater schrieb:> Denn wie bereits aus der> Aufgabe bekannt, ist die absolute Größe hier ziemlich irrelevant, es> kommt nur auf die korrekte Bewertung des (relativen) Verlaufs der Kurve> an.
Ach, mei Liaber, mir ist das alles von Anbeginn schon längst klar
gewesen. Aber du solltest eines bedenken: Die typischen SAR-ADC's in µC
sind von hause aus eben nicht monoton. Das ist z.B. bei Audio-ADC's
anders, die sind nicht überragend genau (absolut gesehen), aber sie sind
idR. so konstruiert, daß sie monoton wandeln.
Also, was hast du von einem ADC, den du per Tricks (Rampe, Rauschen,
Oversampling) aufgeblasen hast in dem von dir beschriebenen Falle? Nun,
du hast in vielen Fällen den erhofften Erfolg, aber in manchen Fällen
den richtigen Reinfall. Grund: Die Stufen von SAR-ADC's sind eben nicht
alle gleich und besonders die Stufen der höherwertgen Bits machen das
Problem aus. Zum Beispiel Übergang von 7Fh nach 80h oder FFh nach 100h
und so weiter. An diesen Stellen landet man dann in der (relativen)
Prärie beim Mitteln von Zwischenstufen. Wenn man es nicht übertreibt und
sich nur 1 zusätzliches Bit oder allenfalls 2 Bits dazumittelt, dann
geht das ja so lala für's Auge, also wenn man ein Thermometer, das
eigentlich nur 1° Stufen hat, auf Pseudo-Nachkommastellen aufblasen
will. Aber einen echten Algorithmus, der sich auf die Werte verlassen
muß, würde ICH nie und nimmer mit solchen Meßwerten füttern wollen.
W.S.
Beitrag "Re: [S] Gute & günstige Ready-to-use Akkus (Mignon) + 9V Blöcke"
Da geht es zwar um ein anderes thema, aber in dem entsprechenden Beitrag
kann man in der Grafik schön sehen was dabei herauskommen kann wenn das
Rauschen beim Multisampling nicht zu den "Stufen" paßt.
Das ist natürlich nur eines der möglichen Szenarien. Schon geringe
Detailänderungen können dazu führen, daß es nochmals ganz anders
aussieht.
Bei dem Einen kann stumpfes Multisampling funktionieren, weil es gerade
mit den Bedingungen so paßt. Aber Ohne die Details zu analysieren bleibt
es Glückssache ob es wie gewünscht funktioniert.