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)
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Wird R2 grundsätzlich benötigt?
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.
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.
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.
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.
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.
efox29
Marcin Raczkowski
Daniel
Marcin Raczkowski