Guten Tag! Ich habe aktuell das Problem, dass meine Regelung innerhalb einer Konditionierungskammer (Temperatur und Luftfeuchtigkeit) auf Basis eines Arduino Unos clones (Seeeduino V4.2) unvorhersehbar abstürzt bzw. einfriert. Die In- und Outputpins frieren ebenso, wie das angeschlossene LCD Bildschirmsegment ein. Ich habe im Anhang eine Skizze des Aufbaus angehängt. Dieses Phänomen geschieht in unregelmäßigen Abständen. Mal nach einem Tag, mal nach einer Woche. Kurzbeschreibung des Systems: Eine isolierte Kammer soll durch ein Heizbett (120W) und einen Terrariumsluftbefeuchter auf ein am LCD Bildschirm eingestelltes Soll-Klima gebracht werden und durch Aktivierung und Deaktivierung von Relais in diesem eingependelt werden. Die Relais entsprechen diesen klassischen Relais Modulen mit Octokopplern etc., die es zu Hauf beim großen A gibt. Betrieben wird das ganze durch ein 150W Schaltnetzteil, dass den Arduino Uno, die Heizung und über einen Step-Down-Wandler einen zweiten Arduino Nano und die Relais versorgt. Der zweite Arduino kümmert sich lediglich darum, dass bei einem Absturz des Unos die Heizung nicht ungeregelt agiert, in dem es den Uno resettet und die Versorgungsspannung zum Heizbett durch ein zusätzliches Relais trennt. Im Nachhinein wäre ein Watchdog wahrscheinlich sinnvoller und ein adäquaterer Ersatz? Sowohl das Schaltznetzteil, als auch der Luftbefeuchter hängen an der selben 230V Quelle. Alle 2 Minuten schreibt der Arduino Uno die über einen Sensor ermittelte Luftfeuchtigkeit und Temperatur auf eine SD Karte. Temperatur- &Feuchtigkeitssensor: DHT22 Sensoren: Thermistoren Ungenutzte Pins des Unos sind auf Input, HIGH gesetzt. Ich habe folgende Vermutung, die ich aber bislang noch nicht reproduzieren konnte - ihr aber wahrscheinlich besser einschätzen könnt: Kommt es zu einer Spannungsspitze im Stromnetz im Bereich der 230V Quelle, so ist bei gleichzeitiger Aktivität der Heizung und der Steuerung, dass schmal kalkulierte Netzteil an seiner Grenze und sorgt somit für dieses Phänomen? Ich hoffe ich konnte das Problem ausreichend beschreiben. Vielen Dank! Ich hoffe ihr könnt mir helfen :)!
Beitrag #6252880 wurde vom Autor gelöscht.
Soweit ich Brownout detection verstehe, wäre dies nur eine Möglichkeit den Watchdog bzw. die Absicherung zu ersetzen. Ich würde aber gerne das grundlegende Problem verstehen und dann lösen. Denn ich will es gar nicht soweit kommen lassen, dass es zum Absturz kommt und so meine Konditionierung verzögert. Außerdem - ist die nicht von Haushaus bei Unos aktiviert?
Mono211 schrieb: > Außerdem - ist die nicht von Haushaus bei Unos aktiviert? Kann, muss aber nicht. Oder ist etwas knapp eingestellt. Das Problem könnte durchaus auch vom Aufbau kommen. Wie ist das Ganze denn aufgebaut? Gerade mit Jumperkabeln etc. holt man sich schnell Probleme aufgrund ungleicher Masse etc. ein. Ein Bild vom Aufbau wäre gut. Ein bisschen wundert mich, dass Bild und Beschreibung nicht zusammenpassen. Steuert der Uno nur das Befeuchter-Relais oder auch das Heizungsrelais I? Ggfs. gibt es beim Einschalten der 12V Heizung Störungen auf der 12V-Versorgung, die deinen Arduino über seinen Spannungsregler aus dem Tritt bringen. Hier hilft es mitunter, ein Filter mit einem größeren Kondensator vorzusehen. Der zusätzliche Nano sollte eigentlich nicht nötig sein. Optimalerweise implementiert man ein Heartbeat-Signal, dass bei Ausfall eine möglichst einfach Schaltung dazu bringt, die Heizung abzutrennen. Im Prinzip reicht aber mitunter auch ein einfacher Bimetallschalter.
:
Bearbeitet durch User
Sind die Relais und Aktuatoren alle mit Freilaufdioden o.ä. entstört?
tippe auf Fehler im Programm der einen Registerüberlauf verursacht.
Sam W. schrieb: > Kann, muss aber nicht. Oder ist etwas knapp eingestellt. Gut zu wissen danke :)! Das könnte aber das Abstützen an sich nicht verursachen - würde lediglich als potentielle Absicherung dienen oder? >Das Problem könnte durchaus auch vom Aufbau kommen. Wie ist das Ganze >denn aufgebaut? Gerade mit Jumperkabeln etc. holt man sich schnell >Probleme aufgrund ungleicher Masse etc. ein. Ein Bild vom Aufbau wäre >gut. Ich komme leider aktuell nicht an den Aufbau um ein Foto zu machen. Ungleiche Masse würde aber doch nur entstehen wenn unterschiedliche Stromquellen miteinander agieren würden oder? Das dürfte eigentlich nicht der Fall sein. Lediglich der Step-Down-Wandler hat über den Nano Kontakt zum anderen System. >Ein bisschen wundert mich, dass Bild und Beschreibung nicht >zusammenpassen. Steuert der Uno nur das Befeuchter-Relais oder auch das >Heizungsrelais I? Oh mist. Entschuldigt. Da fehlt natürlich eine Linie: Also der Ablauf vom Heizbett ist folgender: Die positive Leitung des Heizbettes ist an dem Relais II angeschlossen, welches weiter mit dem Relais I verbunden ist und dann weiter zum Netzteil verläuft. Der Nano dient lediglich als Absicherung und somit ist das Relais II, sofern keine Temperatur über dem Grenzwert, konstant geschlossen. Negativ geht direkt an Negativ des Netzteils. Das Relais I wird vom Uno geschaltet und dient hier als Regler. Keine PID, lediglich "bang-bang" da das System sehr träges ist. >Ggfs. gibt es beim Einschalten der 12V Heizung Störungen auf der >12V-Versorgung, die deinen Arduino über seinen Spannungsregler aus dem >Tritt bringen. Hier hilft es mitunter, ein Filter mit einem größeren >Kondensator vorzusehen. Du meinst also den 12V Eingang des Unos weiter zu filtern? Werde ich recherchieren. Vielen Dank! Der Bimetallschalter ist tatsächlich in Überlegung :). >Sind die Relais und Aktuatoren alle mit Freilaufdioden o.ä. entstört? Die Relais sind es. Also alles, was direkt am Uno angeschlossen ist. >tippe auf Fehler im Programm der einen Registerüberlauf verursacht. Da alle meine Timer als long Variable und die restlichen Werte als Double definiert sind, sehe ich das aktuell nicht als Problem an. Vielleicht irre ich mich natürlich auch. So etwas entsteht doch durch unzureichend definierte Wertebereich? Selbst die Timer könnten in ms nach einer Woche nicht den Bereich von 64 Bit sprengen? Da keine Rückfragen oder Anmerkungen zum gering gewähltem Netzteil kamen, gehe ich davon aus, dass ihr das ausschließt? Danke soweit schonmal an alle!
Mono211 schrieb: > Da alle meine Timer als long Variable und die restlichen Werte als > Double definiert sind Das macht nichts. Double auf dem Arduino Uno ist kein double, sondern nur ein IEEE754 Single Precision (binary32), m.a.W. der Typ hat trotzdem nur vier Byte. https://www.arduino.cc/reference/en/language/variables/data-types/double/
Wickel ihm halt einen Schal um! Dann friert er nicht so.
Mono211 schrieb: > Da keine Rückfragen oder Anmerkungen zum gering gewähltem Netzteil > kamen, gehe ich davon aus, dass ihr das ausschließt? -Stützkondensatoren? -Falls das öfter vorkommt würde ich mal über ein paar Prüfpunkte nachdenken. -Evtl. ein paar LEDs statt Relais leuchten lassen ob es da auch passiert?
Mono211 schrieb: > Im Nachhinein wäre ein Watchdog > wahrscheinlich sinnvoller und ein adäquaterer Ersatz? Wenn die Spannungsversorgung nicht einbricht und nur das Programm irgend wo hängt, dass funktioniert das. Wenn allerdings die Spannung zu dem Zeitpunkt mal kurz zu niedrig ist, dann kann der Instruction-Pointer irgend wo hin springen wo er eigentlich gar nichts zu suchen hat (und das dann auch reproduzierbar) oder er bleibt einfach hängen. Mit welcher Frequenz betreibst du deinen AVR? Du könntest mal versuchen dem AVR einen GoldCap als Puffer zu verpassen. Es reicht vielleicht auch einfach eine Diode zu nutzen um die 12V in einen 1000µF Elko fließen zu lassen und von dort dann erst in den Vin-Pin deines Arduino. Vielleicht gibt es beim schalten der Relais (schalten der internen Spulen) Störungen welche sich auf der Leitung fortpflanzen. Wenn der "Befeuchter" eine Pump beinhaltet, dann können auch von dort Störungen entstehen und deinen Controller stören.
Ich würde mal versuchen das MCUSR auszulesen. Daran kann man ggf. bei aktivierter Brownout Detektion auslesen, wenn an dem Controller die Spannung einbricht und dieser dann dadurch einen Reset durchführt.
Mono211 schrieb: >>Sind die Relais und Aktuatoren alle mit Freilaufdioden o.ä. entstört? > Die Relais sind es. Also alles, was direkt am Uno angeschlossen ist. Die Frage ist, sind die Freilaufdioden direkt am Relais oder hast du die am µC-Board dran? Sind sie nicht direkt am Relais, wird das den Fehler verursachen. Gruß Anselm p.S.: Wenn es längere Leitungen dahin sind, würde ich ich sogar noch einen 100nF an die Ausgänge setzen.
Verzeihung, aber zunächst eine giftige Kritik: Wenn die Hardware ebenso chaotisch strukturiert ist wie die Skizze der Schaltung, gibt es kaum eine Chance, die Ursache zu finden. Mono211 schrieb: > ...Quelle, so ist bei gleichzeitiger Aktivität der Heizung und der > Steuerung, dass schmal kalkulierte Netzteil an seiner Grenze und sorgt > somit für dieses Phänomen? Und? warum nimmst du nicht erstmal ein stärkeres Netzteil zur Probe oder stützst du nicht das Netzteil mit einem dicken Elko? Noch besser: Du nimmst ein getrenntes Netzteil für den Steuerteil und trennst die Stromkreise auf der Sekundärseite der Relais völlig von dem Steuerteil mit den Relaisspulen und den Kontrollern. Grundsatz: Man sollte den Leistungsteil und den Steuerteil klar trennen. Sonst fängt man sich ekligen Mist an Streusignalen ein und kann auch nicht systematisch auf die Fehlersuche gehen. Wenn man schon Relais benutzt, dürfte das gut zu machen sein Lass auch mal den Zusatzteil mit dem Nano weg, ob dort die Absturzursache liegt
> Das macht nichts. Double auf dem Arduino Uno ist kein double, sondern > nur ein IEEE754 Single Precision (binary32), m.a.W. der Typ hat trotzdem > nur vier Byte. > https://www.arduino.cc/reference/en/language/variables/data-types/double/ Man lernt wirklich nie aus. Vielen Dank :)! > -Stützkondensatoren? Nur die im Schaltnetzteil direkt. > Wenn allerdings die Spannung zu dem Zeitpunkt mal kurz zu niedrig ist, > dann kann der Instruction-Pointer irgend wo hin springen wo er > eigentlich gar nichts zu suchen hat (und das dann auch reproduzierbar) > oder er bleibt einfach hängen. Also am besten beides. Notiert :)! > Mit welcher Frequenz betreibst du deinen AVR? Beim letzten Compiler waren Standart 16mHz eingestellt. >Wenn der "Befeuchter" eine Pump beinhaltet, dann können auch von dort >Störungen entstehen und deinen Controller stören. Das Verdampfen des Befeuchters funktioniert über das Ansaugen und Zerstäuben einer Piezokeramik, dessen Regelkreislauf aber lediglich durch die "Enable"-Leitung mit dem Relais verbunden ist. Selbst die Stromversorgung ist extern (war ein Zukaufsteil). > Die Frage ist, sind die Freilaufdioden direkt am Relais oder hast > du die am µC-Board dran? > Sind sie nicht direkt am Relais, wird das den Fehler verursachen. Diese sind direkt am Modul, zwischen den beiden Schalt-Anschlusspunkten des Relais verbaut. Die Leitungen dort hin sind kürzer als 10cm. > Verzeihung, aber zunächst eine giftige Kritik: > Wenn die Hardware ebenso chaotisch strukturiert ist wie die Skizze der > Schaltung, gibt es kaum eine Chance, die Ursache zu finden. Ich akzeptiere die Kritik, weise aber darauf hin, dass nicht jeder Zugang zum Fachwissen eines E-Technik-Studiums, einer Ausbildung oder jahrelange Erfahrung in diesem Bereich hat und mir somit auch die Kompetenzen bezüglich Software und Normgerechten Zeichnungen fehlen. Das ist ja das schöne an solch einem Forum, dass so viele Kompetente Menschen hier ehrenamtlich einem weiterhelfen! >Und? warum nimmst du nicht erstmal ein stärkeres Netzteil zur Probe >oder >stützst du nicht das Netzteil mit einem dicken Elko? Das wird der nächste Schritt sein. Nur ist bedingt durch die aktuelle Lage ein Zugang zum Arbeitsplatz erschwert. Vielen Dank nochmals an alle bisherigen Beteiligten! Ich fasse kurz zusammen: - Brownout überprüfen und MCUSR auslesen - Watchdog für softwareseitige Bugs o Durchsichten des Programmes auf potentielle Registerüberläufe - Trennung des Regel- und Aktuationskreises - Weitere Stützkondensatoren zwischen Netzteil und Regelarduino - Zusätzliche Prüfpunkte (bspw. Austausch des Relais durch LEDs oder ähnlich - Ggf. Puffern des AVR durch ein Goldcap Ich melde mich, wenn ich wieder zur Arbeit kann und das Problem weiter analysieren und hoffentlich lösen konnte :)!
Ich entwickle industrielle uC basierte Steuergeräte schon seit über zwanzig Jahren. Zum Gesagten ist wenig hinzuzufügen. Bei digitalen Steuergeräten ist es unumgänglich notwendig jeden uC IO-Pin der extern genutzt wird durch Tiefpassfilter, ESD Schutzmaßnahmen und manchmal durch galvanische Isolation(Opto-Isolator) zu entkoppeln. Natürlich muß auch darauf geachtet werden, daß die 5V Stromversorgung über alle Zweifel erhaben ist. Also ausreichend Stützkondensatorwn verwenden und Masseschleifen vermeiden. Wichtige Regeln: kein ungeschützter IO-Pin darf die Leiterplatte jemals verlassen oder externe Signale erhalten. Da gibt es absolut keine Ausnahme!!! Die Stromversorgung muß absolut sauber sein. Schaltregler Impulse am Ausgang sollten 50mVpp nicht überschreiten (mit Oszi nachsehen)und surch LC Filter und gute Selektion der Ableit-Cs gewährleistet sein. Extern geführte Pins immer über sinnreiche Schutzkompenten verbinden(RC Glieder, TVS Dioden, Opto-Isolator Analog Eingänge am besten über RC Glieder und OPVs, Differenzverstärker, Instrumentationsverstärker, etc. Nie ohne Filter nach aussen führen. Bei RC Eingang darauf achten, daß bei Überspannung der zulässige interne Ableitstrom nach Vdd/Vss nicht überschritten wird. Andrerseits darf der Arbeitswiderstand am Eingang einen bestimmten Wert nicht überschreiten um die Zeitkonstante des ADC Multiplexers nicht zu verletzen. Oft ist es günstig ein Stütz-C am ADC Eingangspin anzuordnen. Und, und, und... Beim Arduino ist es nicht verkehrt den eingebauten Spannungsregler nur für die Versorgung des uC zu begrenzen und externe Elektronik mit einem eigenen Spannungsregler. Falls nur ein Spannungsregler ausreichender Kapazität verwendet wird, dann sollte man sternförmige Verdrahtung zwischen Arduino Vdd und den Test der Elektronik machen um Masseschleifen zu vermeiden. Es ist auch nicht falsch mindestens 100uF am Vcc Bus nahe beim Arduino und Regler zu haben. Kurze Verbindungslängen sind zu erstreben. Nur muß man sich vergewissern, daß der Brownout richtig konfiguriert ist und funktioniert weil manche uC langsam ansteigende und abfallende Versorgungsspannungen nicht mögen und im schlimmsten Fall zu Korruption des EEPROMs führen können. Es gibt also allerhand zu beachten und es würde für Dich nützlich sein mit einem erfahrenen Kollegen der alles schon mitgemacht hat, zusammenzuarbeiten. Wenn man nicht wirklich grobe Unterlassungsfehler macht, sind solche Probleme alle lös- und beherrschbar. Früher als Weller Magnastat Lötkolben noch gebräuchlich waren, konnte man drastisch demonstrieren inwieweit die Schaltungen Umweltrobust waren. Da gab es oft sehr starke induktive Störenergie beim Abschalten des Heizkörpers durch den Magnastat Temperaturschalter. Wenn man das Lötkolbenkabel in der Nähe des uC hatte, rragierte jener fast immer mit Störverhalten oder einen RESET. Erst wenn man alles notwendige gemacht hat, stoppte der Spuk. Solange Deine Schaltung auf externe Impulsenergie starker Verbraucher reagiert ist Deine Arbeit noch nicht getan. So gesehen ist die ehrwürdige Magnastat Lötstation immer noch eine nützliche "Entwicklungshilfe". Das Schalten darf Deine Gesamtschaltung in keiner Weise beeinflussen. Erst dann ist Deine Arbeit getan. Wenn man eventuell dank Erfahrung dann später alles richtig macht, funktionieren die meisten Anwendungen auf Anhieb. Bei industriellen Anwendungen ist minimalistische Schaltungstechnik zu vermeiden. Ein gewisser Aufwand ist fast immer unumgänglich notwendig. In dieser Hinsicht ist auch ein Arduino absolut für gewisse Insustrieanwendungen begrenzt geeignet.
:
Bearbeitet durch User
Gerhard O. schrieb: > gewisser Aufwand ist fast immer unumgänglich notwendig. In dieser > Hinsicht ist auch ein Arduino absolut für gewisse Insustrieanwendungen > begrenzt geeignet. Wir verwenden Nano in 2 verschiedenen Steuerungen gerade für Industrieanwendungen. Nano wird in diesen Steuerungen aber nur als M328 in DIP betrachtet, netterweise mit USB und Resonator ausgestattet. Das zugehörige SteuerBoard wird aber nach allen Regeln entstört und die Stromversorgung ist, wie du sagst:" über alle Zweifel erhaben ".
Wie Peter R. schon feststellte: Entkopple möglichst die Versorgung der Arduinos von der Lastversorgung. Wenn bei Schaltvorgängen die Versorgungsspannung einbricht, kommt es zum Reset (brown out) - mit Pech verbiegt es aber auch z.B. das Program counter Register und der Arduino führt auf einmal "leeren Code" aus, was zu undef. Verhalten führt. Die einfachste Lösung wurde von Peter auch beschrieben. Wenn du allerdings mit 5V ankommst, könnte nach der Diode nicht mehr genug Spannung für den Arduino übrig sein. Alternativ ein zweites 5 Volt Netzteil nutzen, die Massen der Netzteile verbinden und das neue Netzeil ausschliesslich zur Lastversorgung nutzen. Ich persölich arbeite gerade bei Einsatz von Relais gerne mit 12 Volt und einem 7805 für die 5-Volt-Versorgung - so hat man bereits für eine Entkopplung gesorgt.
Mono211 schrieb: > - Brownout überprüfen und MCUSR auslesen > - Watchdog für softwareseitige Bugs Für die Fehlersuche muß man den Watchdog immer ausschalten, sonst können Fehler verschleiert werden. Ist im MCUSR kein Bit gesetzt, bedeutet das, der PC ist ohne Reset in den Resetvektor gelaufen, d.h. ein SW-Fehler liegt vor.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.