Pimp my Desmo!

Als ich im Januar 2021 meinen Rückblick auf das Jahr 2020 für diesen Blog veröffentlichte, war mein Artikel «Desmo Inside» gerade erst seit zwei Wochen online.

Neu: mit hochgenau berechneten Nockenkonturen!

Im oben genannten Beitrag präsentiere ich eine Interaktive 3D Animation des desmodromischen Ventiltriebs eines Ducati Testastretta Evoluzione Vierventil-Zylinderkopfs. Doch bereits nach diesen 14 Tagen ahnte ich, daß «Desmo Inside» eine glänzende Zukunft auf diesem Blog haben würde. Ich hatte nach 14 Tagen sogar schon den Vorstoß auf einen der vorderen Plätze in der Lesergunst innerhalb eines Jahres für möglich gehalten. Immerhin war dann Ende 2021 bereits Platz 4 errreicht. Nach inzwischen zwei Jahren hat «Desmo Inside» mit bisher rund 4’000 Seitenaufrufen einen soliden zweiten Platz auf dem Treppchen erobert.

Ich hatte in der Folge anfangs 2021 noch zwei weitere Beiträge zum Thema «Desmo» verfasst, nämlich

die aber bisher mit rund 570 bzw. 840 Seitenaufrufen ein meiner Meinung nach unverdientes Mauerblümchen-Dasein fristen. Denen würde ich gerne mal etwas auf die Sprünge helfen.

In «Desmo – reverse engineered» beschreibe ich, wie ich die in Cinema4D R12 modellierten Einzelteile virtuell zusammensetze und die Nockenwelle des virtuellen Zylinderkopfs in 5°-Schritten durchdrehe, um die Schwingwinkel von Schlepp- und Kipphebel sowie den jeweils zugehörigen Ventilhub zu ermitteln. Dies alles auf der Basis der in «Desmo Inside» beschriebenen Bauteilvermessung.

In «Desmo – DIY» beschreibe ich schliesslich, wie sich aus einer vorgegebenen Ventilerhebungskurve und Bauteilgeometrie mittels Inverser Kinematik die optimale Lage von Schlepp- bzw. Kipphebelachsen sowie ein dazu erforderliches Paar konjugierter Kurvenscheiben (Nockenkonturen) mit beliebiger Genauigkeit berechnen lässt. Die animierten Nockenformen reagieren hier in Echtzeit auf interaktiv veränderbare Geometrieparameter!

Screenshot aus meinem Interaktiven «Desmo-Lab», in Desmo-DIY verlinkt


Ich selbst bin vermutlich mein kritischster Fan. Ungezählte Male habe ich jedes Detail der bisherigen Animation in Nahaufnahme und in Zeitlupe aus den verschiedensten Blickwinkeln studiert. Bei allem «Wow-Effekt»: das Wissen um diverse offensichtliche Unzulänglichkeiten der bisherigen 3D Animation hat mich in den zwei Jahren seit Veröffentlichung insgeheim immer geärgert und nicht losgelassen. Dabei hatte ich mit den beiden oben genannten Folgebeiträgen das mathematische und methodische Rüstzeug längst beisammen, die Animation entscheidend zu perfektionieren.

Ich hatte allerdings bis vor Kurzem den Aufwand gescheut, wegen einer möglicherweise nur wenig sichtbaren Verbesserung die Animation auseinanderzurupfen und neu – hoffentlich besser – wieder zusammenzusetzen. Nun, als frisch Pensionierter 😎 und dank Schlechtwetter und langer Winterabende mit großzügiger Freizeit ausgestattet, habe ich mich endlich dazu durchgerungen, diese Perfektionierung anzugehen. Darum soll es nach dieser umfänglichen Einleitung im vorliegenden Beitrag eigentlich gehen.


Bevor man etwas perfektionieren kann, muss man einen schonungslosen Blick auf bestehende Mängel werfen. Die mehrfach erwähnten «Unzulänglichkeiten», welche ich hier im Detail beschreibe, speisen sich aus zwei Ursachen:

  1. Unvorteilhafte Modellierung der Nockenwellen in Cinema4D
  2. Ungenau (teilweise Augenmaß!) ermittelte Geometrie – hier Nockenformen und Positionen von Schlepp- bzw. Kipphebelwellen

Mängel in der Modellierung der Nockenwellen

Die Verwendung scheinbar spiegelnder Materialien wirkt wie eine Lupe, die selbst subtilste Störungen in der Kontinuität von Oberflächen gnadenlos offenbart. Zur Erinnerung: der Spiegeleffekt wird (innerhalb von Three.js) mittels Environment Mapping realisiert. Ich verwende für die «Desmo Inside» Animation ein selbst erstelltes Kugelpanorama, welches ich vor einigen Jahren einmal anlässlich einer Fahrt über den Klausenpass auf der Urner Seite erstellt hatte:

Kugelpanorama – zum Offline-Betrachten eignet sich der kostenlose FSPViewer

Zur Unterstützung beim visuellen Debugging des Spiegeleffekts hatte ich noch senkrechte rote Linien eingefügt, die sich im Kugelpanorama-Viewer als Meridiane im 90° Intervall darstellen.

Mängel in der Modellierung der Nockenwellen äussern sich einerseits an den planen(!) Stirnflächen der Nocken. Links die bisherige, mängelbehaftete Version, rechts neu die ge-pimp-te Version:

Andererseits treten Störungen auch auf dem Nockenumfang auf, und zwar besonders auffallend in Bereichen mit großem Krümmungsradius, also z.B. dem flachen Teil des Schliessnockens. Das sieht dann so aus:

Nicht zuletzt kommt es zu Fehlern bei der Visualisierung der Bauteilkontaktpunkte. In der bisher verwendeten Vorwärtskinematik hatte ich den Schwingwinkel des Öffner-Schlepphebels mit der Methode des «scharfen Hinsehens» in Cinema4D anhand der Punktberührung zwischen Öffnernocken und nockenseitiger Kontaktbahn des Öffner-Schlepphebels abgelesen.

Den zugehörigen Ventilhub hatte ich dann anhand der Punktberührung zwischen Öffner-Shim und ventilseitiger Kontaktbahn des Öffner-Schlepphebels abgelesen.

Schliesslich hatte ich den Schwingwinkel des Schliesser-Kipphebels anhand der Punktberührung zwischen Schliessnocken und nockenseitiger Kontaktbahn des Schliesserer-Kipphebels abgelesen. Siehe auch hier.

Bezüglich des vierten Kontaktpunkts zwischen Schliesser-Kipphebel und Schliesser-Shim hatte ich von Anfang an die nur dünne Hoffnung, daß der quasi «von alleine» passen würde. Leider stellten sich in der bisherigen Animation hier als Saldo aller Ungenauigkeiten sichtbare Kontaktfehler ein, welche je nach Winkelstellung der Nockenwelle von sichtbarem Spiel bis hin zu real unmöglicher Bauteildurchdringung reichen:

Soviel zu den bestehenden Unvollkommenheiten. Was sind die Gründe?

Zunächst zu den Fehlern in den Planflächen der Nocken. Dazu muss ich beschreiben, wie ich die Nockenwellen bisher modelliert hatte, nämlich in enger Anlehnung an die von mir vermuteten Schritte bei der Fertigung der realen Nockenwellen. Ausgehend von einem perfekt rotationssymmetrischen Rohling ziehe ich in einer Bool’schen Operation die nicht benötigten Volumenanteile ab, so dass der Nocken «Kontur» erhält:

In einem Folgeschritt werden noch die Bohrungen eingebracht, ebenfalls durch Bool’sche Operation:

Bemerkenswert ist hier, daß durch mehrfach aufeinander folgende Bool’sche Operationen sich die Anzahl der Einzelflächen auf den Stirnseiten der Nocken signifikant erhöht, und diese zusätzlichen Flächen vielfach extrem langestreckt und schlank ausfallen.

