Arduino friert wegen Stromversorgung ein - keine Optionen mehr

Das wird eine lange Frage, aber ich möchte keine losen Enden hinterlassen.

Ich entwickle einen Inkubator, der eine Heißluftpumpe enthält, um erwärmte Luft durch einen Schlauch in eine geschlossene Kammer zu leiten (~100 ml Volumen).

Das Heizmodul besteht aus zwei 40-W-12-V-3D-Druckerwiderständen und einem 15-W-10-Ohm-Drahtwiderstand (alle später als Rparallel bezeichnet), der von einem PID-System mit einem Arduino UNO (Brett Beauregards Bibliothek) gesteuert wird.

Der Luftstrom wird von einem 12-V-2,9-W-PC-Kühler (SUNON MagLev KDE1206PKVX) erzeugt, der von einem Arduino-Pin (auf 5 V eingestellt, wenn der Benutzer den Test startet) mit der folgenden Schaltung (220-Ohm-Widerstand anstelle von 1 k) gesteuert wird:

Lüftersteuerung des Luftstroms.  220 Ohm Widerstand statt 1k

Zusätzlich habe ich einen 20x4 LCD-Bildschirm (mit I2C-Modul), einen Drehgeber, einen Temperatursensor (LM35DZ) neben dem Heizmodul (um Überhitzung zu vermeiden), einen Temperatursensor (Si7021 mit I2C-Modul) im geschlossenen Kammer und einen zusätzlichen PC-Kühler (2W-12V) zum Abkühlen der Leiterplatte. Ich verwende ein 12V-10A Schaltnetzteil.

Wenn der PID bei 100 % ist, sollte die Spannung im Widerstand (Rparallel= 1,5 Ohm) 12 V betragen, aber aufgrund der Kabel und des Transistorabfalls ( IRF540N ) beträgt die maximale Spannung etwa 10 V. Alles in allem würde ich bei maximalem Verhalten 66,6 W + 5 W (von Kühlern) = 71,6 W ziehen. Die PID-Schaltung ist wie folgt:

PID-Schaltung

Im vorherigen Bild nicht gezeigt, befinden sich auf der Leiterplatte zwischen Kabel 2 (1) und Kabel 2 (2) ein 0,1-uF-, 10-uF- und 100-uF-Kondensator .

Das Display und der Encoder arbeiten zusammen, um eine Benutzerschnittstelle zu bilden, über die Sie die gewünschte Solltemperatur in der Kammer einstellen können; das PID-System starten/stoppen und die unterschiedlichen Temperaturen während des Assays überprüfen; Überprüfen Sie die Temperatur der Kammer (Si7021) vor dem Assay. Ich habe einen 100-nF-Kondensator an beiden Enden des LCD-I2C-Displays zwischen VCC und GND (mit einem 7-mm-Kabel mit der Platine verbunden). Ich habe einen 100-nF-Kondensator zwischen Pin A/GND und zwischen Pin B/GND des Drehreglers Encoder.

Erwähnenswert ist auch, dass der Si7021-Sensor mit einem 4-poligen 80-cm-Flachbandkabel (ich glaube, so heißt es) mit einem 100-nF-Kondensator an beiden Enden an die Platine angeschlossen ist. Luftpumpenkühler und LM35DZ sind mit einem 5-poligen - 1 m abgeschirmten Kabel mit der Leiterplatte verbunden; Das Heizmodul (nur Rparallel, der PID-Schaltkreis befindet sich auf der Platine) wird mit einem 30 cm langen Kabel (das mit dem 3D-Druckerwiderstand geliefert wird, ein gewachstes) mit der Platine verbunden. Daten von den Sensoren werden an einen PC gesendet über eine serielle Schnittstelle.

Die Stromversorgung wird über einen MOLEX-Stecker mit der Platine verbunden, und daneben befindet sich eine Reihe von Entkopplungskondensatoren:

Entkopplungskondensatoren

Dem Problem auf den Grund gehen. MANCHMAL, wenn ich das Gerät bei mir zu Hause benutze, funktioniert das Ding einwandfrei, keine Verzögerung, Überhitzung oder ähnliches. Aber wenn ich das Gerät ins Labor bringe, wo ich arbeite, beginnt der Assay für ein paar Minuten (Luftpumpe startet, Arduino PID startet, LCD und Drehgeber funktionieren gut, Temperatursensoren funktionieren einwandfrei), und dann friert plötzlich alles ein. Das LCD ist eingefroren, die seriellen TX- und RX-LEDs von Arduino funktionieren nicht mehr, die Pin-Ausgänge für PID und Luftpumpe frieren auf dem Wert ein, an dem sie arbeiteten. Wenn ich die Stromversorgung trenne und Arduino neu starte, scheint der Code beschädigt zu sein oder der Arduino verhält sich dumm. Möglicherweise muss ich den Code erneut hochladen, damit das Ding wieder funktioniert.

