Arduino wird fälschlicherweise mit Stromaufnahme zurückgesetzt

Ich habe eine einfache Schaltung, die unten abgebildet ist und einen Arduino verwendet, um zwei große bidirektionale Motoren über 12-V-Relais zu steuern. Normalerweise funktioniert das gut, aber manchmal setzt sich der Arduino selbst zurück.

Ich denke, was passiert, ist, dass die Motoren beim Starten viel Strom verbrauchen, was dazu führt, dass das Arduino einen vorübergehenden Stromausfall hat, bei dem es zurückgesetzt wird. Um dies zu beheben, habe ich einen 1000-uF-Elektrolytkondensator und einen 22-uF-Keramikkondensator hinzugefügt. Zusätzlich habe ich die Leistungs- / Masseebenen des Arduino mit 1N4001-Dioden "abgemauert", damit die Motoren während eines Stromabfalls keine Ladung vom Arduino stehlen können.

Wenn ich auf die VIN / GND zum Arduino schaue, sehe ich immer noch gelegentlich einen Leistungsabfall, aber bei den Dioden / Kondensatoren sind die Spitzen sehr kurz und scharf. Überraschend ist, dass diese Leistungsabfälle nicht immer einem Neustart vorausgehen, soweit ich das beurteilen kann.

Meine aktuelle Arbeitstheorie ist, dass die Stromabfälle den Speicher beschädigen oder nur die Instabilität im Arduino auslösen, weshalb Stromabfälle im Allgemeinen nicht sofort einen Neustart verursachen.

Ich habe ein paar Tage damit verbracht, mit diesem Problem zu kämpfen, und ich weiß immer noch nicht, was ich tun soll, um es zu beheben. Ich verstehe nicht, warum beim Arduino ein plötzlicher Stromausfall auftritt, wenn es mit Dioden abgeschirmt ist. Jede Hilfe wäre willkommen.

PCB-Oberschicht PCB-Unterschicht Spannungsabfall

Bearbeiten 1 Hier ist das Schema für die Motorsteuerung. Umgebungsrelais sind auf GND, nur eines ist während einer Bewegung eingeschaltet. Wenn ich auf das Zielfernrohr schaue, sehe ich einige Stacheln am Tor. Ich habe 10-uF-Keramikkondensatoren zu den Gate-Leitungen hinzugefügt, aber das hat das Neustartproblem nicht vollständig behoben.Motorschema

Und hier ist der Schaltplan für die Stromversorgung des Arduino. Ich habe eine Diode auf der High-Side und auf der Low-Side. Die High-Side-Diode soll verhindern, dass die Motoren Ladung von den Kondensatoren stehlen, und der Low-Side-Kondensator soll verhindern, dass die Motoren die Masseebene bewegen. Das Problem bleibt mit oder ohne eingesetzte Low-Side-Diode bestehen.Arduino-Power

Ich glaube nicht, dass das Problem von der Stromversorgung herrührt, ich kann den Stecker ziehen und das Arduino läuft ungefähr zwei Sekunden lang weiter. Ich habe mehrere Tage damit verbracht und nichts gefunden, was diese Schaltung zuverlässig macht. Ich weiß nicht, was ich versuchen soll.

Bearbeiten 2 Ich denke, dass das Problem darin besteht, dass die Relais manchmal Lichtbögen bilden, was EMI verursacht, das das Arduino stört. Ich brauche einen RC-Snubber, um das zu beseitigen, aber wie schließe ich einen solchen Snubber richtig an meiner Schaltung an?

Verstehe ich richtig, dass Sie auch Dioden auf die Masseebene setzen? Das solltest du nicht brauchen. Es verursacht wahrscheinlich mehr Probleme.
Klingt sicherlich nach einem Störfestigkeitsproblem, entweder abgestrahlt oder geleitet. Zeigen Sie einige Daten, um dies zu beweisen, indem Sie eine sehr kurze Diff-Sonde oder zwei perfekt abgestimmte 10: 1-Sonden auf demselben verrauschten Signal mit einer flachen Linie im AB-Modus verwenden, indem Sie Spitze und Sondenring nur an 4 Testlöchern mit einer Federsonde verwenden, dann ist sie einsatzbereit zum Erfassen von Übersprechen, Zurücksetzen von Spitzen oder Strahlungs- oder Erdverschiebungen, Versorgungsstörungen usw. Führen Sie genaue Messungen durch. Probieren Sie HF-Kappen, Baluns und STP-Kabel aus.
DKNguyen, Sie haben Recht, dass ich eine Diode auf der Grundebene hatte. Ich habe es gerade ohne diese Diode versucht, und ich bekomme immer noch Resets. Ich glaube, dass es häufiger ist als früher, aber ich bin mir nicht sicher
Schauen Sie nicht nur auf die Motorleistung. Schau dir auch diese Relais an!
Abel, ja anfangs dachte ich, dass es an den Relais liegt, aber das System ist 100% stabil, wenn die Motoren abgeklemmt sind. Was ich einfach nicht verstehen kann, ist: Warum verhindern die Dioden diese Spitze nicht vollständig? Wie entweicht Strom?
Nichts kann die Spitze vollständig verhindern. Sogar Dioden brechen zusammen - stellen Sie es sich wie einen Hammerschlag vor - ein starkes, aber steifes Material (Diode) gegen ein Stück Gummi (Kondensator). Wenn die Motoren an einer separaten isolierten Stromversorgung angeschlossen sind, trifft möglicherweise Ihr "100% stabiler" Fall zu. Andernfalls wird Ihre Stromversorgung wahrscheinlich von den Motoren beeinträchtigt. Dioden können einen Strommangel nicht ausgleichen. Caps können das nur vorübergehend ausgleichen.
Können Sie Angaben zu Stromversorgung, Motor und Relais machen? Spezifische Stromanforderungen und Stromstärken der Stromversorgung
@Abel Ich weiß, dass Kappen den aktuellen Rückgang nur vorübergehend abdecken können, aber ich dachte mir, dass sie die Zeit während dieses kurzen V-Abfalls abdecken könnten. Wenn ich die Stromversorgung manuell trenne, sehe ich einen sehr langsamen Abfall von V, was ich erwarte. Meine Stromversorgung ist 12 V 10 A, ich teste mit einem Motor, der 4 A ohne Last ist und als 12 A mit Volllast aufgeführt ist.
Die Diode im wirklichen Leben ist nicht perfekt, sie leitet auch rückwärts, insbesondere Schottky. Wenn Sie die Leckenergie von den Relaisspulen korrekt entfernen möchten, müssen Sie einen RDC-Snubber verwenden und nicht nur Energie an der Diode abführen. Übrigens, Sie haben nicht erwähnt, welches Netzteil Sie verwenden, 1000 uF für größere Motoren sind nicht viel. Posten Sie alle Schaltpläne, damit wir das mögliche Problem besser sehen können.
Als erstes muss die Diode, die zwischen den beiden "GND" liegt, durch einen Draht ersetzt werden. Dann, gehen Sie zu Meta, posten Sie die Teile des Schaltplans, von denen Sie glauben, dass sie zur Lösung des Problems beitragen werden, aber wenn Sie die Frage stellen, bedeutet dies, dass Sie nicht wissen, was das Problem ist, also helfen die Teile des Schaltplans, die Sie posten, nicht. Kannst du den ganzen Schaltplan posten?
Ich wette, die Lösung hängt von dem Pin der Motoranschlüsse ab, der mit einer Spur direkt mit dem Arduino verbunden ist. Es ist der obere Pin in beiden "MR"-Anschlüssen. Ich habe jedoch keine Ahnung, was es bewirkt.

Antworten (3)

Ihre N FETs stehen auf dem Kopf.

Geben Sie hier die Bildbeschreibung ein

