Skocz do zawartości

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


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
  • Lubię! 1
Link to post
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 to post
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 to post
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.

  • Pomogłeś! 1
Link to post
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

  • Pomogłeś! 1
Link to post
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 to post
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.