Skocz do zawartości

CNC Shield V4.0 czyli jak uruchomić trzyosiową maszynę


Anonim

Pomocna odpowiedź

Witam

@szymonw, naprawdę muszę powiedzieć fantastyczna robota z tym odszukaniem błędów dotyczących płytki w wersji 4.0.

Z powodzeniem zastosowałem poprawki na dwóch płytkach.

Jestem programistą i mam propozycję poprawki do kodów grbl. Nie spodobał mi się pomysł podmieniania numerów pin-ów na stałe w bibliotece grbl. Rozwiązanie jest super pod warunkiem, że mamy tylko płytki Nano i nie korzystamy z nakładki dla Uno. Jest rozwiązanie, które w takiej sytuacji można z powodzeniem zastosować. Otóż można wprowadzić dyrektywy warunkowe dla różnych płytek. Ja zrobiłem to tak:

Zamiast kodu:

  #define X_STEP_BIT      2  // Uno Digital Pin 2
  #define Y_STEP_BIT      3  // Uno Digital Pin 3
  #define Z_STEP_BIT      4  // Uno Digital Pin 4

wstawiłem:

  #ifdef ARDUINO_AVR_NANO
    #define X_STEP_BIT      5  // Nano Digital Pin 5
    #define Y_STEP_BIT      6  // Nano Digital Pin 6
    #define Z_STEP_BIT      7  // Nano Digital Pin 7
  #else
    #define X_STEP_BIT      2  // Uno Digital Pin 2
    #define Y_STEP_BIT      3  // Uno Digital Pin 3
    #define Z_STEP_BIT      4  // Uno Digital Pin 4
  #endif

Zamiast kodu:

  #define X_DIRECTION_BIT   5  // Uno Digital Pin 5
  #define Y_DIRECTION_BIT   6  // Uno Digital Pin 6
  #define Z_DIRECTION_BIT   7  // Uno Digital Pin 7

wstawiłem:

  #ifdef ARDUINO_AVR_NANO
    #define X_DIRECTION_BIT   2  // Nano Digital Pin 2
    #define Y_DIRECTION_BIT   3  // Nano Digital Pin 3
    #define Z_DIRECTION_BIT   4  // Nano Digital Pin 4
  #else
    #define X_DIRECTION_BIT   5  // Uno Digital Pin 5
    #define Y_DIRECTION_BIT   6  // Uno Digital Pin 6
    #define Z_DIRECTION_BIT   7  // Uno Digital Pin 7
  #endif

Zamiast kodu:

  #ifdef VARIABLE_SPINDLE // Z Limit pin and spindle enabled swapped to access hardware PWM on Pin 11.
    #define Z_LIMIT_BIT	   4 // Uno Digital Pin 12
  #else
    #define Z_LIMIT_BIT    3  // Uno Digital Pin 11
  #endif

wstawiłem:

  #ifdef VARIABLE_SPINDLE // Z Limit pin and spindle enabled swapped to access hardware PWM on Pin 11.
    #ifdef ARDUINO_AVR_NANO
      #define Z_LIMIT_BIT    3  // Nano Digital Pin 11
    #else
      #define Z_LIMIT_BIT    4 // Uno Digital Pin 12
    #endif
  #else
    #ifdef ARDUINO_AVR_NANO
      #define Z_LIMIT_BIT    4 // Nano Digital Pin 12
    #else
      #define Z_LIMIT_BIT    3  // Uno Digital Pin 11
    #endif
  #endif

Dzięki temu biblioteka będzie działała zarówno dla Nano jak i dla wspieranej przez grbl Uno.

Co ciekawe przeszukałem jeszcze na wszelki wypadek wystąpienia wszystkich pinów, które są zamienione, no i dla 11 i 12 znalazłem kilka innych wystąpień, z którymi postąpiłem podobnie. Kompletny kod biblioteki jest w pliku zip.

Przygotowałem swoją wersję biblioteki z powyższą poprawką na podstawie wersji 1.1h. Biblioteka ma strukturę odpowiednią do zaimportowana do najnowszej wersji Arduino IDE (1.8.13).

 

grbl-1.1h.zip

Edytowano przez pawelsel
Poprawka dla pinów 11 i 12
Link do komentarza
Share on other sites

Dobra robota Pawelsel .Mam jednak propozycję by grbl-1.1h nazwać inaczej.Stworzyłeś nową wersję biblioteki,która jest pewnego rodzaju zawężeniem.Należy zadać pytanie :czy na rynku nie ma innych płytek do obsługi 3 osiowej maszyny cnc opartej na Arduino Nano pozbawionych wad takich jakie opisałem w artykule.Odpowiedź jest taka,że zapewne są takie płytki i są stosowane. Jeśli ktoś spróbuje zastosować Twoje oprogramowanie do tych drugich bez błędów płytek to polegnie.A zatem nazwanie Twojej biblioteki inaczej jest bardzo wskazane. Ponadto wprowadzenie do internetu   grbl-1.1h w Twojej wersji powoduje  bałagan i dezorientację.W moim przekonaniu powinieneś skontaktować się z twórcami oprogramowania i przedyskutować całą tę sytuację.Należy jednak podkreślić,że wykonałeś kawałek dobrej roboty.

Link do komentarza
Share on other sites

@szymonw Nazwa pliku wynikła wyłącznie z tego, że z takiej wersji wyszedłem. W środku dalej jest to biblioteka grbl i tak zostanie zainstalowana. Warto wcześniej wypakować plik i zainstalować z katalogu. Z tego dokładnie powodu co opisałeś nie starałem się jej upublicznić na repozytorium. Bo może jest wersja płytki dla Nano, która ma prawidłowo podpięte piny. Natomiast moje poprawki spowodują, że wykorzystanie tej biblioteki zamiast oryginalnej dla wspieranych płytek dla Uno nie spowoduje wywalenia się ich.

 

Link do komentarza
Share on other sites

Poszedłem jednak o krok dalej. Zrobiłem fork-a repozytorium grbl na GitHub-ie i już na moim repozytorium dokonałem odpowiednich zmian.

Jakby ktoś potrzebował to na moim repozytorium https://github.com/pawelseledec/grbl.git kody grbl dla tego shielda są dostępne na branchu cnc_shield_4.0_nano.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ten rezystor według schematu ma 10k i służy do podciągnięcia poziomu logicznego "1" na  wejściu EN sterownika silnika krokowego A4988.Wygląda na to ,że jest niezbędny.W załączeniu schemat podłączeń i shield V4.0

cnc shield nano.png

cnc v4 schemat.png

Link do komentarza
Share on other sites

Właśnie wynikła kwestia wyjść D11 i D12 w maszynach dwuosiowych (grawerka laserowa).

Wejścia/wyjścia cyfrowe z PWM w UNO opartym o procesor ATMEGA328P: D3, D5, D6, D9, D10, D11

NANO oparte o ten procesor ma tak samo.

Zatem, żeby dostać się do sygnału PWM dla lasera trzeba skorzystać z D11.

W pliku config.h jest następująca definicja:

#define VARIABLE_SPINDLE // Default enabled. Comment to disable.

W tej sytuacji krańcówka jest przepinana na D12 a na Z+/Z- mamy D11 czyli sygnał PWM. Zatem krańcówkę Z (jak ją mamy) wpinamy na D12, a sterowanie urządzeniem (PWM, np.laser o sterowanej mocy) do Z+/Z-

Inaczej będzie, gdy zakomentujemy powyższą linię. Wtedy krańcówka Z jest tam, gdzie się spodziewamy 😀, ale na D12 mamy tylko możliwość włączenia/wyłączenia urządzenia (bez sterowania PWM, np.frez o stałej prędkości obrotowej).

W pliku cpu_map.h definicje dla pinów D11 i D12 nie powinny być zmieniane, wycofałem te zmiany. Jak jest potrzeba to lepiej sterować zmienną VARIABLE_SPINDLE i przełożyć kabelki.

Kody ewaluowały od ostatniego razu i zamiast detekcji płytki jest w tej chwili osobna sekcja w cpu_map.h, co jest zgodne z intencjami twórców.

Na branchu cnc_shield_4.0_nano od razu ustawiam ten shield w pliku config.h:

//#define CPU_MAP_ATMEGA328P // Arduino Uno CPU
#define CPU_MAP_ATMEGA328P_NANO_V4 // Arduino Nano CPU - shield v4

Wszystkie powyższe poprawki są dostępne na branchu cnc_shield_4.0_nano na moim forku https://github.com/pawelseledec/grbl.git

Link do komentarza
Share on other sites

Ktoś pomoże? Mam odkomentowane VARIABLE_SPINDLE a pomimo tego PWM mi nie działa. Jak sprawdzam, krancowka osi Z nadal jest na D11, a załączanie wrzeciona na D12 i nie działa komenda Sxxx tylko M3 zalacza/wyłącza wrzeciono. 

Coś jeszcze pominąłem? Mam grbl 1.1g zresztą pobrany stąd. 

Dodam że nie zwracam uwagi na napisy na płytce cnc shield. Wiem co gdzi ma być. 

Link do komentarza
Share on other sites

