uC GPIO Output und 12V

Gast #6917211
Lesenswert?

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
Angehängte Dateien:
Gast #6917216
Lesenswert?

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.
Angehängte Dateien:
Gast #6917220
Lesenswert?

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.
Gast #6917234
Lesenswert?

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.
Gast #6917250
Lesenswert?

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.
Angehängte Dateien:
Gast #6917251
Lesenswert?

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).
Gast #6917262
Lesenswert?

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?
Gast #6917273
Lesenswert?

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.
Gast #6917276
Lesenswert?

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.
Gast #6917284
Lesenswert?

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?
Gast #6917294
Lesenswert?

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:
1
void pumpe_an()
2
{
3
    DDRD |= (1 << PD2);
4
}
5

6
void pumpe_aus()
7
{
8
    DDRD &= ~(1 << PD2);
9
}
#6917299
Lesenswert?

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.
Gast #6917303
Lesenswert?

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.
Gast #6917307
Lesenswert?

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.
Gast #6917310
Lesenswert?

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.
Gast #6917311
Lesenswert?

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.
#6917312
Lesenswert?

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.
Gast #6917322
Lesenswert?

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.
Angehängte Dateien:
Gast #6917323
Lesenswert?

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.
Gast #6917342
Lesenswert?

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...
Gast #6917379
Lesenswert?

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.
Gast #6917389
Lesenswert?

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.
Gast #6917395
Lesenswert?

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.
Gast #6917454
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren