Wie puffert man einen ATMEGA für eine Stromunterbrechung im Millisekundenbereich ohne seltsames Verhalten?

Ich habe ein ATMEGA328p-pu Arduino mit einer LED + Schieberegisterstreifenschaltung, die über SPI angeschlossen ist. Wenn es eingeschaltet wird, erhöht es eine Variable im EEPROM, um den Anzeigemodus zu verbessern.

  • Wir haben den Brownout-Detektor auf Stufe 1 (2,7 V) eingestellt.
  • Parallel zu den Stromkabeln ist ein 1500-uf-Kondensator angeschlossen, der das Arduino hoffentlich davon abhält, den Modus bei einem physischen Aufprall zu ändern, da sich die Batterieklemmen für etwa eine Millisekunde (?) Etwas trennen können.
  • An der positiven Leitung der Kappe befindet sich eine Diode, um zu verhindern, dass sich die Kappe in die LEDs entlädt, sodass sie nur das Arduino puffert.
  • Es gibt auch einen 1000-Ohm-Widerstand parallel über der Kappe, um sie zu entleeren, da sie eine Spannung hielt, von der wir annehmen, dass sie hinter einem Problem steckte, bei dem der Chip die LED-Schaltung manchmal beim Booten nicht beleuchtete.
  • Der Arduino Pro Mini und der Strip sind für 5 V ausgelegt, aber wir betreiben sie routinemäßig mit 3,7 V, damit sie mit einer einzigen Li-Ion-Zelle betrieben werden können.

Manchmal leuchtet der Stromkreis nach 10 oder 15 Sekunden nicht auf. Manchmal nach mehrmaligem Abklemmen und Wiederanklemmen der Batterie hintereinander leuchtet sie dann auf.

Könnte jemand einen besseren Weg empfehlen, um dem ATMEGA (aber nicht dem LED-Streifen) einen Strompuffer bereitzustellen? Machen wir es größtenteils richtig?

Diagramm (Entschuldigung, wenn es chaotisch ist, ich kann es von meinem Freund in Illustrator wiederholen lassen, wenn es unklar ist, es könnte nur ein paar Stunden dauern):Schaltplan

Können Sie einen Schaltplan der Situation mit AVR, Netzteil, Widerstand, Kondensator, Diode, ... zeichnen?
Ist der einzige Grund, warum Sie diesen "Puffer" benötigen, weil sich die Batterieklemmen bei Stößen leicht trennen können? Wenn ja, sollten Sie einfach den Stecker entfernen und die Drähte direkt an die Platine löten.
Um Jippie zu wiederholen, Sie haben mit einer guten schriftlichen Beschreibung begonnen, das Hinzufügen eines Schaltplans wird immens helfen. Wenn Sie Probleme beim Posten haben, steht Ihnen Hilfe zur Verfügung.
Danke für das Feedback an alle, ich arbeite gerade an einem Diagramm. @GarrettFogerlie Die Verwendung eines austauschbaren Akkus an den Anschlüssen ist derzeit eine Designanforderung, aber ich schätze den Vorschlag.
Ihr Bleeder-Widerstand ist eher klein und verbraucht im Vergleich zu typischen Standby-Anforderungen viel Strom. Wenn Sie Brownout in der Software erkennen können, richten Sie ein Programm ein, das auf dem UART-Ausgang ab Brownout "zählt", und überwachen Sie dies, während Sie die Stromversorgung ziehen, und sehen Sie, wie lange es läuft, und berechnen Sie die Baudrate zurück. Achten Sie auch auf die Möglichkeit, Peripheriegeräte versehentlich über Datenleitungen mit Strom zu versorgen.
Danke @ChrisStratton, tolle Vorschläge. Eine Sache, die wir zur Fehlerbehebung getan haben, war, die gesamte Kappe und das Diodenstück zu entfernen, sodass nur der 1-kOhm-Bleeder übrig blieb. Das Problem blieb bestehen, also haben wir es wohl etwas eingegrenzt. Es ist etwas daran, diesen Widerstand parallel zu den Stromschienen zu haben, das ein unregelmäßiges Verhalten zwischen dem Arduino und dem LED-Streifen verursacht.
Dies sollte nicht der Fall sein, es sei denn, der LED-Streifen muss sehr nahe an der positiven Schiene sein, um zuverlässig ein „Hoch“ zu lesen. In diesem Fall kann der Bleeder-Widerstand mit niedrigem Wert dazu beitragen, genügend Strom durch die Diode zu ziehen, um ihren vollen Spannungsabfall zu aktivieren und machen Sie den "hohen" Ausgang des Atmega nicht hoch genug für die LED-Schaltung. Sie könnten versuchen, dem LED-Streifen eine eigene unabhängige Diode zu geben, damit beide Schaltkreise ähnliche Versorgungsspannungen sehen. Bitte klären Sie auch, ob es sich um ein Betriebsproblem oder eher um ein Problem mit einem nicht zuverlässigen Power-on-Reset handelt.
@ChrisStratton Nochmals vielen Dank, an dieser Stelle ist es ein Problem mit dem Power-on-Reset. Manchmal schaltet sich der Streifen normal ein, manchmal gibt es eine Verzögerung von 5 bis 10 Sekunden, bevor sich der Streifen einschaltet. In den seltensten Fällen schaltet es sich überhaupt nicht ein (oder nach so langer Zeit, dass wir aufgegeben haben). Wir haben gerade ein problematisches Arduino auf einem anderen Streifen behoben und die Ergebnisse sind die gleichen. Ein kleiner Prozentsatz der Arduinos, die wir haben, verhalten sich so, die meisten nicht. Arbeite gerade an einer größeren Stichprobengröße, um es herauszufinden.
Vielleicht können Sie versuchen, dem Arduino einen unabhängigen Ausgang zu geben (seriell, es sind eigene diskrete LEDs), damit Sie dort eine kleine Debug-Anzeige machen können, dass das Arduino zurückgesetzt wurde, was sich von seinem Erfolg beim Sprechen mit dem LED-Streifen unterscheidet. Ich gehe davon aus, dass der LED-Streifen nicht einmal wirklich einen Reset hat, der sich von der normalen Progression seiner Zustände bei jedem Zugriff unterscheidet?
Alles, was ich gepostet habe, war irreführend, wir haben es behoben, indem wir das Fuse-Bit BOOTRST ausgeschaltet haben. Go figure :p Danke für all die Hilfe, insbesondere @ChrisStratton
Das Problem mit @ChrisStratton hatte nichts mit der Kappe, der Diode und dem Entlüfter zu tun, siehe meinen Kommentar oben. Sehr dankbar für eure Hilfe :)
Nein, das ist falsch. Die Sicherung steuert, wo die Programmausführung beginnt. Vielleicht verlangsamt Sie das Durchlaufen eines Bootloaders, und wenn Sie dies nicht tun, hilft dies. Aber Sie haben das eigentliche Problem nicht verstanden oder gelöst .

Antworten (1)

Sie können einen Superkondensator (1F/5,5 V) nach der Diode verwenden und ihn direkt mit VCC und GND verbinden. Dies hilft Ihnen beim Puffern der Leistung.