W tym artykule jest mój post na stronie pierwszej pod tytułem UZUPEŁNIENIE lub  jak kto woli SUPLEMENT.Dokładnie przeczytaj i zastosuj.Opis ,według mnie, jest dość dokładny.Rób powoli i dokładnie a premia Ci nie przepadnie.Ta premia to będzie działające urządzenie.Odkomentować masz dwie linie a nie jedną! W celu sprawdzenia poprawności zmian i połączeń zastosuj oscyloskop np.za 60-100zł(jest ich na rynku zatrzęsienie). Jeśli nie masz to pozostaje pożyczyć od kogoś albo wiara,że tak jest jak to opisałem w poście.Do tego postu dołączony jest plik, pobierz,rozpakuj,odtwórz i zobaczysz jak to wyglądało u mnie.Powodzenia.

Link do komentarza
Share on other sites

Oscyloskop mam ale nie podłączałem bo bez niego widać , że nie działa. 

Faktycznie jest napisane jak byk ale jakoś mi umknęło, że trzeba odkomentowac wartości min i max. Jestem teraz na wakacjach ale po powrocie od razu sprawdzę. Dzięki wielkie za pomoc. Artykuł naprawdę sztos, tak że nawet dziecko powinno zrozumieć:) Pozdrawiam

 

Link do komentarza
Share on other sites

Zrobiłem tak jak wskazałeś. Niestety nadal nie działa. Postanowiłem skompilować wsad dla arduino uno i okazuje się, że tutaj wszystko jest ok, PWM działa tak jak należy na pinie D11. Zdziwiłem się więc postanowiłem jeszcze raz przeanalizować plik cpu_map.h i chyba mam. Trochę dużo tych instrukcji warunkowych więc nie jestem pewien czy dobrze to interpretuje ale myślę, że tutaj prawdopodobnie jest błąd:

  #ifdef VARIABLE_SPINDLE // Z Limit pin and spindle enabled swapped to access hardware PWM on Pin 11.
    #ifdef ARDUINO_AVR_NANO
      #define Z_LIMIT_BIT    3  // Nano Digital Pin 11
    #else
      #define Z_LIMIT_BIT    4  // Uno Digital Pin 12
    #endif
  #else
    #ifdef ARDUINO_AVR_NANO
      #define Z_LIMIT_BIT    4  // Nano Digital Pin 12
    #else
      #define Z_LIMIT_BIT    3  // Uno Digital Pin 11
    #endif
  #endif

 

Patrząc w pinout arduino UNO i arduino NANO widzę że PORT PB3 jest na tym samym pinie czyli D11, po co więc ta dyrektywa warunkowa?

 

Dzięki SZYMONW za pomoc. Ja sobie już z tym poradziłem ale myślę, że trzeba rozwiać wątpliwości dla innych, którzy w przyszłości mogą mieć przez to problemy z uruchomieniem.

Wiem. Powinienem to zmienić i sprawdzić czy zadziała ale była już pierwsza w nocy i jak tylko udało mi się to uruchomić to odetchnąłem i poszedłem w końcu spać. Zaznaczę, że ja to kompiluje i wrzucam sam *.hex na atmege328 bo nie mam Andino także w 100% nie mogę przetestować.


 

Link do komentarza
Share on other sites

@Rafalekrav Cześć,

Widzę, że wykorzystałeś kod z pliku zip, który załączyłem w jednym z postów.

Musisz wiedzieć, że jest to kod, który automatycznie wykrywa jakie Arduino zostało wykorzystane i dopasowuje się do jednej z dwóch wersji płytek dla maszyn CNC: CNC Shield V3.0 (Uno) i CNC Shield V4.0 (Nano) i że jest to kod specjalnie przystosowany do potrzeb trzyosiowych maszyn CNC.

Uniwersalna modyfikacja grbl-a zgodna z założeniami projektu znajduje się tu: https://github.com/pawelseledec/grbl.git

W tej modyfikacji jest dodatkowa sekcja w cpu_map.h, która jest dedykowana dla płytki CNC Shield V4.0 (Nano). Opisałem to w moim ostatnim poście w tym wątku.

Pozdrawiam.

Link do komentarza
Share on other sites

Do Rafalekrav oraz innych chcących uruchomić laser

Twój problem nieuruchomienia się lasera  na płycie nano wynika z tego,że nie przeczytałeś artykułu głównego w którym jest opis zmian.Co prawda w suplemencie jest odniesienie by najpierw przeczytać artykuł główny i dokonać niezbędnych zmian... no ale.... .Przepraszam wszystkich,że dostatecznie nie uczuliłem Was na problem zmian w poście UZUPEŁNIENIE lub  jak kto woli SUPLEMENT.To oczywiście moja wina ale ten maleńki błąd świetnie poprawił kolega pawelsel za co należą się szczególne podziękowania.Mam prośbę graniczącą z żądaniem czytajcie od początku ten artykuł wraz z postami bo tam jest zawarta właściwie cała wiedza na temat maszyny 3 osiowej opartej na module CNC Shield V4.0  i nie tylko na tym module.Całość tego wątku daje kompendium wiedzy,co powoduje,że po przemyśleniu możliwości Wasze staną się o dużo większe.

 

Link do komentarza
Share on other sites

@szymonw @pawelsel
Dziękuję za pomoc i wskazówki. Po prostu źle zostałem zrozumiały (chyba za bardzo zagmatwałem swoją wypowiedź) . 

@szymonw U mnie wszystko działa, ja wcale nie chce uruchomić lasera. Chodziło mi o regulację prędkości silnika przez wykorzystanie PWM. Twój artukuł przeczytałem od deski do deski kilka razy. Wszystko jest objaśnione wzorowo 👍

@pawelsel Twoja modyfikacja pliku cpu_map.h jest świetna ale nieśmiało chcę napisać, że podejrzewam, że popełniłeś w niej błąd i już wyjaśniam o co chodzi.

Dyrektywy warunkowe przy pinach odpowiedzialnych za STEP i za DIR są jak najbardziej okey bo dla UNO i dla NANO są różne wyprowadzenia na płytce shield(to oczywiste).
Nie mogę zrozumieć po co wprowadziłeś dyrektywy warunkowe przy VARIABLE_SPINDLE. Przecież w tym przypadku UNO i NANO mają PWM na Digital Pin 11 czyli PB3. W przypadku UNO napisałeś poprawnie a w przypadku NANO jest źle. Sprawdziłem to i rzeczywiście na NANO nie działa PWM. Pozwoliłem sobie wprowadzić zmiany dla upewnienia się i podejrzenia się potwierdzają. Po moich zmianach PWM zaczął działać poprawnie również na NANO.
Piszę o tym ponieważ w przyszłości pewnie wiele osób będzie chciało skorzystać z tego oprogramowania więc dobrze żeby nie zawierało błędów. 
Proszę Cię sprawdź to jeszcze raz ok?

 

Link do komentarza
Share on other sites

Szczerze mówiąc nigdy nie zajmowałem się regulacją pracy silnika wrzeciona w mojej frezarce wykorzystując odpowiedni pin powiązany z PWM.Za każdym razem robię to ręcznie gdyż silnik  wrzeciona ma swój odrębny regulator.Z drugiej strony gdy uruchamiałem swoją maszynę pojawił się problem pracy silnika odpowiedzialnego za oś Z.Po pierwszych zmianach osie X,Y zaczęły chodzić a oś Z nie.Wówczas powstało pytanie co jeszcze odpowiada  za pracę osi Z. Wziąłem  miernik i wyszło mi,że znowu producent skopał projekt a później padło pytanie czy na pewno skopał projekt.Zamiana pinów w pliku grbl\cpu_map\cpu_map_atmega328p.h okazała się skuteczna.Zapamiętaj ,że jak kupiłeś płytkę CNC Shield V4.0  to wcale nie oznacza,że jest to taka sama  płytka jaką ja kupiłem.Co jakiś czas na tym forum np.Treker,przypominają,że identyczność płytek opartych na procesorach Atmela zapewnia tylko  Arduino,które obecnie jest własnością amerykanów.Płytka  CNC Shield V4.0 jest produktem chińskim a producentów jest kilku.Zawsze jak ktoś podejmuje się produkcji takich płytek musi sprawdzić czy nie narusza patentów bądź wzorów użytkowych. Zapewne pierwotna wersja była w 100% zgodna z tym co jest w oprogramowaniu.Ale aby uniknąć posądzenia o naruszenie własności intelektualnej okrojono rozwiązanie.To tu to tam zamieniono piny lub nie uwzględniono rezystorów i tylko kupującemu  o tym nie powiedziano i że musi dostosować oprogramowanie.Oczywiście zgłosili "swoje" rozwiązanie do Urzędu Patentowego i uzyskali wzór użytkowy dzięki czemu podnieśli też wartość swojej firmy.Nie wiem ile jest kombinacji związanych z pinami ale jest ich na pewno  kilka. Jeszcze raz przypominam,że w poście UZUPEŁNIENIE lub  jak kto woli SUPLEMENT napisałem

Uwaga:Warto zapoznać się z plikiem config.h w folderze grbl w którym wszystko jest opisane.

Jeśli w Twojej płytce jest inaczej napisz post i dołącz  do tego wątku. Opisz zmiany jakich dokonałeś to powinno pomóc tym,którzy borykają się z trudnościami związanymi z uruchomieniem maszyny.

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.