Filament Sensor w Marlin'ie

Czyli co i jak podłączyć żeby działało
Awatar użytkownika
fifrak
Konto z ograniczeniami
Postów w temacie: 11
Posty: 74
Rejestracja: 13 lis 2021, 19:01
Lokalizacja: Częstochowa
Drukarka: Sapphire Pro
x 1

Filament Sensor w Marlin'ie

Post autor: fifrak »

Próbuję skompilować Marlin'a 2.0.9.3 dla płytki MKS Robin Nano V1.2 i nie mogę go skompilować gdy chcę aktywować czujnik filamentu.
To co robię w Marlin'ie to wyłącznie usunięcie obu // w kodzie dla linijki.

Kod: Zaznacz cały

//#define FILAMENT_RUNOUT_SENSOR
Po czym później podczas kompilacji otrzymuję następujący Error.

Kod: Zaznacz cały

In file included from Marlin\src\HAL\STM32\../../inc/MarlinConfig.h:49,
                 from Marlin\src\HAL\STM32\HAL.cpp:30:
Marlin\src\HAL\STM32\../../inc/SanityCheck.h:950:6: error: #error "FILAMENT_RUNOUT_SENSOR requires FIL_RUNOUT_PIN."
  950 |     #error "FILAMENT_RUNOUT_SENSOR requires FIL_RUNOUT_PIN."
      |      ^~~~~
Z tego co rozumiem, to PIN dla tego czujnika jakby nie został zdefiniowany, ale w tym wypadku gdzie powinienem go zdefiniować i jak, żeby działało to poprawnie?
Awatar użytkownika
artur_n
Postów w temacie: 1
Posty: 950
Rejestracja: 20 lis 2017, 21:48
Lokalizacja: RJA
Drukarka: P3Steel, Prusa MK4
x 172

Re: Filament Sensor w Marlin'ie

Post autor: artur_n »

Edytujesz definicję dla swojej płyty jaką masz:

Kod: Zaznacz cały

// Filament Runout Sensor
//
#ifndef FIL_RUNOUT_PIN #define FIL_RUNOUT_PIN P1_28 #endif
Awatar użytkownika
fifrak
Konto z ograniczeniami
Postów w temacie: 11
Posty: 74
Rejestracja: 13 lis 2021, 19:01
Lokalizacja: Częstochowa
Drukarka: Sapphire Pro
x 1

Re: Filament Sensor w Marlin'ie

Post autor: fifrak »

Dzięki za wskazanie miejsca, ale... Zacząłem analizować zawartość dwu plików w PINS w postaci MKS_ROBIN_NANO oraz MKS_ROBIN_NANO_common i jest taka sytuacja w kodzie.

Kod: Zaznacz cały

//
// Misc. Functions
//
#if HAS_TFT_LVGL_UI
  #define MT_DET_1_PIN                      PA4
  #define MT_DET_2_PIN                      PE6
  #define MT_DET_PIN_STATE                  LOW

  #define WIFI_IO0_PIN                      PC13
  #define WIFI_IO1_PIN                      PC7
  #define WIFI_RESET_PIN                    PA5
#else
  //#define POWER_LOSS_PIN                  PA2   // PW_DET
  //#define PS_ON_PIN                       PB2   // PW_OFF
  #define FIL_RUNOUT_PIN                    PA4
  #define FIL_RUNOUT2_PIN                   PE6
#endif
I teraz prawdę powiedziawszy mam klina i nie do końca rozumiem, bo wynika z tego, że to co napisałeś jest już u mnie w kodzie, ale VBS podczas kompilacji nie widzi tego zapisu w kodzie tak jakby i wywala błąd..? Zasadniczo jeśli chodzi o ten kod, to cześć pomiędzy if, a else jest podświetlona w VSB, a to pod else ma wyblakły kolor.
Próbowałem również część MT_DET... skomentować, żeby nie była aktywna i to nie zadziałało, podobnie jak i zamiana miejscami MT_DET, z FIL_RUNOUT, to spowodowało, że wspomniane powyżej podświetlenie i wyblaknięcie w kodzie zamieniło się miejscami góra/dół i wywaliło jeszcze więcej błędów kompilacji.
Awatar użytkownika
dziobu
Zasłużony
Postów w temacie: 6
Posty: 8908
Rejestracja: 28 gru 2016, 16:38
Drukarka: ZMorph 2.0(S)
x 5842
Kontakt:

Re: Filament Sensor w Marlin'ie

Post autor: dziobu »

