Forum: Mikrocontroller und Digitale Elektronik GPIO als 6.4V Input


von got_fried (Gast)


Lesenswert?

Hallo zusammen,

ich verwende einen Raspberry PI und schalte damit auf einer externen 
Platine den Sutdown Pin eines FET Treibers.

Dieser FET Treiber wird mit 6.4V betrieben und hat einen internen 
pull-up.
Der Shutdown Pin führt also 6.4V, solange er nicht aktiv auf 0 getrieben 
wird.

Wenn ich nun diesen Pin direkt an den GPIO hänge, kracht es.
Der GPIO ist per default als Eingang beschaltet und damit liegen dann 
6.4V am Eingang an. Ich kann ihn erst nach dem Booten als Open-Drain 
konfigurieren, was offenbar zu spät ist (mal abgesehen davon, ob eine 
open-drain config die 6.4V abkann?).

Eine korrekte Lösung wäre wohl ein open-drain Buffer, der zwischen GPIO 
und Shutdown hängt. Somit wären GPIO und Shutdown "entkoppelt".

Gibt es noch andere Möglichkeiten, die ich im bestehenden Design einfach 
"nachlöten" kann? Da ich aktuelle 8 FET Treiber habe, wäre ich an einem 
möglichst geringen workaround Aufwand interessiert, bis ich ein Redesign 
gemacht habe.
Ein Spannungsteiler wird ja immer dazu führen, dass ich kein GND 
Potential am Shutdown bekomme, sondern nur irgendwas zwischen 6.4V und 
GND. Mein zusätzlicher Widerstand müsste also viel kleiner sein als der 
interne pullup, auch nicht schön.

Hat jemand noch andere Ideen?

Vielen Dank!

von Achim M. (minifloat)


Lesenswert?

got_fried schrieb:
> Ich kann ihn erst nach dem Booten als Open-Drain
> konfigurieren, was offenbar zu spät ist (mal abgesehen davon, ob eine
> open-drain config die 6.4V abkann?).

Nein, Open-Drain ist nur open Drain bis zur Betriebsspannung. Da sind 
dann Schutzdioden verbaut, also bei 5V ginge es nur bis 5V+Diodendrop.
Ergo: Mach' einen externen Transistor ran.

mfg mf

von Andi M. (andi6510) Benutzerseite


Lesenswert?

Das ist relativ einfach zu erreichen - nur auf den ersten Blick ein 
bisschen unintuitiv.

Schalte eine Shottky-Diode vor den Eingang. Und zwar so:

Raspipin *---->|-----* FET (0..6,4V)

dem Raspipin konfigurierst Du dann nach dem Hochfahren einen internen 
Pullup dazu.

Wenn UFet = 0V wird die Diode leitetend und der Raspipin liegt auf ca 
0,2 V (Flussspannung der Shottky-Diode) --> LOW.

Wenn UFet = 6,4V ist die Diode gesperrt. Der interne Pullup des Raspi 
zieht die Diode auf 3,3V --> HIGH.

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

got_fried schrieb:
> Der Shutdown Pin führt also 6.4V, solange er nicht aktiv auf 0 getrieben
> wird.

Die Frage ist, wo ist die Schwelle zwischen Shutdown und kein Shutdown.
Ist sie unterhalb der GPIO-HIGH-Spannung, dann mach doch einfach eine 
Z-Diode auf den Wert des HIGH-Pegels.
Auch kann man extern einen R nach GND machen, so dass der mit dem 
internen Pullup einen Teiler auf deinen HIGH-Level macht.

got_fried schrieb:
> Ein Spannungsteiler wird ja immer dazu führen, dass ich kein GND
> Potential am Shutdown bekomme,

Nein, so wie ich das meine: einen Widerstand parallel zum GPIO nach GND. 
Bei HIGH-Impedance des GPIO geht das Potential auf die geteilte 
Spannung, bei LOW ist das ein sicheres LOW.

von Clemens L. (c_l)


Angehängte Dateien:

Lesenswert?

got_fried schrieb:
> Eine korrekte Lösung wäre wohl ein open-drain Buffer, der zwischen GPIO
> und Shutdown hängt.

