logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Tworzenie generatora trajektorii ruchu z G-kodem w C: implementacja, interpolacja, ograniczenia

fix3483 20 Kwi 2023 17:07 369 3
  • #1 20548643
    fix3483
    Poziom 2  
    Posty: 2
    Witam wszystkich,
    to mój pierwszy post na forum, więc z góry przepraszam za jakiekolwiek niedociągnięcia. Moim celem jest zrobienie generatora trajektorii ruchu wykorzystując język C. Wiem, że muszę dołączyć do programu plik tekstowy zawierający kilkanaście poleceń G-kodu. Kolejnym etapem musi być implementacja interpretera, a następnie generatora trajektorii ruchu oraz interpolatora (chciałbym wykonać najprostszą interpolację liniową). Jak się w ogóle do tego zabrać? W pliku tekstowym będą zawarte kolejne położenia w G-kodzie. Ale jak to przełożyć na generator? Rampa prędkości powinna być po trapezie, tylko skąd program ma wiedzieć o ograniczeniach wirtualnego silnika, a więc od maksymalnych przyspieszeń, hamowań, czasu próbkowania etc. Bardzo bym prosił o jakiekolwiek wskazówki od czego zacząć i co muszę zdefiniować aby rozwiązać opisać problem.
    Z góry dziękuję
  • #2 20548661
    kindlar
    Poziom 42  
    Posty: 7854
    Pomógł: 915
    Ocena: 1614
    Każde sterowanie konfiguruje się do rzeczywistych parametrów. Na przykładzie Macha 3 tu masz konfigurację rampy prędkości https://www.google.pl/search?q=mach+3+kalibra...ECAEQAw&biw=1366&bih=635#imgrc=bvweuWbjX6hIDM
    Prędkość w każdym bloku będzie się zmieniacz zgodnie z tą rampą. Inaczej jest gdy chcemy uzyskać dokładne zatrzymanie na końcu bloku czyli pozycję a inaczej gdy gładki ruch bez zatrzymania sterowanie musi dopisać sobie promień aby prędkość żadnej osi nie spadła do 0. Ty masz osie XY i na takie składowe będziesz rozkładał każdy wektor, blok programu sterującego. Zależnie od rozdzielczości sterowania na każdą oś przypadnie więcej lub mniej impulsów sterujących silnikiem osi aby w założonym czasie przebyć założoną drogę.
  • #3 20549799
    fix3483
    Poziom 2  
    Posty: 2
    kindlar napisał:
    Każde sterowanie konfiguruje się do rzeczywistych parametrów. Na przykładzie Macha 3 tu masz konfigurację rampy prędkości https://www.google.pl/search?q=mach+3+kalibra...ECAEQAw&biw=1366&bih=635#imgrc=bvweuWbjX6hIDM
    Prędkość w każdym bloku będzie się zmieniacz zgodnie z tą rampą. Inaczej jest gdy chcemy uzyskać dokładne zatrzymanie na końcu bloku czyli pozycję a inaczej gdy gładki ruch bez zatrzymania sterowanie musi dopisać sobie promień aby prędkość żadnej osi nie spadła do 0. Ty masz osie XY i na takie składowe będziesz rozkładał każdy wektor, blok programu sterującego. Zależnie od rozdzielczości sterowania na każdą oś przypadnie więcej lub mniej impulsów sterujących silnikiem osi aby w założonym czasie przebyć założoną drogę.


    Czyli rozumiem, że nie jestem w stanie wykonać typowo wykonując komponent HAL takiego generatora w C? Muszę skorzystać z Mach'a bądź np. LinuxCNC axis?
  • #4 20549968
    jvoytech
    Poziom 22  
    Posty: 362
    Pomógł: 61
    Ocena: 136
    fix3483 napisał:
    Czyli rozumiem, że nie jestem w stanie wykonać typowo wykonując komponent HAL takiego generatora w C? Muszę skorzystać z Mach'a bądź np. LinuxCNC axis?

    Mach był tu raczej przykładem, że w programie który napiszesz musi być jakaś możliwość konfiguracji tych parametrów rampy. Możesz to wkompilować w kod przy użyciu np. makr "#define", ale jest to najbardziej niedogodna rzecz dla użytkownika, bo jak ustawisz na stałe parametr przyspieszenia to twój sterownik nie obsłuży "cięższych" silników. Przy każdej zmianie parametru trzeba na nowo skompilować i wgrać na nowo firmware.

    Te parametry lepiej trzymać w EEPROM i program MCU będzie z nich korzystał. Po zmianie silnika wystarczy zmodyfikować tylko określone wartości EEPROM, żeby zmienić przyspieszenie czy inne parametry.

    Popularny GRBL po porcie szeregowym akceptuje instrukcje G-code plus do tego ma swoje komendy zaczynające się od znaku $. https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0.9. Wystarczy na port szeregowy wysłać np. "$120=50.000" i ustawi to przyspieszenie po osi X na 50 [mm/s^2].

    Jeżeli twoje urządzenie ma czytnik kart SD, z którego wczytuje pliki G-code, to twój program może wgrywać konfigurację z pliku o określonej nazwie np. "config.txt". W nim będzie info o parametrach ramp, etc..

    Rozwiązanie GRBL jest proste do wykonania po stronie MCU bo parsowanie instrukcji typu "$1=10" jest banalne. Na PC-cie można napisać program GUI, w którym wizualnie ustawisz sobie te parametry jak w Mach, a on po porcie szeregowym wyśle do MCU konfiguracje, która zostanie zapisana w pamięci EEPROM.
REKLAMA