Trochę więcej o G-code

29 Kwi 2014

Jak pisałem kilka postów temu, wszystkie (lub prawie wszystkie) niskobudżetowe drukarki 3D sterowane są za pomocą G-code’u – listy testowych poleceń, w podstawowy sposób mówiących drukarce co ma robić żeby wydrukować dany model. Dla przykładu, początek instrukcji do drukowania królika wygląda jak na powyższym zrzucie ekranu. Oczywiście nikt ręcznie nie pisałby całego G-code’u (instrukcje dla królika to plik tekstowy objętości prawie 4 MB) jednak podstawowe polecenia warto znać – w dalszej części tego posta napiszę dlaczego.

Reanimacja przerwanych wydruków

Kilka razy, po części z mojej winy zdarzyło mi się, że drukarka po godzinie pracy przerwała jakiś wydruk (zawiesiła się lub zrestartowała). Nie mogąc w prosty sposób wznowić drukowania i nie chcąc stracić połowy gotowego obiektu, wrzuciłem do edytora tekstowego drukowany G-code (zapisany na karcie SD drukarki) po czym usunąłem z niego wydrukowane już warstwy. Na szczęście na panelu LCD urządzenie wyświetla stan pracy (w tym położenie ekstrudera w osi Z) więc łatwo było znaleźć miejsce w G-codzie, w którym zaczynały się kolejne, jeszcze nie wydrukowane fragmenty.

Przy takiej reanimacji wydruku warto dopilnować, żeby drukarka nie wycofała ekstrudera do pozycji zerowej (polecenie auto home / G28). Grozi to rozjechaniem się wcześniej wydrukowanej części oraz kolejnych warstw – co nawet przy różnicy dziesiątej części milimetra będzie widoczne. Jeśli w drukarce był włączony podgrzewany stół, dobrze jest się upewnić czy w międzyczasie nie ostygł, co groziłoby odklejeniem materiału w trakcie druku brakującego fragmentu.

Fragment szpuli po nieudanej reanimacji

Zmiana filamentu

Parę dni temu po tym, jak po aktualizacji Ubuntu przestało mi działać sterowanie drukarką z komputera, postanowiłem usprawnić sobie proces poziomowania stołu oraz wymiany filamentu. Napisałem do tego 2 proste G-codowe skrypty. Pierwszy z nich wygląda tak:

[code language=”css”]
G28 ; ustaw ekstruder w pozycji zerowej
G1 Z20 F5000 ; podnies ekstruder o 20 mm
G1 X100 Y100 F15000 ; idz na srodek stolu (100:100) z predkoscia 15000 mm/min
M109 S190 ; ustaw temp. dyszy na 190 st. i czekaj az zostanie osiagnieta
G1 E-25 F100 ; wycofaj 25 mm filamentu z predkoscia 100 mm/min
M1 S60 ; poczekaj 60 sek
G1 E10 F50 ; wycisnij 25+10 mm filamentu
M1 S10 ; poczekaj 10 sek
G28 ; ustaw ekstruder w pozycji zerowej
[/code]

https://github.com/Krzysztof-Matusiewicz/3d-printing/blob/master/PrintersPrograms/filchange.gcode

Składnia G-code’u jest trywialna – każda linia składa się z kodu polecenia (M104, G28, G1 itp) po którym następują jego parametry (współrzędne, wartość temperatury, czasu itp). Zapisanie takiego kodu w pliku na karcie SD i odpalenie go na drukarce (lub ew. przesłanie z komputera) powoduje wykonanie powyższej sekwencji. Pierwsza przerwa (60 sek) jest przeznaczona na wyjęcie starego filamentu, zmianę szpuli oraz włożenie nowego filamentu do ekstrudera. Druga – 10 sek – na usunięcie nadmiaru materiału wyciśniętego z dyszy.

Poziomowanie stołu

Poziomowanie stołu względem dyszy jest podstawową czynnością kalibracyjną drukarki i warto je wykonywać co jakiś czas – w zależności od modelu drukarki (te o mniej sztywnej konstrukcji będą wymagały tego częściej). Chodzi o to, żeby głowica w 4 rogach stołu w najniższej pozycji (Z=0) lekko go dotykała – co wymaga regulacji nachylenia stołu za pomocą 4 śrub ustawionych w rogach:

