Forum: Mikrocontroller und Digitale Elektronik gcode Fragen


von Glenn R. (glenn_r)


Lesenswert?

ich hab ein paar Fragen zum Gcode für 3ddrucker(ich hab schon in der 
reprap wiki nachgeschaut, sind aber immer noch nen paar Fragen):

-G90 was bedeutet setzt alle Koordinaten relative zum origin der 
Maschine?
-G92 was bedeutet das? versteh ich überhaupt net
-M82?
-G1 E-Parameter(z.B.: 20): heist das soviel wie der Druckkopf
legt zwar.B.: 50mm Wegstrecke zurück, aber nur die ersten 20mm werden 
bedruckt?

von Simon H. (simi)


Lesenswert?

G90: Ab diesem Befehl werden alle Koordinaten absolut angegeben. Das 
heisst z.B.

G1 X50
G1 X52

fährt die X-Achse zuerst zur absoluten Position 50, also 50(mm) vom 
Nullpunkt entfernt, und dann noch zwei Millimeter weiter.

Der zweite Befehl im relativen Mode müsste dann

G1 X2

heissen, damit er dasselbe tut.

G92 verschiebt den Nullpunkt einer oder mehrerer Achsen. Der hat ab dann 
die Koordinate(n) 0. Je nach G90 halt relativ zu dem Punkt, wo Du Dich 
befindest, oder relativ zum bisherigen Nullpunkt.

G92 ohne Parameter setzt einfach den Punkt, wo sich der Kopf gerade 
befindet auf Koordinaten 0,0,0,0

M82: Dasselbe wie G90, aber auf den Extruder bezogen.

G1 E Parameter: Das ist der Weg, den der Extruder zurücklegen muss, 
während sich der Druckkopf bewegt. Also letztendlich, wie viel Plastik 
extrudiert wird.

Ein 3D Drucker ist ja nichts anderes als eine 4-achsige CNC-Maschine. 
Und Du programmierst synchrone Bewegungen, die einzelne dieser vier, 
oder auch alle vier Achsen einbeziehen.

Also z.B. (mal relativ-Mode angenommen):

G1 X10 Y15 E1.3

bedeutet: Fahre 10(mm) nach X, 15(mm) nach Y (0(mm) nach Z) und 
extrudiere dabei 1.3(mm) Plastik. Und ganz wichtig: Die Bewegung muss so 
erfolgen, dass alle drei Achsen gleichzeitig fertig sind, die müssen 
also synchron laufen. Das heisst, dass die Bewegungsrichtung klar 
definiert ist, sowie, wieviel plastik pro mm Verfahrweg abgelegt wird, 
also, wie dick die Platikwurst wird.

(mm) habe ich übrigens immer in Klammer geschrieben, weil das nicht 
zwingend mm sind.

Zum besseren Verständnis, was das mit dem "Origin" auf sich hat, 
solltest Du Dir folgendes überlegen: Eine CNC-Maschine, ganz gleich 
welcher Art, "denkt" in der Regel relativ. Ein Schrittmotor macht eine 
bestimmte Anzahl Schritte, damit weiss die Maschine, wie viel sie sich 
(relativ zur Position vorher) bewegt hat. Wo sie sich absolut befindet 
weiss sie erstens oft nicht a priori, und zweitens ist das oft weniger 
wichtig, als man glauben würde.

Stell Dir eine riesen Maschine vor. Du spannst da ein kleines Werkstück 
ein. Und genau 3.45mm rechts und 4.132mm oberhalb der linken unteren 
Ecke soll die ein Loch bohren. Dann programmierst Du die Maschine so, 
dass sie sich einen Taster packt, damit die linke und die untere Kante 
des Werkstücks ertastet, und dann diese ertasteten Koordinaten als 0 
annimmt. Und relativ dazu muss sie dann genau arbeiten. Wo das ganze 
absolut ist, ist nur insofern wichtig, als dass sichergestellt werden 
muss, dass die Maschine nicht in irgendeinen Anschlag läuft.

Bei einem 3D-Drucker ist es üblicherweise so, dass der für jede Achse 
einen Taster hat, der betätigt wird, wenn sich der Kopf in der linken 
unteren vorderen Ecke befindet oder so. Du programmierst das Ding also 
z.B. so, dass diese Position ertastet wird, und dann die Koordinaten an 
diesem Punkt auf 0 gesetzt werden.
Was aber, wenn der Arbeitsbereich gar nicht da ist? Vielleicht fängt der 
erst jeweils 5cm rechts und hinter dem ertasteten Punkt an? Dann kannst 
Du eben so eine Nullpunktverschiebung machen und daraufhin wieder mit 
dem gleichen gcode File arbeiten. Dann ist einfach alles entsprechend 
verschoben.

Gruäss
Simon

: Bearbeitet durch User
von Glenn R. (glenn_r)


Lesenswert?

Thanks!! sehr gut erklärt, hab fast alles verstanden.
Eine Frage hab ich aber noch: bezieht sich die E Länge jetzt auf die 
Länge des Fillaments das geschmolzen wird oder auf den tatsächlich vom 
Druckkopf zurückgelegten Weg?

Weil dann wären ja, bei deinem Beispiel(0x>10X, 0Y>15Y, E1.3)
Der Weg den der Druckkopf zurücklegt: 18.028mm
bei Möglichkeit a) nur in den ersten 1.3mm wird gedruckt, der erst wird 
ohne drucken abgefahren
oder b) auf dem ganzen, 18.028mm langen, Weg genau 9,189quadratmm 
aufgetragen werden? Wenn ja, wofür ist dann die Feedrate F?

von Simon H. (simi)


Lesenswert?

E bezieht sich auf die Länge des Filaments vor dem Schmelzen. Wenn Du 
also den Durchmesser (1.75mm, 3mm) kennst, dann kannst Du anhand des 
E-Parameters berechnen, wieviel Kubikmillimeter auf dem gesamten Weg, 
den der Druckkopf zurücklegt, durch das Hotend drückt.

Die "Feedrate" ist etwas, das man gerne mal falsch versteht. Der Begriff 
hat seinen Ursprung nämlich in den "üblichen" CNC-Maschinen. --> 
Vorschub. Also, wie schnell das Werkzeug verfahren muss. Mit dem 
Kunststoffvorschub hat das nichts zu tun.

Also was sagt F denn nun? Damit sagst Du dem Drucker, wie schnell er den 
Kopf im dreidimensionalen Raum bewegen soll.

G1 X100 F100 bewegt den Kopf also innerhalb einer Sekunde um 100mm nach 
X.

G1 X100 Y100 F100 bewegt den Kopf innerhalb Wurzel-zwei Sekunden 
diagonal 100 nach X und 100 nach Y. Halt so, dass die Geschwindigkeit 
100mm/s beträgt.

Und was hat das nun mit dem Plastik-Vorschub zu tun?

G1 X100 Y100 E5 F100 macht dasselbe wie oben, aber gleichzeitig schiebt 
er während dieser Wurzel-zwei Sekunden das Filament um 5mm vor.

Wie man auf diese 5 mm kommt (man=der Slicer) kann man so ungefähr so 
beschreiben:

Er will eine ...mm breite Wurst. Er weiss, dass er ...mm über dem 
unteren Layer ist. Damit weiss er, wie viel Quadratmillimeter die Wurst 
haben muss. Er weiss, wie lang der Verfahrweg ist. Damit weiss er, wie 
viel Kubikmillimeter er extrudieren muss. Er Weiss, wie dick das 
Filament ist (1.75mm z.B.). Damit weiss er, wie viel Filament er 
verfahren muss.

Nebenbei bemerkt: Die Dicke der Düse spielt dabei nur eine sehr 
untergeordnete Rolle. Resp. gar keine. Einige Slicer wollen sie dennoch 
wissen, allerdings nur für Plausibilitätsüberprüfungen. Wenn Du mit 
einer 0.35mm Düse eine 1mm dicke Wurst machen willst, geht das kaum.

Gruäss
Simon

: Bearbeitet durch User
von Simon H. (simi)


Lesenswert?

Ach ja, zum letzten Absatz muss ich vielleicht noch was ergänzen, das 
noch wichtig ist:

Der Drucker unterscheidet nicht bloss zwischen "drucken" und "nicht 
drucken". Wieviel Kubikmillimeter pro Sekunde (oder eben pro mm 
Verfahrweg) er ablegt, ist wesentlich! Und damit "spielt" der Slicer 
auch!

Dazu muss man wissen, dass der flüssige Kunststoff eine gewisse 
Elastizität hat. Stell Dir vor, der Druckkopf fährt konstant mit 10mm/s. 
Die Düse ist 0.35mm dick. Jetzt könnte man meinen, dass der 
Extruder-Vorschub genau so schnell sein muss, dass eine 0.35mm-Wurst 
sauber abgelegt wird. In Luft würde diese 0.35mm Wurst exakt mit 10mm/s 
aus der Düse kommen. Tatsächlich aber kann der Drucker mehr durch die 
Düse drücken, was darin resultiert, dass die Wurst "aufquillt". Das wird 
er auch machen! Denn so drückt er sie auch richtig fest auf den unteren 
Layer, sodass die Verschweissung besser wird.
Umgekehrt kann er auch weniger Kunststoff extrudieren, als er "müsste". 
Das heisst, dass die Wurst "langgezogen" wird. Das macht er z.B. gerne, 
wenn er sog. "Bridges" ziehen muss. Also Kunststoffbrücken über freie 
Luft. Durch das "Langziehen" verhindert er, dass die Kunstoffwurst 
"durchhängt".

