Forum: Mikrocontroller und Digitale Elektronik Problem mit Spannungsteiler


von DrDooom (Gast)


Lesenswert?

Hallo Technikfreunde.

Ich habe ein Problem mit einem Spannungsteiler.
Und zwar habe ich eine 12V DC Spannungsquelle (derzeit Netzteil, ggf. 
später Akku) und einen Arduino Pro Mini (5V) verwenden. Ich möchte gern 
die Spannung messen und habe mir dazu überlegt, dass ich das über einen 
Spannungsteiler mit einem analogen Eingang die Spannung messe und dann 
entsprechend umrechne.

Als Teiler habe ich mir
[+] ### 10 MOhm ### GPIO ### 3.3 MOhm ### [-]
überlegt. Mit den Werten sollte ich selbst bis 20V save sein(?). 
Zwischen den beiden Widerständen möchte ich dann direkt an den analogen 
Eingang. Das Problem ist aber, dass scheinbar der analoge Eingang intern 
auch einen Widerstand hat (viel geringer).

Das verfälscht doch dann meinen Spannungsteilerergebnis oder? Es kommen 
komische Werte zustande. Mit dem Multimeter messe ich 0.81V bei 11.4V DC 
Eingang. Müssten das nicht 2.82V sein? --> (11,4 / 13,3) * 3,3

Hat das vllt etwas mit einem Innenwiderstand des GPIO zu tun? Es wäre 
nett wenn sich das mal jemand mit durchdenkt der Ahnung von 
Elektrotechnik hat. :-)


Grüße Dooom.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sieh dir mal das Datenblatt deines uC an. Dort steht was, dass die 
Impedanz am PIN nicht höher als 10k sein darf. Da bist du gut 250 mal 
druber.

Du könntest jetzt einen 100nF Kondensator zwischen den PIN und GND 
schalten und schauen, was dann passiert. Oder einfach mal bei anderen 
abgucken, wie die das machen...

DrDooom schrieb:
> Mit den Werten sollte ich selbst bis 20V save sein(?).
Oder mach die Widerstände einfach 1000 mal kleiner. Dann bist du auch 
bis 20V save...

: Bearbeitet durch Moderator
von DrDooom (Gast)


Lesenswert?

Lothar M. schrieb:
> Dort steht was, dass die Impedanz am PIN nicht höher als 10k sein darf.

Hallo Lothar.

Vielen Dank für die Info. Ja so lerne ich dazu. Ich dachte dass der 
Spannungsteiler für den Mikrocontroller egal ist....und dass nur die 
ankommende Spannung relevant ist. Aber irgendwie auch klar. Wenn quasi 
kaum mehr Strom ankommt.

Ich suche mal nach dem Datenblatt. Aber bei Arduino findet man da 
nichts. Sollte ich eher nach dem Datenblatt für den Chip selbst suchen?

Grüße Dooom.

von Jim M. (turboj)


Lesenswert?

DrDooom schrieb:
> Das Problem ist aber, dass scheinbar der analoge Eingang intern
> auch einen Widerstand hat (viel geringer).

Korrekt. Grade die ollen AVR im Arduino haben verdamm geringe 
Innenwiderstände an den analogen ADC Pins - nur rund 15kOhm IIRC.

Abhilfe: Widerstände drastisch verkleinern oder Opamp als 
Impedanzwandler dazwischen schalten.

DrDooom schrieb:
> Sollte ich eher nach dem Datenblatt für den Chip selbst suchen?

Jup, nach dem DB bei Microchip für den Atmega Chip.

von Stefan F. (Gast)


Lesenswert?

Jim M. schrieb:
> Grade die ollen AVR im Arduino haben verdamm geringe
> Innenwiderstände an den analogen ADC Pins - nur rund 15kOhm

Ich würde das gerne etwas korrekter darstellen:

Im Eingang des ADC befindet sich ein Kondensator mit ca. 15pF Kapazität. 
Bei jeder Messung wird dieser Kondensator zuerst kurz mit einem Eingang 
verbunden (um ihn aufzuladen). Dann wird er wieder getrennt und seine 
Ladung gemessen.

Der entscheidende Punkt ist, dass der Kondensator in diesem kurzen 
Moment vollständig geladen werden muss. Wenn der Spannungsteiler zu 
hochohmig ist, funktioniert das nicht.

Atmel hat empfohlen, dass die Quelle (also der Spannungsteiler) maximal 
10kΩ haben soll, dann ist man einigermaßen auf der sicheren Seite.

