Probleme beim Einlesen von Analogeingängen.(Ein Eingang beeinflusst den anderen)

Hallo ich bin Arduino Neuling und habe mir eine Soundbox aus 2 alten Computer Lautsprecher gebaut.

Mit Hilfe eines Arduino Uno R3 möchte ich nun die eingestellte Lautstärke (Volume und Bass) auf einem LCD-Display anzeigen. Dazu habe ich mechanisch 2 Potentiometer vor die bestehenden des Lautsprechers geklemmt, sodass die originale Lautsprecherplatine unberührt bleibt und einen zweiten unabhängigen Stromkreis bildet. Die Potentiometer für das Arduino werden mit Ground und 5V versorgt. Die Basis geht an jeweils einen Analogeingang (A0, und A1). Das Einlesen und Ausgeben dieser Werte klappt wunderbar.

Nun zum Problem:
Zusätzlich lese ich noch einen Spannungswert der 12V Batterie aus (über einen Spannungsteiler an A3), der mir den Ladezustand am Display anzeigen soll (SOC).
Der Spannungswert an A3 liegt zwischen ca.3,4V (Batterie geladen) und ca.2,6V (Batterie leer)

Leider funktioniert das nicht so wie gewünscht. Sobald ich am Bass-Potentiometer drehe (das ist der Analogwert, der zuletzt vor dem SOC-Wert ausgelesen wird) verändert sich der SOC-Wert willkürlich.
Wenn ich Volumewert-Auslesung und Basswert-Auslesung in der Reihenfolge in der loop() Schleife vertausche, hat nun das drehen am Volume-Potentiometer den selben Effekt.

Ich habe schon einiges ausprobiert, aber es scheint so, als ob immer der Wert, der zuletzt vor dem A3 Wert ausgelesen wird, diesen wiederrum beeinflusst.
An eventuellen elektromagnetischen Einflüssen der Lautsprecher kann es nicht liegen, diese habe ich dezeit garnicht angeschlossen.
Ich habe schon eine Mittelung der SOC-Werte eingeführt, die die ersten Werte verwirft, um Bufferprobleme zu verhindern, an den schwankenden Werten hat das allerdings nichts geändert.

Im Anhang befindet sich mein Code.

Ich bin dankbar für jede Hilfe. :slight_smile:

Soundbox_Version2.0.ino (3.35 KB)

Hi

Welche Referenz benutzt Du?
Hast Du einen Kondensator am ARef-Pin?

Vll. hilft Es Dir schon, wenn Du den Wert 2x einliest und den Ersten verwirfst.

MfG

Ich muß zugeben ich mache mir nicht die Arbeit alles zu lesen. Mir genügt der Titel.

Wenn die Spannungsteiler zu hochohmig sind (größer als ca 10kOhm Gesamtwiderstand) kann der interne Sample and Hold Kondensator innerhalb der gegebenen Zeit nicht voll geladen werden und damit beeinflußt ein Analogeingang den anderen.

Abhilfe:

  • Mehrere Messungen des gleichen analogen Eingangs schnell hintereinander und den Wert der letzten Messung nehmen.
  • Einen 0,1µF Kondensator zwischen Analogeingang und Masse schalten.

Grüße Uwe

uwefed:
Abhilfe:

  • Mehrere analoge Messungen hintereinander des gleichen Eingangs und die letzte Messung nehmen.
  • Einen 0,1µF Kondensator zwischen Analogeingang und Masse schalten.

Grüße Uwe

Vielen Dank für die schnelle Antwort! Kurze Frage noch zur genannten Abhilfe, da ich kein großes Verständnis über "Sampling" usw. habe. Reicht es wenn ich nur die mehreren Messungen mache und die letzte nehme oder ist der Kondensator zwingend erforderlich?

Danke und entschuldigung für den langen Text in meiner Frage.

MustermannDerErste:
Vielen Dank für die schnelle Antwort! Kurze Frage noch zur genannten Abhilfe, da ich kein großes Verständnis über "Sampling" usw. habe. Reicht es wenn ich nur die mehreren Messungen mache und die letzte nehme oder ist der Kondensator zwingend erforderlich?

Danke und entschuldigung für den langen Text in meiner Frage.

Der AD-Wandler arbeitet im Sigma-Delta sukzessive Approximation Verfahren, das heißt er braucht ca 10 Interaktionen um den Analogwert zu bestimmen. Darum muß während der Wandlungszeit die Meßspannung konstant bleiben. Dies wird erreicht indem nicht die Analogspannung gewandelt wird, sondern ein kleiner interner Kondensator auf die Meßspannung geladen wird und diese Spannung danach gewandelt wird.
Der Kondensator (Sample and Hold Kondensator) ist zwar sehr klein, aber er wird nur für eine sehr kurze Zeit geladen. Daraus ergibt sich ein Ladestrom von ca 500µA den die Spannungsquelle liefern muß.

Ist die Spannungsquelle der Meßspannung zu hochohmig lädt sich der Sample and Hold Kondensator nicht auf die Meßspannung auf. Man kann ihn ganz aufladen indem man ihm mehr Ladezeit, sprich Mehrfachmessungen hintereinander, gibt oder falls die Spannung sich nicht schnell ändert, wie es bei Batteriekontrolle üblich ist, einen Kondensator extern an den Analogeingang anschließt und somit der Ladestrom des internene Kondensators von diesem bereitgestellt wird.

Eine dritte Möglichkeit ist den Spanungsteiler niederohmiger machen, damit dieser mehr Strom liefern kann. Dies ist nicht immer möglich, da zB bei Batterien der Spannungsteiler die Batterie entlädt und man das auch nicht will.

