RF1000 / RF2000 : Drucken mit 3-Gang-Schaltung :: STEP_DOUBLER_FREQUENCY
Verfasst: Di 5. Sep 2017, 00:18
Unsere Firmware kann einen Trick, der so wirkt, wie eine Gangschaltung am Fahrrad.
Man simuliert damit bei hohen Geschwindigkeiten einen kleineren Micro-Step Modus.
Das Feature heißt Step-Doubling. Dieses Feature soll mit einer endlichen Prozessorgeschwindigkeit einen Motor bei schnellen Geschwindigkeiten effizienter ansteuern, ohne dass der Prozessor durch seine Auslastung zu schnell ans Limit kommt.
Kurz die Motoransteuerung umrissen:
Die Firmware im Drucker gibt dem Stepperdriver einzelne Takte aus. Jeder Takt dauert eine sehr kurze fast vernachlässigbare Zeit und anschließend wird aus der aktuellen Geschwindigkeit errechnet, wann der nächste Takt ausgegeben werden muss. "Der Wecker" wird gestellt und sobald dieser Klingelt passiert der nächste Interrupt. Es wird wieder (pro aktivem Motor) getaktet.
In diesem Idealzustand läuft der Drucker absolut flüssig. Die Impulse zum weiterbewegen des Motors kommen gleichverteilt am Motordriver an.
Nebenaufgaben wie das Empfangen von Befehlen und Vorbereiten des Druckweges werden zwischen diesen Interrupts in der Wartezeit abgearbeitet.
Problem:
Je schneller wir drucken,
sorgen dafür, dass ab einer bestimmten Verfahrgeschwindigkeit immer zwei Motorschritte oder vier Motorschritte pro Interrupt abgearbeitet werden.
Man verlässt quasi durch ganz schnell aufeinanderfolgende Motortakt-Pakete die echten 32 Microsteps und begibt sich in der Theorie in eine Zwischenwelt zwischen 16 und 32 Microsteps bei Doublestepping (bzw. 8 und 32 Microsteps bei Quadstepping) solange man extrem schnell druckt.
Die Umschaltung erfolgt immer dann, wenn die Druckgeschwindigkeit über die Schaltschwelle hinausgeht oder darunter fällt. Genau wie bei einem Auto mit der Drehzahl bei der Automatik.
Natürlich könnte man meinen, dass das die Qualität schlechter macht.
In diesem Fall verhindern wir aber auch,
Ich kann hier nicht für die offizielle Firmware sprechen, da ich sie nicht mehr kenne. Aber beim Mod hatte ich ernsthaft Probleme, wenn ich eine gewisse Bandbreite an Geschwindigkeiten benutzt habe. (60..80mm/s)
Und auch, wenn ich Kreise drucken wollte, die aus vielen kleinen Teilstücken bestehen.
Geschwindigkeiten Nachgerechnet:
Grenze bei 12000 Steps/s / 152,38 X-Y-Microsteps/mm = 78,75 mm/s als Umschaltpunkt "in den zweiten Gang"
Für Quadstepping, unseren dritten Gang: 2* 78,75 mm/s = 157,50mm/s
Grenze irgendwo ... bei 200 .. 300mm/s. (<- ??? Was soll ich damit?)
Die Idee ist:
Warum schalte ich erst bei 78mm/s runter, wenn die Probleme ca. bei 40mm/s langsam Gewicht bekommen?
Um das zu Zeigen habe ich diese Grenze von 12000 auf 8000 gesenkt.
Grenze bei 8000 Steps/s / 152,38 X-Y-Microsteps/mm = 52,50 mm/s als Umschaltpunkt "in den zweiten Gang"
Für Quadstepping, unseren dritten Gang: 2* 52,50 mm/s = 105 mm/s
Grenze irgendwo ... bei 150 .. 200mm/s.
https://www.youtube.com/watch?v=hXBmBCK ... e=youtu.be
Und es läuft noch immer nicht perfekt. Aber besser als mit 12000!
Also habe ich diese Grenze von 8000 auf 6000 gesenkt.
Grenze bei 6500 Steps/s / 152,38 X-Y-Microsteps/mm = 42,66 mm/s als Umschaltpunkt "in den zweiten Gang"
Für Quadstepping, den dritten Gang ab: 2* 42,66 mm/s = 85,31 mm/s
Grenze irgendwo > 130mm/s dort wirds dann halt langsamer.
Bei dieser Umschalt-Frequenz konnte ich im Menü ganz normal navigieren, als wäre nichts. Dann hat der drucker auf Double-Stepping umgeschaltet und ich konnte immernoch normal navigieren. Kein zähes Menü usw.
Sollte jemand feststellen, dass z.B. kleine Kreise erst ab unter 6000 sauber rauskommen, lege ich den Standard gerne auf 5000 runter Aber ich denke, dass 6500 o.ä. ein guter Normalwert sind, um umzuschalten.
Für alle, die Lust haben diesen Beitrag auf Geschwätz zu prüfen - oder mir beweisen wollten, dass ich in der Firmware irgendwo einen Bock geschossen haben muss, weil das in der originalen Firmware so nicht ist(?):
Stellt in der RF1000.h oder RF2000.h zuerst nichts um und anschließend
bis
ein,
generiert einen G-Code mit einer geraden Druck-Geschwindigkeit (z.B. 25mm/s) bei 100% Speedmulti und erhöht schrittweise und langsam den Speedmulti. Dann könnt ihr die Umschaltfrequenz ertasten.
Bitte dran denken, dass immer 16 Bewegungen im Cache liegen und die Erhöhung der Geschwindigkeit nach erhöhen des Speed-Multis darum bei langen geraden Strecken seine Zeit dauert!
Menü-Anzeige beim Mod 1.37u+ Wer auf seinem Display sehen will, wann umgeschaltet wird, kann sich zum Testen die Mod-Firmware 1.37u oder größer https://github.com/RF1000community/Repe ... evelopment herunterladen.
Dort habe ich Menü-Support und EEPROM-Support für diese Frequenzgrenze eingebaut und einen Marker ins Mod-Menü gelegt, der zeigt, ob Single, Double oder Quadstepping verwendet wird.
Für RF1000: Ich glaube, man müsste aufgrund der limitierten Menübreite genau S/D/Q anstatt Sgl/Dbl/Qud sehen. Stimmt das? Konnte das nur abzählen und nicht testen.
Configuration -> Stepper -> DblFq: Standard 6500, aber einstellbar von {5000 .. 12000} Ich bin gespannt
LG
Man simuliert damit bei hohen Geschwindigkeiten einen kleineren Micro-Step Modus.
Das Feature heißt Step-Doubling. Dieses Feature soll mit einer endlichen Prozessorgeschwindigkeit einen Motor bei schnellen Geschwindigkeiten effizienter ansteuern, ohne dass der Prozessor durch seine Auslastung zu schnell ans Limit kommt.
Kurz die Motoransteuerung umrissen:
Die Firmware im Drucker gibt dem Stepperdriver einzelne Takte aus. Jeder Takt dauert eine sehr kurze fast vernachlässigbare Zeit und anschließend wird aus der aktuellen Geschwindigkeit errechnet, wann der nächste Takt ausgegeben werden muss. "Der Wecker" wird gestellt und sobald dieser Klingelt passiert der nächste Interrupt. Es wird wieder (pro aktivem Motor) getaktet.
In diesem Idealzustand läuft der Drucker absolut flüssig. Die Impulse zum weiterbewegen des Motors kommen gleichverteilt am Motordriver an.
Nebenaufgaben wie das Empfangen von Befehlen und Vorbereiten des Druckweges werden zwischen diesen Interrupts in der Wartezeit abgearbeitet.
Problem:
Je schneller wir drucken,
- desto geringer wird die Zeit zwischen den Motorschritten.
- Desto schwieriger wird es, die Nebenaufgaben in der verfügbaren Zeit zu erledigen.
- ein langsames Menü oder
- ein stockendes Drucken können sich einstellen.
Und auch
Step-Doubling und Step-Quating sorgen dafür, dass ab einer bestimmten Verfahrgeschwindigkeit immer zwei Motorschritte oder vier Motorschritte pro Interrupt abgearbeitet werden.
Man spart sich viel Rechenleistung
Die Soll-Verfahrgeschwindigkeit, was bei Single-Stepping der Interrupt-Taktfrequenz entspricht wird nun mit der halben/viertel Interrupt-Frequenz in zusammengefassten 2er-/4er-Blöcken an den Stepperdriver ausgegeben.Man verlässt quasi durch ganz schnell aufeinanderfolgende Motortakt-Pakete die echten 32 Microsteps und begibt sich in der Theorie in eine Zwischenwelt zwischen 16 und 32 Microsteps bei Doublestepping (bzw. 8 und 32 Microsteps bei Quadstepping) solange man extrem schnell druckt.
Die Umschaltung erfolgt immer dann, wenn die Druckgeschwindigkeit über die Schaltschwelle hinausgeht oder darunter fällt. Genau wie bei einem Auto mit der Drehzahl bei der Automatik.
Natürlich könnte man meinen, dass das die Qualität schlechter macht.
In diesem Fall verhindern wir aber auch,
- dass Verzögerungen auftreten
- die Geschwindigkeit zu langsam, unregelmäßig ausgegeben wird.
- dass die Geschwindigkeit langsamer wird, als kommandiert, weil Interrupts übersprungen werden.
- dass
- der Drucker wegen Puffer-Entleerung absichtlich langsamer druckt oder stottert, weil er nicht mehr mit dem Füllen der Streckenplanung hinterher kommt. (Kleine Kreischen ab 40mm/s und so ^^)
Ich kann hier nicht für die offizielle Firmware sprechen, da ich sie nicht mehr kenne. Aber beim Mod hatte ich ernsthaft Probleme, wenn ich eine gewisse Bandbreite an Geschwindigkeiten benutzt habe. (60..80mm/s)
Und auch, wenn ich Kreise drucken wollte, die aus vielen kleinen Teilstücken bestehen.
Geschwindigkeiten Nachgerechnet:
Code: Alles auswählen
STEP_DOUBLER_FREQUENCY = 12000
Für Quadstepping, unseren dritten Gang: 2* 78,75 mm/s = 157,50mm/s
Grenze irgendwo ... bei 200 .. 300mm/s. (<- ??? Was soll ich damit?)
Die Idee ist:
Warum schalte ich erst bei 78mm/s runter, wenn die Probleme ca. bei 40mm/s langsam Gewicht bekommen?
Code: Alles auswählen
STEP_DOUBLER_FREQUENCY = 8000
Grenze bei 8000 Steps/s / 152,38 X-Y-Microsteps/mm = 52,50 mm/s als Umschaltpunkt "in den zweiten Gang"
Für Quadstepping, unseren dritten Gang: 2* 52,50 mm/s = 105 mm/s
Grenze irgendwo ... bei 150 .. 200mm/s.
https://www.youtube.com/watch?v=hXBmBCK ... e=youtu.be
Und es läuft noch immer nicht perfekt. Aber besser als mit 12000!
Code: Alles auswählen
STEP_DOUBLER_FREQUENCY = 6000
Grenze bei 6500 Steps/s / 152,38 X-Y-Microsteps/mm = 42,66 mm/s als Umschaltpunkt "in den zweiten Gang"
Für Quadstepping, den dritten Gang ab: 2* 42,66 mm/s = 85,31 mm/s
Grenze irgendwo > 130mm/s dort wirds dann halt langsamer.
Code: Alles auswählen
STEP_DOUBLER_FREQUENCY = 5000
Sollte jemand feststellen, dass z.B. kleine Kreise erst ab unter 6000 sauber rauskommen, lege ich den Standard gerne auf 5000 runter Aber ich denke, dass 6500 o.ä. ein guter Normalwert sind, um umzuschalten.
Für alle, die Lust haben diesen Beitrag auf Geschwätz zu prüfen - oder mir beweisen wollten, dass ich in der Firmware irgendwo einen Bock geschossen haben muss, weil das in der originalen Firmware so nicht ist(?):
Stellt in der RF1000.h oder RF2000.h zuerst nichts um und anschließend
Code: Alles auswählen
STEP_DOUBLER_FREQUENCY = 5000
Code: Alles auswählen
STEP_DOUBLER_FREQUENCY = 7000
generiert einen G-Code mit einer geraden Druck-Geschwindigkeit (z.B. 25mm/s) bei 100% Speedmulti und erhöht schrittweise und langsam den Speedmulti. Dann könnt ihr die Umschaltfrequenz ertasten.
Bitte dran denken, dass immer 16 Bewegungen im Cache liegen und die Erhöhung der Geschwindigkeit nach erhöhen des Speed-Multis darum bei langen geraden Strecken seine Zeit dauert!
Menü-Anzeige beim Mod 1.37u+ Wer auf seinem Display sehen will, wann umgeschaltet wird, kann sich zum Testen die Mod-Firmware 1.37u oder größer https://github.com/RF1000community/Repe ... evelopment herunterladen.
Dort habe ich Menü-Support und EEPROM-Support für diese Frequenzgrenze eingebaut und einen Marker ins Mod-Menü gelegt, der zeigt, ob Single, Double oder Quadstepping verwendet wird.
Für RF1000: Ich glaube, man müsste aufgrund der limitierten Menübreite genau S/D/Q anstatt Sgl/Dbl/Qud sehen. Stimmt das? Konnte das nur abzählen und nicht testen.
Configuration -> Stepper -> DblFq: Standard 6500, aber einstellbar von {5000 .. 12000} Ich bin gespannt
LG