Ponieważ pojedyncza warstwa wydruku ma zwykle 0.1 – 0.3 mm, niedokładność ustawienia stołu względem dyszy już o 0.05 mm może mieć negatywny wpływ na jakość wydruku (przede wszystkim na odklejanie lub rozmazywanie pierwszej warstwy).

Jednym ze znanych sposobów na poziomowanie stołu jest wykorzystanie kartki papieru – w poszczególnych rogach obszaru roboczego należy ją wsunąć pod dyszę i odpowiednio wyregulować najbliższą śrubę. Odległość między głowicą a stołem powinna być taka, żeby wsunięciu papieru towarzyszył wyczuwalny opór (jednak kartka nie powinna ulec przedarciu):


Ponieważ ustawianie głowicy z panelu drukarki jest dość uciążliwe, poniższy G-code pozwala to zautomatyzować:

[code language=”css”]
M140 S60 ; ustaw temp. stołu na 60 st. i kontunuuj
M104 S190 ; ustaw temp. dyszy na 190 st. i kontunuuj
G28 ; ustaw ekstruder w pozycji zerowej
G1 Z5 F5000 ; podnies ekstruder o 5 mm
M109 S190 ; ustaw temp. dyszy na 190 st. i czekaj az zostanie osiagnieta
G1 E-3 F50 ; wycofaj 3 mm filamentu z predkoscia 50 mm/min
M190 S60 ; ustaw temp. stołu na 60 st. i czekaj az zostanie osiagnieta

G28  ;  ustaw ekstruder w pozycji zerowej
M1 S30 ; poczekaj 30 sek

G1 Z5 F5000 ; podnies ekstruder o 5 mm
G1 X200 Y200 F15000 ; przesuń ekstruder do pozycji [200:200]
G1 Z0 F5000 ; opuść ekstruder
M1 S30 ; poczekaj 30 sek

G1 Z5 F5000
G1 X200 Y0 F15000
G1 Z0 F5000
M1 S30

G1 Z5 F5000
G1 X0 Y0 F15000
G1 Z0 F5000
M1 S30

G1 Z5 F5000
G1 X0 Y200 F15000
G1 E15 F50 ; wycisnij 3+15 mm filamentu
M1 S10 ; poczekaj 10 sek
G1 Z0 F5000 ; opuść ekstruder
[/code]

https://github.com/Krzysztof-Matusiewicz/3d-printing/blob/master/PrintersPrograms/calibration.gcode

Zmiana koloru w trakcie wydruku

Zmiana filamentu w trakcie pracy drukarki jest jednym ze sposobów na druk w kilku kolorach – tak jak w przypadku tabliczki z numerem mieszkania którą wykonałem kilkanaście dni temu. Można wykorzystać opcję pauzy (wybierając ją z panelu drukarki lub z komputera, jeśli urządzenie jest do niego podłączone) lub, co jest bezpieczniejszym rozwiązaniem, umieścić odpowiednie polecenia wstrzymujące wydruk w G-codzie wykonywanego modelu:

[code language=”css”]
; … wlasciwy G-code do momentu zmiany koloru
G1 Z50 F5000 ; podnies ekstruder do Y=50 mm
G1 E-25 F100 ; wycofaj 25 mm filamentu z predkoscia 100 mm/min
M1 S60 ; poczekaj 60 sek
G1 E20 F50 ; wycisnij 25+20 mm filamentu z predkoscia 50mm/min
M1 S10 ; poczekaj 10 sek
; reszta wlasciwego G-code’u …
[/code]

