[Gelöst] Interrupt zappelt nach einer Weile unkontrolliert

Hallo Leute,

ich hab bei einer meiner Platinen das Problem, dass der Signaleingang für das Tachosignal (Hallsensor) plötzlich zappelt.

Der Pin ist über 1n an Masse gefiltert und hängt dann mit einer BAT42 am Hallsensor. Der Pin reagiert dann, wenn der Hallsensor auf Masse schaltet.
https://github.com/TelosNox/noxmatic/blob/master/KiCad/Schematic.pdf
Das ist der Schaltplan, relevant ist D6

Der Pin reagiert als Interrupt auf die fallende Flanke und der Impuls wird gezählt.

Hier der Code, der daraus dann die Geschwindigkeit berechnet.

Im Endeffekt wird nur gezählt und gespeichert, wann der letzte Impuls kam. Dann wird alle 500ms daraus die Geschwindigkeit berechnet und mit dem vorangegangenen Wert geglättet.

Ich hab die Steuerung 2x aufgebaut. Eine funktioniert einwandfrei, die Zweite beginnt nach ca. 10-15min Fahrt zu spinnen (registriert Impulse, wo keine sind). Ein Reset des Controllers (kurz Zündung aus) bring dann keine Besserung. Störsignale vom Motor sind es nicht, denn selbst wenn der Motor dann ausgemacht wird, zeigt er weiter eine Geschwindigkeit an.

Ich vermute, dass ich hier irgendwie einen Schwingkreis habe, der erst nach 10-15min zum Tragen kommt und sich dann nur ganz langsam wieder entlädt.

Was bei beiden Controllern unterschiedlich ist: Beim ersten ist der onboard Spannungsregler verreckt. Also bekommt er über einen externen Spannungsregler seinen Strom.
Der Zweite (spinnende) läuft über den internen Spannungsregler und hat am Vin nochmal einen 10u als Puffer spendiert bekommen (wir hatten vorher komische Effekte, die wohl durch eine wackelnde Sicherung kamen - hier war die Hoffnung ganz kurze Aussetzer kompensieren zu können).

Hab ich hier dann vielleicht den Schwingkreis, weil beide Kondensatoren nah beieinander hängen und der Weg zur Masse am Hallsensor im Vergleich dazu zu lang ist?

Hat der Hallsensor einen Totem Pole Ausgang oder ist irgendwo ein Pullupwiderstand verbaut?
Grüße Uwe

Hängt noch was mit dran, was den Linearregler überlasten könnte? Weil kfz im Betrieb hat 13,8V, u.U. auch mehr, da schafft der Regler nicht viel.

Der Hallsensor ist ab Werk vom Motorrad. Der wird wohl ganz normal angeschlossen sein (Vcc, GND und Signal). Er hat nur 3 Kabel. Ich hänge mich da einfach am Signal mit dran.

Mein Pin ist per internem Pullup auf HIGH und erkennt die fallende Flanke beim Massedurchgang des Hallsensors. Ich denke ich könnte den Kondensator am Pin einfach weglassen, da der Hallsensor ja sowieso nicht prellt. Vielleicht löst das bereits das Problem.

Ja am Controller hängt noch was. Am meisten macht wohl das DOGS102 samt Hintergrundbeleuchtung aus. Der Linearregler wird ordentlich warm aber imho nicht zu heiß (man kann noch locker nen Finger draufhalten, es fühlt sich sehr heiß an aber schmerzt erst nach ner Weile).

Ansonsten hängen noch 3 Mosfet dran, die sollten sich aber nicht wirklich auswirken.

Wenn der Regler nicht mehr nachkommt, dann sollte doch der gesamte Controller rumspinnen. Er funktioniert aber einwandfrei (Display zeigt alles korrekt an). Lediglich der Eingang vom Tachosignal bekommt massig Impulse, die nicht vom Hallsensor kommen.

Die Fahrzeugspannung sollte er eigentlich aushalten. Er ist für max. 19V spezifiziert. Der externe Linearregler im anderen Controller ist effektiv auch der gleiche und wird ebenso heiß.

Dann probier doch einfach mal den externen Linearregler von dem anderen an dem spinnenden.

Der andere Linearregler befindet sich jetzt in ca. 65km Entfernung :wink:

Aber wie käme da die zeitliche Komponente ins Spiel? Wenn der Regler überlastet ist (und sowas überhaupt auslösen kann), dann sollte der doch gleich zu Spinnereien führen und nicht erst nach gut 10min.