Sollte sein:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Ich glaube, ich habe es in meinem Schaltplan falsch verstanden, auf der Platine ist die Quelle mit GND verbunden
Dann poste bitte einen genauen Schaltplan ... sonst ist es wirklich schwer zu beheben ...

Mit dem Schaltplan sehe ich, dass Sie Dioden sowohl in Strom als auch in Masse haben.

Der auf der Masseseite ist nicht erforderlich und erschwert wahrscheinlich die Messung von Störungen, da Ihr Oszilloskop auch mit Masse verbunden wird. Es wäre auch besser, eine Shottky-Diode zu verwenden, da sie weniger Spannungsabfall hat.

Es wäre nützlich, eine Scope-Spur zu haben, die sowohl die Motorleistung als auch die Arduino-Leistung gleichzeitig anzeigt. Erweitern Sie die Spur, damit wir die Breite der Impulse sehen können, um die wahrscheinliche Ursache zu bestimmen. (Es ist besser, wenn möglich, einen Screenshot mit dem Zielfernrohr zu machen, anstatt ein Foto zu machen, es wird klarer).

Wenn die Breite des Ausfalls mit der Zeitkonstante des großen Kondensators und dem Drain des Prozessors übereinstimmt, wird er durch einen Stromausfall verursacht. Wenn er sehr kurz ist (Nanosekunden bis Mikrosekunden), liegt wahrscheinlich eine Störung vor irgendwie anders.

Es kann sich lohnen, die Spannung des Brown-Out-Detektors (BOD) auf einen niedrigeren Wert als normal (z. B. 2,7 V) einzustellen, um mehr Spielraum zu haben, wenn die Spannung abfällt.

Vor einigen Jahren habe ich ein ähnliches System entwickelt. Um die durch die starke Startmotorlast verursachten Spannungsabfälle zu vermeiden, habe ich die Batteriespannung mit einem LT1949-Aufwärtswandler auf 6 V erhöht, Energie in einer großen 2200-uF-Kappe gespeichert) und dann auf die vom Prozessor (ATMega128) benötigten 5 V heruntergeregelt . Die im Kondensator gespeicherten zusätzlichen 1 V ermöglichten es ihm, um bis zu einem Volt abzufallen, ohne die Versorgung des Prozessors zu beeinträchtigen, und um weitere 500 mV, bevor er die Mindestspannungsanforderung für den Prozessor erreichte. Dies ist das Dreifache der Marge, die Sie erhalten, wenn Sie einfach einen großen Kondensator an die Versorgung anschließen.

Dieses System ließ die Batteriespannung problemlos auf etwa 3 V abfallen und konnte 10 Millisekunden mit einer noch niedrigeren Spannung überleben.

Das ist sehr hilfreich. Zur Verdeutlichung: D16 ist der Versorgung zugewandt, aber auf der Grundebene. Ich habe versucht, diese Diode zu entfernen, aber es scheint die Instabilität zu erhöhen. Schlägst du immer noch vor, dass ich es entferne?
@zeeman_effect - Können Sie einen Schaltplan bereitstellen, der sehr zweideutig ist, wenn Sie nur versuchen, die Leiterplatte zu verfolgen.
Ich habe Schaltpläne für die Motorsteuerung und die Arduino-Leistung hinzugefügt
Leider habe ich nur ein kleines Handgerät dabei. Die Tropfen, die ich sehe, sind sehr kurz, daher denke ich, dass dies auf Interferenzen zurückzuführen ist. Wenn ja, wie würden Sie empfehlen, diese Interferenz zu entfernen?

Ich habe einen RC-Snubber um jede Vcc / GND-Seite des Relais hinzugefügt, also insgesamt 4 RC-Snubber. Dies schien das Problem zu beheben.

Ich glaube, was passiert ist, war, dass es einen Lichtbogen im Relais gab, der EMI verursachte, der den IC zurücksetzen würde.