Verwendung eines nicht-invertierenden Puffers zur Pegelverschiebung

Ich habe ein Projekt mit einem 5-V-Arduino und einem Raspberry Pi Zero (3,3 V), die über eine serielle Schnittstelle kommunizieren müssen. Die einfache Lösung wäre hier, sie über USB anzuschließen, aber ich verwende eine Arduino Pro Mini-Platine, die keinen USB-zu-Seriell-Adapter und daher keinen USB hat. Also werde ich sie direkt anschließen, aber ich habe gehört, dass der Raspberry Pi es nicht mag, 5 V über seine seriellen Pins zu bekommen, was bedeutet, dass ich einen Level-Shifter haben muss (zumindest auf der Arduino tx to Pi rx-Leitung). .

Ich habe ein paar nicht invertierende Hex-Puffer (den CD4050BCN ), und soweit ich weiß, gibt V DD nur maximal 3,3 V aus, wenn ich V DD auf die Logikspannung des Pi (3,3 V) eingestellt habe. Dann kann ich den tx-Pin des Arduino mit V IN der nicht invertierenden Puffer verbinden, um sicherzustellen, dass der Ausgang höchstens 3,3 V beträgt.

Verstehe ich einen Teil davon nicht? Ich möchte nur sichergehen, dass ich über die grundlegende Verdrahtung von Mikrocontrollern hinaus nicht viel über Elektronik weiß.

Wie schnell werden Sie die serielle Schnittstelle bedienen. Es ist irgendwie wichtig zu wissen. Sind die Linien auch unidirektional? Oder wird einer von ihnen aus irgendeinem Grund bidirektional sein? Schließlich wurde diese Art von Frage im Internet millionenfach beantwortet, wenn nicht sogar milliardenfach – es ist ein wirklich, wirklich häufiges Bedürfnis. Schon geschaut? Kennen Sie abschließend noch die absoluten Maximalvorgaben für die Schutzdiodenströme im Raspberry Pi Zero?
Ich habe meine Antwort aktualisiert, bitte überprüfen Sie sie, bevor Sie die Hardware implementieren. Es ist wichtig, einen ähnlichen Spannungsteiler auf der Pi Tx-Leitung hinzuzufügen.
Es gibt viele Möglichkeiten, dies zu lösen. Ihr CD4050BCN sollte funktionieren. Die Antwort des Spannungsteilers funktioniert wahrscheinlich auch, vorausgesetzt, Sie verwenden nur eine normale Baudrate wie 115200 Baud. Es ist möglich, parallel zu R1 einen "Beschleunigungs"-Kondensator hinzuzufügen, um eine höhere Signalbandbreite aufrechtzuerhalten.

Antworten (1)

Verwenden Sie so einen Spannungsteiler von Arduino Tx zu Pi Rx. Sie können den Pi Tx direkt mit Arduino Rx verbinden.

Wichtiges Update: Schließen Sie auch einen ähnlichen Spannungsteiler an der Pi Tx - Arduino Rx-Leitung an. Dies ist notwendig, um Pi im Falle versehentlicher 5 V am Arduino Rx-Pin zu schützen (aufgrund von Fehlern im Code usw.). Ich habe die Schaltung aktualisiert.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Ich habe großes Vertrauen, dass es funktionieren wird. Bitte versuchen Sie diese Lösung und teilen Sie die Ergebnisse im Kommentar. Wenn es funktioniert, wählen Sie bitte meine Antwort als die richtige Antwort aus.
Okay, ich werde das in einer Woche oder so versuchen, sobald ich alles eingerichtet habe, danke.
Nicht sehen, wie der Schutz funktioniert. Wenn Pi Tx 5 V beträgt, hilft R4 nicht. R3 begrenzt den Strom und kann einen gewissen Schutz bieten. Ein kleiner Kondensator parallel zu R1 kann helfen, Bandbreite zu sparen. Irgendwo zwischen 2pF und 22pF. Sie können es mit einem Oszilloskop feinabstimmen. Wenn Sie Spannungsüberschwinger bekommen, verwenden Sie einen kleineren Kondensator.
@mkeith Dies soll Pi (3,3-V-Logik) vor dem Zorn von Arduino (5-V-Logik) schützen. Wenn der Arduino-Pin 5 V hat, lassen die Spannungsteiler nur 3 V an den Pi-Pins zu. Wenn der Pi 3,3 V auf die Pins sendet, erreicht er den Arduino unversehrt (wenn auch etwas belastet). Das OP beabsichtigte, die Schaltung mit serieller Schnittstelle zu verwenden, daher nahm ich an, dass die maximale Frequenz 115,2 kHz betragen könnte. Diese Art von Frequenzen erfordert keine besonderen Überlegungen, daher habe ich versucht, es so einfach wie möglich zu halten und dennoch die beabsichtigte Funktionalität bereitzustellen.
Oh, ich dachte rückwärts. Ich dachte, Sie hätten den Teiler falsch herum, aber ich war derjenige, der falsch herum war. Ich stimme zu, dass die Beschleunigungsbegrenzung für 115200, die die schnellste normale Baudrate ist, möglicherweise nicht benötigt wird. Wenn jedoch eine Beschleunigungsobergrenze hinzugefügt werden kann, könnte der Widerstandsteiler möglicherweise erhöht werden, um die Belastung zu verringern. Nur ein Vorschlag.
@AbdullahBaig das macht viel mehr Sinn! Ich habe gelesen, dass der Arduino Rx aus irgendeinem Grund auf 5 V gehalten wird, war mir nur nicht sicher, ob das wichtig ist, da viele Online-Quellen es nirgendwo erwähnt haben. Dieses Projekt wird für eine Weile keinen Pi verwenden (ich habe vorher noch einiges zu tun) und das scheint gut zu sein, aber ich werde sicherstellen, dass ich es später aktualisiere, wenn ich es verwende.