Aufgrund der endlichen Präzision, mit der Fliesskommazahlen digital gespeichert werden, resultiert für sehr schlanke Flächen ein Präzisionsverlust und eine nicht vorhersehbare Varianz bei der (Three.js-internen) Berechnung der Flächennormalen. Da die Berechnung der Spiegelung das Reflexionsgesetz «Einfallswinkel [zur Flächennormalen] = Ausfallswinkel [zur Flächennormalen] nutzt, führen selbst geringste Unterschiede der Normalen benachbarter Teilflächen zu der beobachteten, störenden Variation der Reflexionen auf den Stirnflächen der Nocken.

In der ge-pimp-ten Version habe ich mich für die Visualisierung von der vermuteten Abfolge der Bearbeitungsschritte bei der Fertigung einer realen Nockenwelle gelöst. Hier erzeuge ich die Nocken mittels einer 2D-Splinemaske, welche ich im Anschluss in Nockendicke «extrudiere» und zu einem modifizierten Nockenwellen-Rohling hinzu addiere:

Eine Splinemaske verlagert im Prinzip die vorherigen Bool’schen Operationen vom 3D-Raum in eine 2D-Ebene. Zwar werden bei der Dreieckszerlegung der durch die Splinemaske definierten Fläche vermutlich ähnlich viele und ähnlich schlanke Flächen entstehen. Der Vorteil des neuen Verfahrens ist aber, daß in der Ebene (2D) der Normalenvektor für sämtliche Unterflächen per definitionem garantiert gleich ist und in Cinema4D bei der Extrusion nach 3D den Unterflächen zugewiesen werden kann, anstatt individuell berechnet werden zu müssen. Voilà!

Die bisherigen Nockenkonturen waren durch jeweils 72 gemessene Punkte (alle 5°) unter teilweise Anwendung von «Augenmass» nachgebildet worden. Auch die Positionen der Schlepp- und Kipphebelachsen hatte ich mit einem Geodreieck aus einer per Augenmaß skalierten Zeichnung gewonnen.

Statt dessen verwende ich neu die im «Desmo Lab» exakt berechneten Werte. Nockenkonturen werden nun durch geschlossene Splines mit jeweils sogar 200 Stützstellen definiert. Zu diesem Zweck habe ich das «Desmo Lab» im Browser-eigenen Debugger laufen lassen und an geeigneten Stellen im Code breakpoints gesetzt.

Ein Eindruck meiner Arbeitsumgebung (Firefox/Extras/Browser Werkzeuge/Werkzeuge für Web-Entwickler)

So konnte ich alle relevanten Werte kopieren, in Excel einfügen, dort ein wenig umformatieren und schliesslich als ASCII-Datei in Cinema4D importieren. Von dort habe ich das Model der Nockenwelle als VRML2-Datei exportiert und konnte es so in mein JavaScript-Programm einlesen.


In meinem Update vom 04.03.2021 zum Beitrag «Desmo – DIY» hatte ich sehr vollmundig vorhergesagt, daß die Verwendung der im «Desmo Lab» berechneten Werte für Nockenkontur und Positionen für Schlepp- bzw. Kipphebelachsen zu einem «garantiert perfekten» visuellen Eindruck [der Kontaktpunkte von Kipp- bzw. Schlepphebel und Nocken bzw. Shims] führen würde. Ich finde es – mit Verlaub gesagt – geil, daß die Umsetzung dieser auf theoretischen Überlegungen beruhenden Vorhersage im Praxistest auch sehr kritischer Betrachtung stand hält. 😎

Meiner Sorge um die «historische Authentizität» wird übrigens dadurch Genüge getan, daß ich die hier beschriebenen Verbesserungen nur auf die Einlassseite angewandt habe (die mit den großen Ventiltellern), während die bisher vorhandenen Mängel weiterhin an der Auslassnockenwelle zum Vergleich herangezogen werden können. 😇

Der Link zur neuen Version 3.0 der Interaktiven 3D Animation des desmodromischen Ventiltriebs eines Ducati Testastretta Evoluzione Vierventil-Zylinderkopfs hat sich nicht geändert.

>>> Hier <<<

geht’s lang.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert