Sind die Widerstandswerte (R1 und R2) in dieser Schaltung sinnvoll?

Diese vereinfachte Schaltung soll zwei Endschalter erfassen (die niemals gleichzeitig geschlossen werden können - zumindest theoretisch). Das gezeigte Voltmeter ist ein Platzhalter für eine Verbindung zu einem analogen Eingangspin eines Arduino. Wenn beide Schalter geöffnet sind, wie im Diagramm gezeigt, sollte der Pin 3V31 erkennen. Das Schließen von SW1 ergibt 5 V und das Schließen von SW2 ergibt 0 V.

Dies funktioniert hervorragend in der Simulation, aber ich wundere mich über den Gesamtstrom, wie er von der GND-Sonde angezeigt wird ... Meine vage neue Intuition sagt mir, dass eine gewisse Mindeststrommenge vorhanden sein muss, um vom A/D-Wandler im Arduino erfasst zu werden , aber ich konnte nirgendwo eine Spezifikation für dieses Minimum finden (oder erkennen). (Im Gegensatz dazu werden die Spezifikationen für den maximalen Strom, den ein Pin aufnehmen kann, viel diskutiert.)

Geben Sie hier die Bildbeschreibung ein

Antworten (5)

Ich mag weit daneben liegen, aber ich glaube, das ist ein Fall, in dem du nicht über das Problem nachdenken willst, KISS.

Wenn SW2 geschlossen ist, ist der Eingangspin geerdet und Sie sollten 0 lesen. Dies ist genau wie in dem Fall, in dem ein unbenutzter Pin geerdet und nicht schwebend gelassen wird.

Wenn SW1 geschlossen ist, ist der Eingang mit 5 V verbunden (entweder Vcc oder Aref), und Sie sollten den Maximalwert lesen (das heißt, alle Binärbits sind 1).

Für beide oben genannten Fälle könnten Sie die Widerstände aus der obigen Schaltung entfernen, da sie keinen Einfluss auf den Pegel des Eingangspins haben (das heißt, der eine oder andere Schalter ist geschlossen).

Der einzige verbleibende zu betrachtende Fall ist, wenn beide Schalter offen sind. Wenn Sie keine Widerstände hätten, wäre der Eingangsstift schwebend. Wenn der Eingang zum ADC schwebend gelassen wird, würde man erwarten, halbzufällige Werte aus dem Port auszulesen, sicherlich keinen unveränderlichen Wert von 0 oder MAX (alle Bits eingeschaltet). Ich empfehle zwar nicht, die Widerstände wegzulassen, aber Sie sollten in der Lage sein, dies ohne sie zum Laufen zu bringen.

