Instalacja i konfiguracja LinuxCNC w programie Stepconf

LinuxCNC jest całkowicie darmowym programem do obsługi maszyn numerycznych, tokarek itp. Dla początkujących i amatorów garażowych to pozycja obowiązkowa. W artykule opiszemy tylko podstawy instalacji, bo jest tego pełno w internecie i nie powinno sprawiać problemów. Bardziej skupimy się na konfiguracji silników krokowych i przygotowaniu maszyny do pierwszej obróbki. LinuxCNC obsługuje także silniki servo, niestety nie mieliśmy okazji się jeszcze nimi bawić.
1. Instalacja LinuxCNC
Na stronie http://www.linuxcnc.org/index.php/english/download znajdziemy plik .iso z całym systemem operacyjnym Debian. Zawarty jest w nim program LinuxCNC, całkowicie darmowy, do sterowania maszynami numerycznymi: obrabiarkami, ploterami, ramionami robotów itp. Instalacja jest banalna i opisana w dokumentacji. My za pomocą programu Win32DiskImager zapisaliśmy plik .iso na pendrive. Potem zabawa w BIOS-ie z ustawieniami kolejności rozruchu (boot manager): wybieramy USB i nasz dysk przenośny. Zapisujemy ustawienia, uruchamiamy komputer ponownie i wybieramy tryb instalacji „graphical”, czyli graficzny. Dalej ustawiamy język systemu, połączenie z internetem (można pominąć), wybieramy dysk do instalacji, najlepiej całą pustą partycję, i klikamy next (dalej), aż rozpocznie się instalacja. Po tym zmieniamy znowu rozruch na dysk twardy. Po włączeniu systemu łączymy się z internetem i instalujemy aktualizacje.
Bez problemu możemy działać na dwóch systemach operacyjnych. Na początku musi być zainstalowany system Windows lub macOS. Linux doinstaluje GRUB, czyli ekran z wyborem systemu operacyjnego. Domyślnie, jeśli nic nie klikniemy w ciągu kilku sekund, odpalany będzie LinuxCNC. Kolejność można zmienić w plikach konfiguracyjnych.
Nie aktualizujemy systemu do nowszej wersji. Jeżeli to zrobimy, nasz program nie będzie już działał. Instalujemy wyłącznie nowe wersje programów i zabezpieczeń systemu!
Ostatnim krokiem jest odzyskanie miejsca na naszym przenośnym dysku. Tak się złożyło, że nagle stracił swoją pierwotną pojemność. Zrobimy to w świeżo zainstalowanym Linuksie. Otwieramy emulator terminala z paska Programy i wpisujemy:
sudo apt-get install gparted
Po wpisaniu hasła administratora w Programy/Akcesoria zainstaluje się gparted, program do partycjonowania dysków. Otwieramy go, znowu podajemy hasło administratora, z górnego lewego rogu wybieramy nasz dysk, usuwamy wszystkie partycje i tworzymy jedną maksymalnie dużą fat32. Zatwierdzamy zmiany i wszystko gotowe. Teraz przechodzimy do konfiguracji LinuxCNC.
2. Konfiguracja LinuxCNC
Aby dostosować program do swojej maszyny, musimy przejść przez konfigurację programem CNC/Stepconf. Znajdziemy go w zakładce menu LinuxCNC. Na początku otwiera się okno, w którym mamy wybór stworzenia nowej konfiguracji lub edytowania istniejącej. Dodatkowo można zaznaczyć opcje stworzenia skrótów do folderu z plikami konfiguracyjnymi oraz do pliku startowego z konfiguracją ustawioną przez nas.
Następnie mamy dostęp do podstawowych ustawień maszyny. Tam wpisujemy jej nazwę, liczbę osi i jednostki, jakimi będziemy się posługiwać: mm albo cale. Niżej są ustawienia sterownika. Wybieramy nasz typ z listy, a jeżeli go tam nie znajdziemy, wpisujemy jego dane ręcznie. Nasz sterownik to Pololu na scalaku A4989 i nie ma go na liście. W dokumentacji technicznej układu scalonego znajdujemy wszystkie dane o czasach sygnałów sterujących ruchem silnika.

