PL
  • English
  • Italiano
  • Deutsch
  • Français
Login
Menu
Ostatnia aktualizacja 2 months ago
Ten artykuł jest dostępny również w tych językach: 
ENDEITFR

Moduł GPIO (General Purpose Input Output, czyli "wejście/wyjście ogólnego przeznaczenia") to dodatkowa, opcjonalna płytka PCB, którą można podłączyć do Original Prusa MK4/S, MK3.9/S lub MK3.5/S

WAŻNE: Aby w pełni wykorzystać potencjał płytki GPIO wymagane jest firmware 6.2.0-alpha1 lub nowsze. Najnowszy firmware znajdziesz zawsze na GitHubie

Moduł zapewnia rozszerzoną funkcjonalność, umożliwiając sterowanie urządzeniami zewnętrznymi poprzez połączenia z pinami GPIO płyty, które mogą działać w trybie INPUT (wejście) lub OUTPUT (wyjście). Ta wszechstronność otwiera szeroki zakres potencjalnych zastosowań.

Zachęcamy do dzielenia się i omawiania swoich projektów z innymi członkami społeczności Prusa na naszym oficjalnym forum. Stworzyliśmy dedykowaną sekcję GPIO.

Pomysły na zastosowanie

Moduł może sterować migawką kamery w precyzyjnym momencie, dzięki czemu idealnie nadaje się do tworzenia wizualnie doskonałych time-lapsów, w których każdy obraz jest rejestrowany dokładnie w tym samym momencie.

Oprócz sterowania migawką kamery, moduł może być wykorzystywany do innych zastosowań. Przykładowo, może on wyzwalać zewnętrzne oświetlenie, aby oświetlić obszar roboczy na określonych etapach procesu drukowania, zapewniając optymalne warunki oświetleniowe do kontroli jakości lub fotografowania. Dodatkowo można go skonfigurować tak, aby aktywował wentylatory chłodzące lub inne urządzenia peryferyjne, takie jak wyciągi powietrza lub alarmy, w oparciu o własny kod G wykonywany podczas drukowania, pomagając utrzymać optymalne warunki pracy i poprawiając bezpieczeństwo oraz wydajność środowiska druku 3D.

Innym istotnym przypadkiem użycia jest integracja klawiatury makr, w której każde naciśnięcie klawisza może wyzwalać wykonanie określonych poleceń G-code. Taka konfiguracja pozwala na szybkie ręczne sterowanie funkcjami drukarki, takimi jak uruchamianie lub wstrzymywanie drukowania, regulacja temperatury lub przesuwanie głowicy drukującej do określonej pozycji. Możliwość wyzwalania niestandardowych działań za pomocą prostego naciśnięcia klawisza może znacznie usprawnić przepływ pracy, dzięki czemu moduł rozszerzeń GPIO jest wszechstronnym i niezbędnym narzędziem dla tych, którzy chcą w pełni dostosować i zoptymalizować swój drukarski warsztat.

Bezpieczeństwo przede wszystkim! 

Chociaż możliwość wykonywania poleceń G-code za pośrednictwem wejść GPIO zapewnia dużą elastyczność, wiąże się ona również z ograniczeniami i potencjalnymi zagrożeniami. Niewłaściwe użycie lub źle ustawione w czasie polecenia G-code mogą zakłócać proces drukowania, prowadząc do awarii wydruku lub nawet uszkodzenia drukarki. Bardzo ważne jest, aby dokładnie przetestować wszelkie niestandardowe konfiguracje G-code w kontrolowanym środowisku przed wdrożeniem ich w rzeczywistych zadaniach drukowania i uniknąć niezamierzonych konsekwencji.

Ponadto zalecamy, aby tylko doświadczeni użytkownicy z solidnym zrozumieniem elektroniki i programowania G-code korzystali z tego modułu GPIO, ponieważ niewłaściwe połączenia lub konfiguracje mogą spowodować uszkodzenie sprzętu lub zagrożenie bezpieczeństwa.

Schematy 

Schematy mają otwarte źródło i dostępne na naszej stronie Open Source w Prusa Research

Jak zamontować płytkę GPIO

  1. Upewnij się, że drukarka została schłodzona do temperatury otoczenia i wyłącz ją.
  2. Otwórz obudowę xBuddy odkręcając cztery śruby M3x6 mocujące pokrywę [xBuddyBox-cover].
  3. Podłącz przewód GPIO do portu I2C.
  4. Zamknij obudowę xBuddy.
  5. Upewnij się, że GPIO nie dotyka żadnych metalowych części obudowy xBuddy lub jej pokrywy. 
  6. Powodzenia w realizacji projektu!

Piny