Der E-Parameter ist, wie Du siehst, eine extrem wichtige Komponente, 
deren Berechnung einen Grossteil der Qualität eines Slicer ausmacht.

Ach ja, und was Du auch noch wissen solltest: Der Slicer ist klug. Der 
Drucker ist dumm. Das einzige, was der Drucker weiss, ist, wieviele 
Pulse er auf die Motoren geben muss, damit die entsprechenden Achsen 
sich um einen Millimeter bewegen.

... Wobei... soooo dumm darf er dann eben doch nicht sein. Denn erstens 
muss er Grenzwerte einhalten. Wenn er also in einer Achse schneller 
fahren soll, als er kann, muss er diese und natürlich auch alle anderen 
Achsen entsprechend drosseln.
Dann fährt er noch definierte Beschleunigungsphasen, die er natürlich 
auch synchronisieren muss.
Und schliesslich hat er noch eine gewisse Intelligenz insofern, dass er 
vorausrechnet, ob er zwischen der aktuellen Verfahung und der nächst 
folgenden abbremsen und neu beschleunigen muss, oder ob er die Bewegung 
"durchziehen" kann.

Aber in erster Näherung kann man, um das Prinzip gCode zu verstehen, 
annehmen: Drucker = Dumm wie Stroh. Der steuert nur Achsen und hat keine 
Ahnung, warum.

Das ist übrigens bei allen CNC Maschinen so. Der Slicer entspricht dem 
CAM. Und das berechnet alles, was es braucht, um aus einem CAD-Modell 
ein Teil zu fräsen, ohne dass einem das ganze Fräsersortiment um die 
Ohren fliegt. Die CNC Maschine macht's dann einfach.

: Bearbeitet durch User
von Glenn R. (glenn_r)


Lesenswert?

Nochmal zur Feedrate:

wie berechne ich denn das Tempo der einzelnen Achse wenn z.B.: X33mm 
zurücklegen muss und y45,2? Gibt es da eine Formel?

von Karl H. (kbuchegg)


Lesenswert?

Glenn Rathke schrieb:
> Nochmal zur Feedrate:
>
> wie berechne ich denn das Tempo der einzelnen Achse wenn z.B.: X33mm
> zurücklegen muss und y45,2? Gibt es da eine Formel?


Aus wessen Sicht?
Muss das der Programmteil bestimmen, der letztenendes den gcode erzeugt, 
oder redest du vom Drucker selber, der eine entsprechende Bewegung in 
die Ansteuerung von zb Schrittmotoren umsetzen muss?

Wenn letzteres.
Taucht da das Problem überhaupt auf?
Denn eine beliebige 2D-Bewegung wird von den Mechaniken nicht so 
umgesetzt, dass sie den Motortreibern (Schrittmotoren) eine x und eine y 
Geschwindigkeit vorgeben, sondern die 2d-Bewegung wird mittels eines 
Bresenham Verfahrens in einzelne synchronisierte Schritte der Motoren 
umgesetzt.

Aber abgesehen davon. Du hast ein rechtwinkeliges Dreieck ...
1
                      *
2
                     cb
3
                   cc b
4
                 cc   b
5
               cc     b 45.2
6
             cc       b
7
           cc         b
8
          *aaaaaaaaaaa+
9
               33mm
... und kannst damit alle Dinge aus der Trigonometrie anwenden, die du 
in der SChule gelernt hast. Zb. den berühmten Phythagoras, oder die 
Definitionen von Sinus und Cosinus, ähnliche Dreiecke, Strahlensatz etc. 
etc. Alleine dadurch, dass du ein rechtwinkeliges Dreieck hast, weil ja 
die X-Achse und die y-Achse einen rechten Winkel bilden, sind die 
meisten Berechnungen recht einfach.
Im koknkretem Fall: du weißt, wie weit in x-Richtung verfahren wird (a 
in der Zeichnung), du weißt wie weit in y-Richtung verfahren wird (b in 
der Zeichnung), der Phythagoras
1
        a_quadrat + b_quadrat = c_quadrat
sagt dir daher, wie lang die Resultierende c ist (die also der Kopf 
tatsächlich zurück legt) und daraus und mit gegebenen Zeiten kannst du 
dir dann auch Geschwindigkeiten berechnen.
Bzw. in der Umkehrung aus einer gegebenen Geschwindigkeit und der Länge 
c durch Anwenden der Definitionen von Sinus und Cosinus die 
entsprechenden Längen für a und b bzw. die Aufteilung der 
Geschwindigkeit entlang von c in die notwendigen Komponenten für a und b 
durch den Strahlensatz, der in diesem Fall einfach zum Dreisatz mutiert.

Oder hab ich dich jetzt komplett missverstanden?

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.