Forum: Mikrocontroller und Digitale Elektronik Laufzeitproblem mit Mux und Arduino Nano 33 ioT


von Hitsuji (Gast)



Lesenswert?

Hallo zusammen

Ich habe eine Platine entworfen, die einen Arduino Nano 33 ioT 
beherbergt (da bei diesem alle benötigten Teile schon sauber montiert 
vorhanden sind), und die 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.
Allerdings macht diese Platine Probleme, die meiner Vermutung nach 
hardwarebedingt sind.

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 (ein/aus) oder analogWrite (PWM Ansteuerung) ein und 
ausgeschaltet werden.

was nicht funktioniert: Versuche ich per PWM mit halbem Dutycyle die 
Lüfter langsam drehen zu lassen, 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 der Arduinoplatine 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 
von Strom und Computer, funktioniert danach wieder einige Zeit lang 
alles. Evtl. funktioniert ausserdem delayMicroseconds(xxx) nach 
Eintreten der Fehlfunktion nicht mehr (funktioniert mit einem 
hardware-Timer), 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 
Hauptverdacht fällt auf 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. Ebenfalls unter Verdacht 
stehen die Kondensatoren an VDD (3.3V) des Motortreibers, die ich mit 
100nF bemessen habe und gemäss dem angehängten Datenblatt des 
Motortreibers wohl auch auf 0.47uF erhöht werden könnten.

Link Datenblatt Motortreiber: 
https://www.diodes.com/assets/Datasheets/ZXBM5210.pdf

Link Datenblatt Multiplexer: 
https://www.diodes.com/assets/Datasheets/ZXBM5210.pdf

Ich lasse euch 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.
btw.: Leiterbahnen, die scheinbar ins Nichts führen, sind mit GND 
verbunden (Polygon, dass die Restfläche auffüllt).

Vielen Dank im Voraus und Gruss

Hitsuji

von Peter D. (peda)


Lesenswert?

Schaltpläne besser als PDF exportieren, dann kann man beliebig zoomen 
und die Schrift ist viel besser lesbar.

Ich sehe da keinerlei Versorgungsanschlüsse, Spannungsregler, 
Abblockung, Schutzbeschaltung.

von Joachim B. (jar)


Lesenswert?

Peter D. schrieb:
> Ich sehe da keinerlei Abblockung

sehr lange Wege, der TO verlässt sich zu sehr auf die auf dem nano 
verbauten Teile.

Auch hier muss man mal wieder betonen:
An jeden VCC nach GND ob IC oder Modul gehören nah Abblockkondensatoren, 
das ist nichts wo man sparen müsste!

https://de.wikipedia.org/wiki/Blockkondensator
https://rn-wissen.de/wiki/index.php/Abblockkondensator
Beitrag "Im Detail betrachtet: Abblockkondensatoren"
https://www.elektronik-kompendium.de/news/thema/abblock-kondensator/

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hitsuji schrieb:
> Link Datenblatt Multiplexer:
> https://www.diodes.com/assets/Datasheets/ZXBM5210.pdf
Das ist der falsche Link.
Du könntest auch einfach statt "Value" die Bauteilbezeichung in den 
Schaltplan schreiben, dann kann man selber suchen.

> sind mit GND verbunden (Polygon, dass die Restfläche auffüllt).
Du zerschneidest dieses Polygon aber beliebig mit Leiterbahnen. Das ist 
letztlich nicht 1 Masse, sondern das sind viele kleine Massen, die 
irgendwie zusammengeschaltet sind.

So ein Mux ist übrigens was zutiefst Analoges, da kann man mit dem 
Multimeter messen, ob tatsächlich ständig 0 herauskommt...

: Bearbeitet durch Moderator
von Hitsuji (Gast)


Angehängte Dateien:

Lesenswert?

Hey! Vielen Dank für die Antworten!

PDF hänge ich euch an. Datenblatt hab ich zweimal das selbe erwischt, 
sorry. Hier das richtige für den Multiplexer: 
https://www.ti.com/lit/ds/symlink/cd74hc4067.pdf?HQS=dis-mous-null-mousermode-dsf-pf-null-wwe&ts=1630488998692

Die Versorgungsleitung ist die dicke, mit VDD beschriftete Leitung. Oben 
rechts führt sie zu einem Schraubblock, wo ein 12V 1A Netzteil dran 
hängt (https://www.mouser.ch/datasheet/2/670/smi12-1878671.pdf). Diese 
versorgt die Motortreiber mit 12V und genügend Stromstärke und die 
Arduinoplatine am Vin Pin. Die Arduino Platine hat eine 
Wandlungsschaltung integriert, welche ich für die Versorgung der 
restlichen Bauteile nutze.

Auf der 3.3V Seite habe ich mich tatsächlich voll und ganz auf die 
Arduinoplatine verlassen, die sollte aus bis zu 21V saubere 3.3V machen. 
Dachte, besser als die kann ich das eh nicht ;)

Zu den Abblockkondensatoren: Danke für die Links! Vor der Arduinoplatine 
habe keine Kondensatoren platziert, könnte ich aber noch nachrüsten, 
wenn ihr mir das empfehlt. Bei den Strommess-ICs (unten links im 
Schaltplan) hab ich sie total vergessen, mal kucken, was ich da noch 
machen kann, aber im Moment sind die sowieso noch abgeschaltet und 
sollten nicht für das Problem verantwortlich sein. Beim Multiplexer und 
den beiden Motorzündungscontrollern habe ich jeweils 100nF nah am IC 
platziert. Sollte ich da was ändern? Sollte ich allenfalls direkt nach 
dem Netzteil, also beim Schraubblock auch noch etwas hinzufügen? Oder 
vor den Steckverbindern, wo die Fans angeschlossen werden?

Grüsse und vielen Dank für die Hilfe!

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
Noch kein Account? Hier anmelden.