Płytka posiada 8 pinów, ponumerowanych od 0 do 7. Piny 0-3 mogą wyć używane jako wyjście, a 4-7 mają funkcję wejście i wyjście. Każdy pin to „open-drain”, gdy jest używany jako wyjście, co oznacza, że jest kontrolowany przez tranzystor, który łączy pin z masą (0 V), gdy jest aktywny. Gdy pin jest nieaktywny, pozostaje „pływający”, co oznacza, że nie jest podłączony do żadnego konkretnego napięcia, ale dzięki wewnętrznym rezystorom podciągającym, napięcie na pinie może oscylować w okolicy 3,3 V. 

Możliwe jest przylutowanie zewnętrznych rezystorów podciągających do pinów JP. Zmienia to zachowanie opisane powyżej. Więcej szczegółów na ten temat można znaleźć poniżej w akapicie rezystory podciągające

Zachowanie pinów w stanie open-drain, gdy są używane jako wyjścia, można wyjaśnić w następujący sposób:

  • Pin ustawiony na 0 (NISKI): Pin jest wyłączony i znajduje się w stanie „pływającym”, co oznacza, że nie jest podłączony do żadnego określonego napięcia. W tym stanie napięcie na pinie może się wahać i nie jest dobrze zdefiniowane, chyba że jest stabilizowane przez rezystor podciągający.

Ten „pływający” stan może spowodować, że pin odbierze przypadkowy szum elektryczny lub zakłócenia, prowadząc do niezamierzonego zachowania, jeśli nie jest odpowiednio zarządzany. 

  • Pin ustawiony na 1 (WYSOKI): Pin jest włączony i podłączony do masy (0 V), powodując spadek napięcia na pinie do 0 V. Ten stan jest określony i nie prowadzi do żadnych niejasności w wykrywaniu sygnału.

Gdy piny są używane jako wejścia, mogą wykrywać przyłożone do nich napięcie. Na stan wejścia ma wpływ obecność rezystorów podciągających, które mogą pomóc w zapewnieniu stałego wysokiego napięcia (3,3 V), gdy nie jest przyłożone żadne inne źródło napięcia.

Rezystory podciągające

Płytka umożliwia podłączenie zewnętrznych rezystorów podciągających za pomocą zworek lutowniczych oznaczonych JP4 do JP7. Zworki te znajdują się na środku płytki i są podłączone do odpowiednich pinów:

  • JP4 jest połączony z pinem 4
  • JP5 jest połączony z pinem 5
  • JP6 jest połączony z pinem 6
  • JP7 jest połączony z pinem 7

Zworki lutownicze JP4 do JP7 mogą być używane do podłączania zintegrowanych rezystorów podciągających, które gwarantują utrzymanie stanu WYSOKIEGO (3,3 V) na pinach, gdy nie są one aktywnie obniżane przez zewnętrzne źródło lub stan wyjścia pinu. Te rezystory podciągające mają wartość 10K omów, co jest standardową wartością zapewniającą stabilne napięcie bez nadmiernego poboru prądu. Jeśli żaden rezystor nie jest podłączony do zworki lutowniczej, pin może pozostać w stanie pływającym, potencjalnie prowadząc do niestabilnego zachowania. JP oznacza „zworkę” ("jumper"), a jeśli nie jest podłączony żaden rezystor, nie tworzy ona żadnej rezystancji.

Dla mniej doświadczonych użytkowników ważne jest, aby zrozumieć, że wyjścia typu open-drain z natury nie wytwarzają wysokiego napięcia (3,3 V), ale raczej umożliwiają połączenie z masą (0 V). Rezystory podciągające są niezbędne, aby zapewnić, że pin pozostaje pod wysokim napięciem po wyłączeniu lub gdy jest używany jako wejście. Jeśli nie jest to odpowiednio zarządzane, „pływające” napięcie może spowodować, że pin odbierze szum elektryczny, prowadząc do niepożądanego przełączania lub niestabilności systemu.

Ustawianie GPIO za pomocą niestandardowego G-code

Informacje ogólne

Poniżej znajduje się sekwencja niestandardowych poleceń G-code używanych do sterowania płytką GPIO. Umożliwia to konfigurowanie stanów wyjściowych, odczytywanie stanów wejściowych i zarządzanie innymi zaawansowanymi ustawieniami płytki za pomocą instrukcji G-code, integrując je płynnie z przepływem pracy drukarki 3D.

Zarządzanie pinami za pomocą G-code