Zum Testen mach mal mehrere Messungen des Pins A3 hintereinander und verwende den letzten gemessenen Wert. Wirds besser würde ich auf alle Fälle einen 0,1µF Kondensator an A3 dazuschalten. Auch an A0 und A1 schadet ein Kondensator nicht.

Grüße Uwe

Vielen vielen Dank für diese kompetente und hilfreiche Antwort! Das hilft mir sehr :slight_smile:

Nachtrag.
Wenn Du einen 0,1µF anschließt oder die Meßspannungsquelle genügend niederohmig ist, brauchst Du keine Mehrfachmessungen machen.
Grüße Uwe

uwefed:
Der AD-Wandler arbeitet im Sigma-Delta Verfahren,

Nein. Das ist sukzessive Approximation und die Takte werden gebraucht um die Näherung durchzuführen.

Serenifly:
Nein. Das ist sukzessive Approximation und die Takte werden gebraucht um die Näherung durchzuführen.

Danke für die Korrektur.
Das ist das Gute an einem Forum. Da werden Fehler schnell entdeckt und korrigiert.
Grüße Uwe

Der Tip mit dem Kondensator am Eingang vermindert zwar das Übersprechen zwischen den Kanälen, verfälscht aber auch die Messung. Wenn der Innenwiderstand der Spannungsquelle des Signals so hoch ist, daß sie die Eingangskapazität des ADC nicht ausreichend schnell umladen kann, dann kann ein viel größerer Stützkondensator noch viel langsamer nachgeladen werden. Man erhält also einen Tiefpass mit ziemlich niedriger Grenzfrequenz, und nur weil die Messwerte dann nicht mehr so stark zappeln, meinen viele Programmierer daß diese Werte besser (genauer...) sind.

Die saubere Lösung für sowas ist ein Impedanzwandler. Vor allem wenn man schnelle Signale hat. Für eine Batterie ist es aber übertrieben

DrDiettrich:
Der Tip mit dem Kondensator am Eingang vermindert zwar das Übersprechen zwischen den Kanälen, verfälscht aber auch die Messung. Wenn der Innenwiderstand der Spannungsquelle des Signals so hoch ist, daß sie die Eingangskapazität des ADC nicht ausreichend schnell umladen kann, dann kann ein viel größerer Stützkondensator noch viel langsamer nachgeladen werden. Man erhält also einen Tiefpass mit ziemlich niedriger Grenzfrequenz, und nur weil die Messwerte dann nicht mehr so stark zappeln, meinen viele Programmierer daß diese Werte besser (genauer...) sind.

Ich habe mich auf dieses Projekt bezogen. Da wird a) eine Batterie und b) 2 Potentiometer zur Einstellung von Parametern verwendet. Beides Signalquellen die sich in a) nicht schnell ändern und in b) auch wenn die Messung verlangsamt ist, kein Problem darstellt.
Die zusätzlichen Kondensatoren haben alle Zeit der Welt um auf den Endwert der Meßspannung geladen zu werden weils i dauernd an der Spannungsquelle geschaltet sind.

Ok, man kann auch Operationsverstärker als Impedanzwandler (Spannungsfolger) verwenden. Dazu braucht es aber Rail to Rail Modelle und die Schaltung wird etwas komplizierter.

Grüße Uwe

Hi,

es ist für statische Werte gar kein Problem sehr hochohmig zu messen, allerdings sollte man schon einigermaßen wissen was man da macht. Wie schon erwähnt, entweder über den Spannungsteiler zur Messung 0,5mA fließen lassen, das ist der einfachste Weg, geht für schnelles messen und für statische Werte. Der Impedanzwandler für Quellen, die man nur hochohmig messen kann, auch sehr einfach, wenn OPV oder Opamp kein Schimpfwort ist.
Oder wenn es um statische Werte geht, zumindest im Moment der Messung, dann kann man auch Spannungsteiler bis in den 10er Megaohm Bereich basteln, und richtig messen. Dann gibt es aber einiges zu beachten! Ohne Kondensator misst man falsch, mit einem zu großen Kondensator evtl. gar nichts mehr, da alles gebügelt wird.
Genügend Vorlaufzeit vor der Messung, um den erwähnten Tiefpassfilter seine Zeit zu geben.
Aber solche Sachen macht man eigentlich nur, um zu sehen, wie weit man es treiben kann, ohne zusätzliche Hardware verwenden zu müssen.

Gruß André

Update:
Ich habe jetzt 2 neue Potentiometer (jeweils max. 1kOhm statt vorher max. 10kOhm) verbaut, sowie den Spannungsteiler von Rges=1,4MOhm auf Rges=7,2kOhm umgelötet.
(Die Verlustleistung ist am neuen Spannungsteiler immernoch relativ gering, da ich nur max. 12,6V anliegen habe.)

Jetzt klappt alles wunderbar, das Problem waren also tatsächlich die zu hohen Widerstände.

Vielen Dank nochmal an die hilfreichen Kommentare.

Mit freundlichen Grüßen
Max

Hi

Alternativ, wenn sich die Quelle Mal nicht umlöten lässt, wie von Uwe schon angesprochen, einen R2R-OpAmp als Spannungsfolger.
Der hat einen sehr hohen Eingangs-Widerstand und beeinflusst somit das Signal sehr wenig bis gar nicht und einen sehr geringen Ausgangs-Widerstand, wodurch der ADC im Arduino genügend Strom für Seinen S-H-Kondensator bekommt.

Schön, daß Es klappt - Feedback ist immer gerne gesehen!

MfG

Batteriespannung. Auch ein hochohmiger Spanungsteiler funktioniert durch dazuschalten eines Kondensators von 0,1µF am Analogeingang wenn das Analogsignal sich langsam ändert.
Ich hätte diese Lösung genommen.
Grüße Uwe