10-Bit-Digitaldarstellung mit SPDT-Schaltern und Spannungsteilung

Ich bin völlig neu in der Elektronik und habe versucht, eine Möglichkeit zu finden, 10 SPDT-Schalter an einen einzelnen analogen Pin meines Ardiono Mega 2560 anzuschließen (und natürlich an 5 V und Masse angeschlossen). Die Idee ist, so viele Schalter auf einem einzigen Pin zu aktivieren, um zu versuchen, Pins für andere Zwecke freizugeben.

Ich habe 10 Schalter in Reihe geschaltet, mit eindeutigen Widerstandswerten an jeweils einem Pol, und versuche auf diese Weise, die Bitwerte 1,2,4,8,16,32,64,128,512 darzustellen, was mir a geben wird Auflösung von 0-1023 ganzzahligen Werten, das ist der Bereich, den ich verstehe, dass der ADC auf dem Arduino-Chip unterstützt. Der Spannungsteiler funktioniert und gibt die richtige Spannung, aber NUR wenn ein einzelner Schalter umgelegt wird.

Meine Schaltung sieht wie folgt aus:

Geben Sie hier die Bildbeschreibung ein

Hier sehen wir, dass der letzte Schalter umgelegt ist und die Ausgangsspannung 2,5 V beträgt, was wie erwartet einem digitalen Wert von 512 entspricht. Wenn Sie jedoch mehr als einen Schalter verwenden, fällt die Spannung stärker ab, was mir das umgekehrte Ergebnis von dem gibt, wonach ich suche.

Ich weiß nicht, ob das, was ich hier zeige, sinnvoll ist, aber idealerweise möchte ich in der Lage sein, die Position einer beliebigen Kombination von Schaltern zu erkennen, indem ich die Spannung in binär umwandele und von dort aus arbeite.

Schauen Sie sich diese Diskussion an, die einige der Probleme und Einschränkungen dieses Ansatzes berührt: arduino.cc/forum/index.php/topic,8558.0.html

Antworten (1)

Das wird nicht funktionieren. Zwischen der Genauigkeit Ihrer Widerstände und der Genauigkeit des A/D erhalten Sie nicht genau einen bekannten Messwert für jede einzelne Schaltereinstellung. Nicht annähernd.

Im Allgemeinen besteht die Möglichkeit, einen Satz gleichmäßig verteilter Analogwerte aus verschiedenen Schaltereinstellungen zu erzeugen, darin, das zu tun, was die meisten D/As tun, nämlich eine R-2R-Leiter zu verwenden. Ich muss jetzt etwas anderes tun, also habe ich keine Zeit, um darauf einzugehen, was eine R-2R-Leiter ist, vielleicht später. Dies ist jedoch ein bekanntes Konstrukt, und Sie werden leicht eine Menge darüber finden.

Sehen Sie sich Ihr D/A-Fehlerbudget und das des A/D genau an. Mit 0,1% Widerständen und abhängig von der absoluten Genauigkeit des A/D können Sie möglicherweise 8 Schalter auflösen, wenn alles richtig funktioniert. 7 oder 6 Schalter klingen viel machbarer. 10 liegt definitiv im Garantiebereich.

Wäre es eine bessere Option, ein Schieberegister wie in diesem Tutorial zu verwenden: arduino.cc/en/Tutorial/ShiftIn
Ich werde mich auf WikiPedia über R-2R-Leitern informieren, ich habe dort einen Artikel gesehen, der ziemlich detailliert zu sein schien.
Das Problem ist, dass die Toleranz des größten Widerstands den kleinsten nutzlos macht: Sie können dieses Problem lösen, indem Sie jeden Widerstand mit einem Ohmmeter mit der für die D/A-Wandlung erforderlichen Auflösung messen.