Do zarządzania pinami wyjściowymi na płytce GPIO można użyć następujących poleceń G-code:

  1. Ustaw tryb pinów (wyjście lub wejście)
    M262 P<system dziesiętny> B<system dziesiętny>
    • P<0-7>: Wybierz numer pinu do skonfigurowania (od 0 do 7).
    • B<0 lub 1>: Ustaw tryb pinu.
      • 0 - konfiguruje pin jako wyjście
      • 1 - konfiguruje go jako wejście.
    • Przykład: M262 P0 B0 - Konfiguruje pin 0 jako pin wyjście.
       
  2. Zapis stanu do pinu wyjściowego
    M264 P<system dziesiętny> B<0 lub 1>
    • P<0-7>: Wybierz numer pinu do zapisu (od 0 do 7).
    • B<0 lub 1>: Zapisz 0, aby ustawić pin na NISKI lub 1, aby ustawić pin na WYSOKI.
    • Przykład: M264 P0 B1 - Ustawia pin wyjściowy 0 na WYSOKI (1).
       
  3. Przełączanie stanu pinu wyjściowego
    M265 P<system dziesiętny>
    • P<0-7>: Wybierz numer pinu do przełączenia (od 0 do 7).
    • Polecenie to odwraca bieżący stan wybranego pinu.
    • Przykład: M265 P0 - Przełącza pin 0.
       
  4. Zaawansowana konfiguracja rejestru (dla doświadczonych użytkowników)
    M267 R<1-3> B<0-255>
    • R<1-3>: Wybierz rejestr do skonfigurowania:
      • 1: Rejestr wyjściowy.
      • 2: Rejestr polaryzacji.
      • 3: Rejestr konfiguracji.
    • B<0-255>: Ustawienie wartości, która ma zostać zapisana w wybranym rejestrze.
    • Przykład: M267 R3 B255 - Konfiguruje rejestr konfiguracyjny z wartością 255 (wszystkie piny ustawione na wejście).

Aby odczytać stan pinów lub ustawić konfiguracje, należy użyć następujących poleceń G-code:

  1. Odczytaj stan pinu
    M263 P<system dziesiętny>
    • P<0-7>: Wybierz numer pinu do odczytu (od 0 do 7).
    • Zwrócona wartość wskaże, czy pin ma stan WYSOKI (1) czy NISKI (0).
    • Przykład: M263 P6 - Odczytuje stan pinu 6 (zwraca 32 dla WYSOKIEGO lub 0 dla NISKIEGO).
       
  2. Odczytaj cały rejestr wejściowy
    M261 A<adres urządzenia slave w systemie dziesiętnym> B<liczba bitów> S<styl>
    • Polecenie to odczytuje cały rejestr wejściowy, zwracając liczbę w podanym formacie „styl”, która reprezentuje stany wszystkich pinów wejściowych (od 0 do 7).
    • Możliwe style to:
      • 1 - Zrzut w formacie szesnastkowym (HEX DUMP)
      • 2 - Znakowana liczba całkowita o długości dwóch bajtów, system dziesiętny (int16)
      • 3 - Bezznakowa liczba całkowita, która zajmuje 1 bajt (uint8)
    • adres urządzenia slave to zawsze 32
    • Przykład: M261 A32 B1 S3 - odczytuje cały rejestr wejściowy i zwraca go jako 1-bajtową bezznakową liczbę całkowitą w systemie dziesiętnym
       
  3. Odczyt rejestru ekspandera IO (dla doświadczonych użytkowników)
    M268 R<system dziesiętny>
    • odczytuje cały bajt danego rejestru na raz
    • R<0-3>:
      • 0 - Wejście
      • 1 - Wyjście
      • 2 - Polaryzacja
      • 3 - Konfiguracja
    • Przykład: M268 R3 - Odczytuje rejestr konfiguracji

Jak przygotować G-code dla pinów wejściowych?

Aby skonfigurować piny wejściowe dla danej konfiguracji, każdy pin wejściowy jest automatycznie mapowany do określonego pliku G-code znajdującego się w pamięci USB. Pliki te muszą być przechowywane w folderze o nazwie „macros” i muszą być zgodne ze ścisłą konwencją nazewnictwa: nazwa pliku musi mieć format:

btn_{numer_pinu}.gcode

gdzie {numer_pinu} odpowiada konkretnemu używanemu pinowi GPIO. Wszystkie litery w nazwach plików muszą być małe.

Przykład:

  • jeśli używasz pinu 7, odpowiadający mu plik G-code musi mieć nazwę btn_7.gcode i umieszczony w folderze „macros”.
  • podobnie, dla pinu 4, plik musi mieć nazwę btn_4.gcode

System obsługuje 8 pinów wejściowych na płytce GPIO, a każdy pin można w ten sposób zmapować do unikalnego pliku G-code.

Gdy plik G-code jest wyzwalany przez odpowiedni pin wejściowy, G-code zapisany w tym pliku jest natychmiast wstrzykiwany do trwającego procesu. Należy pamiętać, że istnieje limit rozmiaru dla każdego pliku G-code, który nie może przekraczać 1024 bajtów.

