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
die Schaltung ist Murks. Was soll der 10k bewirken? Wo ist der Basisvorwiderstand?
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.
:
Bearbeitet durch User
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:
1 | void pumpe_an() |
2 | {
|
3 | DDRD |= (1 << PD2); |
4 | }
|
5 | |
6 | void pumpe_aus() |
7 | {
|
8 | DDRD &= ~(1 << PD2); |
9 | }
|
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.
Experte schrieb: > Blödsinn. > Überlege mal, wie die Polung der Diode zwischen Masse und IO-Pin ist. Dann geht es wohl um eine andere ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.