Hallo, auf meiner Platine habe ich einen Atmega328 im Einsatz. Dieser soll eine LED und ein Bluetooth-Modul (HC-05) an- bzw. ausschalten. Die LED hängt mit Vorwiderstand direkt an einem digitalen Pin und das BT-Modul wird über einen PNP-Transistor geschaltet dessen Basis (mit Basis-Vorwiderstand natürlich) auch an einem digitalen Pin des Atmega hängt. Der Code lässt die LED blinken und schaltet dann nach kurzer Zeit das BT-Modul noch an. Das funktioniert und hat in vorherigen Schaltungen auch immer ohne Probleme geklappt. Jetzt zum Problem: Wenn ich nun den Transistor durch einen P-MOS ersetze (mit Pull-up Widerstand am Gate) dann bleibt der µC beim Versuch ihn zu schalten hängen bzw. funktioniert nicht mehr richtig. Das gleiche passiert wenn ich keins von den beiden eben genannten einbaue und das BT-Modul einfach mit einem Kabel mit VCC auf der Platine verbinde. Das Gate des P-MOS ist übrigens direkt mit dem Atmega verbunden, ohne weitere Kondensatoren oder Widerstände in der Schaltung. Ich habe jetzt einen 100µF bzw. 22µF (2 Tests) decoupling-Kondensator zwischen VCC und GND auf der Platine angebracht. Das macht es zwar besser aber immer noch nicht 100% bulletproof. Kann mir vielleicht jemand einen Tipp geben ob ich in die richtige Richtung denke mit dem Decoupling und warum es beim Transistor ohne Probleme funktioniert? Könnte die Anfälligkeit des Atmega generell evtl. auch mit der Programmierung des Arduino-Bootloaders (Fuses etc.) zusammenhängen? In anderen Projekten mit Attinys hat z.B. immer alles funktioniert trotz großer Lasten an der Spannungsversorgung. Gruß Daniel
Natürlich ist der Fehler da, wo du noch nicht hingeschaut hast. Aus dem gleichen Grund hältst du ihn auch vor uns geheim. Darum sehe ich mich außerstande dir zu helfen.
Da wäre ein Schaltplan mit konkreten Bauteilangaben hilfreich. Die MOSFET die ich für solche Zwecke verwende haben 1nF oder mehr Gate Kapazität. Wenn du die ohne Widerstand an den Ausgang des µC hängst und dann den Logikpegel umschaltet, fließt ein recht hoher Umladestrom. Bei dem ATmega und 5V kannst du Pi mal Daumen mit 50mA rechnen. Dazu kommt die Stromaufnahme. Dieses enthält eine Menge Kondensatoren zwischen seinen VCC und GND Anschlüssen, die praktisch im selben Moment aufgeladen werden. Das sind sicher einige µF. Jetzt ist die spannende frage, wie deine Stromversorgung auf so einen Lastsprung reagiert. Wahrscheinlich mit einem kurzen Absacken der Versorgungsspannung. Da hilft dein zusätzlicher Kondensator leider nur wenig. Was du also brauchst ist quasi ein Sanft-Anlauf. Sorge dafür, dass der Versorgungs-Strom des Bluetooth Moduls allmählich ansteigt. Gerade schnell genug, dass es sauber startet. Am einfachsten erreichst du das, indem du einen Widerstand vor das Gate des MOSFET schaltest. Ich würde für den Anfang mal 10kΩ versuchen und das Ergebnis mit einem Oszilloskop kontrollieren. Behalte die Temperatur des MOSFET im Auge, er wird sich beim Umschalten aufheizen. Nicht dass er Dir nächsten Sommer um die Ohren fliegt.
Danke schonmal! Um andere Fehlerquellen möglichst auszuschließen habe ich die Schaltung zusätzlich auf dem Breadboard aufgebaut mit gleichem Resultat. Die verwendeten Bauteile sind ausschließlich: -Atmega328 -LED mit 100 Ohm Vorwiderstand an Pin 15 (PB1) -HC-05 (nur VCC über den Transistor und GND angeschlossen) -PNP-Transistor mit 600 Ohm Gate-Vorwiderstand an Pin 16 (PB2) Versorgt über einen 5V USB-Adapter. Hier funktioniert ein Decoupling-Kondensator soweit. Es kann an der Positionierung des Kondensators auf der Platine liegen dass es dort nicht immer (aber immerhin besser) funktioniert. Deshalb geht meine Vermutung dort hin. Ein wirkliches Absacken der Versorgungsspannung ist mit dem Oszi kaum zu beobachten, aber die Schwankungen (wenn auch sehr kurz) müssen ausreichen um den µC aus dem Tritt zu bringen. Außer die Lösung liegt eben ganz wo anders, aber da fällt mir momentan nichts ein. Den Vorwiderstand am Gate werde ich so mal ausprobieren. Könnte es sein dass die elektrischen Eigenschaften des Transistors diesen "sanften" Anlauf der Last (bzw. des Laststroms) gewährleisten im Vergleich zum MOSFET?
Hast du etwa den 100nF Abblock-Kondensator am ATmega weg gelassen? > LED mit 100 Ohm Ist ziemlich wenig, willst jemanden blenden oder kommt die LED aus den 80er Jahren? Wenn du bei dem PNP Transistor bleiben willst, brauchst du zusätzlich zum Basis-Vorwiderstand auch einen Kondensator zwischen Basis und Emitter, der den Sanftanlauf erzeugt. Frage mich jetzt aber nicht, wie groß der sein muss. Das kann ich nicht schätzen und zum Ausrechnen fehlen noch einige Infos. > Ein wirkliches Absacken der Versorgungsspannung ist > mit dem Oszi kaum zu beobachten Wie hast du das Gerät denn eingestellt? Ich würde dazu ein digitales Oszilloskop verwenden und auf das Absacken der Versorgungsspannung triggern. Sie sackt garantiert ab, die Frage ist nur, wie weit. Jede weitere Diskussion bitte mit Schaltplan und konkreten Bauteilen und Messwerten. Sonst artet das hier zu einer wilden Glaskugel-Raterei aus. Gute Nacht
Daniel U. schrieb: > Jetzt zum Problem: Wenn ich nun den Transistor durch einen P-MOS ersetze > (mit Pull-up Widerstand am Gate) dann bleibt der µC beim Versuch ihn zu > schalten hängen bzw. funktioniert nicht mehr richtig. Ich denke mal, du hast die Gate-Source-Kapazität deines Fet's entdeckt. Der Mechanismus zum Ausstieg des µC ist dann etwa so: das Portpin arbeitet gegen eine Kapazität (geschätzt 1 nF). Wenn man es schaltet, dann zieht das Pin zum Umladen deser Kapazität einen so großen Strom, daß dadurch die Brownout-Schaltung oder etwas ähnliches in deinem µC anspricht oder daß dadurch ein kurzer VCC-Enbruch erfolgt, der irgendwo den µC in die Irre leitet. Die Abhilfe wäre ein Vorwiderstand am Gate zum Pin hin, der so groß ist, daß er den Umladestrom ausreichend begrenzt. Ich hatte solche Effekte bei den PIC16Fxx, die an jedem Pin mal eben 25 mA oder noch mehr ziehen können, wenn die VCC ausreichend Strom liefern kann ohne dabei in die Knie zu gehen. W.S.
Danke euch! Ich habe den Schaltplan mal angehängt. Er zeigt die Schaltung wenn sie funktioniert. Es funktioniert nicht mehr, wenn ich den Transistor herausnehme und manuell (im laufenden Betrieb) per Kabel VCC des HC-05 an die Spannungsversorgung hänge oder einen MOSFET benutze. Elektrisch wird der Transistor dann praktisch einfach durch einen mechanischen Schalter ersetzt. Die Schaltung im Schaltplan kommt ohne weitere Kondensatoren aus und funktioniert. Und ja, 100 Ohm für die LED. Ist eine nicht wirklich helle, rote. Was du mit dem 100nF Kondensator ansprichst sollte ja das sein, was ich mit den größeren Kondensatoren vorhin erreichen wollte, nämlich VCC am µC zu stabilisieren wenn kein Transistor benutzt wird. Ich habe einen 100nF Keramik-Kondensator direkt zwischen VCC und GND möglichst nahe der Pins angebracht (dort wo ich bereits die 22µF und 100µF Elkos testweise angebracht hatte). Ändert aber soweit nichts am Resultat. Wie gesagt, wenn da einer der beiden größeren Kondensatoren drin hängt dann klappt das zumindest auf dem Breadboard. Die 2. angehängte Datei zeigt das Oszilloskop-Bild vom VCC der Schaltung ohne Transistor. Beim Verbinden des HC-05 mit VCC gibt es einen kleinen Peak nach unten von etwa 1V (also von 5V auf 4V). Dieser ist sehr kurz. Danach fällt VCC um etwa 0,1V bis 0,2V ab (ganz normal durch den Stromverbrauch des Moduls). Das ist im Bild nicht zu sehen, tritt aber im weiteren Verlauf genau so ein. Wenn ich nun den Transistor benutze dann gibt es diesen Peak nicht. Beim MOSFET gibt es ihn wieder, auch mit 10k Ohm Widerstand am Gate. ABER: Trotz des Peaks setzt der µC bei der Verwendung des Vorwiderstands am MOSFET nicht aus. Hier nochmal in der Übersicht: Transistor + Vorwiderstand -> kein Peak; kein Aussetzen MOSFET + Gate Pull-up + kein Vorwiderstand -> Peak; Aussetzen MOSFET + Gate Pull-up + Vorwiderstand -> Peak; kein Aussetzen Schalter -> Peak; Aussetzen Ich denke, dass die Gate-Kapazität auch eine Rolle spielt, aber die Kapazitäten im BT-Modul eine größere. Bleibt halt die Frage warum gerade der Transistor den Peak eliminiert.
Daniel U. schrieb: > Bleibt halt die Frage warum gerade der Transistor den Peak eliminiert. Weil er nur einen begrenzten Laststrom fließen lässt. leider kann ich Dir das nicht vor-rechnen, da du immer noch nicht verraten hast, welchen Transistor du verwendet hast. Der MOSFET lässt jedenfalls mit Sicherheit wesentlich mehr Strom fließen, als der bipolare Transistor, so dass die Stromversorgung beim Einschalten des Bluetooth Moduls stärker belastet wird. Wenn ich bei mir zuhause den alten Staubsauger einschalte, flackert in der ganzen Wohnung das Licht. Beim neuen Staubsauger passiert das nicht. Es ist hier prinzipiell der selbe Effekt. Der neue Staubsauger beeinträchtigt die Stromversorgung weniger, weil er sanft anläuft. Die Sache mit dem Weglassen des Abblock-Kondensators am ATmega solltest du unabhängig davon nochmal überdenken. Warum, kannst du hier in gefühlt hunderten Beiträgen nachlesen, wo es um sporadische Ausfälle geht.
Schau ins Datenblatt des ATMega: IMMER 100nF so dicht wie möglich an VCC und GND des ATMega. In Deinem Fall brauchst Du auf jeden Fall - wie andere schon bemerkt und Du selbst gesehen hast - weitere Entkoppling des BT Moduls. Ich würde den PNP (oder Mosfet) dicht am Modul plazieren und Über dem Emitter (source) zu GND (dicht am Modul) einen 100uF Kondensator anbringen.
Ok, ja das verstehe ich soweit. Ich erwarte jetzt auch keine großartigen Berechnungen, weil es mir erstmal um die generellen Zusammenhänge und Bauteilverhalten geht. Damit würde ich die Geschichte mal auf die Schaltung mit MOSFET beschränken. Hier sollte es also 2 Ziele geben: 1. Einfluss der Gate-Kapazität durch Gate-Widerstand verringern 2. Sanften Anlauf des BT-Moduls gewährleisten bzw. es entkoppeln Beides dient also dazu, Kapazitäten nicht schlagartig zu schalten und damit VCC (kurzzeitig) heftig einbrechen zu lassen. Wie gesagt, trotz MOSFET + Vorwiderstand konnte ich manchmal noch den Peak messen, der durch den Start des BT-Moduls ausgelöst wird. Der 100nF Kondensator an VCC hilft hier nur bedingt und reduziert den Peak höchstens etwas. Dabei setzt der µC aber immerhin nicht mehr aus. Wie ist also der "sanfte" bzw. sichere Anlauf des Moduls zu realisieren? Ist dafür der angesprochene Kondensator an der Source?
> Unterschied MOSFET<->Transistor ...
Ein MOSFET ist ein Transistor.
"MOSFET" steht für metal-oxide-semiconductor field-effect transistor
Genauso könntest du fragen, was der Unterschied zwischen einem Flugzeug
und einem A320 ist.
Daniel U. schrieb: > Kann mir vielleicht jemand einen Tipp geben ob ich in die richtige > Richtung denke Ich vermute, daß das Bluetooth Modul interne Abblockkondenstaorn enthält. Der Transistor oder MOSFET oder das Dranklemmen an deine Versorgungsspannung verbindet nun diese Kondensatoren mit der Versorgung des uC und zieht viel Strom (Aufladen der Kondensatoren, im Prinzip unendlich). Wenn nun auf Seite des uC KEINE Kondensatoren sind, die diesen Strom liefern können und mehr Ladung haben als aufzuladen ist, dann sacktz di Versorgungsspannung des uC zusammen, bricht ein und der uC läuft Amok, oder resettet. Warum funktionierte es mit dem Transistor ? Der hat eventuell so wenig Basisstrom, daß er auch wenig Kollektorstrom durchlässt, so wenig daß die Versorgung des uC noch nicht zusammenbricht weil das Aufladen der Kondensatoren des Bluetooth-Moduls langsam erfolgt. Und der MOSFET ist vielleicht so niederohmig, jedenfalls schaltet er schnell, daß er wie ein Dranklemmen eines Drahtes wirkt. Was hilft: Abblocken des uC, richtig, vor allem wenn das Modul direklt am Ausgang des uC hängt, ohne Transistor, hast du gar keine andere Chance, und ein kleiner Festwiderstand in der Zuleitung zum Bluetooth Modul, der noch so niederohmig ist daß das Modul nicht in seiner Funktion gestört wird. Abgeblockt wird der uC durch einen Kondensator praktisch direklt an VCC und GND, wei die andeen schon schrieben. Der sollte 10 x mehr Kapazität haben als die Kondensatoren auf dem Bluetooth-Modul. Eventuell 100nF + 10uF zusammen.
Daniel U. schrieb: > Wie ist also der "sanfte" bzw. sichere Anlauf des Moduls > zu realisieren? Durch einen größeren Widerstand vor dem Gate. Dann lädt es sich langsamer auf, so dass der MOSFET den Laststrom allmählich ansteigen lässt. Ich habe Dir weiter oben schon geschrieben, dass ich für den ersten Versuch mal mit 10kΩ anfangen würde. Wenn das nicht reicht, dann halt 100kΩ oder so.
Michael B. schrieb: > Ich vermute, daß das Bluetooth Modul interne Abblockkondenstaorn > enthält. Natürlich! Muss doch! Das Problem sind nicht die (keramischen) Abblockkondensatoren... Die müssen sein. Sondern die Stützkondensatoren. Die Elkos, oder der Elko, auf dem HC-05 Board, die machen den Einbruch. Die nehmen sich den großen Hieb aus der Stromkanne. In dem Schaltplan sehe ich keinen Stützkondensator vor dem Schalttransistor. 1000µF VOR dem Transistor können hier Wunder bewirken. Auch sind AGND und AVcc des ATMega328 auf dem Plan völlig verbindungslos. Das geht so nicht. Grober Unfug, das ist. Anschließen! Plus Abblockkondensator. Und an Aref, darf auch son Dingen dran. Jedes Digital IC braucht min. einen Abblockkondensator. Der ATMega328 sogar mindestens zwei, besser drei. (ich sehe keinen) ---- Erst die Schlampigkeiten beseitigen, dann dürfte sich das künstliche verlangsamen schon erledigt haben. ---- Ich befürchte, dass die beiden seriellen Leitungen NICHT zu Inputs gemacht werden, wenn das HC Modul abgeschaltet wird. Vermutlich wäre das sinnvoll. damit nicht über den Pin das Modul trotz Abschaltung weiter versorgt wird.
Durch eure Tipps habe ich in meiner Schaltung jetzt einen Gate-Widerstand und (vorerst einen) 100nF Abblockkondensator zwischen VCC und GND. Das funktioniert nun ohne Probleme. Über weitere Abblockkondensatoren usw. mache ich mir (aus Platzgründen) noch Gedanken. Was das Schalten größerer kapazitiver Lasten angeht bzw. Lasten mit höherem Anfangsstrom habe ich verstanden, dass bei Verwendung eines MOSFETs folgendes gemacht werden kann um einen Sanftanlauf zu erreichen: -höherer Gate-Widerstand -Widerstand in Zuleitung zum Bauteil Gibt es sonst noch Möglichkeiten wenn MOSFETs verwendet werden? Dann noch zu der Frage mit den RX und TX Leitungen: Die bleiben beim Ausschalten des Moduls verbunden und es kann durchaus eine Spannung an ihnen anliegen. Das Modul wird durch die Schaltung an VCC aber sicher ausgeschaltet. Die Status-LED erlischt und das Wiederanlegen der Versorgungsspannung wird als Neustart erkannt. Trotzdem denke ich da über eine Sicherheitsschaltung nach, die die seriellen Leitungen abklemmt. Über Software ist mir bisher nichts bekannt und über die Hardware würde ich einfach beide Leitungen mit Transmission-Gates (bilateral Switches) versehen und sie so freischalten. Aber ich kenne mich diesbezüglich (vor allem was das zeitliche Verhalten bei serieller Kommunikation angeht) nicht wirklich aus. Was gibt es da für Möglichkeiten zum sicheren Abklemmen?
> Gibt es sonst noch Möglichkeiten wenn MOSFETs verwendet werden? Eine starke Stromversorgung bauen, welche die Lastspitzen bedienen kann, ohne dabei einzubrechen. > Dann noch zu der Frage mit den RX und TX Leitungen: > Die bleiben beim Ausschalten des Moduls verbunden und es kann durchaus > eine Spannung an ihnen anliegen. Die Sache ist die: Meistens vertragen Mikrochips an ihren Eingängen nur Spannung zwischen 0 Volt und VCC (also 3,3V beim Bluetooth Modul). Wenn du aber dessen Stromversorgung unterbrichst, dann verträgt es nur noch 0 Volt bis 0 Volt. Deswegen solltest du dann den Tx Ausgang des Mikrocontrollers auf Low schalten oder deaktivieren (hochohmig). Bei AVR musst du dazu den seriellen Transmitter deaktivieren. Wenn du das nicht tust, wird ein überhöhter Strom vom AVR Ausgang Tx zum Eingang Rx des Bluetooth Moduls fließen, dann weiter über ESD Schutzdioden im Bluetooth IC zu dessen VCC Pins. Die VCC leitung des Bluetooth Moduls wird dann auf etwas mehr als 0 Volt ansteigen, quai von hintern herum gespeist. Das ist schlecht für a) den AVR, da er nicht dazu gedacht ist, dauerhaft so hohe Ströme zu liefern. b) das Bluetooth Modul, da die ESD Schutzdioden kaputt gehen können und dann der Schutz vor elektrostatischer Ladung verloren geht c) für die Funktion des Bluetooth Moduls, da es danach eventuell nicht korrekt startet Wenn du Glück hast, passiert nichts. Wenn du Pech hast geht etwas schief. Du kannst ja mal nachmessen, wie viel Strom über die Tx->Rx Leitung fließt. Wenn es weniger als 1mA sind brauchst Du Dir keine Sorgen zu machen. Bei mehr als 10mA ist Handeln dringend empfohlen. Dazwischen darf man auf sein Glück hoffen, sofern von dem Projekt nichts wichtiges abhängt.
Ich verwende Software Serial zum HC-05, d.h. kann ich leider nicht einfach den seriellen Transmitter deaktivieren. Deshalb strebe ich da eine Hardware-Lösung an. Wegen den im vorherigen Post geschilderten Gründen will ich RX des BT-Moduls auf jeden Fall noch schützen. Generell muss das BT-Modul noch besser geschützt werden, da es ohne das übliche blaue Carrier-Board eingebaut wird und deshalb die Versorgungsspannung limitiert werden muss. Ein step-down Voltage Regulator kommt glaube ich eher nicht in Frage, weil VCC am Modul bis 3.3V hochgehen soll aber auch bis 3V abfallen darf. Letzteres wäre bei einem 3.3V Regulator nicht gegeben. Aber ich weiß nicht ob das nicht ein eigenes Thema unabhängig von dem Thread hier ist...
:
Bearbeitet durch User
Daniel U. schrieb: > Dann noch zu der Frage mit den RX und TX Leitungen: > Die bleiben beim Ausschalten des Moduls verbunden und es kann durchaus > eine Spannung an ihnen anliegen. Und warum ist das im Schaltplan nicht so gezeichnet? Warum schaltest du die Spannungen, die möglicherweise an RX/TX gehen, nicht ab, bevor du die Versorgung weg schaltest? Wenn an TX des HC-05 von außen eine Spannung anliegt, würde ich allerdings über die Beschaltung noch mal ganz grundlegend nachdenken.
Daniel U. schrieb: > Ich verwende Software Serial zum HC-05, d.h. kann ich leider nicht > einfach den seriellen Transmitter deaktivieren. Einen Transmitter (in Hardware) hast du in diesem Fall nicht. Also kannst du einfach den Pin als Eingang konfigurieren und nach dem Aufwachen wieder als Ausgang konfigurieren.
Daniel U. schrieb: > Ich verwende Software Serial zum HC-05, d.h. kann ich leider nicht > einfach den seriellen Transmitter deaktivieren. Unfug! Natürlich geht das.
Es ist deshalb nicht im Schaltplan eingezeichnet, weil es im Testaufbau zum eigentlichen Thema auch nicht verbunden ist/war. Hat also mit dem ursprünglichen Problem erstmal nichts zu tun. Später in der Gesamtschaltung auf der Platine wird es natürlich verbunden sein. Die Bemerkung zu den seriellen Leitungen war ja soweit ich verstanden habe nur eine Warnung um evtl. spätere weitere Komplikationen zu vermeiden. Also sollte ich dann quasi per Software den Atmega-TX zu HC-05-RX Pin im ausgeschalteten Zustand des HC-05 LOW legen und dann wieder HIGH wenn das Modul an ist und serielle Daten übertragen werden können?
Daniel U. schrieb: > Also sollte ich dann quasi per Software den Atmega-TX zu HC-05-RX Pin im > ausgeschalteten Zustand des HC-05 LOW legen und dann wieder HIGH wenn > das Modul an ist und serielle Daten übertragen werden können? Ich sagte "zu Inputs gemacht werden". Und das meinte ich auch so. Warum du da High und Low draus machst, ist mir schleierhaft.
Also einfach unter Arduino mit pinMode für die Dauer des Ausschaltens den Pin, der zum HC-05 textet, zum Input machen und wenn das Modul wieder benutzt werden soll ihn wieder zum Output deklarieren?
ja ja ja ja Wie oft willst du noch nachfragen. Mach doch einfach mal was und bestaune deine Erfolge (bzw reagiere auf Misserfolge)! Du diskutierst viel zu lange, nicht nur bei dieser Frage.
1 | // bla
|
2 | myserial.end(); |
3 | pinMode(txpin,INPUT); |
4 | // hier FET abschalten
|
5 | |
6 | // tu was anderes
|
7 | |
8 | // hier FET einschalten
|
9 | myserial.begin(9600); |
10 | // bla
|
Ich teste ja immer und es funktioniert in beiden Varianten. Wenn ich den TX-Pin immer als OUTPUT lasse und LOW forciere oder wenn ich einen Code implementiere wie eben gezeigt. Nur kann man ja nicht wissen was von beidem besser und Fehler-unanfälliger ist. Beides sieht vom Ergebnis her auf dem Oszi exakt gleich aus. Aber gut, damit hat sich die Frage denke ich mal geklärt. Danke dafür!
Schau Dir mal an, welchen Pegel das Startbit in der seriellen Kommunikation hat und überlege dann mal, wie sich dann ein LOW Pegel auswirken kann.
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.