Falls sich jemand fragt, warum ich das so detailliert durchkaue, kommt heute die Auflösung. Der Paralleltwin ist ja (wie in den beiden vorherigen Beiträgen gezeigt) ein recht gutmütiger Zeitgenosse. Die einzelnen Ereignisse während einer Zündfolge (Signal des Hallsensors, Laden der Zündspule, Zünden) laufen da entweder streng sequentiell (Signalaufnahme an der Nockenwelle) oder parallel ab (bei Signalaufnahme an der Kurbelwelle). Dies entsprach auch dem bisherigen Konzept in meinem Programm.
Beim Gegenläufer-Twin (mit 180° Zündversatz) wird es nun etwas komplizierter. Hier der Ablauf bei einer Signalaufnahme an der NW.
Zündfolge-180-Grad-Twin-NW.png
Wenn der Hallsensor (Signalaufnahme an der NW) am UT feuert, läuft noch alles schön der Reihe nach ab. Allerdings muss dann ähnlich wie beim Paralleltwin bei höheren Drehzahlen die Ladezeit reduziert werden, damit der gesamte Zündvorgang innerhalb eines Taktes ablaufen kann (Beispiel bei 8571 UPM, Ladezeit reduziert auf 2700 µs statt 3500 µs, gestrichelte rote Linien zeigen wieder die Position des UT und OT).
180_8571_nw_bt2.jpg
Wenn nun die Steuerscheibe wieder so positioniert wird, dass das Signal vom Hallsensor schon in der Mitte des 1. Taktes kommt (um eine längere Ladezeit zu erreichen), treten aber Probleme auf, die mit dem bisherigen Programmkonzept nicht gelöst werden konnten. Die Ereignisse in beiden Zylindern überschneiden sich nämlich nun, wobei die Art der Überschneidung auch noch von der Drehzahl abhängt (unterer Teil der ersten Grafik). Bei niedrigen Drehzahlen feuert der Hallsensor für den zweiten Zylinder bereits,´bevor die erste Spule geladen wird, bei mittleren Drehzahlen feuert dagegen der Hallsonsor für den zweiten Zylinder innerhalb der Ladezeit für den ersten Zylinder und bei hohen Drehzahlen zündet der erste Zylinder während der Ladezeit des zweiten. Es gab nun drei optionen, dies verarbeiten zu können:
1) Verwendung eines eigenen Timers für jeden Zylinder
Das wäre die einfachste Lösung gewesen, allerdings verfügt der ATmega328 Chip nur über einen für diese Zwecke geeigneten Timer. Diese Option fiel also aus.
2) Verwendung von zwei Arduinos
Bei dieser Option hätte jeder Zylinder sein eigenes Steuermodul (=Arduino) bekommen. Von den Kosten wäre das nicht groß ins Gewicht gefallen, einen Arduino Mini Pro gibt es ja schon für ca. 4€. Allerdings hätte dazu das Platinenlayout geändert werden müssen. Neue Platinen wollte ich aber nicht fertigen lassen (außerdem wäre die Platine dann auch größer geworden).
3) Programmkonzept überarbeiten
Da 1) und 2) nicht in Frage kamen, blieb nur diese Option. Dazu musste ein Teil des Programmcodes komplett überarbeitet werden (hat sich aber gelohnt, wie später noch gezeigt wird). Kernpunkt war ein "Ereignis-Verwalter", der (je nach Motorentyp und Drehzahl) die einzelnen Ereignisse (Hallsignal, Laden der Spule, Zünden) und deren Dauer berechnet und in der korrekten Reihenfolge spechert und abarbeitet.
Hier das Ergebnis für den Gegenläufer-Twin bei 8571 UPM (Signalaufnahme an der NW, Hallsensor feuert in der Mitte des 1. Taktes)
180_8571_nw_mt1.jpg
Die Ladezeit der Spulen braucht nun nicht reduziert zu werden (könnte sogar auf ca. 5000 µs erhöht werden). Dazu eine Anmerkung: In der Grafik sieht man keine "Zündung" der ersten Spule (die dazu gehörende abfallende Flanke der roten Kurve liegt bei ca. 7ms), da sie vom kurz davor beginnenden Ladevorgang der zweiten Spule überdeckt wird. Um das getrennt darzustellen, wäre ein 3-Kanal-Oszilloskop notwendig gewesen.