Laufzeitproblem mit Mux und Nano 33 ioT -> hard- oder softwarebedingt?

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)

Hey! Nicht so schüchtern! Bin froh um alle Theorien!
Habe mir noch Gedanken wegen sich abbauenden Magnetfeldern bei Motoren und so gemacht. Gemäss der Skizze im Datenblatt müsste der Motorcontroller bereits Freilaufdioden eingebaut haben. In einem ausführenden Text steht allerdings noch folgendes:

Back-Rush Voltage

Depending on motor characteristics, the environment and the ambient conditions back-rush voltage (at the bridge) may fluctuate during brush commutation and PWM switching. Due to the energy in the coil this back-rush voltage can reach high levels if no adequate alternative current path is provided when inductor current path is interrupted. The back-rush voltage overshoot should not be allowed to go beyond the operating voltage range of the IC. This backrush voltage overshoot can be minimized by using a re-circulating bypass capacitor at the VDD and VM pins.

The value of the re-circulating bypass capacitor depends on the motor coil design, motor current, motor voltage and the IC voltage limits. This could be 0.47μF for low current applications to 10uF or more for large current applications.

An Vm habe ich bereits einen 10uF Kondensator, an VDD (3.3.V) allerdings nur den standard Stützkondensator mit 100nF. Sollte ich den möglicherweise auf 0.47uF erhöhen? Am Motorausgangspin habe ich ebenfalls 100nF. Sollte man allenfalls da noch was machen? Noch eine Diode?

Gruss

E: anbei das komplette Datenblatt des Motortreibers
zxbm5210.pdf (1.1 MB)