Standard Arduino Boards sind für 5V Betriebsspannung ausgelegt. Auch die Steuersignale (z.B. I²C-Bus) orientieren sich an diesem Wert. Viele Sensorchips benötigen jedoch andere, i.d.R. deutlich geringere Spannungen (meist 3,3V). Das ist zwar günstig im Sinne des Stromverbrauchs, macht jedoch eine direkte Verwendung mit 5V-Arduino-Boards nicht ohne weiteres möglich.

Viele Sensoren sind in Form von Breakout Boards als ferigen Module erhältlich. Außer bequemmeren Anschlüssen (in Form von Pin-Leisten) beinhalten diese oft auch einen Spannunsregler zum Versorgen des eigentlichen Sensor-Bausteins. Damit ist aber das Problem mit den unterschiedlichen Spannungen noch nicht vollständig gelöst, denn auch die Ein- und Ausgängen müssten passend versorgt werden. Bei 3,3V besteht zwar kein Problem mit der High/Low-Level Erkennung, jedoch sind die Eingängen der meisten Chips nicht 5V-tolerant. Damit eine zu hohe Spannung die Bausteine nicht zerstört, werden die Ein-/Ausgängen im einfachsten Fall mittels PullUp-Widerstände auf 3,3V 'gezogen'. Dadurch wird die ggf. von Arduino gelieferte 5V-Spannung auf ein erträgliches Niveau begrenzt. Wird jedoch am selben Strang (I²C Bus etc.) ein 5V Modul mit eigenen PullUps verwendet, kann die Spannung auf ein gefährlichen Wert steigen (in solchen Fällen sind die PullUps zu deaktivieren bzw. auszulöten). Eine Bessere Lösung stellen aktive Level Shifter (Pegelumsetzer) dar. Mit ihrer Hilfe wird auf jeder Seite eine passende Spannung garantiert.

Einfache bedirektionale Pegelumwandler für I²C Bus sind günstig im Internet (z.B. bei eBay) zu bekommen. Heute brachte mir die Post so ein Modul, ich habe ihn auch gleich getestet. Es ermöglicht eine sichere Verwendung von mehreren 5V- und 3,3V-Modulen auf dem selben Bus. Es wird nur ein Umwandler pro Bus-Strang benötigt.

Bei einem Betrieb mit dem Pegelwandler wind auf den Sensor-Boards evtl. vorhandene Spannungsregler eher hinderlich, da sie Verluste verursachen, die meisten Sensoren funktionieren jedoch trotzdem einwandfrei (die Sensorchips bekommen dann etwas weniger als 3,3V, dies ist jedoch meistens noch durchaus in dem zulässigen Bereich). Wer will, kann die vorhandenen Regler-Bausteine auslöten (und kurzschließen). Ein weiteres Proglem kann sich durch die an den Boards vorhandenen PullUp-Widerstände ergeben. Je mehr es davon gibt, umso kleiner wird der Gesamtwiderstand. Das führt zu einem unnötig hohen Stromverbrauch und kann sogar (bei besonders vielen parallel vorhandenen PullUps) die Ports des Arduino überlasten. Idealerweise sollen überflüssige PullUps ausgelötet werden (es wird lediglich ein PullUp pro Leitung benötigt).

 


Dem Umsetzer lag kein Schema bei, meine Rekonstruktion dürfte jedoch der tatsächlichen Implementierung entsprechen.

 

Eine andere Version der Level Shifters, die mir vorliegt, hat doppelt soviele Kanäle, ist aber ansonsten sehr ähnlich aufgebaut. Das vorherige Board ist eindeutig zur Verwendung im I2C Bus bestimmt, dieses kann auch bequem für SPI verwendet werden (auch wenn die Fähigkeit, die Signale in beide Richtungen zu transportieren in diesem Fall nicht benötig wird).

 

 

Kommentare (0)

Cancel or