Współrzędną Y, do której zostanie podniesiona dysza, trzeba dobrać odpowiednio do miejsca w którym zmieniany jest filament. Podniesienie jej jest o tyle istotne, że rozgrzana głowica zatrzymana nawet na chwilę w miejscu gdzie skończyła drukować spowoduje stopienie się materiału w jej najbliższej okolicy. Należy też zwrócić uwagę na linie „G1 E-25 F100” oraz „G1 E20 F100” – wartość przy E oznacza ilość filamentu która przeszła przez ekstruder od początku wydruku, lub ew. od zresetowania położenia silnika poleceniem „G92 E0”. Powyższy kod najlepiej umieścić tuż przed zmianą warstwy, za komendą „G92 E0”. I przede wszystkim warto wiedzieć co się robi – w najgorszym wypadku zły kod sterujący może nawet uszkodzić drukarkę.

Najczęściej używane polecenia

Lista najczęściej używanych kodów została przeniesiona na osobną stronę.


O autorze

ARTYKUŁY POWIĄZANE
  • asd

    Witam
    Mam taką sytuację. Wydruk się zatrzymał. Wyłączyłem grzanie, podniosłem do góry głowicę i na ekranie nie było miejsce gdzie się zawiesiło. Mam tylko wysokość wydruku 57,86 mm i teraz pytanie. Jak znaleźć tę warstwę w g-code? Z góry dziękuję za sugestie.
    Pozdrawiam

    • Krzysztof Matusiewicz

      Z powodu dłuższego urlopu odpisuję dopiero teraz :) Jak w końcu wyszło z reanimacją wydruku? te pół milimetra to było za wysoko czy za nisko?

      Kiedyś parę razy zdarzyło mi się, że musiałem kontynuować drukowanie po jakiejś awarii (np. skończonym lub zablokowanym filamencie albo zresetowanej drukarce). Jeśli drukarka się zawiesiła, oczywiście trzeba wyzerować pozycję za pomocą auto-home (bo nie wie gdzie się znajduje ekstruder). W przeciwnym wypadku lepiej tego nie robić – zerowanie może nie być aż tak powtarzalne i jest duże ryzyko, że na wydruku będzie widać przesunięcie w X-Y o ułamek milimetra.

      Jeśli chodzi o pomiar wysokości obiektu przy zawieszeniu drukarki, można to zrobić za pomocą ekstrudera – ustawiając go z lekkim zapasem nad częścią wydrukowanego modelu i zjeżdżając w dół, aż dysza zacznie dotykać wydruku. Jak już się znajdzie konkretną warstwę na której drukowanie zostało przerwane, można spróbować znaleźć miejsce na tej warstwie (bo druk pewnie się zawiesił gdzieś w trakcie jej tworzenia). Prościej jednak będzie puścić druk od początku danej warstwy. Jak jej kawałek zostanie położony ponownie, nic się strasznego nie stanie (choć pewnie na wydruku będzie widać niewielki ślad po reanimacji), Warto też na początek mocno zmniejszyć prędkość drukowania (w razie gdyby ekstruder był za nisko i doszło do kolizji z istniejącą warstwą, mniejsze jest ryzyko że silniki zgubią kroki lub wydruk się oderwie od stołu).

      • asd

        Za wysoko. I tak też zrobiłem, że ustawiłem od początku warstwę. Ustawiłem też tak, by na początku zjeżdżało pod kątem w dół, żeby nie zahaczyć o wydruk.

        Z jakiego powodu może się wieszać długotrwały wydruk (ok 11 godzin)? Grzeje się coś?

        • Krzysztof Matusiewicz

          A drukujesz z karty SD czy z komputera? Przy tak czasochłonnych wydrukach lepiej jest odłączyć w ogóle drukarkę od peceta. Co to za drukarka i jaką ma elektronikę? Myślę że grzanie nie ma wiele do rzeczy, przynajmniej nie po tak długim czasie.

          • asd

            próbowałem i z PC i z SD. Próbowałem też odłączony i podłączony pod PC. Zwykły chiński Reprap Prusa i3 z płytą MKS gen 1.3 z Aliexpress.

          • Krzysztof Matusiewicz

            I często się zacina? Puszczałeś ten długi wydruk wiele razy?

          • asd

            4 albo 5 razy mi się zacięło i dałem sobie spokój. Teraz drukuje takie po 2-3godziny.

          • asd

            Doszedłem do tego i zacina się mniej. Po prostu wyjąłem przedłużacz do kart sd.

            Pozdro

Ostatnie komentarze