Sicheres Verbinden des GPIO-Eingangs mit dem Ausgang

Ich arbeite an einer Software für Raspberry Pi und schreibe einen Integrationstest. Einer der Fälle erfordert, dass ich in der Lage bin, einen Zustand eines Pins auf einem anderen zu lesen (im Grunde genommen, wenn ein Ausgangspin hoch ist, sollte ein anderer Eingangspin ebenfalls hoch sein und umgekehrt).

Was ist der sicherste Weg, einen Pin mit einem anderen zu verbinden, damit:

a) Ungeachtet der Softwareeinstellungen (Pin ist out/in, high oder low) gibt es nie einen gefährlichen Kurzschluss.

b) Der Zustand des IN-Pins ist niemals "schwebend" (was der Grund für die Verwendung von Pulldowns / Pullups ist, wie ich es verstanden habe)

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Wird R2 grundsätzlich benötigt?

Diese Seite verfügt über einen Schaltplaneditor. Drücken Sie während der Bearbeitung STRG+M oder drücken Sie die Schaltplan-Editor-Schaltfläche in der Bearbeitungssymbolleiste.
Ich habe den Schaltplan aus der Softwaredokumentation kopiert, aber danke für den Tipp!
Sie müssen erklären, wovor Sie sich schützen wollen. Was genau meinen Sie mit „schwebendem Zustand“? Sie befürchten, dass Sie versehentlich einen Ausgang tristate könnten? Schwer zu kommentieren, weil es schwer ist, Ihre Ziele zu verstehen.
OK. Es gibt also zwei Dinge. Einer besteht darin, ein RPi vor Kurzschlüssen zu schützen (was beispielsweise entstehen kann, wenn beide Pins auf Out gesetzt sind und einer High ist, der zweite Low ist) und sicherzustellen, dass der Status am Eingang korrekt hoch oder niedrig ist und nicht schwebt. Ich nehme an, das ist der Grund, warum Sie im Falle eines Schalters Pulldown anbringen.

Antworten (2)

Sie verbinden Pin b "Input" mit einem Pull-Up oder Pull-Down, um einen bekannten Zustand zu erzwingen, falls sich Pin A "Output" in einem schwebenden Zustand befindet. Sie verbinden Pin a mit Pin b mit einem hochohmigen Widerstand von 10k~100k Ohm, um einen hohen Stromfluss zu verhindern, wenn Pin a und b versehentlich beide Ausgänge mit unterschiedlichen Pegeln sind. Das soll einen High-Low-Kurzschluss verhindern.

Da die meisten Systeme mit dem temporären Floating-Pin umgehen können, wird nur der vorsorgliche Widerstand zwischen Pin a und b benötigt. Ein Pulldown/Up-Pin kann zu einer unnötigen Batterieentladung führen.

Es gibt also keine Möglichkeit, dass sich der Pin in einem schwebenden Zustand befindet, sobald der Ausgang auf LOW gesetzt ist, selbst wenn der Pulldown (R2) fehlt?
Wenn sich der Ausgang von Pin A in einem bekannten Zustand befindet, befindet sich Pin b über den Reihenwiderstand im selben Zustand, wenn sich Pin B im Input/High-Z-Modus befindet.

Ihr Schaltplan sollte für die Isolierung zwischen zwei GPIOs ziemlich gut funktionieren. (R2 ist eine gute Idee, aber nicht unbedingt erforderlich).

Es gibt jedoch einige Überlegungen, die berücksichtigt werden müssen.

  1. Wenn einige GPIO Bs auf Ihrer MCU-Platine bereits vorhandene Pullups haben, kann dies dazu führen, dass der Reihenwiderstand R1 als unterer Widerstand in einem Spannungsteiler fungiert, wenn GPIO A in einem niedrigen Zustand ist. Dies könnte dazu führen, dass das an GPIO B gesehene "Low" zu hoch ist, um zuverlässig als "0" erkannt zu werden.

  2. Wenn einige GPIO Bs auf Ihrer MCU-Platine bereits vorhandene Pulldowns haben, kann dies dazu führen, dass der Reihenwiderstand R1 als oberer Widerstand in einem Spannungsteiler fungiert, wenn GPIO A in einem hohen Zustand ist. Dies könnte dazu führen, dass das an GPIO B gesehene „Hoch“ zu niedrig ist, um zuverlässig als „1“ erkannt zu werden.

  3. Wenn einige der GPIO Bs mit anderer Logik auf der Platine verbunden sind, kann es zu Konflikten beim Versuch kommen, das Signal durch die Isolationsschaltung zu bekommen.