Zdj. 1. Czasy przełączania sygnałów STEP i DIR
Do uzupełnienia są cztery pola:
Step Time (czas kroku) – czyli jak długo trwa sygnał kroku, w zależności od tego, czy ustawimy stan wysoki, czy niski. Dla naszego sterownika jest to 1000 ns.
Step Space (przerwa kroku) – minimalny czas pomiędzy sygnałami kroku, czyli u nas czas trwania stanu niskiego. Tu znowu wpiszemy z tabeli 1000 ns.
Direction Hold (utrzymanie kierunku) – jak długo utrzyma się stan pinu kierunku po zmianie sygnału kierunku. W datasheecie to Hold Duration i wynosi 200 ns.
Direction Setup (ustawienie kierunku) – ile czasu potrzeba na zmianę kierunku po ostatniej zmianie kroku. W dokumentacji Setup duration wynosi 200 ns.
Następnie do wyboru jest liczba używanych portów równoległych. My posiadamy jeden, więc zaznaczamy One parport.
W tym dziale zostaje nam zabawa z base period maximum jitter – maksymalnym odchyleniem okresu bazowego. Dziwna nazwa, ale chodzi o to, jak szybko komputer przerwie wykonywaną aktualnie czynność i odpowie na wysłane zapytanie. Aby uzyskać tę wartość, wykonujemy pomiar przyciskiem Test. Przez ten czas obciążamy komputer: uruchamiamy podstawowe programy, kopiujemy pliki, odtwarzamy muzykę itp. Oczywiście bez przesady, ale jeżeli wpiszemy za niską wartość, to nasza maszyna może zgłupieć, np. podczas uruchomienia się wygaszacza czy ruchu myszką. Po kilku minutach testu zapisujemy maksymalny czas pomiaru. Im większy czas, tym mniejsza częstotliwość kroków silnika i tym mniej płynnie będzie on działał. Wartość odchyłu zależy od konfiguracji naszego komputera: procesora, płyty głównej, karty graficznej, błędów systemu. Wartości poniżej 40000 ns to dobry wynik, czasy dużo większe dyskwalifikują nasz komputer.

Zdj. 2. Podstawowe informacje w ustawieniach Stepconf
Wszystkie parametry wpisane, przechodzimy do konfiguracji portu równoległego. Do dostosowania mamy 17 wyjść oraz 5 wejść. Tyle pinów w zupełności wystarczy dla prostej maszyny, nawet 4-osiowej. Potrzebujemy minimalnie po dwa wyjścia na krok i kierunek dla każdej osi, sygnał włączenia napięcia, włączenie wrzeciona oraz chłodziwo, ewentualnie odkurzacz do wiórów. Co do wejść, użyjemy minimalnie dwóch: jednego na wszystkie limity i bazujące oraz wejścia ESTOP.
-
ESTOP jest to elektroniczny wyłącznik awaryjny. Nie odcina on zasilania całkowicie, a jedynie unieruchamia program. Zalecamy dodać prawdziwy przycisk awaryjny, rozłączający zasilanie całej maszyny w razie zawieszenia się systemu lub programu, uszkodzenia wejścia w płycie głównej itp.
-
Limity to po prostu krańcówki. Dojazd do którejkolwiek spowoduje zatrzymanie programu. Nie dostaniemy informacji, do której, chyba że ustawimy trzy wejścia jako limity X, Y, Z. Jest to nieużyteczne, ponieważ dojazd osi do limitu zauważymy wizualnie.
-
Bazowanie jest to, prościej mówiąc, poszukiwanie początków osi, czyli punktów zerowych. Wystarczy nam jedno wejście, i to wspólne z krańcówkami. Jak odbywa się proces bazowania? Mamy dwie opcje: albo bazowanie wybranej osi, albo wszystkich jednocześnie. Komputer wie, którą oś bazuje i do jakiej krańcówki ma dojechać. Standardowo (w zależności od ustawienia w dalszej części Stepconf) wygląda to następująco:
- oś rozpoczyna ruch w pewną stronę
- jedzie do momentu, aż natrafi na krańcówkę
- zjeżdża z niej, a moment jej rozwarcia oznacza jako punkt początkowy
- do punktu początkowego doliczana jest wartość zadeklarowanej długości osi (w dalszej części ustawień Stepconf)
Po tej czynności program wie, gdzie są limity, i jakbyśmy bardzo chcieli, nie załączymy krańcówki. Dojazd do niej spowoduje po prostu zatrzymanie ruchu bez zatrzymania programu. Od tej pory krańcówki będą działać na wszelki wypadek, np. zgubienia kroku czy przestawienia się osi jakimś sposobem.
Dostępne są jeszcze opcje zmiany sygnału na przeciwny, gdyby coś działało odwrotnie.

