Hallo,
ich bin mir gerade unsicher bzgl. einer Schaltung, siehe Bild Anhang.
Ein Mikrocontroller (5V oder 3.3V Typ) und ein gewöhnlicher GPIO Ausgang
schaltet via Transistor(Fet) eine 12V Last.
Darf (indirekt) über ein 10K Widerstand eine höhere Spannung an einem
typischen Mikrocontroller Ausgang anliegen?
Kann dies den Controller Ausgang irgendwie zerstören? (evtl. beim
Aufstarten? Vielleicht ist der GPIO beim Aufstarten noch kurz als
Eingang definiert)?
vielen Dank
epika schrieb:> Darf (indirekt) über ein 10K Widerstand eine höhere Spannung an einem> typischen Mikrocontroller Ausgang anliegen?
Das steht in den "Absolute Maximum Ratings" im Datenblatt. Ich habe mal
ein Beispiel vom ATmega328 angehängt, bei dem ist es (wie üblich) nicht
zugelassen.
> Kann dies den Controller Ausgang irgendwie zerstören?
Steht rechts daneben im Text.
Die BE-Diode des BJT begrenzt auf ~0,7V.
Solange der MC im Reset ist, bleibt die Last angeschaltet. Sowas möchte
man typisch nicht haben.
Der MC darf kein aktive high ausgeben, nur low oder tristate.
Ja irgendwas stimmt da an der Zeichnung nicht. Da fehlt mindestens ein
Widerstand zwischen dem Ausgang des Mikrocontrollers und dem Transistor.
Wenn die Schaltung vervollständigt wird sehen wir, ob sich am
Mikrocontroller eine höhere Spannung als erlaubt ergibt. Dazu müssen wir
aber noch wissen, ob die 12V eingeschaltet sein können, während die 5V
aus sind (bzw. ob das beim ein- und aus- Schalten Zeitweise passiert).
Und natürlich spielt der Mikrocontroller eine Rolle. Zum Beispiel
erlaubt der ESP8266 bis zu 3,6 Volt auch während er selbst keine
Versorgungsspannung hat. Die AVR erlauben es nicht.
Peter D. schrieb:> Der MC darf kein aktive high ausgeben, nur low oder tristate.
Stimmt, doch ich vermute dass epika nicht daran dachte. epika, sage was
dazu.
Stefan ⛄ F. schrieb:> Stimmt, doch ich vermute dass epika nicht daran dachte. epika, sage was> dazu.
Hallo, ja danke, praktisch müsste ich da sicher noch ein Basiswiderstand
noch reinnehmen, vor dem GPIO....
D.h. ich müsste trotzdem schauen, dass via 10K Widerstand und
Basiswiderstand die Speisung am GPIO nicht gerade 12V beträgt bzw. wie
im uC Datenblatt definiert...
Hätte gedacht könnten auch 12V sein, solange kaum was an Strom
fliesst...
Die Last sollte noch einschalten, auch wenn die Speisung vom uC
wegfällt, deshalb dieser Widerstand.
Stefan ⛄ F. schrieb:> Der MC darf kein aktive high ausgeben, nur low oder tristate.
ok, wenn das mit typischen Mikrocontroller geht? Wieso kein high...
fliesst dann einfach irgendein Ausgleichsstrom?
epika schrieb:> praktisch müsste ich da sicher noch ein Basiswiderstand> noch reinnehmen, vor dem GPIO....
Musst du nicht. Der Peter hat das schon korrekt geschrieben. Du könntest
den Ausgang auch zwischen aktiv LOW und inaktiv HIGH (trustate)
umschalten. Bei einem AVR würde ich das so tun:
aktiv LOW = DDRx Bit Setzen.
inaktiv HIGH = DDRx Bit Löschen
Das PORTx Bit bleibt unangetastet immer auf LOW.
Einfach nur 10k dazu packen würde entweder den µC kaputt machen oder
schlicht nicht funktionieren.
Die Schaltung ... 46.png würde nicht funktionieren, weil der
Mikrocontroller die Spannung an der Basis nicht weit genug herunter
ziehen kann. Da müsstest du schon auf etwa 500Ω runter gehen, aber dann
hast du beim HIGH Pegel hässlich viel Strom.
Bei der Schaltung ...48.png hast du wieder das Problem, dass am I/O Pin
mehr zu viel Spannung anliegt, wenn der Mikrocontroller inaktiv
(Stromlos, im Reset oder noch nicht initialisiert) ist.
Stefan ⛄ F. schrieb:> Wenn die Schaltung vervollständigt wird sehen wir, ob sich am> Mikrocontroller eine höhere Spannung als erlaubt ergibt. Dazu müssen wir> aber noch wissen, ob die 12V eingeschaltet sein können, während die 5V> aus sind (bzw. ob das beim ein- und aus- Schalten Zeitweise passiert).
die 5V können mal weg sein, ja, bzw. wenn dann ist 0V an der Speisung
(quasi Kurzschluss).
Stefan ⛄ F. schrieb:> aktiv LOW = DDRx Bit Setzen.> inaktiv HIGH = DDRx Bit Löschen> Das PORTx Bit bleibt unangetastet immer auf LOW.
ok weiss gerade nicht ob PORTx LOW Input oder Output bedeutet.
Ich hätte es so gemacht:
Also Pin als Output definieren, dann auf LOW schalten und für Tristate
quasi auf Input zurückschalten?
Stefan ⛄ F. schrieb:> Bei der Schaltung ...48.png hast du wieder das Problem, dass am I/O Pin> mehr zu viel Spannung anliegt, wenn der Mikrocontroller inaktiv> (Stromlos, im Reset oder noch nicht initialisiert) ist.
Ist da wirklich ein Problem, fliesst ja wenig (Ausgleichs)Strom?
epika schrieb:> ok weiss gerade nicht ob PORTx LOW Input oder Output bedeutet.
PORTX = LOW bedeutet, dass der Pin als Ausgang auf LOW geht, bzw. als
Eingang ohne (internen) Pull-Up ist.
Der Trick besteht darin, nicht das PORTX Register zu beschreiben,
sondern das DDR Register. Du schaltest nur zwischen Ausgang und Eingang
um. Was letztendlich einer Open-Kollektor Schaltung entspricht.
epika schrieb:> Ist da wirklich ein Problem, fliesst ja wenig (Ausgleichs)Strom?
Es fließt Strom durch die internen ESD Schutzdioden. Wie hoch diese
belastbar sind, steht bei keinem AVR im Datenblatt, also sollte man
davon ausgehen, dass sie gar nicht belastbar sind.
Einer Appnote zufolge sind 1mA noch OK. Aber wirklich zugesagt wird das
nirgendwo und außerdem bezieht sich die Appnote nur auf ein einziges
uraltes AVR Modell.
Zudem kann ein Strom durch die ESD Dioden dazu führen, dass die
Versorgungsspannung angehoben wird. Nämlich dann, wenn dort insgesamt
weniger Strom verbraucht wird, als an dem Pin injiziert wird. Da kommt
man schnell hin, wenn man das mit mehreren Pins macht.
Stefan ⛄ F. schrieb:> Der Trick besteht darin, nicht das PORTX Register zu beschreiben,> sondern das DDR Register. Du schaltest nur zwischen Ausgang und Eingang> um. Was letztendlich einer Open-Kollektor Schaltung entspricht.
ok danke, in Arduino-Code heisst das also:
Output LOW:
pinMode(PINX, OUTPUT);
digitalWrite(PINX, LOW);
Output Tristate:
pinMode(PINX, INPUT);
Stefan ⛄ F. schrieb:> Zudem kann ein Strom durch die ESD Dioden dazu führen, dass die> Versorgungsspannung angehoben wird. Nämlich dann, wenn dort insgesamt> weniger Strom verbraucht wird, als an dem Pin injiziert wird. Da kommt> man schnell hin, wenn man das mit mehreren Pins macht.
Hmm, ok, Danke für die Erklärungen.
Also beim Einschalten habe ich eh ein Problem + für den Fall dass der
Controller 0V abbekommt (statt 5V). Eine Zenerdiode oder schnelle
Schutzdiode am GPIO bringt wohl auch nichts?
epika schrieb:> digitalWrite(PINX, LOW);
Lass das weg, das ist schon vom Reset so vorgegeben.
Wobei ich jetzt nicht 100% sicher bin, ob das Arduino Framework da nicht
noch irgendwelche unerwartete Magie im Hintergrund eingefügt hat. Ich
würde in diesem Fall eigene Funktionen mit sprechenden Namen schrieben
und die dann benutzen:
Um es nochmal klar zu sagen, die Schaltung ist theoretisch möglich, aber
sie ist Mist.
Last einschalten, ohne daß der MC aktiv ist, will man nicht.
Mach den Widerstand vom Ausgangspin zur Basis und berechne dessen Größe
nach dem notwendigen Basisstrom. So wie es jeder macht.
Ein Ausräumwiderstand Basis nach GND ist typisch nicht nötig.
Stefan ⛄ F. schrieb:> epika schrieb:>> Darf (indirekt) über ein 10K Widerstand eine höhere Spannung an einem>> typischen Mikrocontroller Ausgang anliegen?>> Das steht in den "Absolute Maximum Ratings" im Datenblatt. Ich habe mal> ein Beispiel vom ATmega328 angehängt, bei dem ist es (wie üblich) nicht> zugelassen.
Es gibt keine "indirekt" anliegende Spannung. Da hilft auch das
Datenblatt nicht. An der Basis eines Transistors liegt gegenüber dem
Emitter NIE eine nennenswert höhere Spannung als 0,7V an. Genaueres
verrät einem die betreffende Kennlinie des Transistors.
Bei 12V über einen Widerstand von 10kΩ fließt laut Ohmschem Gesetz etwas
mehr als 1.1mA - völlig unkritisch. Selbst ohne den Transistor wäre es
unbedenklich, solange die Stromaufnahme der µC-Schaltung mehr als 0.7mA
beträgt. Der Strom würde dann über die Schutzdiode des µC-GPIOs nach +5V
fließen.
Kritisch ist der fehlende Basisvorwiderstand.
Stefan ⛄ F. schrieb:> Wie hoch diese belastbar sind, steht bei keinem AVR im Datenblatt, also> sollte man davon ausgehen, dass sie gar nicht belastbar sind.
Unfug. Atmel selber erachtet 1mA als zulässig. Die betreffende App-Note
solltest du kennen. Auch bei den neueren Prozessoren ist davon
auszugehen, dass diese grundlegende ESD Schutzstruktur nicht schwächer
ausgelegt ist.
Peter D. schrieb:> Last einschalten, ohne daß der MC aktiv ist, will man nicht.
Ich dachte das sei der Sinn der Schaltung gewesen - warum auch immer.
Wenn an der Basis 0,7V anliegen und die ESD Diode eine Flussspannung von
0,5V hat, wird die Versorgungsspannung des Mikrocontrollers von 0 Volt
auf 0,2 Volt angehoben werden. Das ist völlig harmlos.
Kritisch könnte die Stromstärke für die ESD Diode sein, aber die wird
durch den 10kΩ Widerstand auf annähernd 1mA begrenzt.
Dazu kommt, dass ich aus Erfahrung weiß, dass die Ausgänge der AVR bei
Zimmertemperatur und 5V kurzschlussfest sind. Man kann sogar ohne
Probleme 3 Ausgänge gleichzeitig kurzschließen.
Aber das kann ja nur während der Entwicklung passieren, wenn mand en I/O
Pin versehentlich aktiv auf HIGH setzt. Im finalen Produkt wird das
nicht passieren.
Insofern würde ich mir nicht ins Hemd machen sondern es einfach wie im
Eröffnungspost bauen.
Es sei denn, der Transistor soll nicht ohne Mikrocontroller schon von
alleine einschalten. Dann müssten nochmal den Sinn der Schaltung
hinterfragen.
Stefan ⛄ F. schrieb:> Einer Appnote zufolge sind 1mA noch OK. Aber wirklich zugesagt wird das> nirgendwo und außerdem bezieht sich die Appnote nur auf ein einziges> uraltes AVR Modell.Wolfgang schrieb:> Unfug. Atmel selber erachtet 1mA als zulässig. Die betreffende App-Note> solltest du kennen.
Habe ich doch geschrieben. Wenn du meinst, das Datenblatt enthalte
"Unfug", dann beschwere dich bitte bei Atmel, nicht bei mir.
Peter D. schrieb:> Last einschalten, ohne daß der MC aktiv ist, will man nicht.
außer in ganz speziellen Fällen wie hier (vielleicht wird damit eine
Alarmmeldung erzeugt):
epika schrieb:> Die Last sollte noch einschalten, auch wenn die Speisung vom uC> wegfällt, deshalb dieser Widerstand.
und für den Zweck funktioniert die Originalschaltung -- meistens, aber:
- Wenn die 5V weg sind, fließt ein Strom durch die Schutzdiode und es
bleibt weniger Basisstrom übrig.
- Wenn der Transistor defekt oder falsch bestückt ist, wird der uC
zerstört.
Stefan ⛄ F. schrieb:> Dazu kommt, dass ich aus Erfahrung weiß, dass die Ausgänge der AVR bei> Zimmertemperatur und 5V kurzschlussfest sind.
Was heißt Erfahrung?
Werden die im Datenblatt angegebenen Grenzwert eingehalten oder nicht?
Bauform B. schrieb:> Wenn die 5V weg sind, fließt ein Strom durch die Schutzdiode und es> bleibt weniger Basisstrom übrig.
Ach ja, daran habe ich noch nicht gedacht. Also doch einen Widerstand
vor der Basis. Allerdings nicht mit 10kΩ sondern R2=330Ω.
Dann kann der Mikrocontroller die Spannung noch weit genug herunter
ziehen und es wird nicht zu viel Strom durch die ESD Diode weg geleitet.
Wolfgang schrieb:> Was heißt Erfahrung?> Werden die im Datenblatt angegebenen Grenzwert eingehalten oder nicht?
Werden sie nicht. Wie gesagt habe ich damit aber noch keinen AVR kaputt
bekommen. Kannst du ja auch mal versuchen, falls du mir nicht glaubst.
Wie gesagt ist das ja kein Zustand, der nach der Entwicklung im
Einsatz vorkommen wird.
Bauform B. schrieb:> Peter D. schrieb:>> Last einschalten, ohne daß der MC aktiv ist, will man nicht.>> außer in ganz speziellen Fällen wie hier (vielleicht wird damit eine> Alarmmeldung erzeugt):>> epika schrieb:>> Die Last sollte noch einschalten, auch wenn die Speisung vom uC>> wegfällt, deshalb dieser Widerstand.>> und für den Zweck funktioniert die Originalschaltung -- meistens, aber:> - Wenn die 5V weg sind, fließt ein Strom durch die Schutzdiode und es> bleibt weniger Basisstrom übrig.> - Wenn der Transistor defekt oder falsch bestückt ist, wird der uC> zerstört.
ja, also die Speisung am Mikrocontroller kann höchstens auch 0V betragen
(Kurzschluss, aber kein Unterbruch - also es ist immer ein Stromkreis
vorhanden...).
Und in diesem Zustand sollte der Transistor (oder evtl. FET) weiterhin
eingeschalten bleiben...
Und richtig erraten, Anwendung ist Alarmmeldung...
Wolfgang schrieb:> Es gibt keine "indirekt" anliegende Spannung. Da hilft auch das> Datenblatt nicht. An der Basis eines Transistors liegt gegenüber dem> Emitter NIE eine nennenswert höhere Spannung als 0,7V an. Genaueres> verrät einem die betreffende Kennlinie des Transistors.> Bei 12V über einen Widerstand von 10kΩ fließt laut Ohmschem Gesetz etwas> mehr als 1.1mA - völlig unkritisch. Selbst ohne den Transistor wäre es> unbedenklich, solange die Stromaufnahme der µC-Schaltung mehr als 0.7mA> beträgt. Der Strom würde dann über die Schutzdiode des µC-GPIOs nach +5V> fließen.> Kritisch ist der fehlende Basisvorwiderstand.
wieso solange uC Schaltung mehr als 0.7mA beträgt? Also evtl. überlege
ich Mosfet einzusetzen, dann wirds also kritischer.
Wieso genau, ist es schon wieder kritisch, wenn der uC ein 5V am Output
herausgibt (angenommen ich nehme ein 20K statt 10K)?
Das mit dem Basisvorwiderstand leuchtet mir auch noch nicht ganz ein,
wieso nicht einfach den 10K eben auf 20K erhöhen?
Stefan ⛄ F. schrieb:> Wobei ich jetzt nicht 100% sicher bin, ob das Arduino Framework da nicht> noch irgendwelche unerwartete Magie im Hintergrund eingefügt hat. Ich> würde in diesem Fall eigene Funktionen mit sprechenden Namen schrieben> und die dann benutzen:
ok super, Danke für den Hinweis.
epika schrieb:> Und in diesem Zustand sollte der Transistor (oder evtl. FET) weiterhin> eingeschalten bleiben...
Ein FET ist genauso ein Transistor, wie der von dir bisher zur
Diskussion gestellte BJT. Die Funktionsweise und damit die Beschaltung
ist jedoch grundlegend verschieden. Du solltest dich entscheiden, was du
vor hast.
Stefan ⛄ F. schrieb:> Wenn an der Basis 0,7V anliegen und die ESD Diode eine Flussspannung von> 0,5V hat, wird die Versorgungsspannung des Mikrocontrollers von 0 Volt> auf 0,2 Volt angehoben werden.
Blödsinn.
Überlege mal, wie die Polung der Diode zwischen Masse und IO-Pin ist.
Auch sonst sind viele Äußerungen hier im Thread von Dir einfach nur
falsch.
Experte schrieb:> Überlege mal, wie die Polung der Diode zwischen Masse und IO-Pin ist.
Es geht um die Diode zwischen VCC ind dem IIO-Pin.
Die Diode zwischen masse und I/O-Pin schützt vor negativer Spannung, das
passiert hier nicht.
Experte schrieb:> Auch sonst sind viele Äußerungen hier im Thread von Dir einfach nur> falsch.
So ohne weitere Infos nützt das niemandem. Es wäre besser wenn du die
falschen Aussagen korrigieren würdest. Idealerweise mit einem Verweis wo
man mehr dazu nachlesen kann, damit man sehen kann warum dein
Widerspruch der richtigere ist.