Widocznie masz gdzieś zdefiniowane "HAS_TFT_LVGL_UI". Pewnie tego używasz (nie wiem co to jest). Ale jak widzisz piny do czujnika (PA4 i PE6) są użyte. Z tego kodu wynika że opcja "HAS_TFT_LVGL_UI" nie pozwala na użycie czujnika filamentu.
Jeśli masz ów czujnik gdzieś podpięty to POD "#endif" dodaj definicje:

Kod: Zaznacz cały

#define FIL_RUNOUT_PIN <pin gdzie masz to wpięte>
Awatar użytkownika
fifrak
Konto z ograniczeniami
Postów w temacie: 11
Posty: 74
Rejestracja: 13 lis 2021, 19:01
Lokalizacja: Częstochowa
Drukarka: Sapphire Pro
x 1

Re: Filament Sensor w Marlin'ie

Post autor: fifrak »

W Configuration.h zgadza się mam aktywowany LVGL UI, ale to jest nic innego jak ten wyświetlacz z ikonami, etc. (nie wyglądający jak BIOS 20 lat temu).

Kod: Zaznacz cały

#define TFT_LVGL_UI
Czujnik filamentu mam właśnie podpięty pod ten pin PA4 zgodnie z instrukcją od MKS, tak więc nic innego go nie używa.
https://github.com/makerbase-mks/MKS-Ro ... %20PIN.pdf
Aczkolwiek to co widać w kodzie jak i specyfikacji, to co Marlin nazywa FILAMENT RUNOUT, sam MKS w płycie nazywa jako MATERIAL DETECTION.

Edit, bynajmniej, spróbowałem dołożyłem linijkę kodu tak jak pisaliście, z definicją na PA4 i się niestety Marlin nie kompiluje, jest nowy rodzaj błędu:

Kod: Zaznacz cały

In file included from Marlin\src\HAL\STM32\../../inc/MarlinConfig.h:49,
                 from Marlin\src\HAL\STM32\HAL.cpp:30:
Marlin\src\HAL\STM32\../../inc/SanityCheck.h:988:27: error: static assertion failed: ADVANCED_PAUSE_FEATURE is required to use M600 with FILAMENT_RUNOUT_SENSOR.
  988 |     static_assert(nullptr == strstr(FILAMENT_RUNOUT_SCRIPT, "M600"), "ADVANCED_PAUSE_FEATURE is required to use M600 with FILAMENT_RUNOUT_SENSOR.");
      |                   ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Awatar użytkownika
dziobu
Zasłużony
Postów w temacie: 6
Posty: 8908
Rejestracja: 28 gru 2016, 16:38
Drukarka: ZMorph 2.0(S)
x 5842
Kontakt:

Re: Filament Sensor w Marlin'ie

Post autor: dziobu »

Zgodnie z kodem to czujnik powinien działać bez używania "FILAMENT_RUNOUT_SENSOR". Sprawdziłeś czy on może już nie działa?
Awatar użytkownika
fifrak
Konto z ograniczeniami
Postów w temacie: 11
Posty: 74
Rejestracja: 13 lis 2021, 19:01
Lokalizacja: Częstochowa
Drukarka: Sapphire Pro
x 1

Re: Filament Sensor w Marlin'ie

Post autor: fifrak »

