CDI Programmierbar im Eigenbau

  • Ultrageil

    Also ein bisschen juckt es mich ja schon so eine CDI in meine cr500 zu stecken :upside_down_face: Kann man die Platinen / Bom irgendwo beziehen?

  • Ja, ich werde am Wochenende mal noch um PCB und Teileliste ergänzen. Problem ist halt der Code der nur begrenzt 2 Takt Zündkurven zulässt.


    Aktuell sind es nur die beiden Kurven Nerdspark und Nerdspark SP die sich nur im gesammten über den Statischen Auslösepunkt in der Software veränden lässt (Pickup Position in Grad vor OT)


    Bei ungültigen Kurven bleibt der Zündwinkel beim Letzten gültigen wert Hängen und beispielsweise 23° im Reso beim 2 Takter ist nicht so doll.


    Es Kommt aber bald das nächste große Update. Da wird auf den ESP32 gewechselt.


    Ich mag das Nerd Ding zwar überhaupt nicht im Moped, weil das Teil mega sensibel ist was Elektromagnetische Störungen angeht, aber was der ESP32 bis jetzt abgeliefert hat ist interessant. (Einstellung per Web Oberfläche, Stützpunkte werden auch interpoliert, Alle 100 ųs ein Stützpunkt, Winkel ist brauchbar stabil)

    Nur was knattert und stinkt, mir Freude bringt :biggrin:

  • Werd mir den Code mal anschaun, ein 8bit Prozessor mit 16 MHz wie der Atmel 328p kann schon interpolieren. Aber mit eine Zündtabelle mit enger 250upm Abstufung macht eine Interpolation kaum mehr Sinn.


    Lg

  • So,


    nochmal zur 8 Bit CDI, wie versprochen Leiterplatte und Teileliste:


    Leiterplatte: https://aisler.net/p/QODWUDSO


    Teileliste (gerade erstellt, bei entdeckten Fehlern bitte melden):



    Trafo: 10 Stück EE13 12V 700MA Hochfrequenztransformator - AliExpress

    PCB Sumitomo 6 pin Stecker: 1 Set 6 Pin 6189-0029 Super C6S-194G Aprillia CDI Gaspedal Stecker Wasserdichte Buchse Für Infiniti Toyota - AliExpress 13


    Wer mal probieren will einfach melden ich hab noch Teile da und kann eine Platine mit Trafo und Chip schicken, teil und notfalls auch voll bestückt.

    Nur was knattert und stinkt, mir Freude bringt :biggrin:

  • Also der Code ist noch verbesserungswürdig. Lass den Timer durchlaufen, und benutz den Hardware-Interrupt fürn Zeitstempel, dann kannst auch mit nur wenigen Zündpunkten direkt in der ISR interpolieren und hast den Loop frei für Sonstiges. Irgenwo hab ich mal einen Drehzahlmesser Sketch gesehen der mit freilaufendem Timer läuft, da brauchst dann nur die Zündwinkeltabelle und Feinheiten fürs Starten einbauen und hast noch massig Speicher frei für Tabellen oder Programmierinterface. Lg ✌️

  • Hier wie versprochen der nächste große Schritt.


    Externer Inhalt youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.



    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


    Bodo_CDI_13_Points_ESP32_v1_3.zip

  • Hier der Schaltplan:







    nicht im Schaltplan aufgeführt sind folgende "Entstörmaßnahmen" direkt am ESP32

    Das Ding reagiert sehr sensibel auf den DC DC Wandler.

    Ohne die Kondensatoren gab es Probleme beim ansteuern mit dem Signalgenerator.

    Am Pickup gab es auch ohne die Kondensatoren keine Probleme


    Pin 15 und Pin 27 benötigen einen 100nf Kondensator zum Metallgehäuse


    an ViN zu GND einen 22µF Kondensator (das GND Beinchen muss nicht zwingend zum Metallgehäuse)




    hab auch eine Platine erstellt:



    und eine unvollständige Teileliste (es fehlt der 0,05 Ohm widerstand, ein Kühlkörper für den 100V Transistor und der Asia EE13 Transformator aus dem vorherigen Beitrag und der Sumitomo 6 Pin Stecker).


    Nur was knattert und stinkt, mir Freude bringt :biggrin:

    Einmal editiert, zuletzt von el bodo es loco ()

  • Richtig gut! Respekt vor der Arbeit, da vergeht ja auch einiges an Zeit ins Land.

    Darf ich Fragen, wie Du dir die Drifts erklärst ? Trigger als Referenzgeber wird wahrscheinlich der Zündimpulsgeber sein. Liegt der Drift (und dann nur sporadisch) wirklich am Microcontroller? Wie kann der von Zeit zu Zeit sich so verrechnen?

    0,72 ° sollten wahrhaftig nicht spürbarsein, immerhin ein schon positiv Ergebnis :)

    - Immer schön in Schwung bleiben -

  • Richtig gut! Respekt vor der Arbeit, da vergeht ja auch einiges an Zeit ins Land.

    Darf ich Fragen, wie Du dir die Drifts erklärst ? Trigger als Referenzgeber wird wahrscheinlich der Zündimpulsgeber sein. Liegt der Drift (und dann nur sporadisch) wirklich am Microcontroller? Wie kann der von Zeit zu Zeit sich so verrechnen?

    0,72 ° sollten wahrhaftig nicht spürbarsein, immerhin ein schon positiv Ergebnis :)


    Ich vermute es liegt daran das Arduino statt Visual Studio mit PlatformIO zum Einsatz kommt.

    Aber es ist halt eine gewohnte Umgebung mit gewohnten Befehlen.


    Die interrupt Geschichte ist beim sonnst recht flotten ESP32 so eine Zeitaufwändige Sache, da werden alle Pins angefragt und da gehen schon mal 5µs und mehr Zeit ins Land bis ein Interrupt erkannt und die Interrupt Service routine gestartet wurde.



    Wenn´s immer die gleiche zeit wäre, wär´s ja kein Problem aber es schwankt halt ein wenig.

    Man könnte mit anderer Herangehensweise quasi ein Code voll auf Hardwareebene ohne Bibliotheken und ohne den Arduino Standard Befehlen eventuell noch ein bisschen was raus holen und ggf. aus 5µs drücken.


    Ich habe mir mal die Arbeit gemacht und diverse Zündschaltgeräte verglichen:


    Zündschaltgerät / Zündimpuls Fluktuation

    Speeduino Mega2560: 100µs (7,2° @ 12.000 rpm)

    Loco Electro ESP32: 10µs (0,72° @ 12.000 rpm)

    Loco Electro Arduino328P 5µs (0,36° @12.000 rpm)

    Möhrle CDI Shop: 5µs (0,36° @12.000 rpm)

    STM32 CDI: 2µs (0,15° @12.000 rpm)

    NipponDenso QCA91 (8Bit) 2µs (0,15° @12.000 rpm)

    Nur was knattert und stinkt, mir Freude bringt :biggrin:

  • Klingt gut. Nur ich verstehe hier echt nichts mehr.

    Danke für das Aufzeigen meiner Grenzen bezüglich Elektronik. :clinking_beer_mugs: