ich verwende einen Atmega8 an der unteren Grenze (2,7V), der über einen TPS61010 versorgt wird.
https://www.ti.com/lit/ds/symlink/tps61016.pdf
Bei Abschalten eines Verbrauchers(40mA) regelt der TPS nicht ganz sauber, d.h. es entsteht ein Spannungssprung von 2,73 auf 2,69V, der zum Reset des Atmega führt.
Ich habe das Layout, Spule und die Kondensatoren(Eingang 10uF/Ausgang 10uF) des TPS komplett vom Datenblatt übernommen.
Außer dem Anheben der Betriebsspannung oder Deaktivieren der BOD fällt mir momentan nichts ein, aber vielleicht fällt kennt hier jemand noch einen Trick dazu.
was ist das denn für ein Verbraucher und wie wird der geschaltet? Ist das vielleicht ein Relais oder Motor etc. und da entstehen beim Abschalten irgendwelche Störsignale?
Wie ist der Reset-Pin des Controllers beschaltet? Ist da z.B. nen 100nF Kondensator gegen Masse dran oder hängt der ganz offen? Irgendwelche Leiterbahnen an der Reset-Leitung, wenn ja wie lang?
was ist das denn für ein Verbraucher und wie wird der geschaltet? Ist
das vielleicht ein Relais oder Motor etc. und da entstehen beim
Abschalten irgendwelche Störsignale?
Die Last ist ein LM9022 Verstärker IC, der ein VFD versorgt (Ladungspumpe).
Wenn der LM9022 in den Shutdown geht und ich ihn danach wieder per LOW einschalte, löst er den Reset des Atmega8 aus.
Das Ganze funktioniert aber tadellos, wenn er per LM317 (2,7V) versorgt wird.
Ich habe testweise den Spannungsteiler des TPS61010 auf 3V eingestellt, das Problem bleibt.
Also ist es wohl eher irgendeine Art Störpuls, kein Spannungsabfall der das Reset auslöst.
Auf meinem China Oszi sehe ich leider fast nichts, nur den Abfall der Ausgangsspannung des TPS, wenn ich die Last wegnehme.
Der TPS hat verschiedene Betriebsmodi, vielleicht hat es damit etwas zu tun?
Der LM9022 sitzt anstelle des Trafos, alles sternförmig mit der Versorgung vom TPS verbunden.
Vcc vom Atmega über 1-3 Ohm hab ich auch probiert, keine Änderung.
Wie finde ich heraus, was der Atmega als Grund für den Reset nennt? Soetwas wie eine interne Logdatei gibt es ja wohl kaum.
An welcher Stelle messe ich denn am besten mit dem Oszi?
Am Ausgang vom TPS oder an Reset vom Atmega?
Der LM9022 sitzt anstelle des Trafos, alles sternförmig mit der
Versorgung vom TPS verbunden.
Vcc vom Atmega über 1-3 Ohm hab ich auch probiert, keine Änderung.
Wie finde ich heraus, was der Atmega als Grund für den Reset nennt?
Soetwas wie eine interne Logdatei gibt es ja wohl kaum.
An welcher Stelle messe ich denn am besten mit dem Oszi?
Am Ausgang vom TPS oder an Reset vom Atmega?
Edit:
Der LM9022 wird per LOW (Shutdown auf GND) eingeschaltet.
Im eingeschalteten Zustand ist die Ausgangspannung des TPS bereits wellig-hochfrequent (evtl. Störungen durc die Ladungspumpe =30kHz). Ausgeschaltet sehe ich ein Dreieck.
Kann das bereits der Grund für den Reset sein?
Wenn der LM9022 in den Shutdown geht und ich ihn danach wieder per LOW
einschalte, löst er den Reset des Atmega8 aus.
Also das Problem tritt nicht beim Abschalten der Last auf, sondern wenn Du die Last
wieder einschaltest?
Das Ganze funktioniert aber tadellos, wenn er per LM317 (2,7V) versorgt
wird.
Ich habe testweise den Spannungsteiler des TPS61010 auf 3V eingestellt,
das Problem bleibt.
Eine Ladungspumpe hat ja einen Kondensator der geladen werden muss wenn sie eingeschaltet wird. Der Kondensator wird vermutlich leer sein oder nur mit den 2,7V geladen sein wenn sie aus ist. Wie groß ist der im Verhältnis zum Ausgangskondensator von dem TPS61010?
Der TPS61010 als Schaltregler reagiert etwas langsamer als ein Linearregler. Für den allerersten Moment muss also dessen Ausgangskondensator herhalten um Schwankungen auszugleichen.
Hab mal testweise die fuse BODEN deaktiviert, und damit geht es.
Was mich wundert, BODLEVEL0 hatte ich nicht gesetzt (der Autor der Uhr hatte das aber angegeben). Wenn ich BODLEVEL0 jedoch aktiviere, dann zeigt mein Display nichts an. Wie kann das sein?
Also muss wohl es eine ganz kurze Unterspannung sein, die den Reset verursacht, oder?
Wie lese ich diese Control/Status Register Bits aus? Ich nutze einen TL866 Programmer.
Miss die Spannung direkt an den VErsorgungspins des AVR. Nur das, was genau dort an seinen Pins passiert, interessiert den µC. Nimm zum Messen eine Massefeder.
Es wäre nicht unpraktisch, den wahren Schaltplan zu zeigen
Der liegt leider nur in Form eines Drahtigels vor.😅
Genau jetzt ist ein guter Zeitpunkt einen Schaltplan zu zeichnen (mir ist absolut unklar, wie man eine Schaltung ohne Plan, also planlos aufbauen kann). Und dann postest du auch gleich noch das dazu passende Foto des Drahtigels.
Die beiden Bilder (China Oszi) decken sich mit dem Datenblatt des TPS(continuous/discontinuous mode).
Das konnte ich so auch mit dem HP Oszi nachvollziehen (die Spannung war dort leicht niedriger, ca. 2,68V).
Ich hab dann mit der Glitch-Triggerfunktion herausgefunden, dass der kurze Spannungseinbruch beim Einschalten des LM9022 entsteht, also beim Umschalten vom diskontinuierlichen zum kontinuierlichen Betrieb. Der Einbruch geht bis 2,2V runter, daher logisch, dass die BOD den Reset auslöst.
Ich hab dann mit der Glitch-Triggerfunktion herausgefunden, dass der
kurze Spannungseinbruch beim Einschalten des LM9022 entsteht, also beim
Umschalten vom diskontinuierlichen zum kontinuierlichen Betrieb. Der
Einbruch geht bis 2,2V runter, daher logisch, dass die BOD den Reset
auslöst.
Wird Zeit, dass Du deinen Drahtigel mal optimierst. Mit ordentlicher Abblockung und ordentlicher Masse- und Betriebsspannungsführung wäre das nicht passiert ...
Ich war mir eben unsicher, ob ich nicht >2,5V getriggert hab.😂
Mit der Einstellung < bekomme ich nun keine Ergebnisse.
Wie ist das < / > hier zu verstehen?
Also nochmal neu gemessen, per Edge Trigger. Ist das so korrekt?
Wird Zeit, dass Du deinen Drahtigel mal optimierst. Mit ordentlicher
Abblockung und ordentlicher Masse- und Betriebsspannungsführung wäre das
nicht passiert ...
ja.
Wie groß ist den Kondensator am Ausgang vom TPS61010?
Und wie groß ist der Kondensator den der LM9022 lädt?
Wenn der am TPS61010 nicht deutlich größer ist als der am LM9022 dann ist klar was passiert.
Wird Zeit, dass Du deinen Drahtigel mal optimierst. Mit ordentlicher
Abblockung und ordentlicher Masse- und Betriebsspannungsführung wäre das
nicht passiert ...
ja.
Wie groß ist den Kondensator am Ausgang vom TPS61010?
Und wie groß ist der Kondensator den der LM9022 lädt?
Wenn der am TPS61010 nicht deutlich größer ist als der am LM9022 dann
ist klar was passiert.
Der Pufferkondensator der Ladungspumpe am LM9022 ist 1uF groß, am Ausgang und Eingang des TPS61010 sitzen 10uF. Die Spannung fällt beim Einschalten auf 2,29Vmin. Ein Test mit 50uF Elko zusätzlich am Ausgang des TPS hat Vmin nur minimal erhöht.
Die Spannung fällt beim
Einschalten auf 2,29Vmin. Ein Test mit 50uF Elko zusätzlich am Ausgang
des TPS hat Vmin nur minimal erhöht.
Dann hab ich den Drahtigel und seine Masseführung etc. als Ursache im Verdacht.
Könnte natürlich auch ein zu hohes ESR des Elkos sein. Aber irgendwas in die Richtung.
Es hat sicher mit dem hohen Einschaltstrom der Ladungspumpe zu tun. Die Umschaltung der Betriebsmodi des TPS ist wohl im Einschaltmoment zu langsam.
Gibt es vielleicht einfache Möglichkeiten zur Strombegrenzung?
Ich hab noch über einen Elko+Diode an Vcc des Atmega gedacht, der den Moment überbrückt. Aber selbst mit einer Schottkydiode mit niedriger Vf wird das wahrscheinlich zu knapp.
Gibt es vielleicht einfache Möglichkeiten zur Strombegrenzung?
Ich glaube, Du hast immer noch nicht begründet, warum es unbedingt 2,7V sein müssen. Denn wenn Du den BOD benutzt, der u.U. schon bei <=2,9V zuschlagen kann, ist dass eh' für die Katz', hier etwas optimieren zu wollen.
Also entweder einen externen BOD benutzen, oder gleich ganz weglassen.
Der braucht also etwa 250µs um das Abfallen der Spannung einzufangen. Der TPS61010 läuft aber mit 500kHz. Das sind also 125 Taktzyklen. Das sollte der eigentlich schon schneller schaffen können.
Wenn nicht irgendwelche parasitären Elemente, schlechte Masseführung etc. die Regelung erschweren. Bei Schaltreglern ist das Layout und die Anbindung an den Rest der Schaltung immer essentieller Teil des Ganzen und müssen passen damit es funktionieren kann.
Kann natürlich auch sein dass der TPS61010 besonders langsam zwischen PWM und Pulse-Skipping umschaltet, hab mit dem konkret bisher keine Erfahrung. Könnte auch sein dass die Werte am COMP-Pin ungünstig gewählt sind und er daher langsam reagiert.
Die Werte am Comp-Pin sind wie im Datenblatt gewählt (Figure 20).
Hab mal testweise 220uF an den Ausgang gehängt, der Abfall wird besser aber führt immer noch zum Reset.
Ich werde das wohl so belassen, da die Uhr auch mit Reset weiterläuft (RTC hab ich am Bat-Pin mit C+Diode gepuffert).
Was wären die Nachteile, wenn ich die BOD deaktiviere?
Gibt es konkrete Erfahrungen zum BOD Level? Dass ein Reset bereits ab unter 2,9V ausgelöst werden kann, hab ich bisher noch nie beobachten können.
Passiert das evtl. bei niedrigen Tenperaturen?
Gibt es konkrete Erfahrungen zum BOD Level? Dass ein Reset bereits ab
unter 2,9V ausgelöst werden kann, hab ich bisher noch nie beobachten
können.
Das steht aber so im Datenblatt, und daran solltest du dich halten.
Ansonsten ist es mit Absicht gefrickelt und gestümpert.
Ja, das stimmt. Aber offiziell liegt der Betriebsspannungsbereich bei 2,7-5,5V. Demnach hätte ich angenommen, dass da auch das BOD Level liegt.
Wurde zB. hier diskutiert:
Beitrag "AVR was passiert kurz vor der Brown-Out Erkennung?"
Ab wann ist es denn gestümpert, nur bei aktiver BOD? 😂
Je nach Chip und Temperatur wird das BOD Level leicht varrieren, bei mir kommt 2,7V ziemlich genau hin.
Ja, das stimmt. Aber offiziell liegt der Betriebsspannungsbereich bei
2,7-5,5V. Demnach hätte ich angenommen, dass da auch das BOD Level
liegt.
Du bekommst das, was im Datenblatt steht, nicht was du annimmst.
Ab wann ist es denn gestümpert
Wenn man den Chip außerhalb der im Datenblatt genannten Grenzen benutzt.
Viele Mikrocontroller funktionieren bei der minimalen Betriebsspannung nur eingeschränkt. Betrifft oft auch die Taktfrequenz, die ADC Referenz oder gar den ganzen ADC, und die USB Schnittstelle.
Es ist ja nur ein Bastelprojekt, aber das Ganze soll funktionieren.
Wenn der BOD bereits bei 2,9V auslösen kann, muss ich den BOD deaktivieren.
Ich betreibe ein winziges Taschenrechner-VFD an einer NiMH-Zelle. Bei 3V steigt der Stromverbrauch schon um 15-20%.
Im normalen Betrieb läuft der Atmega ohne BOD scheinbar zuverlässig. Der Spannungseinbruch führt (soweit ich das testen konnte) zu keinem Fehler im Programm.
Es scheint aber am Layout zu liegen, denn nach Löten am Spannungsteiler ging der Einbruch nur noch bis 2,5V runter.😅
Das ist immernoch Pfusch, aber vielleicht erledigt sich das mit einer ordentlich aufgebauten Platine.
Als primitiven Displaytest habe ich mal Vcc vom Atmega abgeklemmt, so leuchten alle Segmente gleichzeitig.
Kann man das gefahrlos so machen, oder überlaste ich evtl. den Atmega dabei?
Der Rest der Schaltung hing weiter an der Versorgung. Danach wurde Vcc wieder angelegt. Wenn BOD deaktiviert ist, führt das zu Fehlern wie „45:10:17“ als Uhrzeit, oder Segmentdreher im Menü (also Fehler im Flash/EEprom?). Die Fehler bleiben auch nach Hardware Reset. Aber sobald der Stützkondensator (an Vbat der RTC) entladen und die Uhr danach wieder einschaltet wird, ist der Fehler reproduzierbar weg.
Was passiert da ungefähr? Kann jemand das Verhalten vom Atmega für Laien erklären?
Wenn BOD deaktiviert ist, führt das zu Fehlern wie
„45:10:17“ als Uhrzeit, oder Segmentdreher im Menü (also Fehler im
Flash/EEprom?). Die Fehler bleiben auch nach Hardware Reset. Aber sobald
der Stützkondensator (an Vbat der RTC) entladen und die Uhr danach
wieder einschaltet wird, ist der Fehler reproduzierbar weg.
Wahrscheinlich ist er auch wieder weg, wenn du die Uhr lange genug laufen lässt, weil dann die interne Zählersteuerung zwischendurch greift und wieder ein gültiger Wert angezeigt wird - wenn auch wahrscheinlich ein falscher ;-)