Es ist auch alles fest verlötet. Ich will nicht wild rumprobieren, da das immer Lötarbeit und auch thermische Belastung der Teile bedeutet. Ich würde lieber verstehen, was dieses Verhalten auslösen kann. Imho kann es nur irgendwie ein Schwingkreis sein, der sich da aufbaut.

TelosNox:
Der andere Linearregler befindet sich jetzt in ca. 65km Entfernung :wink:

Das ist für einen Kabel zu lang.

TelosNox:
Der Hallsensor ist ab Werk vom Motorrad. Der wird wohl ganz normal angeschlossen sein (Vcc, GND und Signal). Er hat nur 3 Kabel. Ich hänge mich da einfach am Signal mit dran.

Mein Pin ist per internem Pullup auf HIGH und erkennt die fallende Flanke beim Massedurchgang des Hallsensors. Ich denke ich könnte den Kondensator am Pin einfach weglassen, da der Hallsensor ja sowieso nicht prellt. Vielleicht löst das bereits das Problem.

Wird der Sensor mit 5V betrieben?
Ich glaube nicht daß Du einfach dich an ein existierendes System anhängen kannst und dann Pullupwiderstände dranhängen kannst.

Grüße Uwe

Der Sensor wird mit beliebiger Spannung betrieben (variiert ja von Motorrad zu Motorrad). Daher ist ja die Bat42 drin, die diese Spannung komplett wegnimmt. Der Controllerpin sieht lediglich einen "Taster", der auf Masse durchschaltet oder eben sperrt.

Das Prinzip verwenden viele und das hab ich ja auch schon Jahrelang so laufen gehabt.

Ja ein Pullup ist im Endeffekt am Pin, nämlich der interne. Ich hab halt nix extra beschalten. Die Schaltung ist quasi die ganz billige Tasterschaltung (Pin mit Taster gegen Masse und dann als Input mit Internem Pullup schalten).

Schalte einen Pullup von 4,7k bis 10kOhm zwischen Eingang und +5V.

Grüße Uwe

Wenn es erst nach 10 Minuten anfängt zu spinnen, vermute ich ein thermisches Problem. Möglicherweise wird dein Spannungsregler doch zu heiß und verringert dann die Ausgangsspannung. Vielleicht ist auch die Starterbatterie erst nach einigen Minuten voll geladen und die Bordnetzspannung erreicht dann erst ihr Maximum.
Hast du die Möglichkeit, mit dem Arduino selbst die Eingangsspannung zu messen (über einen Spannungsteiler)? Das ist einfacher als mit einem Multimeter in der Hand Motorrad zu fahren :slight_smile:

Ich wüsste nicht, warum eine verringerte Ausgangsspannung am Spannungsregler jetzt zum Zappeln am Interrupt führen soll, aber sich sonst nirgends auswirkt (alles andere geht ja).

Ich hab den Controller jetzt ausgebaut und mal getestet. Anschluss an USB und Ausgabe Speed über Serial: Alles ok.
Anschluss über Netzteil und USB (für Serial Monitor): Alles ok.
Controller zusätzlich über 2. Controller mit Tachosignal befeuern: Alles ok.

Geschwindigkeit über WLAN abfragbar gemacht und nur an Netzteil betrieben: Alles ok.
Controller jetzt wieder mit Tachosignal befeuert: Reagiert irgendwann nicht mehr auf WLAN Anfragen. Ein einfacher Reset hilft nicht.

Gegenprobe mit zusätzlich angeschlossenem USB: Alles ok.

Konsensator am VIN entfernt. Wieder nur über Netzteil betrieben und mit Tachosignal befeuert: Alles ok.

Entweder ich hatte hier viel Zufall drin oder der Kondensator ist wie ich schon vermutet habe irgendwie der Auslöser. Bei nächster Gelegenheit schmeiß ich die Kiste wieder ins Motorrad und teste. Da es hier aktuell ständig am Regnen ist, wird es wohl frühestens Donnerstag.

Kondensator am Vin hat nix gebracht. Kondensator am Pin hab ich ebenfalls mal entfernt: Damit trat das Problem dann deutlich schneller auf. Der Kondensator hat für die lange Verzögerung gesorgt.

Dann hab ich nen externen Linearregler versucht. Leider bleibt auch das Erfolglos.

