Ich bin am Ziel meiner mechanischen und elektronischen Reise angekommen. In den vorigen vier Teilen dieses Projekts habe ich den originalen Prusa MK3S sprichwörtlich auf links gedreht. Die betagte 8-Bit-Architektur wurde mit einem leistungsstarken Raspberry Pi 3 B+ und mit der Klipper-Firmware modernisiert. Die Y-Achse rollt nun absolut spielfrei auf industriellen Linearführungen. Die X-Achse wurde zur Eliminierung der Torsionskräfte auf eine MGN12H Linearschiene umgerüstet, und die Z-Achse gleitet nun auf hochwertigen Igus-Gleitlagern über hartanodisierte Aluminiumwellen. Die Hardware-Basis ist damit auf maximale Präzision, Steifigkeit und Leichtgängigkeit getrimmt.
Doch wer nun glaubt, man könne die Druckgeschwindigkeiten und vor allem die Beschleunigungswerte (Acceleration) im Slicer einfach verzehnfachen, wird beim ersten Testdruck eine Enttäuschung erleben. Selbst die massivste und präziseste Linearschiene kann die Gesetze der Physik und der Trägheit nicht aushebeln. Wenn ein mehrere hundert Gramm schwerer Direct-Drive-Extruder 5.000 mm/s² auf einen Endanschlag zuschießt und abrupt abbremsen muss, entsteht immense kinetische Trägheitsenergie. Der gesamte Druckerrahmen, die Zahnriemen und die Kunststoffteile nehmen diese Restenergie auf und beginnen zu schwingen. Das Resultat auf dem gedruckten Bauteil ist Ghosting (oder Ringing): Sich wiederholende Wellenlinien, die sich nach scharfen Kanten, Schriften oder Bohrungen über die Oberfläche des Modells ziehen.
Hier greift nun der Algorithmus der Klipper-Firmware, auf ich mit all den mechanischen Umbauten zielgerichtet hingearbeitet haben. In diesem fünften und letzten Teil der Serie dokumentiere ich, wie ich das Prusa MK3S Input Shaping ADXL345 Setup realisiere. Ich werde die individuellen Schwingungen der Maschine messen und Klipper anweisen, diese durch präzise berechnete Gegenimpulse quasi in Echtzeit auszulöschen.
Die Theorie: Antischall für Schrittmotoren und das Smoothing-Dilemma
Das Prinzip hinter der Resonanzkompensation (Input Shaping) lässt sich am besten mit der Active Noise Cancelling (ANC) Technologie bei modernen Kopfhörern vergleichen. Ein Mikrofon misst die Störgeräusche von außen, und der Kopfhörer sendet eine exakt phasenverschobene Schallwelle (Antischall) in das Ohr, wodurch sich beide Wellen physikalisch gegenseitig aufheben und Stille entsteht.
Klipper macht im Grunde exakt dasselbe, jedoch auf kinetischer Ebene. Wenn die Software weiß, bei welcher exakten Frequenz (gemessen in Hertz) und mit welcher relativen Intensität die X-Achse des Druckers nach einem Stopp nachschwingt, passt sie das Bewegungsprofil des Schrittmotors minimal an. Der Motor führt den Brems- und Beschleunigungsvorgang an einer Kante nicht mehr streng linear aus, sondern überlagert ihn mit einem gegensätzlichen Bewegungsimpuls. Dieser berechnete Impuls schluckt die mechanische Resonanz exakt in der Millisekunde, in der sie entsteht. Der Druckkopf stoppt ohne jegliches mechanisches Nachzittern. Das Ergebnis sind makellos glatte Wände, selbst bei atemberaubenden Beschleunigungswerten.
Doch es gibt einen physikalischen Haken, den man verstehen muss: Das Smoothing (Verrundung). Je komplexer und intensiver die Schwingungen des Druckers sind, desto breitere und stärkere Gegenimpulse muss Klipper senden (über komplexere Filtertypen wie EI oder 2HUMP_EI). Diese intensiven Gegenimpulse führen jedoch dazu, dass scharfe 90-Grad-Ecken des Modells auf mikroskopischer Ebene leicht abgerundet (verschliffen) werden, weil der Motor den harten Richtungswechsel algorithmisch abfedert. Mein Ziel war es, die Mechanik so steif zu bauen, dass nur noch sehr einfache Filter (wie MZV oder ZVD) benötigt werden, die kaum Smoothing verursachen. Erst dann sind hohe Beschleunigungen ohne Detailverlust möglich.
Mechanische Voraussetzungen: Die Riemenspannung
Bevor ich anfange, elektronische Sensoren zu verkabeln, muss eine Grundregel beachtet werden: Input Shaping ist keine Lösung für fehlerhafte Mechanik!
Wenn die Zahnriemen auf der X- oder Y-Achse zu locker sind, wirkt der Riemen wie ein Gummiband. Der Extruder schwingt niederfrequent nach, und die Messdaten des ADXL345 werden ein chaotisches Bild ausgeben. Klipper kann das Spiel eines schlabbrigen Riemens nicht kompensieren. Sind die Riemen hingegen zu fest gespannt, verbiegen sich die Motorwellen im Mikrometerbereich, die Motorlager werden überlastet und die Riemenzähne reiben sich ab. Das erzeugt sehr hohe, unnatürliche Resonanzfrequenzen.
Mein Tipp: Zupfe die Riemen an wie eine Gitarrensaite. Sie müssen einen tiefen, satten Basston von sich geben. Nutze zur finalen Kontrolle eine Riemenspannungs-App für das Smartphone (Spectroid oder spezielle Belt-Tension-Apps) oder einen gedruckten Riemenspanner-Messer. Stelle sicher, dass auf X und Y eine passende mechanische Spannung anliegt und alle Madenschrauben (Grub Screws) an den Motor-Pulleys fest auf der abgeflachten Seite der Welle sitzen. Ich favorisiere die Druck-Lösung:
–klick–
SPI vs. USB-ADXL345 (RP2040)
Um die Resonanzfrequenzen zu messen, benötige ich einen digitalen Beschleunigungssensor (Accelerometer). Der De-facto-Standard in der Klipper-Welt ist der ADXL345, der Bewegungen und Vibrationen in drei Achsen (X, Y und Z) hochpräzise mit bis zu 3200 Messungen pro Sekunde erfassen kann. Die schiere Menge an anfallenden Rohdaten ist enorm.
Es gibt zwei grundlegende Methoden, wie dieser Sensor mit dem Raspberry Pi kommunizieren kann, und hier hat sich in den letzten Jahren viel getan:
1. Der klassische Weg (SPI direkt am Pi)
Früher wurde eine nackte ADXL345-Platine mit Jumper-Kabeln direkt an die Hardware-SPI-Pins (Serial Peripheral Interface) des Raspberry Pi angeschlossen. Diese Methode ist zwar günstig, aber in der Werkstatt extrem fehleranfällig. SPI wurde für die Kommunikation zwischen Chips auf derselben Platine entwickelt (Platinen-Routing), nicht für lange, freifliegende Kabel, die an Schrittmotoren vorbeilaufen. Bei Kabellängen über 15 Zentimetern kommt es oft zu massivem Übersprechen (Crosstalk), elektromagnetischen Interferenzen (EMI) und die Messung bricht mit Timeout-Fehlern in Klipper ab. Wer diesen Weg wählt, muss zwingend ein abgeschirmtes Netzwerkkabel (Cat 6) verwenden, die Adern nutzen und den Schirm erden.
2. Der moderne, zuverlässige Weg (USB RP2040)
Ich empfehle die Nutzung eines sogenannten USB-ADXL-Boards (z. B. den Fysetc Portable Input Shaper oder das BIGTREETECH ADXL345 USB-Board). Auf diesen Platinen ist neben dem ADXL-Sensor ein eigener kleiner Mikrocontroller (meist ein Raspberry Pi Pico / RP2040 Chip) verbaut. Der ADXL ist per Leiterbahn direkt mit dem RP2040 verbunden (perfektes SPI), und der RP2040 sendet die fertig verpackten Daten über ein gewöhnliches USB-C-Kabel an den Raspberry Pi. Dies ist absolut unempfindlich gegenüber Störungen, man kann ein zwei Meter langes USB-Kabel nutzen und den Sensor problemlos im ganzen Drucker umherbewegen. Für dieses Projekt nutze ich so ein RP2040-USB-Modul.
Montage auf X und Y
Ein Beschleunigungssensor kann logischerweise nur das messen, was ihm physisch übertragen wird. Das bedeutet: Der ADXL345 muss absolut starr, massiv und völlig spielfrei an der Achse montiert werden, die gemessen werden soll.
Die X-Achse (Extruder):
Es gibt auf den üblichen Plattformen unzählige 3D-Modelle für Halterungen, mit denen man den Sensor beispielsweise auf den Extruder-Motor klipsen kann. Solche dünnen Klemmverbindungen sind für eine exakte Messung jedoch völlig ungeeignet. Kunststoff gibt bei Vibrationen nach und wirkt wie ein kleiner Stoßdämpfer (Dämpfungsglied). Der Sensor würde in diesem Fall nicht die Resonanz der Linearschiene messen, sondern die Eigenschwingung seiner Klemm-Halterung. Der beste Weg beim Prusa MK3S Extruder: Löse zwei der langen M3-Schrauben, die den Bauteillüfter oder den Kühlkörper halten, und schraube die ADXL-Platine direkt mit einer dicken, starren PETG-Adapterplatte an das Gehäuse des Extruders. Wenn man mit dem Finger am Sensor rüttelt, darf er keinen Millimeter nachgeben. Der gesamte Druckkopf muss sich mitbewegen.
Die Y-Achse (Heizbett):
Hier wird oft ein Denkfehler begangen: Der Sensor darf beim Prusa (Bettschubser-Design) nicht einfach unten an den Y-Carriage geklemmt werden. Die relevante, schwingende Masse, die das Druckbild erzeugt, ist das Heizbett inklusive des aufliegenden magnetischen PEI-Federstahlblechs. Wenn man das Bett ausmisst, muss sich der Drucker im Druckzustand befinden. Der Sensor muss daher zwingend auf die Oberfläche des Bettes geschraubt werden. Man entfernt dazu am besten eine der M3-Versenkschrauben am Rand des Heizbetts und schraubt den ADXL mit einem gedruckten Halter und einer längeren Schraube fest direkt auf das Heizbett. Das PEI-Blech wird dabei seitlich versetzt aufgelegt, da sein Gewicht die Resonanzfrequenz verändert.
Software-Integration: Klipper konfigurieren
Da ich das USB-RP2040-Board nutze, muss dieses zunächst als eigenständige MCU (Microcontroller Unit) in Klipper eingerichtet werden. Der RP2040 wird an einen USB-Port des Raspberry Pi angesteckt, in den Boot-Modus versetzt und mit der Klipper-Firmware (via make menuconfig und make flash) beschrieben.
Anschließend öffne ich die printer.cfg (oder lege eine separate adxl.cfg an und inkludiere sie über [include adxl.cfg]) und füge folgende Code-Blöcke hinzu, um die Kommunikation herzustellen:
[mcu adxl]
# Hier den korrekten USB-Pfad eintragen, den Klipper via 'ls /dev/serial/by-id/' ausgibt
serial: /dev/serial/by-id/usb-Klipper_rp2040_E661389351119E2B-if00
[adxl345]
cs_pin: adxl:gpio1
spi_bus: spi0a
axes_map: x,z,y # Dies muss je nach Montagerichtung des Sensors zwingend angepasst werden!
[resonance_tester]
accel_chip: adxl345
probe_points:
125, 105, 20 # Der Messpunkt: Genau in der Mitte des Prusa-Heizbettes
Nach einem Klipper-Neustart (Save und Restart) ist das System bereit für den ersten Kommunikationstest. Ich rufe in der Mainsail-Konsole den Befehl MEASURE_AXES_NOISE auf. Der Drucker bewegt sich nicht, aber der Sensor lauscht auf das mikroskopische Rauschen des Stillstands. Die Konsole sollte Werte im Bereich von 1 bis 100 ausgeben. Wenn hier Fehlermeldungen auftauchen, stimmt die Pin-Belegung oder die USB-Verbindung nicht.
Der Resonanz-Test: Die Maschine vibriert
Jetzt wird es laut, die Vorbereitung muss abgeschlossen sein. Am Besten alle Werkzeuge vom Druckertisch räumen, denn der gesamte Rahmen wird gleich massiv in Schwingung versetzt.
Der offizielle, schnelle Weg ist der Befehl SHAPER_CALIBRATE AXIS=X. Dieser Befehl misst, sucht den besten Shaper heraus und speichert ihn am Ende automatisch in der Config ab. Wer wie ich die Ergebnisse kritisch analysieren und die Graphen sehen möchte, nutzt den folgenden Befehl:
TEST_RESONANCES AXIS=X
Der Extruder fährt in die Mitte des Bettes und beginnt, blitzschnell auf der Stelle nach links und rechts zu zittern. Erst sehr langsam, tief und bedrohlich summend (bei wenigen Hertz). Dann steigert die Firmware die Frequenz kontinuierlich, bis die Achse bei weit über 100 Hertz extrem hoch kreischt. Das sieht brutal aus und klingt ungesund, ist für die Hardware aber bei intakten Lagern völlig unbedenklich. Der ADXL345 zeichnet während dieser Fahrt auf, bei welcher Frequenz die Mechanik der X-Achse am stärksten in Resonanz gerät (also besonders stark ausschlägt, weil sich die Schwingungen hochschaukeln).
Sobald die X-Achse fertig ist, demontiere ich den Sensor und schraube ihn, wie oben beschrieben, direkt auf das Heizbett (Y-Achse). Ich sende den Befehl TEST_RESONANCES AXIS=Y. Das Heizbett, das jetzt auf den Linearführungen rollt, vollführt denselben Vorgang. Klipper erzeugt nach jeder Achse eine Rohdaten-CSV-Datei im /tmp Verzeichnis des Raspberry Pi.
Daten auswerten: Graphen, Shaper und Smoothing
Die erzeugten CSV-Dateien sind erstmal unlesbar. Klipper bringt ein eigenes Python-Skript (calibrate_shaper.py) mit, um aus diesen Rohdaten anschauliche Graphen zu generieren. Details zur Ausführung finden sich in der offiziellen Dokumentation: Klipper Measuring Resonances.
Ich logge mich per SSH ein und führe die Skripte aus, um mir die generierten PNG-Bilder auf den Rechner zu ziehen. Das Lesen dieser Graphen ist der spannendste Teil des ganzen Projekts:
Man sieht auf der Y-Achse (links nach rechts) die Frequenzen in Hertz und auf der X-Achse (unten nach oben) die Energie der Vibration (Power Spectral Density). Ein perfekt gebauter, steifer Drucker zeigt einen einzigen, hohen, sehr steilen Berg (Peak) im Graphen. Das ist die natürliche Grundresonanz der Achse. Zeigt der Graph jedoch ein wildes „Gebirge“ mit vielen zackigen Spitzen, stimmt mechanisch etwas nicht. Mehrere Spitzen deuten auf lose Schrauben, schwingende Kabelstränge, einen nicht fest montierten Sensor oder ratternde Lager hin. Bevor man das per Software kompensiert, muss man zurück an den Inbus-Schlüssel und die Hardware fixen.
Das Python-Skript simuliert zudem alle verfügbaren Klipper-Filter (ZVD, MZV, EI, 2HUMP_EI, 3HUMP_EI). Der Filter, der die blaue Kurve (Rohdaten) durch eine berechnete rote Kurve am besten gegen Null drückt, wird vom System empfohlen.
Mein Tipp: Vertraue nicht blind der Automatik. Klipper schlägt manchmal einen sehr aggressiven „3HUMP_EI“ Shaper vor, um auch noch die kleinste Resonanz bei 110 Hz zu unterdrücken. Dieser Filter verursacht jedoch so viel algorithmisches Smoothing, dass feine Details am Druckobjekt verloren gehen. Oft ist es besser, manuell in der printer.cfg den „MZV“-Shaper (Zero Vibration) auszuwählen, selbst wenn laut Graph noch ein Hauch Resonanz übrigbleibt. MZV rechnet scharf und erhält die Details Deiner Drucke bei hohen Geschwindigkeiten.
Slicer-Anpassung: Das neue max_accel ermitteln
Dies ist der Schritt, der gerne vergessen wird. Die Graphen zeigen oben rechts für jeden Shaper-Typ eine errechnete, maximal empfohlene Beschleunigung an (z. B. Recommended shaper is mzv @ 45.2 Hz (max_accel <= 3500 mm/s^2)). Dieser Wert gibt an, bis zu welcher Beschleunigung der Filter das Ghosting beseitigen kann, bevor das durch den Filter verursachte Smoothing optisch negativ auffällt (mehr als 0,1 mm Abweichung an den Kanten).
Ich wähle den kleineren der beiden max_accel Werte von X- und Y-Achse als Limit für den Drucker. Diesen Wert trage ich nun fest in der printer.cfg unter [printer] bei max_accel ein. Noch wichtiger: Ich wechsle in den PrusaSlicer (oder OrcaSlicer), öffne die Maschineneinstellungen und überschreibe dort die Beschleunigungslimits (Acceleration Control), die konservativ auf 800 mm/s² bis 1.000 mm/s² stehen, mit den neu ermittelten, höheren Klipper-Werten.
Vom Arbeitstier zur Präzisionsmaschine
Mit dem aktiven Input Shaping entfaltet der modifizierte Prusa MK3S nun sein volles Potenzial. Nachdem ich den ADXL-USB-Sensor entfernt habe, starte ich den Slicer und drucke einen Kalibrierungswürfel.
Das Ergebnis offenbart das Ergebnis des Umbaus: Der Direct-Drive-Druckkopf jagt mit einer Geschwindigkeit und Lautstärke über das Druckbett, die man dem soliden, aber ehemals behäbigen Prusa nie zugetraut hätte. Er beschleunigt explosionsartig, bremst hart an den Kanten, das Infill surrt in Hochgeschwindigkeit – und doch steht der Rahmen erschreckend ruhig. Keine Vibrationen übertragen sich mehr auf den Tisch, die Bewegungen wirken flüssig und kontrolliert. Und das Wichtigste, der Erfolg der ganzen Arbeit: Das gedruckte Bauteil hat absolut glatte, makellose Wände. Kein Ghosting, kein Ringing, nur perfekte Layer, selbst direkt nach scharfen 90-Grad-Wenden.
Dieser fünfteilige Umbau war kein kleines Unterfangen. Er erforderte Zeit, Geduld, Handwerk und die Bereitschaft, das Prusa-Ökosystem zu verlassen und tief in die Open-Source-Software abzutauchen. Aus dem klassischen, bewährten Arbeitstier Prusa MK3S ist durch die Kombination aus steifen Linearschienen, wartungsfreien Igus-Gleitlagern und Klippers überlegener Resonanzkompensation eine moderne, agile Maschine geworden. Ein Drucker, der trotz seines kartesischen Bettschubser-Designs problemlos mit der aktuellen Generation der High-Speed-Drucker mithalten kann. Ein echtes Projekt für Entwickler und Enthusiasten, das jeden investierten Cent und jede Arbeitsstunde absolut wert war.
Dieses ist der vierte Umbau/Neubau eines Druckers. Normalerweise bin ich nicht so der Typ, der seinen Werkzeugen Namen gibt. Hier mache ich eine Ausnahme. Ich nenne ihn: Fred’s Fab # Four. Wie ich drauf komme? Keine Ahnung. Eventuell hat es etwas mit den Beatles zu tun, obwohl ich nie der große Fan war/bin.
29 Aug. 2026
0 CommentsPrusa MK3S Input Shaping ADXL345 und Klipper (Teil 5)
Ich bin am Ziel meiner mechanischen und elektronischen Reise angekommen. In den vorigen vier Teilen dieses Projekts habe ich den originalen Prusa MK3S sprichwörtlich auf links gedreht. Die betagte 8-Bit-Architektur wurde mit einem leistungsstarken Raspberry Pi 3 B+ und mit der Klipper-Firmware modernisiert. Die Y-Achse rollt nun absolut spielfrei auf industriellen Linearführungen. Die X-Achse wurde zur Eliminierung der Torsionskräfte auf eine MGN12H Linearschiene umgerüstet, und die Z-Achse gleitet nun auf hochwertigen Igus-Gleitlagern über hartanodisierte Aluminiumwellen. Die Hardware-Basis ist damit auf maximale Präzision, Steifigkeit und Leichtgängigkeit getrimmt.
Doch wer nun glaubt, man könne die Druckgeschwindigkeiten und vor allem die Beschleunigungswerte (Acceleration) im Slicer einfach verzehnfachen, wird beim ersten Testdruck eine Enttäuschung erleben. Selbst die massivste und präziseste Linearschiene kann die Gesetze der Physik und der Trägheit nicht aushebeln. Wenn ein mehrere hundert Gramm schwerer Direct-Drive-Extruder 5.000 mm/s² auf einen Endanschlag zuschießt und abrupt abbremsen muss, entsteht immense kinetische Trägheitsenergie. Der gesamte Druckerrahmen, die Zahnriemen und die Kunststoffteile nehmen diese Restenergie auf und beginnen zu schwingen. Das Resultat auf dem gedruckten Bauteil ist Ghosting (oder Ringing): Sich wiederholende Wellenlinien, die sich nach scharfen Kanten, Schriften oder Bohrungen über die Oberfläche des Modells ziehen.
Hier greift nun der Algorithmus der Klipper-Firmware, auf ich mit all den mechanischen Umbauten zielgerichtet hingearbeitet haben. In diesem fünften und letzten Teil der Serie dokumentiere ich, wie ich das Prusa MK3S Input Shaping ADXL345 Setup realisiere. Ich werde die individuellen Schwingungen der Maschine messen und Klipper anweisen, diese durch präzise berechnete Gegenimpulse quasi in Echtzeit auszulöschen.
Inhalt
Die Theorie: Antischall für Schrittmotoren und das Smoothing-Dilemma
Das Prinzip hinter der Resonanzkompensation (Input Shaping) lässt sich am besten mit der Active Noise Cancelling (ANC) Technologie bei modernen Kopfhörern vergleichen. Ein Mikrofon misst die Störgeräusche von außen, und der Kopfhörer sendet eine exakt phasenverschobene Schallwelle (Antischall) in das Ohr, wodurch sich beide Wellen physikalisch gegenseitig aufheben und Stille entsteht.
Klipper macht im Grunde exakt dasselbe, jedoch auf kinetischer Ebene. Wenn die Software weiß, bei welcher exakten Frequenz (gemessen in Hertz) und mit welcher relativen Intensität die X-Achse des Druckers nach einem Stopp nachschwingt, passt sie das Bewegungsprofil des Schrittmotors minimal an. Der Motor führt den Brems- und Beschleunigungsvorgang an einer Kante nicht mehr streng linear aus, sondern überlagert ihn mit einem gegensätzlichen Bewegungsimpuls. Dieser berechnete Impuls schluckt die mechanische Resonanz exakt in der Millisekunde, in der sie entsteht. Der Druckkopf stoppt ohne jegliches mechanisches Nachzittern. Das Ergebnis sind makellos glatte Wände, selbst bei atemberaubenden Beschleunigungswerten.
Doch es gibt einen physikalischen Haken, den man verstehen muss: Das Smoothing (Verrundung). Je komplexer und intensiver die Schwingungen des Druckers sind, desto breitere und stärkere Gegenimpulse muss Klipper senden (über komplexere Filtertypen wie EI oder 2HUMP_EI). Diese intensiven Gegenimpulse führen jedoch dazu, dass scharfe 90-Grad-Ecken des Modells auf mikroskopischer Ebene leicht abgerundet (verschliffen) werden, weil der Motor den harten Richtungswechsel algorithmisch abfedert. Mein Ziel war es, die Mechanik so steif zu bauen, dass nur noch sehr einfache Filter (wie MZV oder ZVD) benötigt werden, die kaum Smoothing verursachen. Erst dann sind hohe Beschleunigungen ohne Detailverlust möglich.
Mechanische Voraussetzungen: Die Riemenspannung
Bevor ich anfange, elektronische Sensoren zu verkabeln, muss eine Grundregel beachtet werden: Input Shaping ist keine Lösung für fehlerhafte Mechanik!
Wenn die Zahnriemen auf der X- oder Y-Achse zu locker sind, wirkt der Riemen wie ein Gummiband. Der Extruder schwingt niederfrequent nach, und die Messdaten des ADXL345 werden ein chaotisches Bild ausgeben. Klipper kann das Spiel eines schlabbrigen Riemens nicht kompensieren. Sind die Riemen hingegen zu fest gespannt, verbiegen sich die Motorwellen im Mikrometerbereich, die Motorlager werden überlastet und die Riemenzähne reiben sich ab. Das erzeugt sehr hohe, unnatürliche Resonanzfrequenzen.
SPI vs. USB-ADXL345 (RP2040)
Um die Resonanzfrequenzen zu messen, benötige ich einen digitalen Beschleunigungssensor (Accelerometer). Der De-facto-Standard in der Klipper-Welt ist der ADXL345, der Bewegungen und Vibrationen in drei Achsen (X, Y und Z) hochpräzise mit bis zu 3200 Messungen pro Sekunde erfassen kann. Die schiere Menge an anfallenden Rohdaten ist enorm.
Es gibt zwei grundlegende Methoden, wie dieser Sensor mit dem Raspberry Pi kommunizieren kann, und hier hat sich in den letzten Jahren viel getan:
1. Der klassische Weg (SPI direkt am Pi)
Früher wurde eine nackte ADXL345-Platine mit Jumper-Kabeln direkt an die Hardware-SPI-Pins (Serial Peripheral Interface) des Raspberry Pi angeschlossen. Diese Methode ist zwar günstig, aber in der Werkstatt extrem fehleranfällig. SPI wurde für die Kommunikation zwischen Chips auf derselben Platine entwickelt (Platinen-Routing), nicht für lange, freifliegende Kabel, die an Schrittmotoren vorbeilaufen. Bei Kabellängen über 15 Zentimetern kommt es oft zu massivem Übersprechen (Crosstalk), elektromagnetischen Interferenzen (EMI) und die Messung bricht mit Timeout-Fehlern in Klipper ab. Wer diesen Weg wählt, muss zwingend ein abgeschirmtes Netzwerkkabel (Cat 6) verwenden, die Adern nutzen und den Schirm erden.
2. Der moderne, zuverlässige Weg (USB RP2040)
Ich empfehle die Nutzung eines sogenannten USB-ADXL-Boards (z. B. den Fysetc Portable Input Shaper oder das BIGTREETECH ADXL345 USB-Board). Auf diesen Platinen ist neben dem ADXL-Sensor ein eigener kleiner Mikrocontroller (meist ein Raspberry Pi Pico / RP2040 Chip) verbaut. Der ADXL ist per Leiterbahn direkt mit dem RP2040 verbunden (perfektes SPI), und der RP2040 sendet die fertig verpackten Daten über ein gewöhnliches USB-C-Kabel an den Raspberry Pi. Dies ist absolut unempfindlich gegenüber Störungen, man kann ein zwei Meter langes USB-Kabel nutzen und den Sensor problemlos im ganzen Drucker umherbewegen. Für dieses Projekt nutze ich so ein RP2040-USB-Modul.
Montage auf X und Y
Ein Beschleunigungssensor kann logischerweise nur das messen, was ihm physisch übertragen wird. Das bedeutet: Der ADXL345 muss absolut starr, massiv und völlig spielfrei an der Achse montiert werden, die gemessen werden soll.
Die X-Achse (Extruder):
Es gibt auf den üblichen Plattformen unzählige 3D-Modelle für Halterungen, mit denen man den Sensor beispielsweise auf den Extruder-Motor klipsen kann. Solche dünnen Klemmverbindungen sind für eine exakte Messung jedoch völlig ungeeignet. Kunststoff gibt bei Vibrationen nach und wirkt wie ein kleiner Stoßdämpfer (Dämpfungsglied). Der Sensor würde in diesem Fall nicht die Resonanz der Linearschiene messen, sondern die Eigenschwingung seiner Klemm-Halterung. Der beste Weg beim Prusa MK3S Extruder: Löse zwei der langen M3-Schrauben, die den Bauteillüfter oder den Kühlkörper halten, und schraube die ADXL-Platine direkt mit einer dicken, starren PETG-Adapterplatte an das Gehäuse des Extruders. Wenn man mit dem Finger am Sensor rüttelt, darf er keinen Millimeter nachgeben. Der gesamte Druckkopf muss sich mitbewegen.
Die Y-Achse (Heizbett):
Hier wird oft ein Denkfehler begangen: Der Sensor darf beim Prusa (Bettschubser-Design) nicht einfach unten an den Y-Carriage geklemmt werden. Die relevante, schwingende Masse, die das Druckbild erzeugt, ist das Heizbett inklusive des aufliegenden magnetischen PEI-Federstahlblechs. Wenn man das Bett ausmisst, muss sich der Drucker im Druckzustand befinden. Der Sensor muss daher zwingend auf die Oberfläche des Bettes geschraubt werden. Man entfernt dazu am besten eine der M3-Versenkschrauben am Rand des Heizbetts und schraubt den ADXL mit einem gedruckten Halter und einer längeren Schraube fest direkt auf das Heizbett. Das PEI-Blech wird dabei seitlich versetzt aufgelegt, da sein Gewicht die Resonanzfrequenz verändert.
Software-Integration: Klipper konfigurieren
Da ich das USB-RP2040-Board nutze, muss dieses zunächst als eigenständige MCU (Microcontroller Unit) in Klipper eingerichtet werden. Der RP2040 wird an einen USB-Port des Raspberry Pi angesteckt, in den Boot-Modus versetzt und mit der Klipper-Firmware (via
make menuconfigundmake flash) beschrieben.Anschließend öffne ich die
printer.cfg(oder lege eine separateadxl.cfgan und inkludiere sie über[include adxl.cfg]) und füge folgende Code-Blöcke hinzu, um die Kommunikation herzustellen:Nach einem Klipper-Neustart (Save und Restart) ist das System bereit für den ersten Kommunikationstest. Ich rufe in der Mainsail-Konsole den Befehl
MEASURE_AXES_NOISEauf. Der Drucker bewegt sich nicht, aber der Sensor lauscht auf das mikroskopische Rauschen des Stillstands. Die Konsole sollte Werte im Bereich von 1 bis 100 ausgeben. Wenn hier Fehlermeldungen auftauchen, stimmt die Pin-Belegung oder die USB-Verbindung nicht.Der Resonanz-Test: Die Maschine vibriert
Jetzt wird es laut, die Vorbereitung muss abgeschlossen sein. Am Besten alle Werkzeuge vom Druckertisch räumen, denn der gesamte Rahmen wird gleich massiv in Schwingung versetzt.
Der offizielle, schnelle Weg ist der Befehl
SHAPER_CALIBRATE AXIS=X. Dieser Befehl misst, sucht den besten Shaper heraus und speichert ihn am Ende automatisch in der Config ab. Wer wie ich die Ergebnisse kritisch analysieren und die Graphen sehen möchte, nutzt den folgenden Befehl:TEST_RESONANCES AXIS=XDer Extruder fährt in die Mitte des Bettes und beginnt, blitzschnell auf der Stelle nach links und rechts zu zittern. Erst sehr langsam, tief und bedrohlich summend (bei wenigen Hertz). Dann steigert die Firmware die Frequenz kontinuierlich, bis die Achse bei weit über 100 Hertz extrem hoch kreischt. Das sieht brutal aus und klingt ungesund, ist für die Hardware aber bei intakten Lagern völlig unbedenklich. Der ADXL345 zeichnet während dieser Fahrt auf, bei welcher Frequenz die Mechanik der X-Achse am stärksten in Resonanz gerät (also besonders stark ausschlägt, weil sich die Schwingungen hochschaukeln).
Sobald die X-Achse fertig ist, demontiere ich den Sensor und schraube ihn, wie oben beschrieben, direkt auf das Heizbett (Y-Achse). Ich sende den Befehl
TEST_RESONANCES AXIS=Y. Das Heizbett, das jetzt auf den Linearführungen rollt, vollführt denselben Vorgang. Klipper erzeugt nach jeder Achse eine Rohdaten-CSV-Datei im/tmpVerzeichnis des Raspberry Pi.Daten auswerten: Graphen, Shaper und Smoothing
Die erzeugten CSV-Dateien sind erstmal unlesbar. Klipper bringt ein eigenes Python-Skript (
calibrate_shaper.py) mit, um aus diesen Rohdaten anschauliche Graphen zu generieren. Details zur Ausführung finden sich in der offiziellen Dokumentation: Klipper Measuring Resonances.Ich logge mich per SSH ein und führe die Skripte aus, um mir die generierten PNG-Bilder auf den Rechner zu ziehen. Das Lesen dieser Graphen ist der spannendste Teil des ganzen Projekts:
Man sieht auf der Y-Achse (links nach rechts) die Frequenzen in Hertz und auf der X-Achse (unten nach oben) die Energie der Vibration (Power Spectral Density). Ein perfekt gebauter, steifer Drucker zeigt einen einzigen, hohen, sehr steilen Berg (Peak) im Graphen. Das ist die natürliche Grundresonanz der Achse. Zeigt der Graph jedoch ein wildes „Gebirge“ mit vielen zackigen Spitzen, stimmt mechanisch etwas nicht. Mehrere Spitzen deuten auf lose Schrauben, schwingende Kabelstränge, einen nicht fest montierten Sensor oder ratternde Lager hin. Bevor man das per Software kompensiert, muss man zurück an den Inbus-Schlüssel und die Hardware fixen.
Das Python-Skript simuliert zudem alle verfügbaren Klipper-Filter (ZVD, MZV, EI, 2HUMP_EI, 3HUMP_EI). Der Filter, der die blaue Kurve (Rohdaten) durch eine berechnete rote Kurve am besten gegen Null drückt, wird vom System empfohlen.
Slicer-Anpassung: Das neue max_accel ermitteln
Dies ist der Schritt, der gerne vergessen wird. Die Graphen zeigen oben rechts für jeden Shaper-Typ eine errechnete, maximal empfohlene Beschleunigung an (z. B.
Recommended shaper is mzv @ 45.2 Hz (max_accel <= 3500 mm/s^2)). Dieser Wert gibt an, bis zu welcher Beschleunigung der Filter das Ghosting beseitigen kann, bevor das durch den Filter verursachte Smoothing optisch negativ auffällt (mehr als 0,1 mm Abweichung an den Kanten).Ich wähle den kleineren der beiden
max_accelWerte von X- und Y-Achse als Limit für den Drucker. Diesen Wert trage ich nun fest in derprinter.cfgunter[printer]beimax_accelein. Noch wichtiger: Ich wechsle in den PrusaSlicer (oder OrcaSlicer), öffne die Maschineneinstellungen und überschreibe dort die Beschleunigungslimits (Acceleration Control), die konservativ auf 800 mm/s² bis 1.000 mm/s² stehen, mit den neu ermittelten, höheren Klipper-Werten.Vom Arbeitstier zur Präzisionsmaschine
Mit dem aktiven Input Shaping entfaltet der modifizierte Prusa MK3S nun sein volles Potenzial. Nachdem ich den ADXL-USB-Sensor entfernt habe, starte ich den Slicer und drucke einen Kalibrierungswürfel.
Das Ergebnis offenbart das Ergebnis des Umbaus: Der Direct-Drive-Druckkopf jagt mit einer Geschwindigkeit und Lautstärke über das Druckbett, die man dem soliden, aber ehemals behäbigen Prusa nie zugetraut hätte. Er beschleunigt explosionsartig, bremst hart an den Kanten, das Infill surrt in Hochgeschwindigkeit – und doch steht der Rahmen erschreckend ruhig. Keine Vibrationen übertragen sich mehr auf den Tisch, die Bewegungen wirken flüssig und kontrolliert. Und das Wichtigste, der Erfolg der ganzen Arbeit: Das gedruckte Bauteil hat absolut glatte, makellose Wände. Kein Ghosting, kein Ringing, nur perfekte Layer, selbst direkt nach scharfen 90-Grad-Wenden.
Dieser fünfteilige Umbau war kein kleines Unterfangen. Er erforderte Zeit, Geduld, Handwerk und die Bereitschaft, das Prusa-Ökosystem zu verlassen und tief in die Open-Source-Software abzutauchen. Aus dem klassischen, bewährten Arbeitstier Prusa MK3S ist durch die Kombination aus steifen Linearschienen, wartungsfreien Igus-Gleitlagern und Klippers überlegener Resonanzkompensation eine moderne, agile Maschine geworden. Ein Drucker, der trotz seines kartesischen Bettschubser-Designs problemlos mit der aktuellen Generation der High-Speed-Drucker mithalten kann. Ein echtes Projekt für Entwickler und Enthusiasten, das jeden investierten Cent und jede Arbeitsstunde absolut wert war.
Dieses ist der vierte Umbau/Neubau eines Druckers. Normalerweise bin ich nicht so der Typ, der seinen Werkzeugen Namen gibt. Hier mache ich eine Ausnahme. Ich nenne ihn: Fred’s Fab # Four. Wie ich drauf komme? Keine Ahnung. Eventuell hat es etwas mit den Beatles zu tun, obwohl ich nie der große Fan war/bin.