Anfangs dachte ich, dass die I2C-Module die Ursache für diese Probleme sind (ich habe ein wenig recherchiert und festgestellt, dass sie ziemlich störempfindlich sind), aber gestern Abend habe ich das System ohne die 12-V-Stromversorgung laufen gelassen (d.h. nur LCD , Drehgeber, Si7021) 12 Stunden gearbeitet und das Einfrieren trat nicht auf.

Ich entschied mich dann für einen neuen Test, alles verbunden, außer dem Rparallel. Dies bedeutet, dass der PID-Schaltkreis auf einen offenen Stromkreis trifft, sodass die ~7 A-Entnahme nicht stattgefunden hat. Ich muss betonen, dass der Luftpumpenkühler eingeschaltet war und einwandfrei funktionierte. Bei diesem Test fror der Arduino nicht ein (unterdrückt Störungen durch die Luftpumpe.)

Das Problem scheint die Stromversorgung zu sein, wenn die Last über dem MOSFET anliegt. Ich denke, wenn das Netzteil all diese Leistung liefern muss, treten Spitzen oder etwas auf, das der Mikrocontroller nicht aushalten kann. Ich denke, der Grund dafür, dass das Ding über einen langen Zeitraum funktioniert, ist eine konstante Spannung in der Steckdose oder so etwas (nur Vermutung). Es ist kein billiges Netzteil . Nachdem ich den ganzen Nachmittag damit verbracht habe, überall Kondensatoren hinzuzufügen (die in der PID-Schaltung und den I2C-Modulen erwähnten), habe ich keine Ideen mehr. Ich habe weder ein Oszilloskop noch ein geregeltes Labornetzteil. Ich habe ein schickes Multimeter.

Bevor Sie vorschlagen, das Netzteil zu entsorgen und es beispielsweise durch eine Gelbatterie zu ersetzen, müssen die Assays, die ich mit dem Gerät durchführen muss (~7 A bei maximalem Verhalten), mindestens 16 Stunden lang sein. Gibt es eine Möglichkeit, dieses Netzteil weiter zu verwenden, ohne das Risiko einzugehen, den Arduino-Chip durch irgendeine Filterung zu braten?

Hinweis: Wo ich herkomme, befinden wir uns immer noch in Quarantäne, daher ist der Kauf ausgefallener Dinge keine Option.

Ich hoffe, ich war gründlich genug mit meiner Erklärung. Ich halte es nicht für notwendig, den Arduino-Code hinzuzufügen, ich habe ihn bereits fünffach überprüft.

Ganze Schaltpläne, ich weiß, es ist nicht das Beste, was Sie je gesehen haben, aber es ist das Beste, was ich tun konnte:

Schaltpläne für das Ganze

Im Moment wird der Arduino nicht über das 12-V-Netzteil mit Strom versorgt, sondern über den PC, der Daten sammelt (ich habe möglicherweise den Spannungsregler gesprengt).

Einige reale Bilder von der Platine:

Bild 1 Bild 2

EDIT: Also habe ich beide Transistoren in der Schaltung gegen den in den Kommentaren empfohlenen ausgetauscht: IRFZ44. Dadurch wurde die Effizienz des Heizsystems erheblich verbessert. Andererseits habe ich 2 Optokoppler (4N25) auf folgende Weise hinzugefügt:

Lüfter- und PID-Kreismodifikation

Offensichtlich habe ich beide Stromkreise isoliert ( die Masse des Arduino und Vcc von der 12-V-Stromversorgung getrennt ) und den Arduino UNO mit einem Handy-Ladegerät // PC mit Strom versorgt.

Der Arduino scheint nicht einzufrieren (ich habe es nicht im Labor ausprobiert, wo das Problem auftrat), trotzdem passiert beim Sammeln von Daten über den USB-Port etwas Seltsames (es passierte auch vor den Änderungen): Wenn das PID-System startet und das Schaltnetzteil muss die ~7A liefern der Cursor meines PCs bewegt sich unregelmäßig wenn ich das Mauspad berühre. Wenn ich den PID ausschalte, stoppt die Bewegung. Videos hier

