ich verwende immer die Anzahl der max. möglichen ADC-Stufen, in deinem Falle also 255 (und bin auch nie auf die Idee gekommen, 256 einzusetzen ).
es entspricht ja auch dem Dreisatz
n/ADC_max = x/Volt_max
Hallo zusammen,
es stellt sich mir (anscheinend auch Anderen) immer wieder die Frage
wie berechne ich einen ADU Schritt.
Bei einem 8 Bit ADC habe ich 256 Stufen.
Wenn ich 256 Stufen habe, wäre ein Schritt die Referenzspannung / 256
Nehmen wir an, ich habe eine Referenz von 5 Volt, dann wäre dies also
5 / 256 = 0,01953125 Volt
Der höchste Wert meines ADU bei 8 Bit ist aber nicht 256 sondern nur 255
somit entspricht der umgerechnete ADU Wert 255 nicht meiner Referenzspannung von 5 Volt
sondern nur 4,98046874 Volt. Da fehlt doch was
führe ich die Berechnung mit n-1 durch:
5 Volt / (256-1) = entspricht eine Stufe 0,0196078431372549 Volt
Bei einer Vollaussteuerung ADU = 255 ergibt sich dann tatsächlich wieder die Referenzspannung
Klingt plausibel, aber:
Im Handbuch des Atmel Controllers steht zum Beispiel:
Das würde meiner Meinung nach der Berechnung Vref/n entsprechen.The minimum value represents GND and the maximum value represents the voltage on the AREF pin minus 1 LSB
Nehme ich jetzt mal Quantisierungsrauschen, Temperturfehler, Nichtlinearität, Referenzspannungs Fehler, Offset usw. dazu,
dann spielt das vermutlich alles eh keine Rolle mehr...
Mich würde einfach mal interessieren, wie Ihr das handhabt bzw. berechnet, oder wie wurde es euch gelehrt.
Siro
ich verwende immer die Anzahl der max. möglichen ADC-Stufen, in deinem Falle also 255 (und bin auch nie auf die Idee gekommen, 256 einzusetzen ).
es entspricht ja auch dem Dreisatz
n/ADC_max = x/Volt_max
Eigentlich müsstest Du den Max-Spannungswert, der am Eingang gemessen werden kann (und durch AREF bestimmt wird), durch 255 teilen. "0V" ist der 256ste Wert.
Wie das gemeint ist, keine Ahnung. Vielleicht sollte man messen, wieviel Spannung am ADC-Eingang einen Wert von 255 ergibt (wenn am AREF 5V anliegen).and the maximum value represents the voltage on the AREF pin minus 1 LSB
Es könnte auch so gemeint sein, dass der Maximalwert (eben die 5V am AREF) ein Ergebnis von 254 liefert und wenn die Spannung über die Max-Spannung geht, der ADC dann 255 zurückgibt.
MfG
Geändert von Moppi (05.02.2020 um 20:58 Uhr)
Genau, eine Stufe mit 0,01953125 Volt von 256 Stufen. Jede Stufe hat eine Höhe von 0,01953125 Volt. Die erste Stufe reicht also von 0 bis 0,01953125 Volt. Die halbe Höhe der Stufe liegt bei 0,009765625 Volt und entspricht meiner Vorstellung nach genau dem Spannungswert bei dem der ADC ohne, ich sag mal Toleranz den Wert 0 liefert; Toleranz, die der Stufenhöhe entspricht. (oder eben Quantisierungsintervall heißt)
Hier aber nicht von "Einheit" Stufe auf "Einheit" Wert wechseln (bzw mit 256 rechnen, da Wert 0 bis Wert Wert 255 = 256 Werte sind) Wie oben festgestellt, entspricht der Wert 0 idealerweise einer Spannung von 0,009765625 Volt. Die Rechnung müßte also meiner Meinung nach so lauten:Der höchste Wert meines ADU bei 8 Bit ist aber nicht 256 sondern nur 255
somit entspricht der umgerechnete ADU Wert 255 nicht meiner Referenzspannung von 5 Volt
sondern nur 4,98046874 Volt. Da fehlt doch was
5 Volt / 256 Stufen = 0,01953125 Volt/Stufe
Wert 0 entspricht idealerweise 0,009765625 Volt
Wert 255 etspricht idealerweise 255 * 0,01953125 Volt + 0,009765625 Volt = 4,990234375 Volt
Aber auch 5 Volt werden noch auf der letzten Stufe mit Wert 255 digitalisiert (4,990234375 Volt + 0,009765625 Volt = 5 Volt)
Ich nehme also die Anzahl der Stufen, hier also 256 zur Berechnung her.Mich würde einfach mal interessieren, wie Ihr das handhabt bzw. berechnet, oder wie wurde es euch gelehrt.
Gruß
Searcher
Geändert von Searcher (06.02.2020 um 03:43 Uhr)
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Mal das Ende zuerst, ich berechne gar nicht, ich gleiche ab. Ich will das mal an ein paar Beispielen erläutern.
Wenn ich eine Spannung messen will, brauche ich typisch einen Spannungsteiler, da der Eingangsspannungsbereich des ADC nicht passt. Den kann ich mir nicht frei aussuchen, es gibt nicht jeden Widerstandswert und ich hab auch nicht jeden vorrätig. Außerdem sollten die Widerstände klein sein, der ADC möchte eine kleine Eingangsimpedanz und sie sollten groß sein, um die Messspannung nicht zu belasten. Ich schalte also den Spannungsteiler vor den ADC und nehme meine beste Spannungsreferenz oder mein bestes Voltmeter, nehme ein paar Messwerte auf und bestimme damit den Umrechnungsfaktor für meinen µC.
Meist interessiert mich die wirkliche Spannung gar nicht. Wenn ich den Ladezustand eines Akkus überwachen will, stelle ich die Entladeschlußspannung, die ich mir vorstelle, auf dem Labornetzteil ein und lese den ADC aus. Danach benutze ich den reinen ADC-Wert. Ist er kleiner, ist der Akku alle.
Wenn es mal um Strom geht, mach ich das ähnlich. Strom kann man mit dem ADC nicht messen, man kann nur die Spannung an einem Widerstand im Stromkreis messen. Diese Shunts sind häufig klein und damit auch die Spannung. Statt Spannungsteiler kommt hier ein Verstärker ins Spiel. Sowohl den Shunt als auch die Verstärkung kann ich nicht beliebig frei wählen. Also nehme ich mein bestes Amperemeter und gleiche das ganze ab.
Häufig hat man aber Sensoren, die ihren Widerstand ändern. Wenn ich Übertemperatur an einem Motor feststellen möchte, verschalte ich den Sensor, z.B. NTC, bringe ihn auf die Grenztemperatur und lese den ADC aus. Das ist dann mein Grenzwert.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
@siro
Egal, wo Du im Netz schaust, bei Digitalvoltmetern mit einem Arduino, wird immer durch die darstellbaren Werte geteilt. Bei 10 Bit eben 1024.
https://www.electroschematics.com/ar...tal-voltmeter/
https://www.allaboutcircuits.com/pro...g-the-arduino/
https://create.arduino.cc/projecthub...arduino-00e7d1
https://appuals.com/how-to-make-a-di...using-arduino/
Hier auch andere Beispiele, mit 1023, bei 10 Bit:
https://mechatrofice.com/arduino/voltmeter-dc-dvm
https://provideyourown.com/2012/secr...ttery-voltage/
https://www.freecodecamp.org/news/ho...-b4dbf5b94d6f/
Wobei bei 10 Bit, zwischen 1023 und 1024, der Unterschied so gering ist, dass man den mit normalen Messgeräten für den Heimgebrauch nicht nachvollziehen kann.
Allerdings wird der Maximalwert von 1023 bei 10 Bit, nicht erst ab der Max-Spannung ausgegeben, sondern scheinbar bereits kurz darunter. Was vielleicht den Schluss zulässt, dass man durch 1024 (oder bei 8 Bit, durch 256) teilt. "Scheinbar" muss ich schreiben, weil ich das nicht genau genug bestimmen kann, weder hab ich eine Referenzspannungsquelle, noch geeichte Meßgeräte.
MfG
Geändert von Moppi (06.02.2020 um 10:20 Uhr)
es wird eben NICHT IMMER durch die Höhe der Auflösung (256 bzw. 1024 bei 2^8 bzw. 2^10) geteilt, sondern in anderen Quellen AUCH durch die Zahl des größtmöglichen Wertes (z.B. 1023), siehe hier:
voltage =volt* (5.0 / 1023.0);
https://mechatrofice.com/arduino/voltmeter-dc-dvm
und so ist es IMO auch korrekt, siehe Dreisatz, bei dem der größtmögliche ADC-WERT zur größtmöglichen Spannung ins Verhältnis gesetzt wird.
Geändert von HaWe (06.02.2020 um 11:13 Uhr) Grund: Auflösung
Für AVRs fand ich noch diese Application Note. Im Kapitel "1.1 General ADC Concepts" heißt es:
The output range must be divided into a number of
steps, one for each possible digital output value. This means that one output value does not correspond
to a unique input value, but a small range of input values.
Bei Ausgabewerten von 0 bis 255 gibt es also 256 Bereiche (ranges) für die Eingabewerte. 256 Stufen, Quantisierungsintervalle oder wie man es auch nennen möchte.
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
nein, bei 0 bis 255 gibt es 255 Bereiche (Quantisierungsintervalle, steps), nicht 256 !!
wenn z.B. nur die ADC-Werte 0,1,2,3 möglich wären (2-bit ADC, 2²=4) , entspräche
0 -> 0 V
1 -> 1,67 V
2- > 3,33 V
3 -> 5 V
das sind 4 Werte, aber nur 3 Schritte, jeder Schritt 1/3 von 5V. Capisce?
Geändert von HaWe (06.02.2020 um 10:42 Uhr) Grund: "steps"
Lesezeichen