Forum: Mikrocontroller und Digitale Elektronik uC GPIO Output und 12V


von epika (Gast)


Angehängte Dateien:

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

von Thomas Z. (usbman)


Lesenswert?

die Schaltung ist Murks. Was soll der 10k bewirken? Wo ist der 
Basisvorwiderstand?

von Stefan F. (Gast)


Angehängte Dateien:

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.

von Peter D. (peda)


Lesenswert?

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.

: Bearbeitet durch User
von Stefan F. (Gast)


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.

von Unbekannt (Gast)


Lesenswert?


von Stefan F. (Gast)


Lesenswert?

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.

von epika (Gast)


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.

von epika (Gast)


Lesenswert?

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?

von Stefan F. (Gast)


Angehängte Dateien:

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.

von epika (Gast)


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

von epika (Gast)


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?

von Stefan F. (Gast)


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.

von Stefan F. (Gast)


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.

von epika (Gast)


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?

von Stefan F. (Gast)


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
}

von Peter D. (peda)


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.

von Wolfgang (Gast)


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.

von Wolfgang (Gast)


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.

von Stefan F. (Gast)


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.

von Stefan F. (Gast)


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.

von Bauform B. (bauformb)


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.

von Wolfgang (Gast)


Lesenswert?

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?

von Stefan F. (Gast)


Angehängte Dateien:

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.

von Stefan F. (Gast)


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.

von epika (Gast)


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

von epika (Gast)


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.

von Wolfgang (Gast)


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.

von Experte (Gast)


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.

von Stefan F. (Gast)


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.

von Wolfgang (Gast)


Lesenswert?

Experte schrieb:
> Blödsinn.
> Überlege mal, wie die Polung der Diode zwischen Masse und IO-Pin ist.

Dann geht es wohl um eine andere ;-)

von Stefan F. (Gast)


Lesenswert?

Offenbar hat der "Experte" kein Interesse daran, seinem "Blödsinn" einen 
Sinn zu geben. War nicht anders zu erwarten.

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.