Es ist offensichtlich, dass dies mit dem Schaltrauschen der Stromversorgung / des MOSFET zu tun hat ... aber wenn keine physische Verbindung zwischen Arduino und dem Stromkreis besteht (dank Optokopplern), warum passiert das? Könnte EMI so stark sein, um das Cursorverhalten über USB zu beeinträchtigen? Wenn ja, könnte dies der gleiche Grund dafür sein, dass mein Arduino früher einfriert? Gibt es eine Möglichkeit, dies so zu lösen, dass nicht alles geändert werden muss?

(Ich habe versucht, den Arduino mit einem Handy-Ladegerät mit Strom zu versorgen und die Daten mit einem HC-05 zu sammeln, und es scheint gut zu funktionieren, aber manchmal friert das Modul ein.)

Es würde helfen, einen vollständigen Schaltplan zu zeigen. Möglicherweise haben Sie keine ausreichenden Vgs auf D3, die etwa 10 V + benötigen. EMI-Probleme sind wahrscheinlich, aber ohne Details. Ich kann nicht helfen
Das ist eine riesige Textwand. Haben Sie versucht, den Arduino separat mit Strom zu versorgen? dh die Verwendung des Hochleistungsnetzteils für das Hochleistungsmaterial und ein kleineres 12-V- oder 5-V-Netzteil für die Arduino- und andere Low-Power-Schnittstellen, Sensoren. (Binde beide Gründe zusammen..) (Bitte verwende auch nicht GND nach oben und so weiter, es gibt Online-Ressourcen zum Zeichnen von Schaltplänen).
@TonyStewartSunnyskyguyEE75 D3 ist der Ausgang eines Arduino PWM-Pins. Sein Zustand wird durch das PID-System (max. 5 V) gesteuert. Ich kann sehen, dass der Transistor polarisiert wird, weil ich ungefähr 10 V über Rparallel messe.
@WesleyLee Im Moment versorge ich das Arduino mit dem PC (versehentlich ist der Spannungsregler durchgebrannt) und das Hochleistungsmaterial mit dem 12-V-Netzteil. Grundstücke sind miteinander verbunden)
Wenn Sie 12 V laden möchten, müssen Sie die Gate-Spannung von 5 V auf 12 V mit einer Emitter-Ansteuerung eines Basistransistors auf Kollektor zu Gate und > = 10 k Basis auf 5 V und Kollektor auf Vgs und 10 k auf 12 V verschieben. aber für Ihre Fehler wird ein vollständiger Schaltplan benötigt. Eine solide Erdung mit Dioden ist erforderlich, um induktive Rücklaufspannungen zu den Treibern zu verhindern
@TonyStewartSunnyskyguyEE75 du hast mich dort verloren. Warum sollte ich die Gate-Spannung auf 12 V verschieben müssen? Laut Datenblatt könnte ich bei einer Vgs-Spannung von 5 V bis zu 15 A durch Drain-Source erreichen. Würden Sie sagen, dass dieser Transistor für die Arduino 5-V-Logik geeignet ist?
Nein, das gilt nur für einen 20-uS-Impuls und zählt nicht für Ihren Spannungsabfall und Ihre Überhitzung
Sie können die Welligkeit der Stromversorgung mit einem Oszilloskop messen .
@ user253751 Ich musste ein geliehenes Oszilloskop verwenden und sah, dass die Welligkeit beim Einschalten der PID wirklich unangenehm wurde. Sie können die Änderungen sehen, die ich am System vorgenommen habe, aber ich denke, es ist nicht robust genug
@TonyStewartSunnyskyguyEE75 Ich habe mit den Kommentaren gearbeitet, die ich erhalten habe (Sie können die Bearbeitungen des Beitrags sehen), aber ich denke, das System ist nicht robust genug ... Ich frage mich, was Sie mit "Ein fester Boden mit Dioden" gemeint haben notwendig, um induktive Rücklaufspannungen zu den Treibern zu verhindern
Keine Lösung, aber einige Anmerkungen: 1. Halten Sie hochfrequente Stromschleifen so klein wie möglich – denken Sie darüber nach, wo der Strom beginnt und aufhört zu fließen, wenn der MOSFET ein- und ausschaltet, und halten Sie diesen Bereich so klein wie möglich. 2. Halten Sie die kleinsten Entkopplungskondensatoren am nächsten an dem, was sie entkoppeln. Der Hochfrequenzstrom fließt durch die Entkopplungskondensatoren, und die höchsten Frequenzen fließen durch die kleinsten Kondensatoren. Die Hauptstromversorgung lädt die Entkopplungskondensatoren mit einer gleichmäßigeren Rate wieder auf.
3. Zur Glättung können sowohl Induktivitäten als auch Kondensatoren verwendet werden. Verrückte Idee: Einen großen Induktor in Reihe mit der Heizung und eine Rücklaufdiode parallel zur Induktivität + Heizung schalten. Ich habe noch nie jemanden gesehen, der das getan hat, weshalb ich es als verrückte Idee bezeichnet habe. Theoretisch ist dies ein Abwärtswandler.
Ich dachte, die Induktivität könnte mit Masseebenen reduziert werden, also hat meine Platine für den PID-Transistor eine 3 cm ^ 2-Ebene im Kollektor ... das ist dann keine gute Idee? Ich habe 10uF-, 0,1uF- und 0,01uF-Kondensatoren direkt zwischen Rparallelen Seiten auf der Platine (siehe erstes echtes Bild). Würden Sie sagen, dass dies keine gute Wahl ist? @ user253751

Antworten (2)

Ihr IRF540 ist nicht wirklich das Richtige für 5V-Antrieb. Auch der LM35 sollte einen Vorwiderstand haben, wie auf dem Datenblatt gezeigt (vielleicht tut er das). Keines dieser Dinge verursacht Ihr Problem.

Das hängt wahrscheinlich mit dem Layout zusammen. Wenn Sie diesen IRF540 durch einen MOSFET mit Logikpegel ersetzen, besteht eine mögliche Lösung darin, das Schalten erheblich zu verlangsamen, indem Sie einen Serienwiderstand wie 10 K oder 20 K hinzufügen (und den Pulldown-Widerstand auf 100 K oder 200 K erhöhen). Langsameres Schalten bedeutet, dass kleinere Induktivitätsspitzen und weniger EMI Probleme verursachen.

Danke für die Antwort! Kennen Sie zufällig einen guten MOSFET, den ich in diesem Fall verwenden könnte? Zu Beginn des Projekts habe ich einen TIP122-Transistor (Darlington) verwendet, aber er kam mit der Leistung, die ich handhabte, nicht so gut zurecht ... Gibt es eine Möglichkeit, das Schalten für diesen Transistor zu verlangsamen? Ist ein MOSFET in diesem Fall die beste Alternative? Die von Ihnen erwähnten Spitzen stammen von der Stromversorgung des Transistors selbst (dumme Frage)?
Spitzen können durch schnelles Umschalten selbst entstehen. Die Spannung steigt mit dem Produkt aus Stromänderungsrate und Induktivität, daher ist eine Verringerung der Induktivität (gutes Layout) ähnlich effektiv wie eine Verlangsamung des Schaltens. Ein gängiger MOSFET mit Logikpegel für 5 V ist der IRLZ44, der für Ihren Strom in Ordnung ist. Es gibt viel bessere, insbesondere in SMT-Gehäusen, wie z. B. CSD16327Q3.

Ihr System ist nicht gut ausgelegt. Der Lüfter ist nicht nur ein Kühler, sondern ein Wärmeübertragungsgerät, halten Sie ihn also unabhängig von der Wärmeregelung auf einer konstanten Geschwindigkeit, aber nur auf einer minimalen Geschwindigkeit, die ausreicht, um die Temperatur etwas schneller zu erhöhen, als er durch die Umgebungsisolierung abkühlt.

Der Wärmesteuerungstreiber ist das große EMI-Problem, das Interferenzen durch einen leitungsgebundenen Spannungsabfall in V + oder einen Anstieg in Gnd durch Ihr Routing und Layout verursachen. Verwenden Sie direkte Pfade zum Netzteil, die nicht von Ihrem Arduino und Lüfter geteilt werden, und hoffentlich verdrillte Paare im Falle von Schwingungen.

Vielleicht wurde bereits erwähnt, dass Ihr Lüftertreiber Q2 Vbe ausbrennen würde, also habe ich es umgeleitet. Ich sehe keinen guten Grund für R7, also habe ich das umgangen. PID sollte ein- und ausgeschaltet werden, damit es nicht heiß wird und Sie nichts weiter benötigen als das Ein- und Ausschalten der Proportionalsteuerung. Es muss nicht schnell wie 20 kHz sein. Es könnte 1 Hz sein, aber wenn Sie versuchen, 95 W linear zu regeln, können Sie davon ausgehen, dass der FET irgendwann in der Mitte 40 W abgibt, also nicht gut. Lernen Sie also, PID oder nur P mit PWM zu verwenden.

Geben Sie hier die Bildbeschreibung ein