Der klassische Workaround ist wie gesagt, einen 100nF Kondensator vom 
analogen Eingang nach GND zu legen. Dieser wird vom Spannungsteiler 
langsam aufgeladen. Wenn der ADC misst, wird ein Teil seiner Energie in 
den inneren Kondensator des ADC umgeladen. Da der externe Kondensator 
etwa die 7000 fache Kapazität hat, als der innere, fällt die Spannung 
bei diesem Umladeprozess nur minimal ab.

Nach der Messung musst du aber lange warten, bevor du die nächste 
Messung machen kannst, denn der hochohmige Spannungsteiler braucht 
mehrere Sekunden, um deinen 100nF Kondensator wieder nachzuladen.

von DrDooom (Gast)


Lesenswert?

Jim M. schrieb:
> haben verdamm geringe Innenwiderstände an den analogen ADC Pins - nur
> rund 15kOhm IIRC.

Ahh. Danke. Das hilft mir weiter. Kann ich die selbst messen? Einfach 
Widerstand zwischen AI und GND??? Ich würde den Spannungsteiler gern 
ausrechnen bzw damit ich die Ergebnisse vergleichen kann.

Habe gerade noch folgendes gefunden:

Page 244 states: "The ADC is optimized for analog signals with an output 
impedance of approximately 10 kΩ or less. If such a source is used, the 
sampling time will be negligible.

von DrDooom (Gast)


Lesenswert?

DrDooom schrieb:
> Einfach Widerstand zwischen AI und GND?

....messen?

von Stefan F. (Gast)


Lesenswert?

DrDooom schrieb:
> Kann ich die selbst messen? Einfach
> Widerstand zwischen AI und GND??? Ich würde den Spannungsteiler gern
> ausrechnen bzw damit ich die Ergebnisse vergleichen kann.

Lies meinen obigen Beitrag, dann verstehst du, warum die Antwort "2x 
Nein" lautet.

Hier hat das einer schön skiziert: 
http://www.openmusiclabs.com/learning/digital/atmega-adc/index.html

von DrDooom (Gast)


Lesenswert?

Stefanus F. schrieb:
> Der klassische Workaround ist wie gesagt, einen 100nF Kondensator vom
> analogen Eingang nach GND zu legen

Daaanke. Das lustige ist. Mein Chef (seines Zeichens ebenfalls eifriger 
"Hobby" Elektroniker) hat mir das ebenfalls so ähnlich empfohlen. Wusste 
aber nicht warum! Ha ha.

Aber hier hast du die Erklärung ja verständlich geschrieben. Viele Dank 
dafür. Die paar Beiträge haben da Problem auf jeden Fall super erklärt.
Ich werde das morgen mal simulieren und ausrechnen.

Top. Danke an alle!!!

von Stefan F. (Gast)


Lesenswert?

Stefanus F. schrieb:
> denn der hochohmige Spannungsteiler braucht
> mehrere Sekunden, um deinen 100nF Kondensator wieder nachzuladen.

Ich glaube, ganz so viel zeit wird es wohl nur vor der ersten Messung 
dauern. Danach ist der Spannungsabfall pro Messung ja gering, und daher 
auch die Nachladezeit gering.

Ich würde ihm aus dem Buch heraus wenigstens 100ms Zeit gönnen. Häufiger 
messen macht in diesem Fall ohnehin keinen Sinn, oder?

von 2 Cent (Gast)


Lesenswert?

DrDooom schrieb:
> DrDooom schrieb:
>> Einfach Widerstand zwischen AI und GND?
>
> ....messen?
Nope. Diesen R kannste (bis jetzt mit deinen vorhandenene Kenntnissen) 
weder selbst messen, noch dich (irgendwann) auf dessen 
Reproduzierbarkeit verlassen.

Mache dich mit "belasteten Spannungsteilern" vertraut zum Verständnis, 
und/oder folge den genannten Hinweisen, dann klappts auch.

von DrDooom (Gast)


Lesenswert?

Danke. Auch 1x pro Sekunde würde vollkommen ausreichen.
Ich kann das ja morgen Simulieren und poste dann nochmal die Ladedauer. 
Wenn ein 100nF so viel größer ist als der interne, warum nicht einen 
kleineren nehmen? Oder ist es wichtig den Kondensator nur zu einem sehr 
geringen Teil zu entladen? Hatte mal gesehen dass das entladen nicht 
linear verläuft.

PS: hatte mal einen Induktionssensor mit Alufolie gebaut und die Zeit 
zum Laden/Entladen gemessen.

von Stefan F. (Gast)


Lesenswert?

DrDooom schrieb:
> Wenn ein 100nF so viel größer ist als der interne, warum nicht einen
> kleineren nehmen?

Weil er sich beim umladen stärker entlädt und das dann womöglich die 
Messung beeinträchtigt. 10nF ist auf jeden Fall schon zu wenig.

