Welche Mechanismen wirken in Pull-up- oder Pull-down-Widerstandsschaltungen mit Drucktasten und einem GPIO?

Ich habe eine Frage zum GPIO (z. B. von einem Arduino-Board). Wie funktioniert es genau, wenn Sie es als Eingangspin verwenden? Welche Mechanismen wirken, wenn Sie es in Pull-up- und Pull-down-Widerstandsschaltungen mit Drucktasten verwenden? Ich habe ein paar Tutorials gelesen, aber sie geben keine tiefgreifende Erklärung der Mechanismen, oder ich habe die Punkte, die sie gemacht haben, völlig verpasst. Die meisten Tutorials sagen Dinge wie (in einem Pull-up-Beispiel): „Wenn die Taste gedrückt wird, verbindet sie den Eingangsstift direkt mit Masse. Der Strom fließt durch den Widerstand nach Masse, daher liest der Eingangsstift einen niedrigen Zustand“ ( https://learn.sparkfun.com/tutorials/pull-up-resistors ). Aber in Pulldown-Widerstandsschaltungen mit Drucktasten wird der Eingangspin auch mit Masse verbunden, wenn die Taste gedrückt wird und der Eingang in diesem Fall hoch ist.

Auch eine grundlegende Erklärung scheint nicht zu funktionieren, denn im Falle eines Pull-up-Beispiels, woher weiß es, was der hohe / niedrige Wert ist, wenn Sie den Knopf gedrückt haben, bevor Sie die Stromversorgung anschließen. Selbst eine Schwellenerklärung scheint es nicht vollständig zu erklären, die Spannung an der Schaltung insgesamt scheint mir sowohl im gedrückten als auch im nicht gedrückten Zustand über 2,5 V zu liegen, wenn ein 5-V-Vcc- und 10-kOhm-Widerstand verwendet wird oder vorhanden ist ein Denkfehler in dieser Hinsicht?

Auch Erklärungen von Elektroden, die nur den Weg des geringsten Widerstands nehmen, scheinen richtig zu sein. Selbst wenn dies zutrifft, erklärt dies nicht das Verhalten in der Pull-Down-Schaltung, da es niemals einen Eingang geben würde, wenn Sie einen 10-kOhm-Widerstand mit Masse (vor dem Taster) verbinden würden. Da diese niedriger ist als die Impedanz des Eingangspins (100k-1MΩ). Bauteile teilen den Strom entsprechend ihrer reziproken Widerstände auf (I1 / I2 = R2 / R1). Sie können es sogar sehen, wenn Sie eine LED an die Massestelle der Schaltung anschließen, die eingeschaltet ist, wenn Sie die Taste drücken und der Eingang HIGH liest. Erklärt im Pull-up-Fall I1 / I2 = R2 / R1 das Verhalten,

Es scheint mir, dass es etwas damit zu tun hat, dass die Verbindung, die keinen Widerstand zwischen dem Eingangsstift (und dem Erdungs- oder Stromversorgungsstift) hat, den Zustand bestimmt, wenn beide einen geschlossenen Stromkreis haben. Aber was ist der Mechanismus. Enthält die GPIO-Einheit (im Eingangszustand) eine Art Kondensator, der die Ladung an das Netzteil „überträgt“, wenn es direkt daran angeschlossen ist (größerer Zug bei größerer Spannung), und die Ladung länger hält (oder Ladung schneller ersetzt)? wenn es direkt mit Masse verbunden ist und so den internen Stromkreis beeinflusst? Oder hat es etwas mit der Potentialdifferenz zwischen den Seiten eines Widerstands zu tun, und wenn ja, wie liest der Eingangspin dies?

Ich verstehe die Tatsache, dass Sie eine Masseverbindung zum Eingangsstift (in einer Pulldown-Schaltung) verwenden, da sonst der Eingangsstift durch Rauschen (statisch) und einen Widerstand beeinflusst würde, da sonst eine direkte Verbindung zwischen dem Vcc bestehen würde und Masse, was zu einem Kurzschluss führen würde. Dieser Teil kann also in der Antwort übersprungen werden. Natürlich können Sie dies in Ihrer Antwort für andere Benutzer hinzufügen, die diesbezüglich nach einer Antwort suchen.

Ich hoffe, dass mir jemand (eingehend) erklären kann, wie diese Schaltungen funktionieren.

Mir ist nicht klar, was genau du fragst. Pull-Up, Pull-Down, Sequenzierung zwischen Taster und Power?
Ich habe nicht nach der Sequenz gefragt, die mir bekannt war.
"Majenko - not Google" und "hobbs" haben meine Frage perfekt beantwortet. Vielen Dank für den Versuch zu helfen.
Auch John R. Strohm hat mir bei meiner Frage weitergeholfen (um niemanden zu vergessen).

Antworten (3)

Ein GPIO-Pin kann im INPUT-Modus als sehr, sehr großer Widerstand angesehen werden, der mit Masse verbunden ist. Der GPIO-Pin ist an der Spannung interessiert, die an diesem Widerstand anliegt. Nehmen Sie zum Beispiel die folgende Schaltung:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Ein logisches HIGH wird vom Arduino gesehen, wenn die Spannung am mit GPIO bezeichneten Knoten bei oder in der Nähe von v C C (in diesem Fall 5V). Ein LOW wird gesehen, wenn die Spannung am GPIO gleich oder nahe ist 0 v .

Bei geöffnetem Schalter SW1 sind nur die beiden Widerstände im Spiel - der Pull-up-Widerstand und der Widerstand des internen GPIO-Ports. Mit einfacher Mathematik können wir also die Spannung berechnen, die am GPIO anliegen würde.

Zuerst berechnen wir das Verhältnis der beiden Widerstände mit R 2 R 1 + R 2 , und multiplizieren Sie es dann mit der Spannung, die ist 5 v . Also haben wir die Summe:

10 , 000 , 000 10 , 000 + 10 , 000 , 000 × 5

Wir können das natürlich vereinfachen, indem wir die Addition durchführen und dann die abschließenden Nullen über und unter der Linie streichen:

10 , 000 , 000 10 , 010 , 000 × 5
1 , 000 1 , 001 × 5

Und so kommt die Antwort heraus als 4.995 v - ziemlich voll 5 v . Der Arduino sieht das also als HIGH an, da es über seiner "hohen Schwelle der Eingangslogik" liegt, auch bekannt als v ICH H in Datenblättern.

Was passiert nun, wenn wir den Knopf drücken? Nun, im Grunde erzeugen wir einen Kurzschluss über den internen GPIO-Widerstand. Jetzt können wir diesen Widerstand völlig ignorieren, da wir im Wesentlichen einen Draht darüber gelegt haben, um ihn kurzzuschließen.

Also wird unsere Summe jetzt leicht verändert, seitdem R 2 ist jetzt 0 Ω (Der Widerstand des Kabels wird kurzgeschlossen R 2 ).

0 0 + 10 , 000 × 5 = 0 v

Und natürlich, 0 v unterhalb der "niedrigen Schwelle der Eingangslogik" liegt, oder v ICH L .

Eine andere Sichtweise ist, dass der GPIO, wenn der Taster gedrückt wird, direkt mit Masse verbunden ist . Keine Anpassung des Widerstands R 1 Ändert sich schon mal die Tatsache, dass die Spannung auf Masse liegt 0 v . Das kann man nur durch Kurzschließen ändern R 1 so wird das 0 Ω auch, und dann haben Sie Ihre Batterie im Grunde kurzgeschlossen, und alle Ihre Drähte sind jetzt geschmolzen.

Als Referenz finden Sie hier einen Teil von Tabelle 28.2 aus dem ATMega328P-Datenblatt, in dem die Eingangsspannungsschwellen aufgeführt sind:

Geben Sie hier die Bildbeschreibung ein

Wir können dort sehen v ICH L Und v ICH H Spannungen für die 2.4 v 5.5 v v C C Bereich aufgeführt als 0,3 v C C Und 0,6 v C C bzw. Nun, das bezieht sich nicht auf 0,3 v Und 0,6 v , aber zu 0,3 × v C C Und 0,6 × v C C .

Wenn v C C Ist 5 v , Dann v ICH L Ist 0,3 × 5 = 1.5 v , Und v ICH H Ist 0,6 × 5 = 3 v .

Also jede Spannung, die am darunter liegenden GPIO-Pin zu sehen ist 1.5 v wird als logisches LOW registriert, und jede Spannung siehe oben 3 v wird als logisch HIGH registriert.

Vielen Dank für Ihre ausführliche Antwort. Es hat mir wirklich geholfen. Es war wirklich seltsam, dass ich über die Tatsache hinwegsah, dass im Close-Pull-up-Fall im Grunde ein Kurzschluss (im GPIO-Teil der Schaltung) stattfand. Es wurde nie erwähnt, in den Tutorials, die ich gesehen habe. Vielleicht dachten sie, dass jeder, der die Tutorials liest/anschaut, es automatisch bemerken würde. Dass es offensichtlich wäre, meine ich.

Auch eine grundlegende Erklärung scheint nicht zu funktionieren, denn im Falle eines Pull-up-Beispiels, woher weiß es, was der hohe / niedrige Wert ist, wenn Sie den Knopf gedrückt haben, bevor Sie die Stromversorgung anschließen. Selbst eine Schwellenerklärung scheint es nicht vollständig zu erklären, die Spannung an der Schaltung insgesamt scheint mir sowohl im gedrückten als auch im nicht gedrückten Zustand über 2,5 V zu liegen, wenn ein 5-V-Vcc- und 10-kOhm-Widerstand verwendet wird oder vorhanden ist ein Denkfehler in dieser Hinsicht?

Da ist ein massiver Denkfehler in dieser Sache. Wenn die Taste nicht gedrückt wird, wird der Pin über einen 10k-Widerstand mit 5 V und über den sehr großen Widerstand der Eingangsschaltung des Chips mit Masse verbunden. Da der Spannungsabfall proportional zum Widerstand ist, fällt der Chip um ~5 V ab, der 10k-Widerstand fällt um ~0 ab und die Spannung am Pin liegt sehr nahe bei 5 V.

Wenn die Taste gedrückt wird, wird der Pin über einen 10k-Widerstand mit 5 V und über den Schalter (der ~ 0 Ohm beträgt) parallel zum Chip (was keinen Unterschied macht) mit Masse verbunden. Jetzt fällt der 10k-Widerstand um ~5 V ab, der Schalter fällt um ~0 ab und die Spannung am Pin liegt sehr nahe bei 0.

Pulldowns sind die gleichen, nur umgekehrt. Der Pin ist über einen Widerstand mit Masse verbunden und zeigt normalerweise einen niedrigen Wert an, aber wenn er über einen Pfad mit viel niedrigerem Widerstand mit 5 V verbunden ist, liegt die Spannung am Pin nahe bei 5 V und wird hoch angezeigt.

Die Schwellen sind fest. Sie finden sie im Datenblatt für Ihren Chip, aber eine grobe Richtlinie für CMOS ist, dass ein Eingang über 70 % von Vcc hoch ist, ein Eingang unter 30 % von Vcc niedrig ist und alles dazwischen unzuverlässig ist. Einige Chips haben möglicherweise eine kleinere "unzuverlässige" Zone, aber wenn Sie auf 30% und 70% entwerfen können, sollten Sie kein Problem haben.

Vielen Dank für die Beantwortung meiner Frage. Wenn ich Berechnungen von dem aufschreiben würde, was Sie geschrieben haben, wäre es im Pull-up-Beispiel wie folgt? R1 = 10 kOhm; R2 = 1 MOhm; R3 = ungefähr 0 Ohm - Berechnung von R total: R1 + (R2 * R3 / R2 + R3) = R total; 10 k + ~ 0 = ~ 10 k. Spannungsanteil an R1: (R1 / R1 + R2,3) * V ; (10k / 10k + ~0) * 5; ~1 * 5 = ~5; Oder gelten diese Berechnungen hier nicht?
Zur Verdeutlichung wäre R1 der Pull-up und R2 der interne Widerstand des GPIO und R3 der Weg vom Taster zur Masse. Es wird also - um das zu ergänzen, was ich im vorherigen Kommentar gesagt habe -, Vcc - Spannungsabfall R1 = Spannung am GPIO-Pin; 5 - ~5 = ~0 Spannung am GPIO-Pin.

Erstens funktioniert ein GPIO-Pin, indem er die Spannung am Pin erfasst. Sie erfassen normalerweise nur logisch „1“ (normalerweise hoch, heutzutage nahe der Versorgungsschiene) oder logisch „0“ (normalerweise niedrig, heutzutage nahe an Masse). Die genauen Details von logisch 1 und logisch 0 hängen von der tatsächlichen Mikrocontroller-Hardware ab und sind im Datenblatt des Mikrocontrollers angegeben.

GPIO-Pins stellen nach außen eine ziemlich hohe Impedanz dar. Überprüfen Sie das Datenblatt auf den "genauen" Wert. Über einen Strombegrenzungswiderstand an die positive Versorgungsschiene gebunden, wobei ein Schalter angeschlossen und offen ist, haben Sie im Wesentlichen einen sehr großen Widerstand gegen Masse. Es fließt sehr wenig Strom, was bedeutet, dass am Strombegrenzungswiderstand nur ein sehr geringer Spannungsabfall auftritt und der GPIO-Pin eine hohe Spannung sieht (nahe der positiven Schiene).

Wenn nun der Schalter geschlossen ist, schließt der Schalter das kalte Ende des Strombegrenzungswiderstands gegen Masse kurz. Es fließt Strom und am Widerstand entsteht ein Spannungsabfall. Dadurch wird der GPIO-Pin auf Massepotential gelegt.

Denken Sie daran, das Ohmsche Gesetz ist Ihr FREUND.