3D-Drucker-Controller müssen eine Menge Dinge sehr, sehr schnell erledigen. Kinematik- und Dynamikberechnungen durchzuführen und dabei viele tausend präzise synchronisierte Schrittimpulse pro Sekunde zu senden, ist wirklich sehr, sehr schwierig . Die 8-Bit-AVR-Mikrocontrollerreihe, die in älteren 3D-Drucker-Controllern verwendet wird, ist im Grunde ein Mr. Coffee-Prozessor aus den späten 1990er-Jahren. Sie sind vollständig ausgelastet, wenn nur grundlegende Druckfunktionen in einfachen (z. B. kartesischen) Druckern ausgeführt werden. Durch Hinzufügen zusätzlicher Rechenlast werden sie blockiert und verursachen Verlangsamungen, Stottern, Pausen usw.
"Aber mein 8-Bit-Drucker funktioniert einwandfrei", sagen Sie. Nein, das tut es nicht. Ihre Druckleistung wird dadurch eingeschränkt, unabhängig davon, ob Sie dies bemerken oder nicht. Slicer verbergen jetzt automatisch viele der Leistungsmängel der Firmware vor Ihnen. Zum Beispiel ist die übliche Praxis, die Druckgeschwindigkeit auf dem Perimeter stark zu verlangsamen, größtenteils darauf zurückzuführen, dass 8-Bit-Prozessoren nicht über ausreichende Ressourcen für zwei Dinge verfügen:
- Durchführen von Berechnungen der zentripetalen Beschleunigung für Kurven über mehrere G-Code-Segmente
- Bleiben Sie mit der Übertragung / Verarbeitung von Gcode und der Bewegungsplanung für Gcode mit vielen sehr kleinen Segmenten auf dem Laufenden, z. B. in organischen Modellen oder glatten Bögen
Wenn eine Reihe von sehr kleinen Segmenten in einem glatten Bogen oder einer komplexen Kurve dargestellt wird, wird die 8-Bit-Firmware wahrscheinlich die erforderliche Befehlsverarbeitungsrate drosseln und den Druck ins Stottern bringen. Diese unglaublich kurzen Pausen lassen den Restdruck im Extruder etwas Plastik herausdrücken, wodurch sich ein wenig Zitrone auf dem Ausdruck bildet. Daher dezimieren die meisten Slicer automatisch Kurven und geben den Gcode mit reduzierter Auflösung aus, um die Firmware zu entlasten. Problem gelöst, richtig?
Es gibt aber noch ein anderes Problem: Die GRBL-Bewegungssteuerungsalgorithmen, die allen wichtigen Open-Source-3D-Drucker-Controllern zugrunde liegen, wurden mit zahlreichen Verknüpfungen und Hacks entwickelt, damit 8-Bit-Prozessoren schnell genug ausgeführt werden können. Beispielsweise betrachtet der grundlegende Algorithmus nur die Geschwindigkeits- oder Geschwindigkeitsänderung an der Ecke zwischen zwei Segmenten und entscheidet anhand dieser, wann in Bewegungsrichtung gebremst / beschleunigt wird. Die zentripetale / radiale Beschleunigung wird nicht berechnet oder berücksichtigt. Dies ist ein wirklich effektiver Hack, wenn Sie kastenförmige Modelle mit niedriger Auflösung drucken, aber er schlägt bei glatten Kurven mit vielen kleinen Segmenten kläglich fehl. Die Firmware erkennt keine nennenswerte Geschwindigkeitsänderung an der Ecke von zwei nahezu linearen Segmenten innerhalb der facettierten Kurve und verlangsamt sich daher nicht für die Kurve.
Unbeschleunigtes Drucken komplexer Perimeter bedeutet, dass der befohlene Vorschub sehr niedrig sein muss, um eine gute Qualität zu erzielen. Die meisten Drucker sind auf komplexen Perimetern auf 40 mm / s oder weniger beschränkt, obwohl sie bei geringer Komplexität möglicherweise 80 bis 120 mm / s verarbeiten können, bevor sie andere Geschwindigkeitsbegrenzungen erreichen.
Zwischen den Grenzwerten für die Befehlsverarbeitungsrate und den Bewegungsplanermängeln, die für Prozessoren mit geringer Leistung erforderlich sind, müssen die Druckgeschwindigkeiten in der Praxis viel niedriger sein, als dies für die Physik und die Druckerhardware unbedingt erforderlich ist. Dies alles kommt von 8-Bit-Prozessoren. Die Problemumgehungen und Best Practices zur Behebung dieses Problems sind so tief in die Toolchains und das Ökosystem eingebettet, dass nur sehr wenige Menschen erkennen, dass es überhaupt ein Problem gibt. Es ist jedoch eine echte Grenze, die überwunden werden kann: Ein Hochgeschwindigkeitsprozessor, auf dem ein strengerer Bewegungsplaner ausgeführt wird, kann höhere durchschnittliche Druckgeschwindigkeiten bei besserer Druckqualität erzeugen .
Allerdings bewegen sich die auf ARM basierenden Firmwares nur langsam in Richtung fortgeschrittener Bewegungsplaner. Dies ist derzeit ein großer Entwicklungsbereich, der eine bevorstehende Abkehr von Low-End-ARMs wie dem Cortex M3 hin zu noch schnelleren Prozessoren vorantreibt. Es ist eigentlich gar nicht so schwer, einen 84-MHz-Arduino Due zu maximieren, indem man sich auf eine Reihe von Firmware-Funktionen stapelt.
Die Verwendung von 8-Bit-Prozessoren macht Drucker auch LOUDER. Der größte Verbrauch an Prozessorzeit in einem typischen 8-Bit-Drucker ist der Schrittinterrupt, der die Schrittimpulse auslöst, um die Motoren in Bewegung zu versetzen. Es ist ziemlich typisch, dass> 60% aller Taktzyklen eines Atmega AVR zum Auslösen von Schrittimpulsen führen. Da dies als Unterbrechung auftritt, werden andere Verarbeitungsaufgaben, die der Drucker ausführen muss, wie z. B. Beschleunigungsberechnungen und Heizungssteuerung, in die kurzen Zwischenräume zwischen den Ereignissen der Schrittinterrupts gedrückt.
Ohne sorgfältiges Firmware-Design "verdrängen" die Schrittimpulse andere Funktionen wie LCD-Display-Updates und Beschleunigungsberechnungen vollständig. Um höhere Bewegungsraten zu ermöglichen, ohne alle Prozessorressourcen zu verwenden, haben 8-Bit-Firmwares einen Modus, der "Step Doubling" genannt wird und zwei (oder vier oder acht) Schrittimpulse pro Schrittinterrupt auslöst, so dass die Hälfte (oder ein Viertel oder ein Achtel) ausgelöst wird ) Es können beliebig viele Schrittinterrupts verwendet werden, um die gleiche Bewegungsgeschwindigkeit zu erzeugen. Diese Praxis verringert den Engpass des Prozessors, führt jedoch zu einer raueren und lauteren Motorbewegung, da die Schrittimpulse nicht mit konstanter Frequenz, sondern in Bursts ausgelöst werden. In der Tat wird der Mikroschrittpegel des Motors funktionell in einen gröberen Modus abgesenkt, wenn der Schrittinterrupt Doppel- oder Vierfachschritte auslöst. So werden die Motoren lauter, ungenauer,
Ein interessanter Nebeneffekt ist, dass, wenn Sie einen Marlin-basierten Drucker von 1/16 Mikroschritt auf 1/32 Mikroschritt umstellen und die gleiche Druckgeschwindigkeit beibehalten, die Firmware einfach eine schrittweise Verdoppelung startet und die effektive Mikroschrittstufe wieder auf zurückfällt 1/16.
ARM-basierte Firmwares verwenden ebenfalls Step-Doubling, aber die zulässigen Step-Raten sind in der Regel ~ 8-mal höher, bevor Double / Quad-Stepping verwendet wird. Das kann höhere Geschwindigkeiten und / oder ruhigere Bewegungen bedeuten.
Ein weiteres Problem bei 8-Bit-AVRs ist das Fehlen von Hardware-Gleitkommazahlen und die Notwendigkeit, viele Taktzyklen für hochpräzise Berechnungen oder die Verarbeitung sehr großer Zahlen aufzuwenden. Delta-Kinematik, Auto-Leveling-Funktionen, Berechnen von Bewegungen mit extrem hohen Schrittzahlen für große Drucker und andere erweiterte Funktionen erfordern viele Taktzyklen auf einem 8-Bit-Prozessor. Ein schlechtes Firmware-Design oder das unachtsame Hinzufügen einer Funktion, die ein paar zusätzliche Quadratwurzeln und Triggerfunktionen erfordert, kann den Prozessor völlig aus dem Gleichgewicht bringen. Diese Art von Kriechen und Aufblähen von Funktionen hat die Leistung von Marlin im Laufe der Zeit erheblich beeinträchtigt, da immer mehr Leute den alten AVR fragen.
Im Vergleich dazu hat ein 32-Bit-Prozessor nicht nur einen schnelleren Takt und mehr Taktzyklen, sondern kann auch viel komplexere Berechnungen in weniger Taktzyklen durchführen, da er über eine dedizierte Hardwarefunktionalität verfügt, die viele der Schritte eines 8-Bit-Prozessors erledigt Prozessor muss in Software tun.
Funktionieren 8-Bit-Prozessoren? Sicher, sie funktionieren überraschend gut für das, was sie sind und was wir von ihnen verlangen. Sie schränken jedoch zweifellos die Leistung und die Funktionen moderner 3D-Drucker ein. Selbst die heutige Generation von 32-Bit-Prozessoren wird bereits durch Hochgeschwindigkeitsdrucker und mathematisch anspruchsvolle Funktionen voll ausgeschöpft. Der 8-Bit-Prozessor liegt bereits zwei Generationen hinter dem zurück, was als "moderner" 3D-Drucker-Controller gelten würde.