Erlaube mir die Gegenfrage: Warum nicht einen größeren nehmen? Kostet 
genau so viel.

von DrDooom (Gast)


Lesenswert?

Stefanus F. schrieb:
> Erlaube mir die Gegenfrage: Warum nicht einen größeren nehmen? Kostet
> genau so viel.

Aber sicher doch. Weil ich gern frage und lerne. Ist nur damit ich ein 
besseres Gefühl für Werte und Bauteile bekomme.

Ich setzte das erstmal um und poste morgen meine Ergebnisse. :-)

Danke erstmal an alle.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

DrDooom schrieb:
> Sollte ich eher nach dem Datenblatt für den Chip selbst suchen?
Ja, wie ich sagte: in erster Linie ist das Datenblatt des uC relevant.
Und dann in zweiter Näherung das, was ein paar Bastler draus gemacht 
haben. Also der Schaltplan des Andruiden.

DrDooom schrieb:
>> Einfach Widerstand zwischen AI und GND messen?
Nein. Du kannst da sowieso nichts messen. Deshalb gilt: Datenblatt 
anschauen und verstehen! Unbedingt.

Stefanus F. schrieb:
> Nach der Messung musst du aber lange warten, bevor du die nächste
> Messung machen kannst, denn der hochohmige Spannungsteiler braucht
> mehrere Sekunden, um deinen 100nF Kondensator wieder nachzuladen.
Wenn der ADC immmer den selben Pin misst, dann gilt das mit der 
"1/7000stel Entladung" nur beim ersten Mal. Alle nachfolgenden Male ist 
die Entladung wesentlich geringer, weil der interne 
15pF-Sample-Kondensator ja schon geladen ist.

Stefanus F. schrieb:
> Weil er sich beim umladen stärker entlädt und das dann womöglich die
> Messung beeinträchtigt. 10nF ist auf jeden Fall schon zu wenig.
Der 10nF ist fast 1000 mal größer als der 15pF, damit reicht der 
hinreichend aus, um das letzte LSB des 10Bit ADC nicht zu verfälschen. 
Und dann ist der 10nF Kondensator schon nach knapp 100ms wieder 
ausreichend geladen.

Allerdings kommen bei diesen hohen Widerstandswerten im MOhm Bereich 
dann schon irgendwelche Leckströme ins Spiel, die Offsets und 
Nichtlinearitäten bis hin zur Luftfeuchteabhängigkeit bringen.

Wie gesagt: einfach den ganzen Spannungeteiler um den Faktor 1000 
niederohmiger dimensionieren.

: Bearbeitet durch Moderator
von DrDooom (Gast)


Lesenswert?

Ahhhh. Jetzt ärgere ich mich aber.

.....allerdings erstmal vielen Dank nochmal für die viele Hilfe!!!

Habe heute einen Kondensator "104" gefunden und zwischen Analog-In und 
GND geschaltet.
Dann gemessen....und...wieder Müll. Habe immer 1023 als "analogen Wert" 
bekommen. In der Software war jedenfalls kein Problem vorhanden.
Daher dachte ich, dass der Pro Mini mit den hochohmigen Widerständen 
einfach irgendein Problem hat. Habe dann die Widerstände des 
Spannungsteiler aus der Platine gelötet und gegen 10kOhm und 3.3kOhm 
getauscht und....gleiches Ergebnis.
Bis ich gesehen habe, dass von unten an der Platine die GND Verbindung 
nicht zum GND sondern zum RST geht. Also lag der Fehler nur an diesem 
falsch verlöteten Beinchen. Aber nun hatte ich ja schon die Widerstände 
ersetzt und belasse es dabei.
Bei der nächsten Platine werde ich trotzdem nochmal 10M+3.3M und einen 
kleinen Kondensator testen.

Allerdings hätte ich nun noch eine Frage zu einem kleinen 
Nachfolgeproblem bzw. Problemchen.
An dem Arduino kommen über den Spannungsteiler 2,83V an (gemessen mit 2 
Multimeter). Der Arduino misst jedoch einen Wert von 2,78V ("568" analog 
in).

Die 2,78V berechne ich wie folgt:
1
uint16_t powerValue = analogRead(PIN_12V_POWER_ANALOG_IN);
2
float powerVoltage = map(powerValue, 0, 1023, 0, 5000) / 1000.0;
Handelt es sich dabei um allgemeine Abweichungen (0,05V weniger) oder 
habe ich da noch einen Denkfehler? Die 0,05V finde ich nicht störend, 
allerdings rechne ich ja den Spannungsteiler wieder zurück und dann ist 
die Abweichung schon 0,2V (11,19V zu 11,42V).

von Stefan F. (Gast)


Lesenswert?

So ein bisschen Abweichung (nicht-linearität) ist normal.

von Sebastian S. (amateur)


Lesenswert?

Wieviel Zuwendung hat Deine Referenz bekommen?

Das volle Programm aus Widerstand (eventuell), Spule und eigenem 
Kondensator? Oder nur Vcc und beten.

Wenn Du die (ich glaube ja nicht) vollen 10 Bit rausholen musst, hilft 
beten nicht.

Manchmal musst Du sogar zweimal hinschauen (messen) und dann den 
Mittelwert verwenden.

von Anja (Gast)


Lesenswert?

DrDooom schrieb:
> Handelt es sich dabei um allgemeine Abweichungen (0,05V weniger) oder
> habe ich da noch einen Denkfehler?

Hallo,

man hat Dir halt verschwiegen daß der Analog-pin bis zu 1uA Leckstrom 
(je nach Temperatur) haben kann. Mit 3.3 Meg am Eingang ergeben sich 
dann halt bis zu 3.3V Meßfehler.

Ich empfehle daher einen niederohmigen abschaltbaren Spannungsteiler 
siehe
Batteriewächter

https://www.mikrocontroller.net/articles/Datei:BMON_1048_PIC.PNG

(T2, R4, R5)

Gruß Anja

von DrDooom (Gast)


Lesenswert?

Sebastian S. schrieb:
> Manchmal musst Du sogar zweimal hinschauen (messen) und dann den
> Mittelwert verwenden.

Das habe ich. Lese alle 500ms. Es ist immer die Differenz.

Anja schrieb:
> Mit 3.3 Meg am Eingang

Hatte ich ja heute bereits abgeändert:

DrDooom schrieb:
> Habe dann die Widerstände des Spannungsteiler aus der Platine gelötet
> und gegen 10kOhm und 3.3kOhm getauscht

Stefanus F. schrieb:
> So ein bisschen Abweichung (nicht-linearität) ist normal.

Alles klar. Dann werde ich einen weiteren Test mit einem anderen Arduino 
machen und überlegen ob ich das softwareseitig sinnvoll anpassen kann 
oder evtl den Spannungsteiler noch mal anders aufteile um weniger 
Abweichung zu bekommen. Danke nochmal.  :-)

von HildeK (Gast)


Lesenswert?

Lothar M. schrieb:
> Wenn der ADC immmer den selben Pin misst, dann gilt das mit der
> "1/7000stel Entladung" nur beim ersten Mal. Alle nachfolgenden Male ist
> die Entladung wesentlich geringer, weil der interne
> 15pF-Sample-Kondensator ja schon geladen ist.

Bist du sicher, dass der Sample-C bei der AD-Wandlung nicht entladen 
wird oder dass am Ende sowas wie ein "Ladungsreset" erfolgt?
Ich weiß es nicht und würde es deshalb zumindest nicht außer Acht 
lassen. Wenn deine Annahme (dein Wissen?) gilt, ist es zumindest dann 
nicht mehr so, wenn mehr als ein ADC-Kanal verwendet wird.

von Manfred (Gast)


Lesenswert?

DrDooom schrieb:
> Die 2,78V berechne ich wie folgt:uint16_t powerValue =
> analogRead(PIN_12V_POWER_ANALOG_IN);
> float powerVoltage = map(powerValue, 0, 1023, 0, 5000) / 1000.0;

Wie kommst Du zu der Annahme, dass "5000" stimmt, also wirklich 5,000 
Volt als ADC-Referenz vorliegen?

von mahwe (Gast)


Lesenswert?

Kleiner Richtwert zum auslegen von belasteten Spannungsteilern.
Der Strom durch den Spannungsteiler sollte etwa 10x so groß sein wie der 
Messstrom, welcher aus dem Spannungsteiler in den uC fließt.

von DrDooom (Gast)


Lesenswert?

Manfred schrieb:
> Wie kommst Du zu der Annahme, dass "5000" stimmt, also wirklich 5,000
> Volt als ADC-Referenz vorliegen?
1
By default the power supply voltage is used so if you run your Arduino on 5 V, then 1023 = 5 V

Ich denke dass müsste passen da ich analogReference() nicht verwende und 
die default werte nutze (Messbereich 0-5V).

von Manfred (Gast)


Lesenswert?

DrDooom schrieb:
> Ich denke dass müsste passen

Nicht denken, messen und nachdenken !

Es ist unwahrscheinlich, dass Deine Versorgung exakt 5,000 Volt beträgt.

Dein Meßfehler 50mV von 2,8V beträgt gerade mal 1,8%, das ist für ein 
nicht justiertes System schon mal sehr gut.

von Stefan F. (Gast)


Lesenswert?

HildeK schrieb:
> Bist du sicher, dass der Sample-C bei der AD-Wandlung nicht entladen
> wird

Da hat er schon Recht. Bei AVR wird der Sample&Hold Kondensator durch 
die Messung nicht entladen.

von A. S. (Gast)


Lesenswert?

mahwe schrieb:
> Kleiner Richtwert zum auslegen von belasteten Spannungsteilern.
> Der Strom durch den Spannungsteiler sollte etwa 10x so groß sein wie der
> Messstrom, welcher aus dem Spannungsteiler in den uC fließt.

Die Formel galt für Transistor-vorspannungen. Beim ADC ist das Müll.

Entweder Spannungsfolger, oder ggf. C, also Faktor eher 2^N bei N Bits.

von DrDooom (Gast)


Lesenswert?

Manfred schrieb:
> Es ist unwahrscheinlich, dass Deine Versorgung exakt 5,000 Volt beträgt.

Ich verstehe nicht worauf du hinaus willst! Was hat die 
Versorgungsspannung mit der Spannung am analogen Eingang zu tun wenn ich 
kein analogReference() verwende (default Einstellungen der Referenz = 
exakt 5000 mV)? Ich hatte doch schon aus der Dokumentation zum Arduino 
rezensiert.

mahwe schrieb:
> belasteten Spannungsteilern.

Das hat mir ja keine Ruhe gelassen. Klar. Wenn man dort noch ein (nicht 
messbarer) Widerstand vorhanden  ist....dann verändert der natürlich 
auch die Berechnung. Laut Recherche soll der zwar etwa 100 mOhm 
betragen....aber wer weiß das schon.

Habe Dann eine Internetseite gefunden mit der man online die 
Eingangsspannung und Widerstände eintragen kann.
https://www.electronicsplanet.ch/Spannungsteiler/spannungsteiler-belastet-berechnen.php
Das habe ich gemacht und komme auf einen Eingangswiderstand von 120-150 
kOhm.
Dann erhalte ich laut berechnung nicht die anliegende gemessene Spannung 
(Multimeter) von 2.83V sondern die 2.78V (Arduino).

Holzweg oder Erleuchtung? ;-)

von 2 Cent (Gast)


Lesenswert?

DrDooom schrieb:
> allerdings rechne ich ja den Spannungsteiler wieder zurück und dann ist
> die Abweichung schon 0,2V (11,19V zu 11,42V).
Mal überschlagen: Solange du mit etwa 568 counts "misst" beträgt deine 
Auflösung 1/568, also rund 0,2%. Das sind an 12V etwa 20mV Auflösung. 
Deine erreichbare Genauigkeit wird deutlich darunter liegen!

Manfred schrieb:
> Dein Meßfehler 50mV von 2,8V beträgt gerade mal 1,8%, das ist für ein
> nicht justiertes System schon mal sehr gut.
Überschlag: 1,8%/0,2% ---> 9 counts daneben, sieht wirklich gut aus.
SCNR:
Die Marketingabteilung pimpt dann daraus ein Datenblatt: Abweichung 
0,05% plusminus 18digits, und schwupps ist es ein hochgenaues 
(Hauptsache 0,05%) Supermessgerät :D



DrDooom schrieb:
> Dann werde ich einen weiteren Test mit einem anderen Arduino
> machen
Nimm dann auch mal einen anderen 5V-Spannungsregler (hier erzeugt dieser 
deine Referenzspannung).

> und überlegen ob ich das softwareseitig sinnvoll anpassen kann
Bei der "schlechten" Auflösung ist schönrechnerei eher zwecklos.

> oder evtl den Spannungsteiler noch mal anders aufteile um weniger
> Abweichung zu bekommen.
Meine Empfehlung: Mit Trimmer zum Abgleich

von DrDooom (Gast)


Lesenswert?

Ok. Die Rechnung ist nachvollziehbar.

2 Cent schrieb:
> Meine Empfehlung: Mit Trimmer zum Abgleich

Kannst du das erklären was du damit meinst?

von 2 Cent (Gast)


Lesenswert?

DrDooom schrieb:
> Ok. Die Rechnung ist nachvollziehbar.
>
> 2 Cent schrieb:
>> Meine Empfehlung: Mit Trimmer zum Abgleich
>
> Kannst du das erklären was du damit meinst?
Einen der beiden Spannungsteilerwiderstände minimal verstellbar machen.
https://de.wikipedia.org/wiki/Potentiometer#Trimmpotentiometer
Leider must du dort etwas nach unten scrollen, der Link trifft im Moment 
nicht wirklich "Trimmpotentiometer".

von Stefan F. (Gast)


Lesenswert?

Mit einem Trimm-Potentiometer kann man genau einen Messwert schön 
hinbiegen. Aber eine gewisse Nicht-Linearität bleibt, so dass dann 
andere Spannungen immer noch abweichen.

von 2 Cent (Gast)


Lesenswert?

Stefanus F. schrieb:
> Mit einem Trimm-Potentiometer kann man genau einen Messwert schön
> hinbiegen.
Ok, und selbst dieses "schön" klemmt dann an der nutzbaren Auflösung, 
hier etwa 9bit.
> Aber eine gewisse Nicht-Linearität bleibt, so dass dann
> andere Spannungen immer noch abweichen.
Auch Alterung und der Temparaturgang (Spannungsregler als 
Referenzspannung, weiss der Geier welche Lasten der wann zu ertragen 
hat, und welcher Spannungsabfall dabei auf den Leiterbahnen zum 
Controller auftritt)...


Nichts ist unmöglich: Das komplette A/D-Kennlinienfeld (für mehrere 
Temperaturen im Betriebstemperaturbereich, der ATMega328p hat ja 
schliesslich sogar ein Thermometer onchip) als "Korrekturtabelle" 
abspeichern. Allerdings wird der TE diesen Aufwand bestimmt nicht 
treiben wollen, damit wäre ausserdem die Spannungsreglerreferenz völlig 
absurd...


Um den drohenden Zustand "Akku bald leer" zu erfassen ist das meiner 
Meinung nach auch nicht wirklich notwendig:
DrDooom schrieb:
> eine 12V DC Spannungsquelle (derzeit Netzteil, ggf. später Akku...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

HildeK schrieb:
> Bist du sicher, dass der Sample-C bei der AD-Wandlung nicht entladen
> wird oder dass am Ende sowas wie ein "Ladungsreset" erfolgt?
Ja.
> ist es zumindest dann nicht mehr so, wenn mehr als ein ADC-Kanal
> verwendet wird.
Wenn mehr als 1 Kanal verwendet wird und die am Pin angschlossene Quelle 
(bzw. der Spannungsteiler) zu hochohmig ist, dann "erbt" beim Umschalten 
des Pins der jeweils nachfolgende "ein wenig" vom Vorgänger, weil der 
S&H-Kondensator nich komplett umgeladen werden kann. Wenn man dann also 
am Kanal 1 dreht, ändert sich der Wert vom Kanal 2 ein wenig mit. An 
diesem Verhalten haben sich schon einige die Zähne ausgebissen...

von Joachim B. (jar)


Lesenswert?

DrDooom schrieb:
> Alles klar. Dann werde ich einen weiteren Test mit einem anderen Arduino
> machen und überlegen ob ich das softwareseitig sinnvoll anpassen kann
> oder evtl den Spannungsteiler noch mal anders aufteile um weniger
> Abweichung zu bekommen. Danke nochmal.  :-)

du könntest auch externe Spannungsreferenz nehmen, das macht dich dann 
von der internen Arduino Referenz unabhängig, besser bei Arduinowechsel.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

DrDooom schrieb:
> Ich verstehe nicht worauf du hinaus willst! Was hat die
> Versorgungsspannung mit der Spannung am analogen Eingang zu tun wenn ich
> kein analogReference() verwende (default Einstellungen der Referenz =
> exakt 5000 mV)? Ich hatte doch schon aus der Dokumentation zum Arduino
> rezensiert.

Mantra:
Versorgungsspannung als Referenz für ratiometrische Messungen.
Interne/Externe  Referenz für absolute Messungen.

Du möchtest eine absolute Messung.

Ich empfehle bei Verwendung der internen Referenz min eine 
EinPunktKalibrierung.
Eine 2 Punkt Kalibrierung schadet nicht.

von Manfred (Gast)


Lesenswert?

DrDooom schrieb:
> Manfred schrieb:
>> Es ist unwahrscheinlich, dass Deine Versorgung exakt 5,000 Volt beträgt.
>
> Ich verstehe nicht worauf du hinaus willst! Was hat die
> Versorgungsspannung mit der Spannung am analogen Eingang zu tun wenn ich
> kein analogReference() verwende (default Einstellungen der Referenz =
> exakt 5000 mV)? Ich hatte doch schon aus der Dokumentation zum Arduino
> rezensiert.

Dann müssen wir mal über das Grundprinzip der A/D-Wandler sprechen: Der 
Wandler vergleicht das Signal gegen seine Referenzspannung und errechnet 
daraus den Wert. Am AT-Mega / ProMini gibt es keine 5,000 Volt-Referenz, 
der nutzt die Betriebsspannung.