Der muss auch erst mal 6.4 V am Ausgang vertragen. (Du wärst damit auf 
jeden Fall jenseits der Recommended Operating Conditions.)

> Gibt es noch andere Möglichkeiten, die ich im bestehenden Design einfach
> "nachlöten" kann?

Der übliche FET-Level-Shifter. Aber die Pullup-Widerstände brauchst du 
nicht, wenn der GPIO als Push/Pull konfiguriert ist und der Treiber 
schon einen Pullup hat.

von got_fried (Gast)


Lesenswert?

Achim M. schrieb:
> Open-Drain ist nur open Drain bis zur Betriebsspannung.

Das bedeutet, dass ich eine mit IOVDD 3.3V betriebene GPIO Bank als Open 
drain konfigurieren kann, aber bei >3.xV dann der ESD Schutz greift? War 
nicht Sinn der Open-drain Sache, dass man eben verschiedene 
Spannungslevel schalten kann? Aber offenbar nur <VDD?

Andi M. schrieb:
> Schalte eine Shotky-Diode vor den Eingang.

Der RPI Pin ist ja ein Ausgang. Nur beim Boot ist es offenbar per 
default ein Eingang, um keinen Schaden zu machen. In meinem Fall 
kontraproduktiv.

Ich muss also aktiv eine 0V treiben, um meinen FET Treiber anzuschalten.
Wenn ich also 0V am RPI Ausgang habe, leitet die Diode und ich habe 0.2V 
am Eingang des FET Treiber.
Wenn ich aber nichts treibe, wozu dann der RPI-seitige pull-up, wenn 
dieser schon im FET Treiber ist?

Vielen Dank!
Die Idee mit der Diode verfolge ich mal weiter...

von Clemens L. (c_l)


Lesenswert?

got_fried schrieb:
> War nicht Sinn der Open-drain Sache, dass man eben verschiedene
> Spannungslevel schalten kann?

Ja, aber beim RPI nur bis zu VDD. Es gibt andere Mikrocontroller und 
Logik-Chips (z.B. 74LVC1G07), bei denen die ESD-Diode zu VDD weggelassen 
wurde.

von Andi M. (andi6510) Benutzerseite


Lesenswert?

got_fried schrieb:
>> Schalte eine Shotky-Diode vor den Eingang.
>
> Der RPI Pin ist ja ein Ausgang. Nur beim Boot ist es offenbar per
> default ein Eingang, um keinen Schaden zu machen. In meinem Fall
> kontraproduktiv.

Stimmt, ich ging irgendwie davon aus, dass der Raspi ein Input bereit 
stellt. Damit Du ein open drain-Verhalten erreichst müsste die Diode 
anders herum gepolt sein. Dann kannst Du mit einer 0 den Fet ansteuern. 
Wenn der Pullup des Fet aber auf 6,4V liegt, dann fliesst immer noch ein 
Strom in die Shutzdioden des Raspi. Der Pegel steigt damit nicht 
wesentlich über 3,3V an...

Diode funktioniert hier also nicht.

Also doch einen Transistor nachschalten... was anderes fällt mir nicht 
ein.

von Norbert (Gast)


Angehängte Dateien:

Lesenswert?

Vielleicht verstehe ich's ja falsch, aber...

von got_fried (Gast)


Lesenswert?

HildeK schrieb:
> Nein, so wie ich das meine: einen Widerstand parallel zum GPIO nach GND.
> Bei HIGH-Impedance des GPIO geht das Potential auf die geteilte
> Spannung, bei LOW ist das ein sicheres LOW.

Stimmt... so rum ergibt das Sinn, auch ohne weitere Bauteile.

Norbert schrieb:
> Vielleicht verstehe ich's ja falsch, aber...

Das stimmt schon, aber ist etwas mehr Aufwand, um die aktuelle Platine 
lauffähig zu bekommen, ohne einen weiteren RPI zu opfern :)
"Gürtel und Hosenträger" ist schön formuliert... better safe than sorry 
:D

von Sebastian S. (amateur)


Lesenswert?