Ich nehme an, dass der NodeMCU nen Schuss hat (der hat auf Grund von einem Wackelkontakt an Vin zuvor einiges mitmachen dürfen). Seltsam bleibt halt, dass alles andere korrekt funktioniert.

Ich hab noch nen Zweiten da. Mit etwas Glück bekomme ich den alten raus und den neuen wieder reingelötet. Wenn ich Pech hab muss ich halt nochmal komplett neu machen.

Ich werde berichten, wenn ich weiteres weiß.

Der Alte ging nicht raus, keine Chance ohne entsprechende Equipment. Also neu aufgebaut: Funktioniert.

Was mir so im nachhinein noch aufgefallen ist. Ich hab einen LM1086 verbaut. Der würde Eingangsseitig 30V vertragen und kann 1A liefern. Die Schaltung sollte eigentlich nicht mehr als 200mA benötigen. Demnach sollte dieser doch großzügig dimensioniere Linearregler nicht sonderlich heiß werden. Ich konnte mir aber ganz locker die Finger dran verbrennen.

Daher komme ich zu der Vermutung, dass der NodeMCU bzw. meine Schaltung irgendwo zu viel Strom gezogen hat (Kriechströme oder sowas). Ich hab zwar mit dem Multi mal grob durchgemessen und nix gefunden aber das muss ja nix heißen.
Im Normalfall wird der Regler zwar heiß, aber nur so heiß, dass man den Finger längere Zeit drauflegen kann.

Ich erkläre mir das Verhalten dann so, dass der Linearregler je heißer er wurde immer öfter ganz kurz abgeschalten hat. Diese Schalterei wurde dann am Interrupt automatisch als Flanke erkannt und hat zu den ungewollten Triggern geführt. Die Tipps mit dem Regler waren also vermutlich goldrichtig.

Es ist eine irrige Annahme daß ein Bauteil nur weil es xW (oder wie im Beispiel 30V Eingangsspannung und 1A) in Wärme umsetzen kann, keinen Kühlkörper braucht.
Die Temperaturerhöhung errechnet sich aus der Verlustleistung und dem Wärmewiderstand der Anordnung (Bauteil alleine, Bauteil mit einem bestimmten Kühlkörper).

Ein LM1086 ohne Köhlkörper hat einen Wärmewiderstand von 23K/W (von Silizium zu Luft) Das heißt bei 1W Verlustleistung (zB 200mA und 5V Spannungsabfall über den Spannungsstabilisator; das sind 8,3V Eingangsspannung bei 3,3V Ausgangsspannung) erwärmt sich der Lm1086 im inneren (Halbleiter auf dem Siliziumdie) um 23K. Das Gehäuse etwas weniger) Wenn Du 12V einspeist sind das bei 200mA aber fast 1,78W und 40K. Bei 30°C Umgebungstemperatur und offen herumliegender Platine sind das dann 70°C. Ein Gehäuse verschlimmert die Situation beträchtlich weil es innen durch die Verlustleistung und die mangelde Luftzirkulation wärmer ist. Auch daß der LM1086 nicht frei herumsteht, sondern andere Bauteile drumherum sind, hilft nicht sonderlich.

Alle Halbleiter werden bei gleicher Verlustleistung warm. Ein 5W Transistor gleich wie ein 100W. Die Frage ist nur wie warm sie werden dürfen und wie man mit welchem Kühlkörper verhindert daß sie zu warm werden.

Spannungsstabilisatoren brauchsn fast immer Kühlkörper!!
Grüße Uwe

http://praktische-elektronik.dr-k.de/Bauelemente/Be-TO220-Gehaeuse.html
https://www.mikrocontroller.net/articles/Kühlkörper

TelosNox:
Was mir so im nachhinein noch aufgefallen ist. Ich hab einen LM1086 verbaut. Der würde Eingangsseitig 30V vertragen und kann 1A liefern. Die Schaltung sollte eigentlich nicht mehr als 200mA benötigen. Demnach sollte dieser doch großzügig dimensioniere Linearregler nicht sonderlich heiß werden. Ich konnte mir aber ganz locker die Finger dran verbrennen.

Daher komme ich zu der Vermutung, dass der NodeMCU bzw. meine Schaltung irgendwo zu viel Strom gezogen hat (Kriechströme oder sowas). Ich hab zwar mit dem Multi mal grob durchgemessen und nix gefunden aber das muss ja nix heißen.
Im Normalfall wird der Regler zwar heiß, aber nur so heiß, dass man den Finger längere Zeit drauflegen kann.

