Wie kann verhindert werden, dass ein Mikrocontroller aufgrund von Vcc-Schwankungen neu startet?

Fall 1: Ich habe eine Pumpstation mit einem autarken 240-V-Pumpenmotor, der über einen 240-V-Druckschalter geschaltet wird und einen Druckbehälter mit max. Druck. Nach dem Tank befinden sich vier 24-V-Magnetventile (250 mA Einschaltstrom, 180 mA Halten), die von einer 5-V-gespeisten Relaisplatine (Sainsmart) gesteuert werden. Diese Relaisplatine ist über einen Optokoppler mit den Ausgängen des Mikrocontrollers (Arduino UNO) verbunden.

Die Relais kommen in Reihe ON|OFF. Schaltet der letzte ab, läuft der Pumpenmotor wegen des noch nicht erreichten Abschaltdrucks weiter. Ein paar Sekunden später ist der Druck hoch, die Pumpe schaltet ab – und hier kommt das Problem – der Mikrocontroller startet neu (wenn der Motor abschaltet).

Es gibt eine einphasige 240-V-Versorgung für alles. Die Magnetventile werden von einem Ringkerntransformator 50VA versorgt. Der Mikrocontroller verfügt über ein 240V/5V geschaltetes Steckernetzteil mit 2A (<200mA erforderlich).


Fall Nr. 2: Ein anderes Szenario: Der an 240 V/5 V angeschlossene Mikrocontroller steuert ein kleines Relais (5 A), das 240 V (mit Überspannungsschutz) für ein größeres 25 A DIN-Relais (Schütz) schaltet, das ein 3-kW-Widerstandsheizelement für heiß schaltet Wassersystem. Gelegentlich startet der Mikrocontroller neu, wenn er die Last einschaltet.

Ich sehe in beiden Fällen das gleiche Problem. Aber was könnte das Problem/die Lösung sein?

100uF mit 0,1uF parallel zu 5V Vcc/GND?


Fall Nr. 1: Die Versuche ...
1. Verwenden Sie ein 4k7 und parallel 100 nF von +5 V Vcc zum RESET. Keine Änderung.
2. Verwenden Sie einen 1.000-uF-Kondensator parallel zu +5 V Vcc und GND. Keine Änderung.

Fall Nr. 1: Die Lösung ...
3. Fügen Sie einen Überspannungsschutz (104 in Reihe mit 100R) parallel zu den Relaiskontakten hinzu.
Keine Neustartprobleme mehr! :)

Danke für den ganzen Input; Es löste eine Menge Forschung und Validierung aus, was zu einigen Erkenntnissen führte ... mehr noch, um robustere Schaltungen zu erstellen, wenn es um Eingaben in uC-Geräte geht.

Antworten (4)

Wenn wir Q = C * V verwenden und die Ableitung nehmen, erhalten wir

dQ/dt = dC/dT * V + C * dV/dT

Jetzt halten wir den Kondensator konstant und lassen dQ/dT = C * dV/dT

Ersetzen Sie dQ/dT durch I, und wir haben das nützliche I = C * dV/dT

Nehmen Sie nun an, I = 0,2 Ampere, dV = 0,5 Volt, dT = 5 Sekunden, und ordnen Sie neu an, um C zu finden.

C = I /(dV/dT) = I * dT / dV = 0,2 * 5 / 0,5 = 2 Farad Kapazität.

Haben Sie einen Superkondensator in Betracht gezogen, der durch eine Schottky-Diode vom VDD-Pin der MCU isoliert ist? mit 100 Ohm über der Diode, um die Super-Cap aufgeladen zu halten?

=======================================

Nehmen wir einen Swag (wissenschaftliche Wildesel vermuten) bei der Mathematik für Magnetfeldprobleme auf Leiterplatten. Verwenden Sie die Formel

Vinduce = MUo * MUr * Fläche/Entfernung * dI/dT.

Unsere erste Annahme ist das dI/dT: Nehmen Sie seine 10 Ampere in 100 Nanosekunden an, wobei die 100 Nanosekunden durch die parasitäre Kapazität in den Wicklungen des Pumpenmotors definiert sind. Auch dies ist ein SWAG.

Angenommen, die Platine am MCU-Reset-Pin hat eine Fläche von 1 cm x 1 cm. Oder wenn die Reset-Spur überall verläuft, gehen Sie von 1 cm mal 10 cm aus. Und nehmen Sie an, dass die Pumpen-/Relaisverkabelung 1 cm von dieser Reset-Schleife entfernt ist.

Welche induzierte Spannung können wir anhand unserer Annahmen vorhersagen? Die erste Aufgabe besteht darin, Werte für MUo (4*pi*1e-7) und für MUr (1, für Luft, Vakuum, Kupfer, FR-4 usw.) einzufügen, und die Gleichung wird

Vinduce = 2e-7 * Fläche/Entfernung * dT/dT

Vinduce = 2e-7 * 0,01 Meter * 0,01 Meter/0,01 Meter * 10 Ampere/100 Nanosekunden

Vinduce = [hier setzen wir eine Zahl, die anzeigt, dass ein großes Problem besteht: 1 Volt; und wir sind uns einig, wenn unsere Mathematik voraussagt, dass 1v wahrscheinlich ist, dann haben wir wahrscheinlich ein Problem]

Vinduce = 2e-7 * 0,01 * 10amp * 1e+7

Vinduce = 2e^(-7 -2 +1 +7) = 2e^(-1) = 0,2 Volt.

OK, wir können ein EMI-Problem haben oder auch nicht. Untersuchen Sie den Bereich der Schleife am Reset-Pin. Bringen Sie vielleicht die Leute von StackExchange ins Denken, indem Sie diesen Teil des PCB-Layouts (die Schichten und die Komponentenschicht) veröffentlichen.

Es gab mindestens 3 gute Antworten auf EMI. Sobald Sie den Schleifenbereich auf dem Reset-Pin gefunden haben, machen Sie eine Schleife dieser Größe auf einem isolierten Draht und kleben Sie sie auf die Leiterplatte, die von einer Oszilloskopsonde überwacht werden soll. Es kann eine Herausforderung sein, eine GND-Verbindung mit Nullbereich zur Sonde herzustellen. Schalten Sie dann die Pumpe ein und aus und ein und aus. Und berichte bitte, was du findest.

Autsch ... Mathe, immer eine gute Sache ... Ich wusste, dass es nicht mehr als 200 mA waren (und habe diese Zahl eingesteckt), aber gehen Sie besser und messen Sie es, da es C reduzieren wird.
188 mA sind es :) Ist es richtig anzunehmen, dass 0,5 V die Welligkeit V ist?! Werde die vorgeschlagene Schaltung bauen ... danke.
In Bezug auf die 0,5 Volt gehe ich davon aus, dass dies die Toleranz ist, die die MCU für VDD_sag hat. Solche Spezifikationen wie 5 V + - 0,5 V sind das, was ich im Sinn hatte.

Ich stimme mit Lucky Bot darin überein, dass Netzteil-Holdover hier kein Problem ist, und ich stimme mit Spehro Pefhany und Lucky Bot überein, dass dies wie ein EMV-Problem aussieht.

Was passiert, wenn der Druckschalter abschaltet, ist, dass eine induktive Last abrupt abgeschaltet wird. Die "magnetische Trägheit" der Induktivität versucht, den Stromfluss aufrechtzuerhalten, aber Sie haben den Weg durch einen sehr hohen Widerstand versperrt ... was zu einer sofortigen mächtigen Spannungsspitze über den Anschlüssen der Induktivität führt und normalerweise einen Lichtbogen über die Mechanik zieht Schaltkontakte, erregt durch die Motorwicklung. Der Lichtbogen selbst ist laut und der Schalter kann hüpfen. Abgesehen von der Spannungsspitze erzeugt das kurze, aber mächtige dI/dT auch einen EM-Impuls, der sich durch den "Äther" der Induktivität(en) ausbreitet und möglicherweise einige Störungen/Rauschen in den verschiedenen Leiterbahnen rund um Ihr Arduino hervorruft.

Ein ähnliches Problem gibt es bei Relaisspulen, die zB von einem Transistor angesteuert werden. Wenn der Transistor in den Leerlauf geht, erleidet sein Kollektor eine Spitze von der Relaisspule - weshalb der Transie immer durch eine antiparallele "Flyback-Diode" geschützt werden sollte.

Das ordnungsgemäße Blockieren der Stromschiene zu Ihrem Arduino MCU ist eine teilweise Gegenmaßnahme. Leider ist die Aufmerksamkeit für das PCB-Layout eine andere. Am Motor können Sie versuchen, einen EMV-Filter in die Stromverkabelung einzubauen und/oder eine Ferritperle/einen Ring/eine Hülse über die Drähte zu ziehen oder ähnliches.

Haben Sie die Möglichkeit, sich vielleicht einige interessante Punkte rund um die MCU anzusehen? Wie zum Beispiel den Netzteileingang und den Reset-Eingang?

Allerdings kann es schwierig sein, digitale Schaltkreise bei diesem Symptom zu debuggen, selbst wenn ein Oszilloskop zur Hand ist. Ihr Vorteil ist, dass das Arduino ein einfaches Board ist und gut dokumentiert ist. Ich habe die PCB selbst nicht studiert. Im Allgemeinen ist die Reset-Leitung in Computern keine einzelne Spur, die von einem Schalter oder Header zur MCU führt, sondern kann selbst ein komplexeres Netzwerk mit mehreren "Quellen" des Reset-Signals sein. Ein guter Ort (Ausgangspunkt), um nach Reset-Störungen zu suchen, ist der RESET-Eingangspin der CPU. Und Sie sind möglicherweise mit einer interessanten Unsicherheit konfrontiert: Die Störungen, die Sie auf einem Oszilloskop sehen, stammen sie von der Spur oder dem „Knoten“, den Sie beobachten, oder werden sie möglicherweise in die „Schleife“ zwischen Ihrer Sondenspitze und induziert? die Grundleine der Sonde? Versuchen Sie zum Vergleich, Ihre Sondenspitze mit der Sonde kurzzuschließen.

Möglicherweise stellen Sie fest, dass die Amplitude des EM-Impulses / der EM-Spitze etwas zufällig oder sehr zufällig ist. Abgesehen von anderen zufälligen Einflüssen (z. B. dem präzisen einmaligen Muster des „Prellens“ eines mechanischen Relaiskontakts) kann auch die Sinusform des Stroms durch den Motor ein Faktor bei wechselstrombetriebenen induktiven Lasten sein. Was hier zufällig ist, ist der Zeitpunkt gegenüber der momentanen Phase der Sinuswelle, in der sich die Relaiskontakte öffnen. Einige Halbleiterschalter (auf Transistorbasis, dh PhotoMOS oder IGBT) können durch den gleichen Mechanismus ebenfalls EMI verursachen. Sie zeigen kein mechanisches "Prellen", aber das abrupte Abschalten (dI/dt) ist immer noch da. Solid-State-Schalter auf Basis eines Triacs oder Thyristors sollten höflicher sein: Sie schalten bei einem Nulldurchgang ab. Deshalb arbeiten sie nur für AC.

Was einige Referenzen angeht... Apropos Sperrstrom für ICs durch Kondensatoren, versuchen Sie, dieses Thema durchzulesen , und folgen Sie den Links zum Kemet KSIM und zur Murata C39E-Appnote. Diese beiden Quellen analysieren die "Wahl der Sperrkondensatoren" akribisch im Detail :-) Und vielleicht werfen Sie einen Blick auf dieses Video über Spitzen, die durch induktive Lasten beim Ausschalten verursacht werden (und den Zweck von Flyback-Dioden, obwohl eine Flyback-Diode dies nur tut schützt den Schalttransistor und verhindert nicht, dass sich der EM-Impuls durch den Äther ausbreitet). Du scheinst Heimwerker zu sein... Ferrithülsen für die Stromfilterung sind in verschrotteten PC-Netzteilen oder verschiedenen Kabeln und sogar Datenverbindungskabeln zu finden. Ein richtiger Netzfilterfür Ihren Motor (LC PI oder was auch immer) kann leicht mehr kosten als der Arduino, kann aber die Investition wert sein.

Wenn Sie einige Ferrithülsen oder -ringe ausprobieren, können Sie mehrere in Reihe schalten oder ein paar Windungen um eine wickeln. Sie können eine Gleichtaktdrossel herstellen, indem Sie das Live einführen oder wickeln und durch einen gemeinsamen Ring nebeneinander zurückkehren ... Und Unabhängig davon, ob Sie Ferrithülsen / -ringe oder einen LC-Filter (oder beides) ausprobieren, kann es einen Unterschied machen, ob Sie den Filter in der Nähe des Motors oder in der Nähe des Schalters platzieren. Ich würde sagen, in der Nähe des Motors wäre besser, da dies die "parasitäre Antenne" für die abgestrahlte HF-Energie kürzer machen würde ... andererseits mag meine Ansicht naiv sein.

Dies erklärt, warum der Stromversorgungsingenieur der Superheld ist :) Sehr nützlicher Beitrag; Ich bin die angegebenen Links durchgegangen. Viel gelernt. Habe auch diesen Beitrag gefunden < electronic.stackexchange.com/questions/256622/… > ... in meinem Fall muss es der Pumpenmotor sein; zieht den Reset auf Vcc mit 4k7 und 100nF und verwendet dann eine Superkappe auf Vcc; Setzen Sie unbenutzte Pins auf Input und Pull-Ups ... und sehen Sie, wie das geht.

Klingt so, als ob das Problem EMI vom Schalten ist, und dies ist einer der Gründe, warum Hobbist-Boards wie Arduino nicht oft industriell verwendet werden und relativ teure SPSen üblich sind.

Die Lösung ist ein besseres EMV-Design und -Layout oder der Kauf eines Produkts, in das diese Funktionen von Anfang an integriert sind. Der Verzicht auf mechanische Relais hilft, ist aber oft weniger sinnvoll.

Aber würde die SPS nicht möglicherweise denselben uC (z. B. ATMEL328P) in ihrer Lösung verwenden? Das bedeutet, dass nicht der uC das Problem ist, sondern wie vermutet die Stromquelle (Versorgung).
Ja, sie werden eine Standard-MCU verwenden, aber sie wird von Schutzschaltkreisen und einer geeigneten Abschirmung umgeben sein, um sie gegen EMI zu schützen.

Was auch immer für eine magere Eingangskapazität im Schaltmoduswandler vorhanden ist, reicht wahrscheinlich aus, um die MCU durch dieses Ereignis zu führen, wenn man bedenkt, dass diese Kappen auf die volle Netzwechselspannung aufgeladen sind. Wahrscheinlich hat Spehro Recht und der RESET-Pin auf der MCU wird von EMI umgeschaltet. Versuchen Sie, diesen Pin direkt an die MCU-Versorgung anzuschließen, oder setzen Sie die größte SMD-Kappe, die problemlos auf die winzige Kappe passt, die normalerweise auf diesem Pin vorhanden ist.