Obawiam się, że chyba nie do końca rozumiem, co masz na myśli... :(

Wydaje się mnie, że tak długo, jak pierwsza linijka poniższego kodu jest nieaktywna, to nic tego czujnika, nie aktywuje w systemie, no chyba, że się mylę i jeszcze gdzieś coś jest zawarte w Marlinie, co odpala to..?

Kod: Zaznacz cały

//#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
  #define FIL_RUNOUT_ENABLED_DEFAULT true // Enable the sensor on startup. Override with M412 followed by M500.
  #define NUM_RUNOUT_SENSORS   1          // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.

  #define FIL_RUNOUT_STATE     LOW        // Pin state indicating that filament is NOT present.
  #define FIL_RUNOUT_PULLUP               // Use internal pullup for filament runout pins.
  //#define FIL_RUNOUT_PULLDOWN           // Use internal pulldown for filament runout pins.
  //#define WATCH_ALL_RUNOUT_SENSORS      // Execute runout script on any triggering sensor, not only for the active extruder.
                                          // This is automatically enabled for MIXING_EXTRUDERs.

  // Override individually if the runout sensors vary
  //#define FIL_RUNOUT1_STATE LOW
  //#define FIL_RUNOUT1_PULLUP
  //#define FIL_RUNOUT1_PULLDOWN

  // Commands to execute on filament runout.
  // With multiple runout sensors use the %c placeholder for the current tool in commands (e.g., "M600 T%c")
  // NOTE: After 'M412 H1' the host handles filament runout and this script does not apply.
  #define FILAMENT_RUNOUT_SCRIPT "M600"

  // After a runout is detected, continue printing this length of filament
  // before executing the runout script. Useful for a sensor at the end of
  // a feed tube. Requires 4 bytes SRAM per sensor, plus 4 bytes overhead.
  #define FILAMENT_RUNOUT_DISTANCE_MM 35

  #ifdef FILAMENT_RUNOUT_DISTANCE_MM
    // Enable this option to use an encoder disc that toggles the runout pin
    // as the filament moves. (Be sure to set FILAMENT_RUNOUT_DISTANCE_MM
    // large enough to avoid false positives.)
    //#define FILAMENT_MOTION_SENSOR
  #endif
#endif
Awatar użytkownika
dziobu
Zasłużony
Postów w temacie: 6
Posty: 8908
Rejestracja: 28 gru 2016, 16:38
Drukarka: ZMorph 2.0(S)
x 5842
Kontakt:

Re: Filament Sensor w Marlin'ie

Post autor: dziobu »

Luknąłem w kodzie jak to działa; nie wiem co MKS chciał uzyskać robiąc to co robią. IMHO zdefiniuj ten pin (FIL_RUNOUT_PIN) a resztę olej. Ewentualnie zmień definicję MT_DET_1_PIN na jakiś nieużywany żeby nie przeszkadzało.

fifrak pisze:Edit, bynajmniej, spróbowałem dołożyłem linijkę kodu tak jak pisaliście, z definicją na PA4 i się niestety Marlin nie kompiluje, jest nowy rodzaj błędu:
Przecież wszystko masz napisane:
"error: static assertion failed: ADVANCED_PAUSE_FEATURE is required to use M600 with FILAMENT_RUNOUT_SENSOR."
Musisz włączyć "ADVANCED_PAUSE_FEATURE".
Awatar użytkownika
fifrak
Konto z ograniczeniami
Postów w temacie: 11
Posty: 74
Rejestracja: 13 lis 2021, 19:01
Lokalizacja: Częstochowa
Drukarka: Sapphire Pro
x 1

Re: Filament Sensor w Marlin'ie

Post autor: fifrak »

Ok, zrobiłem tak jak pisaliście, czyli:
w pliku pinsów mam dodane:

Kod: Zaznacz cały

// Filament Runout Sensor
//
#ifndef FIL_RUNOUT_PIN
  #define FIL_RUNOUT_PIN                    P4
  #define FIL_RUNOUT2_PIN                  PE6
#endif
w configuration_adv.h

Kod: Zaznacz cały

#define ADVANCED_PAUSE_FEATURE
#if ENABLED(ADVANCED_PAUSE_FEATURE)
  #define PAUSE_PARK_RETRACT_FEEDRATE         60  // (mm/s) Initial retract feedrate.
  #define PAUSE_PARK_RETRACT_LENGTH            2  // (mm) Initial retract.
                                                  // This short retract is done immediately, before parking the nozzle.
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE     10  // (mm/s) Unload filament feedrate. This can be pretty fast.
  #define FILAMENT_CHANGE_UNLOAD_ACCEL        25  // (mm/s^2) Lower acceleration may allow a faster feedrate.
  #define FILAMENT_CHANGE_UNLOAD_LENGTH      100  // (mm) The length of filament for a complete unload.
                                                  //   For Bowden, the full length of the tube and nozzle.
                                                  //   For direct drive, the full length of the nozzle.
                                                  //   Set to 0 for manual unloading.
  #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE   6  // (mm/s) Slow move when starting load.
  #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH     0  // (mm) Slow length, to allow time to insert material.
                                                  // 0 to disable start loading and skip to fast load only
  #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE   6  // (mm/s) Load filament feedrate. This can be pretty fast.
  #define FILAMENT_CHANGE_FAST_LOAD_ACCEL     25  // (mm/s^2) Lower acceleration may allow a faster feedrate.
  #define FILAMENT_CHANGE_FAST_LOAD_LENGTH     0  // (mm) Load length of filament, from extruder gear to nozzle.
                                                  //   For Bowden, the full length of the tube and nozzle.
                                                  //   For direct drive, the full length of the nozzle.
  //#define ADVANCED_PAUSE_CONTINUOUS_PURGE       // Purge continuously up to the purge length until interrupted.
  #define ADVANCED_PAUSE_PURGE_FEEDRATE        3  // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate.
  #define ADVANCED_PAUSE_PURGE_LENGTH         50  // (mm) Length to extrude after loading.
                                                  //   Set to 0 for manual extrusion.
                                                  //   Filament can be extruded repeatedly from the Filament Change menu
                                                  //   until extrusion is consistent, and to purge old filament.
  #define ADVANCED_PAUSE_RESUME_PRIME          0  // (mm) Extra distance to prime nozzle after returning from park.
  //#define ADVANCED_PAUSE_FANS_PAUSE             // Turn off print-cooling fans while the machine is paused.

                                                  // Filament Unload does a Retract, Delay, and Purge first:
  #define FILAMENT_UNLOAD_PURGE_RETRACT       13  // (mm) Unload initial retract length.
  #define FILAMENT_UNLOAD_PURGE_DELAY       5000  // (ms) Delay for the filament to cool after retract.
  #define FILAMENT_UNLOAD_PURGE_LENGTH         8  // (mm) An unretract is done, then this length is purged.
  #define FILAMENT_UNLOAD_PURGE_FEEDRATE      25  // (mm/s) feedrate to purge before unload

  #define PAUSE_PARK_NOZZLE_TIMEOUT           45  // (seconds) Time limit before the nozzle is turned off for safety.
  #define FILAMENT_CHANGE_ALERT_BEEPS         10  // Number of alert beeps to play when a response is needed.
  #define PAUSE_PARK_NO_STEPPER_TIMEOUT           // Enable for XYZ steppers to stay powered on during filament change.
  //#define FILAMENT_CHANGE_RESUME_ON_INSERT      // Automatically continue / load filament when runout sensor is triggered again.
  //#define PAUSE_REHEAT_FAST_RESUME              // Reduce number of waits by not prompting again post-timeout before continuing.

  //#define PARK_HEAD_ON_PAUSE                    // Park the nozzle during pause and filament change.
  //#define HOME_BEFORE_FILAMENT_CHANGE           // If needed, home before parking for filament change

  //#define FILAMENT_LOAD_UNLOAD_GCODES           // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu.
  //#define FILAMENT_UNLOAD_ALL_EXTRUDERS         // Allow M702 to unload all extruders above a minimum target temp (as set by M302)
#endif
I koniec końców mam komunikat, że niby ta funkcja wymaga wspierającego wyświetlacza :shock:
Co jest dziwne, bo w końcu w oryginalnym firmware od MKS z tym wyświetlaczem, który jakby jeszcze nie patrzeć bazuje na Marlin'ie ta funkcja działa...

Kod: Zaznacz cały

In file included from Marlin\src\HAL\STM32\../../inc/MarlinConfig.h:49,
                 from Marlin\src\HAL\STM32\HAL.cpp:30:
Marlin\src\HAL\STM32\../../inc/SanityCheck.h:997:6: error: #error "ADVANCED_PAUSE_FEATURE requires a supported LCD controller (or EMERGENCY_PARSER)."
  997 |     #error "ADVANCED_PAUSE_FEATURE requires a supported LCD controller (or EMERGENCY_PARSER)."
Awatar użytkownika
Jarewa
Drukarz
Postów w temacie: 7
Posty: 1517
Rejestracja: 26 sty 2021, 22:16
Lokalizacja: Głogów
x 326

Re: Filament Sensor w Marlin'ie

Post autor: Jarewa »

Bo zaczynasz od dupy strony, w tym sterowniku i wyświetlaczu czujnik filenamentu konfiguruje się w wyświetlaczu a nie w marlinie. Do konfiguracji wyświetlacza jest specjalny plik konfiguracyjny wgrany na kartę SD. W marlinie ma chyba być tylko uruchomiona funkcja PAUSE..

A tam zaznaczasz opcje

>cfg_filament_det0_trigger_level 0 #the level signal of outage detection E0 module (1:high level;0:low level)
>cfg_filament_det1_trigger_level 0 #the level signal of outage detection E1 module (1:high level;0:low level)

Oczywiście musisz się też podłączyć zgodnie po Z+ jest PW_DWT a następne dwie wtyczki poniżej to MT_DET0 I MT_DET1
ODPOWIEDZ

Wróć do „Elektronika sterująca, wyświetlacze”