Forum: Mikrocontroller und Digitale Elektronik I2C Levelshifter 3,3<->5V zw. Rasp und Stepper-Drv.


von Thomas T. (runout)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

ich möchte einen Raspberry Pi 2 und einen Stepper-Treiber (TMC223)
per I2C verheiraten.
Der Raspi hat 3,3V der Treiber 5V Spannungsebene für SDA + SCL.

Ich verwende einen diskreten Levelshifter von Watterott.
Die Anschlussbezeichnungen nur Tx + RX.

Das Rasp-Pinniung ist:

1 - 3,3V
3 - SDA
5 - SCL
6 - GND

Die "Adernfarben"
blau - SDA
gelb - SCL
rot - +VB
schwarz - gnd

Könnte die Verdrahtung so funktionieren wie abgebildet?
Mehr Informationen über das Platinchen gibt es bei Watterott
auch nicht.

Grüße Runout

von Guest (Gast)


Lesenswert?

Solange R1 und R2 auf dem Treiber nicht bestückt sind brauchst Du keinen 
Pegelwandler.
Der Pegel auf den I2C-Leitungen wird von den PullUps bestimmt, beim Pi 
liegen sie gegen 3,3Volt und der Treiber hat keine (R1+R2). Du hast also 
3,3Volt mit denen beide Boards klarkommen.

von Frank B. (f-baer)


Lesenswert?

Guest schrieb:
> Solange R1 und R2 auf dem Treiber nicht bestückt sind brauchst Du keinen
> Pegelwandler.
> Der Pegel auf den I2C-Leitungen wird von den PullUps bestimmt, beim Pi
> liegen sie gegen 3,3Volt und der Treiber hat keine (R1+R2). Du hast also
> 3,3Volt mit denen beide Boards klarkommen.

Das stimmt nicht.
Im Datenblatt des TMC223 findet sich auf Seite 29 eine Tabelle mit den 
elektrischen Charakteristika der I2C-Schnittstelle. Ohne Pegelwandler 
kannst du laut Datenblatt nur maximal 100kHz fahren, mit Pegelwandler 
laufen auch 350kHz noch sicher.
Und um generell Probleme zu vermeiden, sollte man mit dem High-Pegel von 
digitalen Schnittstellen immer oberhalb von 0,7..0,8*VDD liegen.

von Christian B. (luckyfu)


Lesenswert?

Thomas T. schrieb:
> Könnte die Verdrahtung so funktionieren wie abgebildet?
> Mehr Informationen über das Platinchen gibt es bei Watterott
> auch nicht.

nein, kann es vermutlich nicht. So wie ich das sehe ist das für einen 
unidirektionalen bus gedacht, der I²C ist aber zumindest auf der SDA 
Leitung bidirektional.
Als reiner Pegelshifter würde sich z.B. ein PCA9306 anbieten oder ein 
ADUM1251, der isoliert das ganze zusätzlich noch galvanisch.

von Rudolph (Gast)


Lesenswert?

Christian B. schrieb:
> So wie ich das sehe ist das für einen unidirektionalen bus gedacht

Wie man im Schaltplan von dem Ding sehen kann sind da FETs verbaut,
das ist schon Bi-direktional.
Grundlage dafür dürfte eine uralte Applikation-Note von Phillips zum I2C 
gewesen sein.

von Christian B. (luckyfu)


Lesenswert?

ich sehe keinen schaltplan, ich sehe 2 FETS, d.h. einen für die SDA und 
einen für die SCL Leitung, passt auch zu den RX und TX Beschriftungen 
(UART). aber die Datenleitung beim I²C ist nunmal bidirektional, wie 
soll das denn funktionieren?

von Leonardo (Gast)


Angehängte Dateien:

Lesenswert?

Christian B. schrieb:
> wie
> soll das denn funktionieren?

siehe Anhang

von mh (Gast)


Lesenswert?

Rudolph schrieb:
> Wie man im Schaltplan von dem Ding sehen kann sind da FETs verbaut,
> das ist schon Bi-direktional.
> Grundlage dafür dürfte eine uralte Applikation-Note von Phillips zum I2C
> gewesen sein.

Nur weil da ein FET drauf ist, kannst Du das sagen? Wow...

Die AppNote zum Vergleich der Beschaltung gibt's hier: 
http://www.nxp.com/documents/application_note/AN10441.pdf
Bei 5V <-> 3,3V funktioniert die Schaltung recht gut.

von Leonardo (Gast)


Lesenswert?

Leonardo schrieb:
>> wie
>> soll das denn funktionieren?
>
> siehe Anhang

übrigens genial einfach, man muß blos darauf kommen.

von Thomas T. (runout)


Lesenswert?

danke erstmal für die vielen Infos.

Das hier ist das Objekt der Begierde:
http://www.watterott.com/de/Pegelwandler

Die App-Note von Phillips kenne ich.
Aber die Anschlussbelegung ist doch etwas verwirrend
und ein Schaltplan ist (zumindest auf dieser Website) nicht dabei.
Vielleicht ist das Teil von SparkFun (weil rot) und ich bekomm dort
die nötigen Infos.

Viele Grüße
Runout

von Mike (Gast)


Lesenswert?

Das Datenblatt des TMC223 sagt, dass 3V High-Level-Spannung bei 
Taktfrequenzen bis 100kHz ausreichen. Also Pullups an 3.3V und es sollte 
ohne Levelshift funktionieren.

I2C Leitungen funktionieren nach dem Wired-AND-Prinzip: Ein externer 
Pullup-Widerstand zieht die Leitung im inaktiven Zustand auf Vdd (hier 
3.3V). Sobald ein Teilnehmer sendet, zieht er SDA mittels MOSFET auf 
Masse. SDA ist dabei bidirektional, d.h. sowohl Master als auch Slave 
können ihn auf Masse ziehen. Das I2C-Protokoll stellt sicher, dass dies 
immer nur einer zur gleichen Zeit tut. SCL wird normalerweise nur vom 
Master - hier der Raspi - bedient. Ausnahme: Der Slave kann den 
SCL-Taktpuls verlängern, wenn er mehr Zeit zur Bearbeitung braucht.

von Guest (Gast)


Lesenswert?

Mike schrieb:
> Ausnahme: Der Slave kann den
> SCL-Taktpuls verlängern, wenn er mehr Zeit zur Bearbeitung braucht.

Das Clockstretching kann der Pi aber nicht.

von Christian B. (luckyfu)


Lesenswert?

Thomas T. schrieb:
> und ein Schaltplan ist (zumindest auf dieser Website) nicht dabei.

doch ist er und er zeigt den aufbau aus der app note, ich revidiere 
somit meine aussage und würde sagen, ja, das geht so.

von Thomas T. (runout)


Lesenswert?

oho, Asche auf mein Haupt...
Documents: Schaltplan -> das klärt einiges

trotzdem nochmal vielen Dank für die Hilfe.

Runout

von Stefan F. (Gast)


Lesenswert?

Ich hatte mal so einen Levelshifter verwendet. Er hat die Signalflanken 
deutlich verschlechtert und die Low Pegel waren beinahe im illegalen 
Bereich meiner Anwendung (nämlich 0,4V. 0,5V wäre die Grenze gewesen).

Ich musste auf 100kHz runter gehen, 400kHz ging damit nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.