Zdj. 3. Konfiguracja osi
3. Konfiguracja osi
Motor Steps Per Revolution (liczba kroków na obrót) – jest to liczba pełnych kroków, które wykona silnik w trakcie obrotu. U nas silnik typu 57h76-3008b posiada kąt kroku 1,8°. Policzmy zatem: 360/1,8 = 200 kroków.
Driver Microstepping (mikrokroki ustawione w sterowniku) – my w sterowniku ustawiliśmy zworkami podział kroku na 16, zatem wpisujemy 16.
Pulley Ratio (stosunek przekładni) – jeżeli maszyna posiada przekładnię, wpisujemy jej stosunek jako przekładnia silnika:przekładnia osi. U nas nie ma przekładni, więc stosunek wynosi 1:1.
Leadscrew Pitch (skok osi) – tu należy podać skok śruby napędowej lub pasków. Nasza oś na śrubie trapezowej ma skok 4 mm/obrót. Jeżeli maszyna porusza się w niewłaściwym kierunku, można podać wartość ujemną.
Maximum Velocity (maksymalna prędkość osi) – wartość dobieramy z obliczeń lub metodą prób i błędów. Ustawiamy coraz większą prędkość i testując oś, sprawdzamy, czy silnik po obciążeniu nie zgubi kroków. Obciążenie możemy symulować, pchając oś ręką w kierunku przeciwnym do ruchu.
Maximum Acceleration (maksymalne przyspieszenie osi) – tu znowu możemy próbować obliczać przyspieszenia maksymalne, ale później i tak musimy przetestować je w praktyce. Tak jak w poprzednim przypadku, wartość dobieramy eksperymentalnie, zwiększając ją stopniowo. Klikamy przycisk Test this axis, wpisujemy prędkość oraz przyspieszenie, wartość posuwu w test area i klikamy Run. Oś będzie wykonywać ruch w obu kierunkach, a my dodajemy obciążenie od siebie. Szukamy maksymalnych wartości tych dwóch parametrów, przy których silnik nie zgubi kroków.
Home Location (pozycja początku osi) – pozycja w przestrzeni, w której znajduje się punkt początkowy osi. Ustawi się on po zbazowaniu na wskazany punkt, domyślnie zero.
Table Travel (zakres ruchu osi) – tu podajemy dwa punkty w przestrzeni definiujące zakres ruchu naszej osi. Pozycja początkowa (home location) musi się zawierać w tym zakresie i nie być równa żadnej z dwóch wartości. Jeżeli nasza oś ma posuw maksymalny 0,5 metra, podajemy wartości np. 1 oraz -499 mm. Wtedy pozycja początkowa może mieć wartość 0. W praktyce program sam poprawi nieprawidłowo wpisane wartości.
Home Switch Location (pozycja krańcówki bazującej) – pozycja, do której porusza się oś przy bazowaniu. Wartość nie może być taka sama jak dla krańcówki, jeżeli działają wspólnie. Przy niewłaściwej konfiguracji pokaże nam się błąd: joint limit error.
Home Search Velocity (prędkość szukania początku) – wartość definiuje szybkość dojazdu do krańcówki przy bazowaniu. Prędkość ustawiamy nieco wolniejszą niż maksymalna (chyba że maksymalna jest mała :)), aby silnik zdążył wyhamować przed limitem. Gdy oś porusza się nie w tę stronę, w jaką byśmy chcieli, wpisujemy po prostu wartość ujemną.
Home Latch Direction (kierunek ustawienia początku) – mamy do wyboru dwie opcje:
- Same (ten sam) – przy dojeździe i zwarciu krańcówki oś cofnie się i wjedzie na nią ponownie z małą prędkością. Po ponownym zwarciu krańcówki zostanie zapisany punkt początkowy.
- Opposite (przeciwny) – po dojeździe i zwarciu krańcówki oś powoli cofa się. Po rozwarciu zostanie ustanowiony punkt początkowy.
Poniżej uzyskamy informacje o wartościach możliwych do uzyskania przez naszą maszynę:
Time to accelerate to max speed – czas osiągnięcia maksymalnej prędkości, wyliczony z podanych maksymalnych wartości przyspieszenia i prędkości.
Distance to accelerate to max speed – odległość, jaką przejedzie oś od postoju do prędkości maksymalnej.
Pulse rate at max speed – częstotliwość podawana na silnik przy maksymalnej prędkości.
Axis SCALE – liczba kroków silnika na milimetr ruchu. Wartość używana do skalowania prędkości.
Test this axis – otwiera okno do przetestowania podanych przez nas parametrów silnika.

Zdj. 4. Okno konfiguracyjne osi X
No i nasz program jest poprawnie skonfigurowany, możemy zacząć zabawę z obróbką. Warto jeszcze wprowadzić pewne modyfikacje usprawniające pracę z naszym systemem. Więcej informacji na ten temat znajduje się w artykule Podstawowe zmiany w LinuxCNC.