Obwohl dies nicht ausdrücklich Teil Ihrer Frage ist, ist der interessantere Fall, wenn Sie erkennen möchten, dass einer von mehreren Schaltern mit einem einzelnen analogen Eingangsstift geschlossen wird. Für eine angemessene Anzahl von Pins, sagen wir 10, kann dies leicht mit einer Widerstandsleiter ( http://en.wikipedia.org/wiki/Resistor_ladder ) erfolgen. Sie können auch die R2-R-Leiter googeln.

Eine Anleitung zur Implementierung finden Sie unter: http://embedded-lab.com/blog/?p=4040

Nebenbei bemerkt, wenn Sie nur das Schließen eines einzelnen Schalters erfassen möchten, würden Sie höchstwahrscheinlich eher einen digitalen E / A-Pin als einen analogen verwenden, sofern verfügbar. Der häufigste Grund für die Verwendung eines analogen anstelle eines digitalen Pins zum Erkennen von Schalterschließungen ist, wenn die Anzahl der verfügbaren digitalen Pins geringer ist als die Anzahl der Schalter.

Ich verstehe nicht, warum die beiden Widerstände nicht gleich sind. Das würde den Wert in der Mitte des Bereichs schweben lassen, wenn keiner der Schalter geschlossen ist, und am einen oder anderen Ende, wenn einer geschlossen ist. Dies würde den größten Spielraum für die Unterscheidung zwischen zwei beliebigen Zuständen lassen.

A/D-Eingänge sind normalerweise so spezifiziert, dass sie eine minimale Quellenimpedanz erfordern, um mit ihrer vollen Geschwindigkeit oder Genauigkeit zu arbeiten. Sie müssen in der Arduino-Dokumentation nachsehen, was das ist, oder möglicherweise im Datenblatt des Mikrocontrollers, wenn zwischen den analogen Eingängen und dem Mikro nichts ist. Denken Sie daran, dass Sie nicht annähernd die volle Genauigkeit benötigen. Wie genau sich der A / D bei einer höheren als der angegebenen Quellimpedanz verschlechtert, ist etwas Chipspezifisches und in Ihrem Fall möglicherweise eine zusätzliche Schaltung, die vom Arduino hinzugefügt wird.

Beachten Sie, dass in Ihrem Setup die Impedanz des Signals grundsätzlich 0 ist, wenn einer der Schalter geschlossen ist. Es ist die Parallelschaltung der beiden Widerstände, wenn beide Schalter geöffnet sind. Wenn beide Widerstände 10 kΩ wären, dann wäre die Impedanz 5 kΩ. Der Ruhestrom ist die Versorgungsspannung (in Ihrem Fall anscheinend 5 V) geteilt durch die Summe der beiden Widerstände. Dies wären 5 V / 20 kΩ = 250 µA, wenn beide Widerstände 10 kΩ betragen.

Es besteht die Möglichkeit, dass die Dinge mit einer Quellenimpedanz von 5 kΩ gut genug funktionieren. Sie könnten es versuchen und sehen. Sie erhalten möglicherweise nicht genau eine 1/2-Skala, wenn beide Schalter geöffnet sind, aber wahrscheinlich nahe genug, um zuverlässig zu unterscheiden, ob beide Schalter geschlossen sind.

A/D-Wandler haben normalerweise eine niedrige Eingangsimpedanz, die parallel zu Ihrem R2 liegt, sodass die theoretischen 3,31 V möglicherweise einen anderen (niedrigeren) Messwert ergeben. Zum Beispiel, wenn die Eingangsimpedanz 10k beträgt Ω das Äquivalent von R2 wird 5k Ω , und der Messwert beträgt 2,5 V.
Wenn der genaue Wert wichtig ist, können Sie einen Spannungsfolger am R1/R2-Knoten verwenden:

Geben Sie hier die Bildbeschreibung ein

Die Werte, die Sie für R1 und R2 verwenden, sollten in Ordnung sein.

Ich glaube, die Atmels haben einen Eingangswiderstand von 100 MΩ - bin mir jedoch nicht sicher, was die Impedanz angeht
@ Majenko: Es geht nicht um die Eingangsimpedanz des A / D. Da es sich um einen CMOS-Eingang handelt, der sehr hoch ist, wie Sie sagen. Das Problem ist, welche Impedanz der A/D für das Signal benötigt. Das sind oft etwa 10 kOhm und bei Hochgeschwindigkeits-A/Ds deutlich weniger. Einige A/D können in der Firmware anders angesteuert werden, um eine höhere Quellenimpedanz zu ermöglichen. Ob der Atmel das kann und ob das durch die Arduino-Software optional gemacht wird, weiß ich nicht.
@stevenh: Ich wollte vorher fragen ... Mit welcher Software erstellen Sie die Schaltpläne, die Sie hier posten?
@Kaelin - Ich habe es nicht selbst gezeichnet. Ich habe es bei Google Bilder gefunden.

Die Werte sind angemessen, können aber höher sein.

Jeder ADC-IC hat seine eigene Spezifikation dafür, wie hoch ein Eingangswiderstand es tolerieren kann. Ein Link zum Datenblatt des betreffenden Prozessors würde es uns ermöglichen, Sie auf den entsprechenden Wert hinzuweisen, aber in Ermangelung eines bestimmten Werts liegt dieser typischerweise im Bereich von 10.000 bis 50.000 und häufig bei 20-30.000.

Werte von 22k oder sogar 33k werden dort wahrscheinlich gut funktionieren. Der angegebene Maximalwert bezieht sich normalerweise darauf, den Fehler aufgrund der RC-Zeitkonstante unter 1 Bit der ADC-Auflösung zu halten. Da Sie sich hier nicht allzu sehr um die Auflösung kümmern, sind wahrscheinlich sogar 100K-Widerstände in Ordnung.

Murphy sagt, dass beide Schalter irgendwann gleichzeitig geschlossen werden. Er sagt auch, dass dies passieren wird, wenn Sie es wirklich wirklich nicht wollen.

Es gibt viele alternative Schaltungen, die nicht riskieren, magischen Rauch aus der Stromversorgung und den Schaltkontakten zu ziehen. z.B

(1) Platzieren Sie einen 1k (sagen wir) Widerstand in Reihe mit jedem Schalter. Insbesondere bei höheren Widerstandswerten hat dies vernachlässigbare Auswirkungen auf das, was Sie tun möchten.

(2) Angenommen, Schalter können wie gewünscht angeschlossen werden.

Sagen Sie 22K V+ zu Punkt X
Schalten Sie einen von Masse über 10k zu Punkt X.
Schalten Sie zwei von Masse über 33k zu Punkt X.

S1 S2 = 0 0 Vx = 5 V Beide offen
S1 S2 = 1 0 Vx = 5 x 10/(10+22) ~~= 1,6 V S1 geschlossen
S1 S2 = 0 1 Vx ~= 3 V S2 geschlossen S1 S2 = 1 1 Vx~= 1,3 V beide geschlossen

Ergebnisse nur zur besseren Übersichtlichkeit

5V keine
3V S2
1,6V S1 1,3V S1 + S2

Mit ein wenig Nachdenken erhält man eine noch bessere Streuung.

hat sein' Du

Einige Prozessoren haben optionale Pull-Ups und Pull-Downs an den Eingangspins. Wenn Ihr Prozessor beides hat, könnten Sie die gezeigten Widerstände weglassen, obwohl es gut wäre, Widerstände (wahrscheinlich 470 Ohm oder so) in Reihe mit den Schaltern hinzuzufügen. Wenn Sie den internen Pull-up des Prozessors einschalten, einen Moment warten (wahrscheinlich irgendwo zwischen einigen Mikrosekunden und einer Millisekunde oder so) und den Eingangszustand überprüfen, wird angezeigt, ob SW1 geschlossen ist. Durch Einschalten des internen Pulldowns, Warten und Überprüfen des Eingangszustands wird angezeigt, ob SW2 geschlossen ist.

Wenn die Schalter Vorwiderstände haben, könnte man das Lesen beschleunigen, indem man den Prozessor jeden Pin kurz nach dem Aktivieren der internen Pull-Ups auf High und nach dem Aktivieren der internen Pull-Downs kurz auf Low treibt.

Wenn keine internen Pulldowns verfügbar sind (aber Pullups) und Sie einen Vorwiderstand an mindestens SW2 haben, könnten Sie einen dauerhaften, schwachen Pulldown-Widerstand haben. Um zu überprüfen, ob SW1 geschlossen ist, schalten Sie den Pull-up ein, fahren Sie den Stift kurz hoch und lesen Sie ihn ab. Um zu prüfen, ob SW2 geschlossen ist, schalten Sie den Pull-up aus, fahren Sie den Pin kurz auf Low und lesen Sie ihn ab.