- 12V Akku mit 280 Ah bauen         
Seite 1 von 7 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 68

Thema: Ein ADC Schritt Ref/n oder Ref/(n-1)

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076

    Ein ADC Schritt Ref/n oder Ref/(n-1)

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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:

    The minimum value represents GND and the maximum value represents the voltage on the AREF pin minus 1 LSB
    Das würde meiner Meinung nach der Berechnung Vref/n entsprechen.

    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

  2. #2
    HaWe
    Gast
    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

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Zitat Zitat von Siro Beitrag anzeigen
    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
    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.

    and the maximum value represents the voltage on the AREF pin minus 1 LSB
    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).
    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 19:58 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von Siro Beitrag anzeigen
    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
    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)

    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
    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:

    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)


    Mich würde einfach mal interessieren, wie Ihr das handhabt bzw. berechnet, oder wie wurde es euch gelehrt.
    Ich nehme also die Anzahl der Stufen, hier also 256 zur Berechnung her.

    Gruß
    Searcher
    Geändert von Searcher (06.02.2020 um 02:43 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Siro Beitrag anzeigen
    Mich würde einfach mal interessieren, wie Ihr das handhabt bzw. berechnet,
    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 !

  6. #6
    HaWe
    Gast
    Zitat Zitat von Searcher Beitrag anzeigen
    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:

    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.

    Gruß
    Searcher
    falsch, es sind zwar 256 mögliche Werte, aber von 0 bis 255 (ADC_max) nur 255 Stufen (Schritte, Segmente), in die die 5V (V_max) "segmentiert" werden..
    Mein gezeigter Dreisatz zeigt, warum hier 255 stimmt.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    @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 09:20 Uhr)

  8. #8
    HaWe
    Gast
    Zitat Zitat von Moppi Beitrag anzeigen
    @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/

    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.



    MfG
    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 10:13 Uhr) Grund: Auflösung

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von HaWe Beitrag anzeigen
    falsch, es sind zwar 256 mögliche Werte, aber von 0 bis 255 (ADC_max) nur 255 Stufen (Schritte, Segmente), in die die 5V (V_max) "segmentiert" werden..
    Mein gezeigter Dreisatz zeigt, warum hier 255 stimmt.
    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

  10. #10
    HaWe
    Gast
    Zitat Zitat von Searcher Beitrag anzeigen
    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.
    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 09:42 Uhr) Grund: "steps"

Seite 1 von 7 123 ... LetzteLetzte

Ähnliche Themen

  1. Entscheidungshilfe Schritt oder Getriebemotor
    Von Atmega328 im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 30.04.2014, 16:38
  2. Antworten: 5
    Letzter Beitrag: 09.10.2013, 10:50
  3. Suche Drehtisch/Schwenkkopf für Kamera (Schritt oder Servo)
    Von MasterFX im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 5
    Letzter Beitrag: 13.07.2013, 07:28
  4. Schritt- oder Getriebemotor?
    Von logliner im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 22
    Letzter Beitrag: 28.08.2012, 14:47
  5. welchen motor, schritt oder servo?
    Von x3oo im Forum Motoren
    Antworten: 7
    Letzter Beitrag: 23.03.2010, 21:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test