von Kampfkuchen » Mo 13. Jul 2020, 23:33
MarS und jemand aus dem BMW Segment meldeten mir eine Fehlfunktion. So fing der Blinker manchmal an ununterbrochen in eine Richtung zu blinken. Das ist super ärgerlich, da sich die Kiste selbsthält. Somit bringt Zündung aus nichts.
Zum Glück habe ich das Problem reproduzieren und lösen können. Die Sache ist nun vom Tisch. Desweiteren gibt es dann absofort eine neue Software-Version (nicht wegen des Fehlers, bloß allgemeine Optimierung und um eine Funktion erweitert - dazu am Ende mehr).
Technisches Blabla ab hier:
Aufgefallen war mir ein Zusammenhang mit dem Pufferkondensator. Also dem Kondensator, der die Betriebsspannung des Mikrocontrollers für die Zeit vom Loslassen des Hebels bis zum Überbrücken aufrechterhält. Der ursprüngliche Controller brauchte 64ms zum starten und ich musste deshalb den Kondensator vergrößern. Von 100nF auf 220nF.
Als ich dann den Tiny10 gegen den Tiny13A getauscht habe, habe ich den Kondensator so gelassen. War auch ansich kein Problem, aber nicht notwendig, da der Controller in ~2µS startet.
Ich habe zum Test mal den Kondensator um Faktor 200 vergrößert und festgestellt, dass das Problem quasi nur noch auftritt und nicht mehr eventuell. Mit 100nF trat es gar nicht mehr auf.
Was ist also die Ursache?
Das Zauberwort ist Brownout... Wenn die Spannungsversorgung des Mikrocontrollers einbricht fällt nicht alles mit einmal aus, sondern Komponente für Komponente... CPU, RAM, Ausgangspuffer, Analogwandler u.s.w.
Jetzt ist die Gefahr, dass die CPU zuerst ausfällt und der Ausgangspuffer dann ohne Steuerung ist. Kann also passieren, dass der irgendwas macht.
Und warum tritt das mit 100nF nicht auf?
Die Zeit in der er sich in den kritischen Zonen befindet ist deutlich kürzer. Je größer der Kondensator, desto langsamer die Entladung, desto länger die Zeit in der kritischen Zone.
Warum das ganze bei BMW und dem 626 GD auftritt, aber nicht beim GE? Kann ich nur vermuten, versuche ich aber noch zu validieren...
Vermutung: Leckströme über den Eingang des Blinkerrelais, die die Entladung des Kondensators verlangsamen.
Lösung?
Die moderneren AVRs haben eine Brownout-Detection. Das heißt unter einer bestimmten Spannung hält eine Sicherheitsschaltung den Reset, so dass alle Komponenten in einen sicheren Zustand gehen. Aber die muss man für jeden manuell aktivieren. Ich hatte das nicht auf dem Schirm, also war es nicht an.
Ob das Problem nun tatsächlich noch mal auftritt werden mir dann sicherlich der BMW-Fahrer oder MarS sagen können, ich kann es aber nicht mehr reproduzieren. Nicht mal mit dem Kondensator der Größe Faktor 200.
Nun zur Software... Was ändert sich?
Neben Optimierungen möchte ich den Blinker für Relais ausrüsten, die kein Feedback-Signal haben.
Da mein Modul darauf beruht die tatsächlichen Blinkvorgänge zu messen und dann nach exakt der eingestellten Anzahl abzuschalten läuft es ohne Feedback nicht. Man kann es nicht programmieren und wenn man es geschafft hat, schaltet er nach 1 Sekunde ohne Feedback in den Failsafe und schaltet ab.
Ich möchte nun also, dass beim Einprogrammieren der Blinkzyklen parallel auch die Zeit gemessen wird und sollte kein Feedback vorhanden sein, soll er auf die eingestellte Zeit zurückgreifen. So wäre dann auch beim Ausfall des Feedbacks zumindest ausreichend genau die Dauer des Komfortblinkens gegeben.
Man merkt allerdings dann nicht mehr, dass etwas nicht stimmt, außer die Zeit passt nicht exakt und er blinkt noch mal an oder zu kurz.
Außerdem bin ich dabei ein Testgerät für die Module zu bauen, somit wird dann jedes Modul automatisiert auf Herz und Nieren geprüft. Durch den Diagnose- und Programmierport kann ich nahezu jedes Bauteil überprüfen.