Beweis: Setze ein Drehpoti (oder einen festen Teiler) zwischen seine +5V 
und GND, die Mitte an den Analogeingang, Du bekommst einen Wert x. 
Ändere die Betriebsspannung auf 4 Volt herunter oder auf 5,5 Volt hoch, 
der Wert bleibt fast gleich, obwohl die messbare Spannung am Analog-In 
sich deutlich ändert.

In Deinem Aufbau musst Du die Betriebsspannung messen und genau den 
gemessenen Wert in die Berechnug einsetzen.

Joachim B. schrieb:
> du könntest auch externe Spannungsreferenz nehmen, das macht dich dann
> von der internen Arduino Referenz unabhängig, besser bei Arduinowechsel.

Das ist richtig, aber aktuell scheint der Doktor ja die 5V = 
Betriebsspannung zu benutzen.

Arduino Fanboy D. schrieb:
> Ich empfehle bei Verwendung der internen Referenz

Genau so mache ich das in meinen Aufbauten:
1
analogReference (INTERNAL); // min 1.0 / typ 1.1 / max. 1.2 Volt
Da hat man aber leider auch Toleranzen und muß individuell pro Arduino / 
AVR kalibrieren.

Da käme der Vorschlag von Joachim B. mit der externen Referenz ins 
Spiel, aber auch die kann ja von Aufbau zu Aufbau Toelranzen haben.

Wir können uns auf den Kopf stellen und mit den Füßen wackeln ... wer 
messen will, muß jeden Aufbau individuell einjustieren.

von Stefan F. (Gast)


Lesenswert?

Manfred schrieb:
> Da käme der Vorschlag von Joachim B. mit der externen Referenz ins
> Spiel, aber auch die kann ja von Aufbau zu Aufbau Toelranzen haben.

Allerdings bekommt man gegen Bezahlung externe Referenzen, die schon vom 
Hersteller ab Werk kalibriert sind und danach nochmal selektiert werden. 
Die sehr guten werden dann für viel Geld verkauft, die weniger guten 
deutlich billiger.

Empfehlen kann ich da die Ref19x Reihe, die gibt es teilweise sogar bei 
Conrad. 
https://www.analog.com/media/en/technical-documentation/data-sheets/REF19xSeries.pdf

von DrDooom (Gast)


Lesenswert?

Hallo nochmal. Ich war das Wochenende mal offline und habe mich um Frau 
und Kind gekümmert.

Nur nochmal zur Klärung: Ich nutze eine externe 12V Spannungsquelle und 
einen Step-Down auf ca. 5V womit ich den Arduino versorge und nicht den 
internen Spannungswandler zu sehr aufheize. Der Arduino hat an seinem 
VCC dann auch seine 5,003 V (gemessen).

Von der externen 12V Spannungsquelle nutze ich dann einen 
Spannungsteiler (10 kOhm + 3.3 kOhm) und werte diese Spannung mit dem 
analogen Eingang aus. Laut Dokumentation misst der analoge Eingang dann 
mit 10 bit 0-1023 (0V bis 5V).

Eine Abhängigkeit zur Versorgungsspannung (5V vom Stepdown) erkenne ich 
da nicht. Oder meint ihr die Spannung des Arduino's selbst?

von Einer K. (Gast)


Lesenswert?

DrDooom schrieb:
> Laut Dokumentation misst der analoge Eingang dann
> mit 10 bit 0-1023 (0V bis 5V).

Nööö...


Sondern:
Laut Dokumentation misst der analoge Eingang dann
mit 10 bit 0-1023 (0V bis Vcc).


Arduino default ist Aref == Vcc
Und die Vcc Quelle ist dein zappelnder, Last und Temperatur abhängiger 
Step Down.

