Warum habe ich in Arduino ADC trotz niedriger Quellenimpedanz ein Übersprechen?

7

I. DER SCHALTKREIS:

Unten misst ein Arduino Due Spannungssignale von zwei parallelen Spannungsteilerschaltungen:

Geben Sie hier die Bildbeschreibung ein

Wir möchten, dass der Due die Spannungen an den Stellen, an denen er Kontakt mit den Spannungsteilern hat, genau misst. Wir sehen jedoch ein deutliches Übersprechen - wenn Sie den Widerstand in einem Kanal ändern, ändert sich auch die Spannung im anderen Kanal:

TEST I  (R1=R2=10MΩ):
Geben Sie hier die Bildbeschreibung ein

TEST II  (R2=3.3MΩ<R2=10MΩ):
Geben Sie hier die Bildbeschreibung ein

Allerdings können wir theoretisch um diese Effekte zu aktuellen undichten durch die Due verfolgen : die Due hat in der Regel eine Eingangsimpedanz von ca. 10 kOhm, aber wir haben darunter von 20 MHz bis 1 MHz getaktet, der seine Eingangsimpedanz 266 kOhm erhöht. Die Elektronen in der Spannungsteilerschaltung werden es also sicherlich vorziehen, in das Arduino einzutreten, anstatt die vor ihnen platzierten 1 MΩ zu durchqueren.

II. DAS FOLLOW-UP:

Im Folgenden haben wir eine winzige Änderung an unserer ursprünglichen Schaltung vorgenommen, in der Hoffnung, die Spannungskanäle wirklich unabhängig zu machen: Beide Signale werden von einem ADA 4528-2 ( einem Zweikanal-Operationsverstärker ) gepuffert :

Geben Sie hier die Bildbeschreibung ein

Der Operationsverstärker ist nicht da, um das Signal zu verstärken: Er liefert eine Verstärkung von ~ 1,003. Stattdessen dient es dazu, die hohe Impedanz der Schaltung, die wir messen möchten, zu verbergen. Anstelle einer Ausgangsimpedanz von 1 MΩ beträgt die Impedanz jetzt <0,1 Ω:

Geben Sie hier die Bildbeschreibung ein

Die Elektronen sollten also im Stromkreis bleiben und es sollte überhaupt kein Übersprechen geben. Zu meiner Überraschung gibt es trotz einiger Verbesserungen immer noch ein spürbares Übersprechen!:

TEST I  (R1=R2=10MΩ):
Geben Sie hier die Bildbeschreibung ein

TEST II  (R2=3.3MΩ<R2=10MΩ):
Geben Sie hier die Bildbeschreibung ein

Der rote Kanal sollte nicht "wissen", dass der blaue Kanal einen erhöhten Widerstand hat. Das Signal fällt jedoch ab, wenn ich keine Änderungen am roten Kanal vorgenommen habe. Was fehlt mir in meiner Analyse (ich verwende übrigens Widerstände mit niedriger Toleranz <1%)?

Dave
quelle
Ich bin neugierig - Gibt es einen Grund für die Rückkopplungswiderstände und nicht nur einen Spannungsfolger?
MdxBhmt
Meine Unwissenheit. Ich denke, ein Spannungsfolger ist einfacher.
Dave
1
Ihre Opamps haben einen Gewinn von 76, nicht ~ 1!
Nick Johnson
1
Außerdem ist 10Mohm eine Menge Widerstand - Sie werden wahrscheinlich überall parasitäre Effekte sehen, auch durch Verunreinigungen auf der Leiterplatte.
Nick Johnson
1
Sind Sie sicher, dass Ihre 3,3 V genügend Ampere liefern können? Mit r1, r2 10M gibt es 5,5M zu GND. Mit r1 10M r2 3.3M haben Sie nur 3M bis GND. Wenn Ihre Spannungsquelle keine nennenswerte Last antreiben kann, sind die Auswirkungen Ihrer Eingangsspannung möglicherweise niedriger als 3,3 V, was zu den von Ihnen veröffentlichten Messungen führt. Ich habe mit Sensoren gearbeitet, die vorher nur Bruchteile von Mikroampere ansteuern konnten, daher waren "normale" Widerstandsgrößen nicht hoch genug.
FRob

Antworten:

2

Höchstwahrscheinlich ist es ein Problem, wenn die analogen Kanäle im Arduino gemultiplext werden. Versuchen Sie es mit einer größeren Zeitlücke zwischen roten und blauen Signalen. Dies sollte das Problem hoffentlich lösen / anzeigen.

Andy aka
quelle
Interessanter Vorschlag. Ich werde Sie die Ergebnisse in ein paar Stunden wissen lassen ...
Dave
Das weitere Übertakten des Arduino (auf 100 kHz) löste das Problem !!!!
Dave
0

Obwohl es sich um einen alten Beitrag handelt, hatte ich kürzlich das gleiche Problem mit dem Arduino Due, der versuchte, zwei Audiokanäle für ein VU-Messgerät auszulesen. Wenn Sie die Balance nur auf einen Kanal einstellen, wurde am Ausgang beider ADC-Kanäle immer noch ein Signal angezeigt. Ich habe eine beträchtliche Verzögerung zwischen dem Auslesen der beiden Kanäle versucht, aber ohne Glück. Was für mich der Trick zu sein schien, war, jeden Kanal zweimal auszulesen und nur die zweite Konvertierung zu verwenden.

analogRead(Channel1);
ADCLeft = analogRead(Channel1);
analogRead(Channel2);
ADCRight = analogRead(Channel2);

Jetzt habe ich vollständig separate Kanäle, wenn ich den Balance-Regler von links nach rechts und umgekehrt bewege.

Tom Binnekamp
quelle