Entweder du befasst dich mit den elektronischen Grundlagen, oder du suchst dir ein anderes Hobby.
Das was du hier schreibst, ist ein Witz.
Pass auf das dir dein gebastel nicht mal um die Ohren fliegt.

Danke Uwe für die Erläuterung.

Die 200mA waren über den Daumen gepeilt. Der NodeMCU zieht selber wenn er aktiv ist wohl 70mA bei aktiven Wifi (das ist bei mir im Normbetrieb aus). Beim Display dürfte die Beleuchtung noch das Meiste sein. Da hängt 1kOhm davor, also sind das auch nochmal max 3,3mA. Der Dallas hat 1,5mA und die Mosfet dürften per Definition nicht ins Gewicht fallen.
Somit liegt die Stromaufnahme definitiv unter 100mA (ich vermute bei mir im Schnitt sogar unter 50).

Er sollte das schon ungekühlt packen können. Kühlen kann ich den fest verbauten Regler (der jetzt wieder im Einsatz ist) sowieso nicht wirklich.

TelosNox:
Somit liegt die Stromaufnahme definitiv unter 100mA (ich vermute bei mir im Schnitt sogar unter 50).

Hast du kein Messgerät, mit dem du den Stromverbrauch messen kannst ?
Vermuten oder schätzen ist doch keine Lösung.

TelosNox:
Danke Uwe für die Erläuterung.

Die 200mA waren über den Daumen gepeilt. Der NodeMCU zieht selber wenn er aktiv ist wohl 70mA bei aktiven Wifi (das ist bei mir im Normbetrieb aus). Beim Display dürfte die Beleuchtung noch das Meiste sein. Da hängt 1kOhm davor, also sind das auch nochmal max 3,3mA. Der Dallas hat 1,5mA und die Mosfet dürften per Definition nicht ins Gewicht fallen.
Somit liegt die Stromaufnahme definitiv unter 100mA (ich vermute bei mir im Schnitt sogar unter 50).

Er sollte das schon ungekühlt packen können. Kühlen kann ich den fest verbauten Regler (der jetzt wieder im Einsatz ist) sowieso nicht wirklich.

Das sind alles unkontrollierte Annahmen von Dir. Auch bei 70mA und 13,8V (Bleiakku voll) Speisung werden am Spannungsstabilisator immernoch 0,7W Verlustleistung in Wärme ungfewandelt.
Auch hast Du uns kein präzises Schaltbild gegeben das wir kontrollieren könnten.
Wenn Du den auf dem NodeMCU verbauten Spannungsstabilisator meinst sind 0,7W viel zu viel. Ein LM1086 könnte gehen braucht aber unbedingt einen Kühlkörper.

Was noch nicht beachtet wurde ist daß das Bordnetz eines Autos (und gleich eines Motorrades) extreme Stöhrungen aufweist denen eine NodeMCU oder ein Spannungsstabilisator nicht gewachsen sind. Da brauchst Du einen Spannungswandler der explizit für Anwendungen im Auto konstruiert wurde.

Grüße Uwe

Klar hab ich ein Messgerät, allerdings kann ich damit nur primärseitig messen. Interessant ist doch aber, was hinter dem Spannungsregler gezogen wird und da komm ich nicht dran (der sitzt ja fest auf dem NodeMCU darauf).

Schaltplan ist im 1. Post verlinkt (das ganze Projekt ist auf Github). Transientenschutz ist verbaut. Mit einem Arduino Uno und mit einem Nano Clone lief die gleichartige Schaltung auch schon mehrere Jahre problemlos.

Auch andere Projekte wie Rehoiler oder McCoi verwenden einfach nur einen simplen Linearregler und das wars. Auch die laufen schon lange in den Motorrädern.

Das Modul ist nicht kritisch. Wenn es ausfällt, dann fällt es halt aus. Platz hab ich leider sehr wenig, daher will ich Spannungsregler mit Kühlkörper vermeiden, wenn das geht.

TelosNox:
Das Modul ist nicht kritisch. Wenn es ausfällt, dann fällt es halt aus. Platz hab ich leider sehr wenig, daher will ich Spannungsregler mit Kühlkörper vermeiden, wenn das geht.

Und wie du siehst....es geht nicht.
Aber egal...dein Problem. Also weiter so.