von DrDooom (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> (0V bis Vcc)

Gut, ich lese zwar überall immer 5V nicht VCC, aber gehen wir mal davon 
aus. Ich habe gemessen: VCC ist 5,003V.
Aus welchem Grund messe ich am Spannungsteiler 2,84V und mit dem Arduino 
2,78V?
Die 0,003V Unterschied können es ja nicht sein. Daher bin ich davon 
ausgegangen, dass der Innenwiderstand noch in die Berechnung aufgenommen 
werden muss um auf die effektiven 11,42V vor dem Spannungsteiler zu 
kommen. Kennt sich damit jemand aus? Ich habe verschiedene Widerstände 
mit in die Berechnungen aufgenommen und bei einem Innenwiderstand von 
150kOhm komme ich genau auf die 2,78V (11,42V Uges, R1 = 10kOhm, R2 = 
3,3kOhm, R3 = 150kOhm). Kennt sich damit jemand aus wie man aus der 
Spannung U2 und dem Spannungsteiler die eingangsspannung von 11,42V 
berechnet? Mathematik ist schon zu lang her. :-|

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

DrDooom schrieb:
> VCC ist 5,003V.
Welche Vcc? Direkt am µC? Und welche Referenz verwendest du?

DrDooom schrieb:
> Aus welchem Grund messe ich am Spannungsteiler 2,84V und mit dem Arduino
> 2,78V?
Wo genau misst du da? Der µC nimmt die Spannung zwischen dem Pin und 
AGND und vergleicht die sukzessive mit der Spannung, die zwischen Varef 
und AGND liegen. Das musst du im Prizip auch tun.
Wenn du da an den Arduino-Pinleisten herummisst, fängst du dir leicht 
die paar mV Potentialverschiebung ein.

DrDooom schrieb:
> Dann erhalte ich laut berechnung nicht die anliegende gemessene
> Spannung (Multimeter) von 2.83V sondern die 2.78V (Arduino).
Vielleicht ist dein Multimeter auch noch ein wenig ungenau. Das hat 
gerne mal +-1%+-einpaarLSB (und +-1% bei 3V sind +-30mV). Für mich sind 
das auf jeden Fall im Rahmen der Möglichkeiten des Aufbaus die gleichen 
Werte.

von DrDooom (Gast)


Lesenswert?

Lothar M. schrieb:
> Vielleicht ist dein Multimeter auch noch ein wenig ungenau.

Vielen Dank. Ich habe ein anderes verwendet welches ein paar mV mehr 
anzeigt. Und damit passt die Messung recht genau (+/- 20 mV zwischen 
Arduino und dem neueren Multimeter). Dann kann ich erstmal unter das 
Thema einen Strich machen. Top! :-)

von Einer K. (Gast)


Lesenswert?

Ich finde ja weiterhin, dass du die interne Referenz verwenden solltest. 
Und verstehe nicht, warum du dich da so quer stellst.

Macht aber auch nix.
Muss nicht alles verstehen.....

von Stefan F. (Gast)


Lesenswert?

Wenn du die Spannungsversorgung als Referenz verwendest, hängen alle 
Messungen davon ab.

Bei 3V Versorgungsspannung führt ein 2,5V Signal zum Messwert 853.
Bei 4V Versorgungsspannung führt ein 2,5V Signal zum Messwert 640.
Bei 5V Versorgungsspannung führt ein 2,5V Signal zum Messwert 512.
Bei 5,5V Versorgungsspannung führt ein 2,5V Signal zum Messwert 465.

Alle Messwerte sind relativ zur Versorgungsspannung. Schwankungen der 
Versorgungsspannung wirken sich umgekehrt proportional auf die Messwerte 
aus.

Dazu kommt eine gewisse Nicht-Linearität des ADC. Es wäre schön, wenn er 
bei 1/4 Spannung genau 1/4 von 1023 ausgeben würde und bei 1/2 Spannung 
genau 1/2 von 1023. Aber das leider nur ungefähr der Fall.

Auch dein Multimeter enthält einen nicht 100% linearen ADC und eine 
nicht 100% präzise Referenzspannung. Deswegen sind Abweichungen in der 
von Dir beobachteten Größenordnung völlig normal.

von 2 Cent (Gast)


Lesenswert?

DrDooom schrieb:
> Kennt sich damit jemand aus
Den meisten Antwortern hier darfst (und solltest) du erstmal (allerdings 
Vorsicht vor Zynikern wie mir :P) zutrauen sich damit auszukennen und 
dir nach bestem Wissen und Gewissen helfen zu wollen.

> Mathematik ist schon zu lang her. :-|
Mathematik ist eine wunderschöne(!), ganaue(!), und absolut 
fehlerfreie(!) Parallelwelt zur heutigen analogen Messtechnik. Man 
kann beides lieben, aber niemals beides (Hobbymässig) in exakt(!) 
gleiche Zahlenwerte pressen, solches darf nur die PTB :D


Ein ausgezeichnetes einfaches Beispiel dazu:
Stefanus F. schrieb:
> Dazu kommt eine gewisse Nicht-Linearität des ADC. Es wäre schön, wenn er
> bei 1/4 Spannung genau 1/4 von 1023
Genau? Da gehts mit der (kleinen) Auflösung schon los: 1/4 von 1023 = 
255,75. Das ist halt mit Ganzzahlen nicht möglich. Entweder 255, oder 
256, was denn nun? Kleinere Zwischenabstufungen im Digitalteil gibt es 
hier nicht, also sind mathematische Abweichungen zwangläufig. Dieses 
einfache Beispiel spricht die (praktische Problematik) einer 
Nichtlinearität eines ADC noch nicht einmal an, sondern nur dessen 
Auflösung. Die daraus folgende Genauigkeit steht auf einem anderen Blatt 
(sorry für diese Wiederholung).

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
Noch kein Account? Hier anmelden.