Im Falle eines Gürtels ist zu beachten, dass ein sehr großer Unterschied 
(Leitwert) zwischen Kuh- und Kunstleder besteht.

von HildeK (Gast)



Lesenswert?

Meine drei Vorschläge im Bild, zwei davon hatte ich schon genannt.
(Sorry, hatte überall statt 6.4V nur 4.6V geschrieben - ändert aber am 
Prinzip nichts und deshalb male ich das Bild nicht neu ...).
- die Schottkydiode sorgt dafür, dass am Eingang nicht mehr als VCC+0.3V 
liegen
- der Teiler teilt mit R1 und R_PU2 von 6.4V auf 3.3V
- Zenerdiode verhindert, dass mehr als 3.3V anliegen; imho die 
schlechteste Methode, weil die Z-Spannung evtl. nicht geeignet zu 
bekommen ist und die nur einen weichen Knick haben

von got_fried (Gast)


Lesenswert?

Ich habe fix die Variante mit dem Widerstand getestet und komme nicht so 
recht weiter.

Im Datenblatt steht nur ein 6uA Strom am SD PIN und es ist kein 
spezifistcher Widerstand angegeben als Pull-Up.

Der FET Treiber ist ein ADP3624.

Habe zwischen SD und VDD ca. 80k gemessen.
Wenn ich nun bei 5V (statt 6.4V) testweise 150k und 850k gegen GND 
verwende, Messe ich bei
150k 0.66V
850k 3.22V
Den GPIO habe ich erstmal getrennt und messe nur am Treiber.

Das doofe ist, dass die Spannung sehr langsam ansteigt. Als ob eine 
Kapazität mit wenig Strom geladen wird.
Muss nochmal nachrechnen...
Die Spannung steigt in ca. 10s an. Geladen wird über 80k?! Das wäre eine 
riesige Kapazität.

Vielleicht teste ich morgen nochmal die anderen Varianten, aber mit dem 
Widerstand komme ich nicht zurecht, zumal die Spannungswerte auch nicht 
auf den gleichen Pull-Up im Treiber schließen lassen?

Wird denn hier wirklich etwas anderes als ein normaler Widerstand als 
Pull-Up verwendet? Sowas wie eine Konstantstromquelle?

Vielen Dank!

von Jens G. (jensig)


Lesenswert?

>Die Spannung steigt in ca. 10s an. Geladen wird über 80k?! Das wäre eine
>riesige Kapazität.

Womit und wie gemessen?
Gut, das DB sagt 6µA bei 12V. Sieht also eher nach 2MOhm aus. Trotzdem 
bräuchte man einige µF, um damit eine Zeitkonstante von 10s zu 
erreichen.
Aber vielleicht haste auch nur den AC-Modus am Meßgerät eingestellt ...

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

got_fried schrieb:
> Wird denn hier wirklich etwas anderes als ein normaler Widerstand als
> Pull-Up verwendet? Sowas wie eine Konstantstromquelle?

Nachdem du nun auch den IC nanntest, kann man auch ins Datenblatt 
schauen. Dort steht, dass die PUs und PDs im IC typ. 6μA 
liefern/aufnehmen. Sieht also nach Stromquelle aus, was in Halbleitern 
auch viel leichter realisierbar ist.
Aber 6μA sind gar nichts, jedenfalls nichts, was deinem Eingang und der 
ESD-Diode irgendwas ausmacht! Rein rechnerisch müssten ca. 560k den 
Pegel auf die 3.3V bringen, aber die internen Dioden schaffen das ohne 
eine Zusatz. Also: einfach direkt anschließen muss funktionieren!

Du hast imho ein anderes Problem ...

von Peter D. (peda)


Lesenswert?

got_fried schrieb:
> Eine korrekte Lösung wäre wohl ein open-drain Buffer, der zwischen GPIO
> und Shutdown hängt.

Der ULN2008 wird da gerne genommen.
Es gibt aber auch fertige High-Side Treiber, das spart dann den MOSFET 
ein.
Z.B.:
https://www.maximintegrated.com/en/products/power/mosfet-drivers-controllers/MAX14915.html

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.