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!
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
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.
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.
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.
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...
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.
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.
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
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
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!
>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 ...
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 ...