Hier wie versprochen der nächste große Schritt.
Der Lohn der Mühe alles zu veröffentlichen ist, das hin und wieder Mitmenschen angeregt werden mit zu machen und
wenn mehrere an einem Projekt arbeiten, ist das Ergebnis in dem meisten Fällen besser als wenn ein Einzelner dran arbeitet.
Reiner Tasch aus der Vespa Szene ist auf die Zündung aufmerksam geworden und begann mit dem Nachbau als Digitale AC CDI.
Schnell hat er fortschritte gemacht und ist an dem Punkt angekommen an dem der bisherige Code eigentlich keine individuellen 2 Takt Kurven zulässt.
Es gibt 2 essentielle Probleme:
1. Problem: es wird für die Zündtabelle etwa alle 1 Millisekunde (der Abstand ist einstellbar) eine Spalte in der Zündtabelle generiert, das bietet eine gute Auflösung im unteren Drehzahlbereich
und eine miese im oberen. Für eine 4 Takt Kurve wo nach 3.000 bis 4.000 alles erledigt ist, reicht das , für einen 2 Takter ist das suboptimal.
Der Code interpoliert dann feinfühlig zwischen den spalten, deshalb ist der Zündwinkel sehr stabil. Die Tabellengröße ist durch den Arbeitsspeicher des Prozessors begrenzt
2. Problem: Der Slopefaktor, er bestimmt den Grad der Interpolation wird bei der Berechnung der Tabelle mit errechnet.
er darf weder null noch negativ sein, ansonsten ist die Tabelle ab da unbrauchbar das ist der unsichtbare Grund wieso nicht alle wünsche in der Tabelle berücksichtigt werden.
Reiner hat im nächsten Schritt mit Prozessoren mit mehr Arbeitsspeicher experimentiert, so konnten engere Spalten mit kürzeren Intervallen realisiert werden, nur hat der Slopefaktor immer noch einen Strich durch die Rechnung gemacht.
Dann der Radikale Durchgriff:
die Google Gemini Ki wurde gefragt, ob sie sich den Code mal ansieht und auf einen ESP32 adaptiert, der ESP32 Ist schnell, verhältnismäßig billig, hat viel Arbeitsspeicher und coole Features wie WLAN und Webserver. (leider auch Nachteile was Spannungsversorgung und Stabilität gegenüber elektromagnetische Störungen angeht).
Was die Ki da ausgespuckt hat, ist äußerst interessant.
Die Erstellung einer Tabelle wurde beibehalten, auch das alle Zündungs- relevanten Prozesse außerhalb der Loop Schleife (und jetzt auf einem anderen Prozessorkern) durchgeführt werden.
es sind jetzt 100 µS zwischen jeder Tabellenspalte und somit auch die Möglichkeit eines individuellen Stützpunktes, das entsprechen ca. 250 rpm bei 12.000 Umdrehungen.
Der Slopefaktor ist verschwunden, es können jetzt zwischen den 100µS Tabellenspalten große Sprünge im Zündwinkel überbrückt werden.
Des weiteren bietet der Geimini Code eine Weboberfläche zum verändern der Zündkurve am Handy/Tablet sowie Livedaten wie Spannung oder Drehzahl.
Die Drehzahlpunkte und Winkel werden im Code festgelegt und die Winkel können in der Weboberfläche verändert werden.
Ich habe den Code um einen Signalfilter und der 2. Pickupflanke für Kickstart und Funke ab der ersten Umdrehung ergänzt, ich hatte auf meinem Zündungsprüfstand vereinzelt Geisterbilder, die nach Anpassung des Codes verschwunden waren.
Auch meinen Quickshifter musste ich mir wieder gerade biegen.
Reiner hat bereits viele Testkilometer in seiner Vespa und seiner Lambretta mit der Zündung abgespult.
Ich habe ein paar unauffällige Proberunden gedreht und nehme sie jetzt in meiner RM in betrieb.
Die Performance auf dem Zündngsprüfstand kann sich sehen lassen. Alle Wünsche werden auf das Grad genau umgesetzt, volle Interpolation zwischen den Punkten.
10µS timing Genauigkeit, das ist um 5 µS schlechter als die 8 Bit Arduino CDi die nur um 5µS driftet, aber noch akzeptabel, auf dem Zündungsprüfstand äußert sich das in gelegentlichen
Abweichungen von etwas mehr als einem halben Grad (0,72°). Des weiteren is an zu merken das die Drifts nur sporadisch bei einer einzelnen Umdrehung und ausschließlich nur in Richtung Spätzündung ausfallen .
Hier gibt es noch Potential, aktuell benutzt der Code digitalWrite statt Registermanipulation (die bei der 8 Bit cdi mit hilfe der digitalWriteFast durchgeführt wird) jedoch soll der Gewinn
am ESP32 im Nanosekunden Bereich liegen, daher habe ich es noch nicht probiert.
Wie gewohnt sind in der zuendkurve.h alle Parameter an eine Aprilia RS125 mit Rotax 122 angepasst. Da immer zwischen 2 Punkten interpoliert wird, lässt sich eine prima 2 Takt Kurve erstellen.
Da das mit Ki generierten Codes so eine Sache ist, habe ich zu Reiners Code auch die von der Ki verwendeten Bibliotheken mit angefügt, die einfach im Ordner ,wo auch alle Arduino sketche hinterlegt sind, im Ordner Libraries eingefüg werden.
zum Beispiel C:\Users\wer auch immer\OneDrive\Documents\Arduino\libraries.
Als Auduino IDE verwende ich Version 2.3.8, habe entsprechend den Boardmanager für die ESP32 Boards installiert und das "ESP32 DEV Module" ausgewählt.
Des weiteren die Bibliotheken <WiFi.h>, <LittleFS.h> und <ArduinoJson.h> suchen und installieren.
Bei der mitgelieferten Asyncwebserver kann es passieren, das Arduino die updaten will, nach dem Update kann es sein, das sich der Code nicht mehr kompilieren lässt, daher unterbindet besser den Updatewunsch von Arduino.
Das Wlan ist permanent aus und wird über einen Schalter an PIN 16 aktiviert, dann leuchtet eine blaue LED auf dem ESP32
Das Wlan heißt "Tasch performance CDI", das Passwort lautet "12345678"
Die IP Adresse 192.168.4.1 im Browser öffnen und fertig.
Die Loop Schleife läuft auf einem anderen Kern und ist mit Delay(); ausgebremst. Hier ist noch genug Platz für Spielereien wie Auslasssteuerung, Schaltblitz, Powerjet, Display ect...
Hardware kommt im nächsten Post