Hallo zusammen
Lange nicht mehr hier gewesen, habe aber auch lange nichts mehr gebaut. Nun habe ich ein Gerät entworfen, das unter anderem die Temperatur eines Schrankes überwachen und gegebenenfalls eine Lüftung anwerfen soll.
Die Temperatursensoren werden dabei über einen analogen Multiplexer abgefragt, die Zündungscontroller der Fans sind direkt am Mikrocontroller angeschlossen.
Was funktioniert: Die Temperatursensoren messen die Temperatur und geben sie auf dem Display aus. Über einen Potentiometer, der ebenfalls am Mux hängt, kann ich einen Wert zwischen 0 und 100 einstellen und ebenfalls auf dem Display ausgeben. Ein am Mux angehängter Knopf kann zu Testzwecken eine LED ein- und ausschalten. Die Fans können per digitalWrite oder analogWrite(pin, 0 / 255) ein und ausgeschaltet werden.
was nicht funktioniert: Versuche ich per analogWrite(pin, 100) die Lüfter nur so halb einzustellen, zeigt sich die Fehlfunktion sofort. Schalte ich sie nur temperaturabhängig eine Zeit lang ein und dann wieder aus, dauert es einige Stunden, bis die Fehlfunktion auftaucht.
Diese sieht folgendermassen aus: die Werte, die ab dann vom Mux zurück kommen, sind allesamt 0, egal wie die Adressierung lautet. Der Code scheint aber noch ausgeführt zu werden, denn die TestLED kann ich mit dem Knopf noch ein- und ausschalten. Den Enablepin einmal high und wieder low zu schalten bringt nichts. Seltsamerweise schafft auch ein Reset des uC keine Abhilfe. Wenn ich das externe Netzteil entferne funktioniert die Logik und Anzeige wieder, während der uC per USB versorgt wird, die Lüfter jedoch natürlich nicht, da sie über das Netzteil versorgt werden. Trenne ich das Board eine Zeit lang komplett vom Strom und Computer, funktioniert danach wieder einige Zeit lang alles. Evtl. funktioniert ausserdem delayMicroseconds(xxx) nach Eintreten der Fehlfunktion nicht mehr, müsste ich allerdings genauer austesten.
In der Software kann ich keinen Fehler finden. Ausserdem lässt mich die Sache mit dem Netzteil eher an einen Hardwarefehler denken. Mein einziger Verdacht ist die Versorgungsleitung auf Screenshot 1, die einige Pins des Mux auf der Rückseite der Platine kreuzt. Könnte dies bei schnellem Ein- und Ausschalten zu Problemen führen? Elektromagnetische Induktion oder so Zeug...? Die Leitung sollte eigentlich nicht mehr als 160mA bei 12V führen.
Ich lasse mal meinen Code und und mein Platinendesign hier. Würde mich über euer Mitdenken sehr freuen! Hardwarespezifikationen zu den verbauten Teilen oder Datenblätter kann ich nachliefern, wenn jemand etwas brauchen sollte.
Gruss
Hitsuji
nexus.ino (5.1 KB)
MuxClient.cpp (3.5 KB)
MuxClient.h (1.6 KB)