Zaawansowane zarządzanie wejściem i uruchamianie makr

Gdy pin wejściowy jest skonfigurowany za pomocą M262 i ustawiony na 1 (tryb wejściowy), stan pinu jest okresowo sprawdzany co 0,5 sekundy.

Jeśli przycisk podłączony do pinu zostanie naciśnięty (stan pinu przejdzie w LOW), uruchomi to przycisk makra. Na przykład przycisk na pinie 7 może automatycznie wykonać makro zapisane w pliku macros/btn_7.gcode w pamięci USB. Makro jest wstrzykiwane do sekwencji drukowania z ograniczeniem rozmiaru do 1024 bajtów.

Pamięć trwała

Konfiguracja pinów i ich stany są przechowywane w pamięci EEPROM, zapewniając, że ustawienia pinów (tryby wyjścia/wejścia, polaryzacja i stany) są zachowane nawet po cyklu zasilania.
Zmiany dokonane za pomocą M262, M264, M267 lub innego odpowiedniego G-code zaktualizują EEPROM, więc ustawienia są trwałe.

Skrajne przypadki

W przypadku pinów 0-3, które nie posiadają wewnętrznych rezystorów podciągających, skonfigurowanie ich jako wejścia bez dodatkowych zewnętrznych obwodów może skutkować odwróconym stanem logicznym. Może to nieumyślnie wyzwolić wykonanie makra, ponieważ ich domyślnym stanem spoczynku jest NISKI (0).

Logikę pinów wejściowych można odwrócić za pomocą rejestru polaryzacji (M267 R2 B<wartość>). Ta funkcja jest szczególnie przydatna w przypadku pinów, które nie mają rezystorów podciągających (piny 0-3), które domyślnie mają stan bezczynności 0 (NISKI) i mogą wywoływać niepożądane działania, jeśli nie zostaną skonfigurowane.

Wszystkie piny (0-7) w równym stopniu obsługują inwersję polaryzacji. Oznacza to, że można odwrócić logikę dla dowolnego pinu, który jest skonfigurowany jako wejście.

Podstawowa różnica w zachowaniu między pinami wynika z faktu, że piny 4-7 mogą wykorzystywać wewnętrzne rezystory podciągające, które utrzymują je w stanie WYSOKIM (3,3 V), gdy nie są aktywnie sterowane w stanie NISKIM. Jednak te rezystory podciągające są aktywne tylko wtedy, gdy odpowiednie zworki lutownicze (JP4 do JP7) są podłączone. Jeśli te zworki nie są podłączone, piny 4-7 zachowują się podobnie do pinów 0-3, domyślnie w stanie pływającym.

Podczas używania pinów wejściowych do wyzwalania makr, system jest zaprojektowany do wykrywania stanu NISKIEGO jako wskazującego naciśnięcie przycisku. W przypadku pinów bez aktywnych rezystorów podciągających, ten domyślny stan NISKI może nieumyślnie wyzwolić makra, chyba że zastosowana zostanie inwersja polaryzacji.

Ostrzeżenia i ograniczenia

Podczas konfigurowania lub zapisywania pinów, system wysyła ostrzeżenie przez port szeregowy, jeśli występuje niezgodność między zamierzoną operacją (np. próba zapisu pinu wejściowego). Aby uniknąć takich konfliktów, konieczne jest prawidłowe skonfigurowanie pinów za pomocą M262.

Własny G-code w PrusaSlicerze

Wstaw kod dokładnie w tych miejscach, w których jest potrzebny, po/przed innym konkretnym poleceniem G-code. Na przykładowym zrzucie ekranu poniżej własny G-code sterujący płytką GPIO jest umieszczany przez PrusaSlicera i wykonywany przez drukarkę po każdej zmianie warstwy. Można go jednak ustawić w dowolnym miejscu. 

Przykłady

Przykładowe połączenie modułu GPIO z kontrolerem dodatku (wentylator filtra i taśma LED)

Na poniższej ilustracji widzimy połączenie między modułem GPIO a kontrolerem odpowiedzialnym za sterowanie wentylatorem systemu filtracji i oświetleniem LED w Original Prusa Enclosure. 

Obecnie opracowujemy przewód jack-to-molex do połączenia płyty GPIO z płytą podstawową obudowy Enclosure. Zapewni to łatwy i przyjazny dla użytkownika sposób zarządzania elementami sterującymi obudowy.

Image of example setup for enclosure

Czy ten artykuł był pomocny?

Komentarze

Wciąż masz pytania?

Wciąż masz pytania?

Jeśli masz pytanie dotyczące czegoś, czego nie opisaliśmy, to sprawdź dodatkowe zasoby.
A jeśli to nie działa, możesz wysłać zgłoszenie na [email protected] lub klikając poniższy przycisk.

Kontakt