Marlin 2.x da Zero senza lasciarci le penne

Indice dei contenuti

Link ad aiuti esterni

Alcuni suggerimenti prima di iniziare a spiegare Marlin. Marlin ha un sacco di parametri per la configurazione delle nostra stampanti, se ti piace come me sfogliare il cartaceo, puoi acquistare la guida realizzata da Salvatore Patti in vendita su Amazon (i link contiene tag in modo che il gruppo riceva una percentuale sulla vendita, il prezzo finale non cambia)

Il nostro Gianluca ha fatto una breve recensione sul nostro canale youtube

Sul canale trovate anche una guida video realizzata sempre da Gianluca degli argomenti che vedremo piu’ nel dettaglio in questa guida, cercheremo di trattare piu’ nel dettaglio tutti gli argomenti relativi al firmware Marlin, anche se, ad oggi, sembra che il piu’ utilizzato inizi ad essere Klipper. Ma tranquilli, parleremo anche di quello.

Breve introduzione

Questa guida vuole essere una breve introduzione ai comandi di base per una buona compilazione del firmware per la tua stampante, questa e’ una guida autorealizzata, differente dalla guida ufficiale di cui abbiamo gia’ fatto la traduzione parziale. cercheremo di analizzare e spiegare un po’ piu’ a fondo le funzioni dei vari settaggi.

Cercate di seguire l’articolo in ordine, in quanto viene presentato in base a come si presentano i comandi su Marlin piano piano che scorriamo i file da compilare.

Se seguirai questa guida passo passo, riceverai un tassello in più da aggiungere alle tue conoscenze sulla stampa 3D e vedrai che soddisfazione darà compilarsi il proprio firmware.

Se durante il percorso avrai dei dubbi, puoi commentare sotto o accedere al nostro canale Telegram dove saremo disponibili noi ed altri utenti per aiutarti.

Qui di seguito troverai l’indice degli argomenti

Introduzione a Marlin 2.x

Quando aprirai per la prima volta i file per la configurazione di Marlin 2.x, la prima cosa che penserai sarà “Nono sono mica un programmatore io”, nulla di piu’ errato, vedrai in questa guida passo passo che la compilazione del firmware risulta semplice anche per chi non ha basi di programmazione.

Marlin si compone di molti file, ma alla fine i file essenziali su cui lavorare sono due, l’importante è armarsi di un buon editor di testo, o, ancora meglio, programmi specifici per la compilazione del firmware che ti daranno i giusti suggerimenti per la compilazione. Vedremo in seguito i programmi necessari.

Se poi vorrai addentrarti ancora di più nel mondo di Marlin, allora i file su cui lavorare potrebbero diventare molti di più.

Ti domanderai “Ma perché devo mettermi a compilare io il mio firmware?”. Le risposte possono essere molteplici, personalmente la risposta è mi piace scoprire cosa c’è dietro il funzionamento delle stampanti 3D e mi piace modificare le cose come piace a me. Inoltre la modifica del firmware può portare a miglioramenti di eventuali errori del firmware stock delle stampanti.

Sei un vero maker? allora non aver paura e vai avanti, ti si potrebbero presentare errori, ma con l’aiuto di Google, ma soprattutto delle community esistenti su Marlin (vantaggio rispetto a Klipper, che ha una community in crescita).

In questa guida per configurare Marlin 2.x, andremo a vedere la configurazione per una stampante “Custom”, o “auto costruita” per chi odia gli inglesismi (a volte necessari, si veda per esempio slicer che affettatrice suona male). Apriremo il file necessari alla configurazione e li modificheremo passo passo.

Essenziale, per completare la configurazione, è conoscere tutti i componenti e le caratteristiche della tua stampante, come ad esempio tipo di estrusore, motori, scheda madre, dimensioni di stampa, modello termistore, tipo di end stop, etc. Pertanto prima di iniziare è meglio raccogliere tutti questi dati, altrimenti ti troverai ad un punto di stop nella configurazione.

Preparare Marlin per la personalizzazione

Esistono alcuni siti che aiutano nella compilazione di Marlin, ma non li suggerisco, in quanto si basano su configurazioni fatte da utenti per stampanti personalizzate. In questa guida vedremo come partire dalle configurazioni presenti sul sito di Marlin, abbiamo due possibilità:

  • Configurazione con i file di base
  • Configurazione con file di esempio di una stampante similare

In entrambi i casi è necessario procedere a configurare il nostro ambiente di lavoro.

Scaricare il firmware

Molto facile! se sei pratico con GitHub, dal tuo browser preferito accedi al gitHub di Marlin al seguente link:

https://github.com/MarlinFirmware/Marlin

Se vuoi conoscere le novità, i contenuti o i problemi risolti delle diverse versioni di Marlin, puoi farlo dal seguente link:

https://github.com/MarlinFirmware/Marlin/releases

Esistono varie versione scaricabili di Marlin:

  • Versione corrente: è le versioni stabile e testata di Marlin;
  • Patched: e’ la versione stabile, ma con l’aggiornamento relativo ai bug segnalati, ma non ancora convertita in versione stabile (può provocare danni alla configurazione, da non usare su macchine di produzione), identificata con la versione senza lts davanti al nome;
  • Nightly build: E’ la versione di studio dei bug, da non usare per macchine di produzione, è di fatto la versione per i test, identificata con bugfix davanti al nome.

In poche parole una versione di Marlin, prima di diventare corrente, passa prima per lo stadio Nightly e poi Patched.

Se non vi trovate bene navigando su GitHub, è possibile scaricare le tre versioni di Marlin e relative configurazioni anche dal sito alla pagina di download scegliendo la versione desiderata dalla colonna download.

Il passaggio successivo, se disponiamo di una stampante commerciale, sarà scaricare le configurazioni preconfigurate dalla pagina https://github.com/MarlinFirmware/Configurations o dal sito indicato sopra, dalla colonna Configurations, facendo attenzione a scaricare la configuraziona create per la versione Marlin scaricata.

ATTENZIONE: non utilizzare mai la versione import, in quanto sono configurazioni importate e non ancora testate.

Ora che disponiamo dei file di Marlin sul tuo computer, dobbiamo decomprimerli. Una soluzione ottimale e’ avere il tutto in cartelle senza troppe sottocartelle evitando accenti e simboli nei nomi, in quanto potrebbe generare errori in fase di compilazione (personalmente cerco di evitare anche gli spazi).

Andremo ad unire la versione base stabile di Marlin con la configurazione della nostra macchina (ricordo che useremo una preconfigurazione di macchina esistente simile alla nostra):

  • Apriamo Esplora file di Windows e accediamo alla cartella in cui abbiamo scaricato e decompresso il repository Marlin;
  • Una volta lì, apriremo un altro esploratore di file con il contenuto del repository di configurazione
  • Troveremo due file di configurazione Marlin per la nostra stampante, nell’immagine di esempio utilizzeremo una Ender 3 (sono felice possessore di due ender 3 ben modificate, ma vi invito anche a leggere la storia di Azzurra, la rinascita di una ender 3, sviluppata dal nostro amico luigi) con le preconfigurazioni per una scheda SKR MINI v2 (la cartella da cercare sarebbe quella indicata nella seguente schermata):
  • Copiamo i file all’interno della cartella del nostro preconfigurato (riquadro nello screenshot precedente e li incolleremo (sostituendo quelli esistenti) nella cartella “…\Marlin” dove abbiamo decompresso il repository Marlin come nella seguente schermata:

Adesso il nostro Marlin aspetta solo di essere compilato!

Installazione dei software necessari per editare e compilare Marlin

Il passo successivo è installare il software necessario, per farlo, è necessario scaricare e installare i seguenti programmi:

  • Python: https://www.python.org/downloads/ puoi scaricarlo anche dall’App Store di Windows, che in alcuni casi esegue un’installazione più corretta;
  • Git: https://git-scm.com/
  • Visual Studio Code: https://code.visualstudio.com/Anche se sembra che Python e Git non vengano utilizzati in nessun passaggio, sono requisiti di Visual Studio Code per questo tutorial

Una volta installati i programmi, possiamo installare il plugin PlatformIO in Visual Studio Code. Per fare ciò seguiremo i seguenti passaggi:

  • Premiamo i quadrati nel menu di sinistra ;
  • Nel motore di ricerca scriviamo “PlatformIO”;
  • Premiamo sul pulsante per installare.
Possibili soluzioni ai problemi di installazione dell’estensione Platformio:
Installa prima Python, come suggerito in questa guida, dal suo sito web o dall’App Store di Windows;
Esegui VSC come amministratore, almeno durante l’installazione delle estensioni necessarie, in questo modo eviterai che alcune azioni vengano limitate o bloccate in determinate configurazioni di Windows;
– Vai su “Applicazioni e funzionalità” nel caso di Windows, sceglieremo l’opzione “Alias ​​di esecuzione dell’applicazione” disattivando il programma di installazione dell’applicazione python.exe e python3.exe. Una volta completato questo passaggio, riavvieremo VSC e riproveremo l’installazione;
Assicurati che il tuo antivirus/firewall non stia bloccando il processo di installazione di VSC/Platformio poiché parti del processo richiedono il download di moduli da Internet.
Se non ha funzionato… ricominciare da zero e nell’ordine di installazione corretto:
Disinstallare completamente VSC e tutti gli altri componenti correlati installati;
Avvia un pulitore di registro come CCleaner, PrivaZer o simili, rimuovendo eventuali riferimenti ad applicazioni che non sono necessarie;
Eliminare eventuali directory rimanenti relative a queste attività di compilazione Marlin;
Installa tutto da zero seguendo i passaggi indicati nella guida presente in questa guida.

Controlli per verificare che Python sia installato correttamente (dipende dalla versione di Python installata e dal sistema operativo), poiché è una parte fondamentale sia per l’installazione di Platformio che per il suo funzionamento:
– Esegui da riga di comando (tasto Windows + R -> cmd.exe)
echo %PATH% – questo dovrebbe restituire un elenco di directory in cui una di queste dovrebbe essere Python e dobbiamo assicurarci che punti alla versione compatibile con la nostra versione di Platformio… ad esempio, il percorso mostra una versione 2.5 e il nostro Platformio necessita di Python 3.6+
echo %PYTHONPATH% – come il precedente, dovrebbe restituire il percorso Python
– python –version – se quanto sopra è corretto dovrebbe restituire la versione del nostro Python installato
pip –version – pip è un programma di installazione del pacchetto Python e potrebbe anche essere richiesto per alcune azioni

Elenco delle alternative se non è possibile far funzionare VSC+Platformio:
– Usa Sublime invece di VSC
– Utilizza qualsiasi editor di testo e avvia Platformio dalla riga di comando
– Utilizza Atom invece di VSCdos direttamente con le versioni Marlin e potrebbe contenere configurazioni errate o problematiche

Compiliamo il nostro Marlin

Una volta ottenuti i file di Marlin ed installato i software necessari, dobbiamo compilarlo per ottenere i file utilizzabili dalle nostre stampanti.

Apriamo Visual Studio Code, selezioniamo l’icona di platformIO nella colonna di di sinistra e poi selezionare il pulsante

Navighiamo nel percorso dove abbiamo la nostra cartella contenente il repository di Marlin scaricato da GitHub:

Come già detto, ti consigliamo di non avere la cartella con i tuoi sorgenti Marlin in molte directory nidificate poiché ciò potrebbe causare alcuni problemi.

L’ideale è averlo alla radice di qualsiasi tua unità, ad es. C:/Marlin

In Visual Studio Code selezioniamo il file plaformio.ini dall’area di lavoro Marlin che abbiamo appena aggiunto.

Selezioniamo che l’autore del file è credibile

Modifichiamo la riga “default_envs” e sostituiamo “megaatmega2560” con quella adatta alla nostra scheda/stampante. Per trovare la vostra scheda, dovremo districarci un po’ tra la pagina web di Marlin ed i file di configurazione di Marlin.

Cerchiamo la nostra scheda nella seguente pagina https://marlinfw.org/docs/hardware/boards.html#boards-list dove abbiamo anche l’indicazione del processore utilizzato dalla scheda ed identifichiamola copiando il codice nella colonna di sinistra

apriamo in platformio il file pin.h presente nel seguente percorso Marlin/src/pins/ premiamo CTRL + F e nella casella di ricerca incolliamo il nome della nostra scheda togliendo il suffisso BOARD_

Troveremo cosi la nostra scheda, dove tra i commenti troveremo la sigla env da utilizzare nel campo env di platformio.ini nel nostro caso abbiamo diverse scelte, andremo ad utilizzare il primo in elenco STM32F103RC_btt

PICCOLA TIPS: a volte i costruttori di schede, mettono in condivisione un repository firmware Marlin fatto da loro, possiamo navigare nel loro paltformio.ini per verificare la env utilizzata, in questo caso la BTT ha messo la seguente scheda

Vedremo successivamente il file pin.h dove è presente la configurazione dei pin della scheda (ma si tratta già di un livello di configurazione più avanzato)

Successivamente, se vogliamo apportare modifiche alla configurazione di base della nostra stampante, sia perché abbiamo apportato una modifica sia per migliorare un’impostazione, apriamo la cartella Marlin e appariranno i due file di configurazione. Puoi trovare informazioni sulle opzioni di base di Marlin nel seguente collegamento (e’ la guida ufficiale del sito Marlin in inglese)e o spiegate in modo più “semplice” nella nostra guida di Marlin.

Diamo al momento per scontato che abbiamo una ender 3 stock, a cui andiamo a cambiare la scheda originale e montiamo la scheda BTT SKR Mini E3 V 2.0 e che vogliamo utilizzare il firmware che ci fornisce Marlin senza alcuna modifica, procediamo quindi a compilare il firmware così com’è, senza alcuna modifica premendo sul pulsante compila

PlatformIO inizierà a scaricare ed installare le librerie necessarie per compilare il firmware, una volta scaricate e installate procederà alla compilazione. Se la compilazione andrà a buon fine troveremo la seguente schermata

Trovate qui il allegato il testo completo della compilazione per vedere l’intero processo

Nella scheda problem, sono visibili eventuali errori o warning generati durante la compilazione, se la compilazione va comunque a buon fine, generalmente sono semplici warning di eventuali operazioni da effettuare

In questo caso ricorda di verificare i jumper se configurata la home senza sensori.

Compilato il codice andiamo nella cartella: “…\Marlin.pio\build\xxxx” dove troveremo un file chiamato “firmware.bin” o simile a seconda delle caratteristiche che necessitano per le nostre elettroniche.

Nel caso in esempio il procedimento è descritto per una scheda a 32 bit in cui è sufficiente copiare il file generato sulla scheda SD della nostra stampante.
Per le stampanti più vecchie, il file generato è solitamente un .hex che, tra mite collegamento USB con la stampante, possiamo caricare direttamente da VSC o utilizzare alcuni slicer (es. PrusaSlicer o Cura ).
Ricorda che VSC potrebbe non farlo direttamente se non installi i driver per la tua scheda e potrebbe non essere in grado correttamente la COM se hai, ad esempio, Cura aperto.

Copiamo questo file su una scheda SD vuota nella directory principale o seguiamo la procedura appropriata per la nostra scheda.

Estraiamo la SD dal computer

Spegniamo la stampante (scolleghiamo l’USB e l’alimentazione se sono entrambe collegate) e aspettiamo 30 secondi

Inseriamo la scheda SD nella stampante (deve essere inserita nel supporto SD della scheda madre e non nel display) e accendiamo la stampante

Dopo un minuto possiamo spegnere la stampante e riavviarla, verifichiamo da display che sia installato il nuovo firmware.

Aggiornare Marlin ad una nuova versione

Molti utenti trovano molto complicato il processo di aggiornamento dalla versione da loro preparata a quella nuova. Di seguito ti forniamo alcuni suggerimenti su come eseguire il processo per renderlo più semplice.

Scarica la nuova versione di Marlin, come indicato precedentemente.

Una volta scaricata e decompressa, aggiungeremo quella cartella al nostro progetto VSC insieme alla vecchia versione

Ora che abbiamo entrambe le directory nel nostro progetto non ci resta che utilizzare lo strumento di confronto incluso in VSC per confrontare i file di configurazione di Marlin:

  • platformio.ini, è il file dove troveremo sostanzialmente l’env della nostra elettronica;
  • Marlin/configuration.h, file dove normalmente abiliteremo le funzioni e la configurazione della stampante/elettronica/estensioni;
  • Marlin/configuration_adv.h, simile al precedente ma dove troveremo alcune funzioni avanzate.

Per confrontare due file, dal pannello laterale dove viene mostrata la struttura di file nelle cartelle del nostro progetto (Explorer), clicchiamo col destro sul file da confrontare della nostra vecchia versione, premeremo “Select for compare”.

Successivamente faremo lo stesso ma con il file della nostra nuova versione, ma, in questo caso, selezioneremo l’opzione “Compare with selected”

apparirà una nuova schermata con il confronto tra le versioni:

  • Nella parte superiore contrassegnata nello screenshot seguente vedremo il nome e la cartella dei file da confrontare
  • Nella parte centrale vediamo come segna i cambiamenti, nel primo blocco indica in rosso le parti che la destinazione non prevede (rosso), la parte centrale dove indica i cambiamenti in entrambi i posti e quello che utilizzeremo normalmente per rilevare gli aggiustamenti (rosso/verde) e la parte inferiore (verde) dove troverete quello che c’è nel nuovo e non nel vecchio
– puoi invertire l’ordine di selezione dei file se il codice colore ti è più familiare
– ti consigliamo di aggiungere sempre i commenti, con // alla fine delle righe che modifichi, così sarà più facile per te identificare le modifiche
– a volte le funzioni possono cambiare posizione o nome così come il formato del valore, qui devi solo guardare e leggere i commenti del codice stesso

Una volta apportate tutte le modifiche, non dovrai fare altro che caricare il nuovo progetto in Platformio come abbiamo spiegato all’inizio della guida e compilare, correggendo eventuali errori che compaiono, poiché normalmente gli errori sono descritti abbastanza bene

Ultimi suggerimenti

Se stai per aggiornare una stampante e non disponi dei file Marlin originali ed hai apportato modifiche alla configurazione dello schermo, ti consigliamo di eseguire un M503 da un client terminale come Pronterface e salvare le informazioni restituite poiché sono i valori EEPROM, molto utili da regolare nel nuovo firmware.

Ricordiamo che è consigliabile, dopo aver caricato il firmware, caricare i valori di fabbrica della EEPROM, questo può essere fatto da terminale con un M502 seguito da un M500, oppure da schermo in modalità Marlin in Configurazione/Ripristino e seguito da Configurazione/ Salva EEPROM… oltre all’M503 con cui potrai elencare i valori della tua EEPROM per assicurarti che siano corretti

Capire come Marlin utilizza la RAM e/o l’EEPROM dell’elettronica della stampante per salvare determinate impostazioni può creare inizialmente confusione e se non lo facciamo correttamente può causare problemi perdendo determinate impostazioni al riavvio della macchina.

Marlin utilizza quella che chiamiamo EEPROM, che può trovarsi in un chip di memoria dedicato o integrata in un’area riservata da Marlin nella ROM dell’elettronica stessa… essendo queste le più consigliabili/comuni, abbiamo anche la possibilità di salvare la nostra EEPROM nella SD della nostra elettronica dove crea un eeprom.dat (a seconda della versione di Marlin questo nome può variare).

In questa EEPROM Marlin salva i valori di configurazione che solitamente sono regolabili dall’utente, questo permette una regolazione più semplice senza richiedere di dover regolare questi valori nei sorgenti Marlin, compilare e applicare il nuovo firmware alla nostra macchina.

Ciò che fa all’avvio Marlin, è caricare i valori salvati nella EEPROM (memoria non volatile) nella RAM (che è una memoria volatile) in modo che possiamo utilizzarli, consultarli e regolarli durante le nostre stampe, spento la macchina, questa RAM viene cancellata per eseguire il processo di caricamento dei valori EEPROM al riavvio di Marlin.

Di seguito spiegheremo alcuni gcode che abbiamo a disposizione per gestire questa EEPROM, funzionanti solo quando abbiamo attivato il comando EEPROM_SETTINGS nel firmware e come usarli in ciascun caso:

  • M500 (Save Setting): Il gcode M500 (Save settings) salva nella EEPROM la configurazione che abbiamo attiva nella nostra RAM in modo che le modifiche apportate non vadano perse allo spegnimento della macchina. Possiamo anche avviare questo comando dalla schermata della modalità di emulazione Marlin Store Settings o, sui display touch screen, che di solito hanno anche opzioni per eseguire il processo.
  • M501 (Restore settings): Il gcode M501 (Restore settings) carica i valori dalla nostra EEPROM sulla nostra RAM, eseguendo sostanzialmente il processo opposto di M500. Normalmente, l’uso normale dell’M501 è annullare le modifiche apportate alla nostra RAM che non sono state applicate alla nostra EEPROM. Sempre dalla schermata della modalità di emulazione Marlin abbiamo l’opzione Carica impostazioni con la quale eseguiremo l’M501.
  • M502 (Factory Reset): Con M502 (Factory Reset) caricheremo nella nostra RAM le configurazioni incluse nel firmware, non nella EEPROM, assicurandoci di ritornare ai valori originali del nostro firmware. Di solito è consigliabile eseguire un M502, seguito da un M500, ogni volta che applichiamo una nuova versione del firmware alla nostra macchina, poiché in questo modo carichiamo i valori del nuovo firmware, ripristinando le eventuali configurazioni rimanenti che avevamo dal precedente nella nostra EEPROM. È importante dire che nelle ultime versioni di Marlin, nel caso in cui vengano rilevati cambiamenti significativi nella struttura della EEPROM rispetto al nuovo firmware, suggerirà sullo schermo di eseguire questo Reset della EEPROM.
  • M503 (Report Settings): Il gcode M503 (Report Settings) ci permetterà di visualizzare i valori della nostra RAM attraverso la console seriale (Pronterface ad esempio), il che è estremamente utile per verificare quali valori sta realmente utilizzando la nostra macchina. Nelle attuali versioni di Marlin abbiamo una funzione chiamata CONFIGURATION_EMBEDDING che ci permetterà di aggiungere il parametro C al nostro M503 e di lasciarci un file zip sulla nostra SD, quando possibile, con i valori della nostra RAM in formato testo.
  • M504 (Validate EEPROM): Infine abbiamo M504 (validate EEPROM) che convaliderà se il formato/struttura EEPROM è corretto per la versione del nostro firmware, poiché, in caso contrario, il nostro firmware potrebbe non avviarsi correttamente in determinate circostanze.

Gianluca ci ha parlato di questi comandi nel video qui sotto presente sul nostro canale

Sulle schede attuali viene generato un firmware.bin che viene posizionato nella SD. In questi casi, se il processo di aggiornamento è stato eseguito correttamente, questo file viene rinominato in .CUR. Quindi per verificare se il processo è stato corretto, estrai la SD dopo aver completato il processo di aggiornamento e verifica dal tuo computer che il .BIN sia cambiato in .CUR

Altre schede, normalmente precedenti ad 8bit, hanno il nuovo firmware “masterizzato” direttamente sulla scheda, quindi è necessario averle collegate via USB. In alcuni casi può causare problemi durante la programmazione tramite USB, quindi puoi andare nella posizione in cui hai lasciato il binario compilato… in questi casi normalmente è un file .hex e caricarlo da altri strumenti specifici per il tuo stampante, slicer come PrusaSlicer o Cura possono eseguire questo passaggio abbastanza facilmente

File “Configuration.h”

Come ho detto prima, ci sono 2 file principali che gestiscono tutto durante la configurazione di Marlin 2.0.x. Naturalmente ci sono molti altri cambiamenti e modifiche che potremmo apportare ma per il nostro scopo attuale non sono al momento necessari (modifiche al menu originale, loghi, ecc.)

Inizieremo quindi a modificare il file Configuration.h tramite VSC, oppure con l’editor di testo che abbiamo scelto (nel mio caso Notepad++) e seguiremo, in ordine, le diverse opzioni più comuni di cui tenere conto. Questo file contiene le principali configurazioni hardware, lingue e driver, nonché configurazioni per le funzionalità e i componenti più comuni della nostra stampante.

In verde puoi vedere le opzioni che ho attivato (o che sono attivate per impostazione predefinita) e in grigio le opzioni che sono disattivate o i semplici commenti. Per attivare un’opzione basta eliminare le due barre “//” davanti al parametro in questione; per disattivarli, aggiungili. Se sei un programmatore avrai già abbastanza familiarità con questa procedura.

Logo Marlin (SHOW_BOOTSCREEN)

È il logo Marlin che appare all’avvio del firmware. Per impostazione predefinita appare attivo, possiamo disattivarlo se lo desideriamo senza alcun problema. Non è essenziale configurarlo in Marlin 2, ma potremmo anche liberare un po’ di memoria se sei molto limitato.

Puoi anche inserire il tuo logo o un’immagine personalizzata, ma lo spiegheremo alla fine di questa guida nella sezione “Trucchi interessanti per Marlin“.

// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION **
#define SHOW_BOOTSCREEN

Scheda madre o elettronica (MOTHERBOARD)

Parametro molto importante. Qui selezioneremo l’elettronica che abbiamo installato nella nostra stampante 3D. Dato che ce ne sono parecchie di elettroniche disponibili, dovremo trovare qual è la nostra e il valore da inserire qui.

Hai un elenco di dispositivi elettronici compatibili da utilizzare nel file “boards.h“. Si trova nel seguente percorso del firmware Marlin: \Marlin\src\core\boards.h

Nel mio caso, la mia stampante 3D utilizza una scheda SKR MINI E3 V2.0 della BTT. Per questo devo scrivere “BOARD_BTT_SKR_MINI_E3_V2_0” come puoi vedere nell’esempio. Inserisci la tua elettronica.

// Choose the name from boards.h that matches your setup
#ifndef MOTHERBOARD
  #define MOTHERBOARD BOARD_BTT_SKR_MINI_E3_V2_0
#endif

Porte di comunicazione (SERIAL_PORT e SERIAL_PORT_2)

Sono le porte di comunicazione della nostra elettronica. In linea di principio, non dovresti modificare il primo a meno che tu non abbia dell’elettronica esotica.

Se la tua scheda era una della serie SKR di BTT, generalmente dovresti attivare SERIAL_PORT_2 e impostare il valore -1 (come è di default).

Per altri tipi di schede, è necessario cercare i valori in rete, un suggerimento è quello di andare a vedere se i produttori delle schede hanno un GitHub della scheda, dove si possono trovare questi valori.

/**
* Select the serial port on the board to use for communication with the host.
* This allows the connection of wireless adapters (for instance) to non-default port pins.
* Serial port -1 is the USB emulated serial port, if available.
* Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
*
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
*/
#define SERIAL_PORT 0
 
/**
* Select a secondary serial port on the board to use for communication with the host.
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
*/
#define SERIAL_PORT_2 -1

Velocità di comunicazione (BAUDRATE)

La velocità alla quale collegheremo il nostro computer alla stampante, per impostazione predefinita è 115200, quindi la lasceremo così.

Se per caso hai problemi di comunicazione con la tua stampante, puoi abbassare la velocità di questo parametro per cercare di risolverlo.

Per la seconda seriale al momento non mettiamo nulla.

/**
 * Serial Port Baud Rate
 * This is the default communication speed for all serial ports.
 * Set the baud rate defaults for additional serial ports below.
 *
 * 250000 works in most cases, but you might try a lower speed if
 * you commonly experience drop-outs during host printing.
 * You may try up to 1000000 to speed up SD file transfer.
 *
 * :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
 */
#define BAUDRATE 115200

//#define BAUD_RATE_GCODE     // Enable G-code M575 to set the baud rate

Nome della tua macchina (CUSTOM_MACHINE_NAME)

Questo è semplice, il nome che vuoi che abbia la tua nuova stampante configurata. Per impostazione predefinita noterai che è disabilitato, quindi queste 2 barre “//” appaiono davanti a #define

Rimuoveremo le 2 barre e lasceremo la configurazione in questo modo:

// Name displayed in the LCD "Ready" message and Info menu
#define CUSTOM_MACHINE_NAME "Ender-3"

Configurare i Driver (DRIVER_TYPE)

Configurare il firmware del Marlin 2 con i driver di cui disponiamo è essenziale. Il processo molto semplice.

Per impostazione predefinita, tutte le opzioni sono disabilitate, quindi, se parti da una configurazione base, devi abilitare quelle che utilizzerai, indicando i driver utilizzati sulla tua scheda.

Nella mia stampante ho 3 motori sui 3 assi (X, Y, Z) e un unico motore per l’estrusore. Quindi abilito le opzioni necessarie. Il primo estrusore si chiama sempre E0.

Dato che utilizzo un configuration.h precompilato per BBT SKR MINI E3, la scheda monta dei TMC2209, pertanto li trovo indicati gia’ nel file preconfigurato.

Nei commenti puoi vedere tutti i tipi di driver disponibili in Marlin 2, quindi individua il tuo e annotalo esattamente come appare.

/**
 * Stepper Drivers
 *
 * These settings allow Marlin to tune stepper driver timing and enable advanced options for
 * stepper drivers that support them. You may also override timing options in Configuration_adv.h.
 *
 * Use TMC2208/TMC2208_STANDALONE for TMC2225 drivers and TMC2209/TMC2209_STANDALONE for TMC2226 drivers.
 *
 * Options: A4988, A5984, DRV8825, LV8729, TB6560, TB6600, TMC2100,
 *          TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,
 *          TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,
 *          TMC26X,  TMC26X_STANDALONE,  TMC2660, TMC2660_STANDALONE,
 *          TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
 * :['A4988', 'A5984', 'DRV8825', 'LV8729', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
 */
#define X_DRIVER_TYPE  TMC2209
#define Y_DRIVER_TYPE  TMC2209
#define Z_DRIVER_TYPE  TMC2209
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define Z3_DRIVER_TYPE A4988
//#define Z4_DRIVER_TYPE A4988
//#define I_DRIVER_TYPE  A4988
//#define J_DRIVER_TYPE  A4988
//#define K_DRIVER_TYPE  A4988
//#define U_DRIVER_TYPE  A4988
//#define V_DRIVER_TYPE  A4988
//#define W_DRIVER_TYPE  A4988
#define E0_DRIVER_TYPE TMC2209

Numero di estrusori (EXTRUDER)

Qui configureremo in Marlin il numero di estrusori di cui dispone la nostra stampante 3D. Per impostazione predefinita, il valore iniziale è 1, poiché la maggior parte ha un estrusore. Se questo non è il tuo caso, inserisci il numero corretto di estrusori.

// This defines the number of extruders
// :[0, 1, 2, 3, 4, 5, 6, 7, 8]
#define EXTRUDERS 1

Diametro del filamento (DEFAULT_NOMINAL_FILAMENT_DIA)

In questa sezione selezioneremo il tipo di diametro utilizzato dalla nostra stampante. Per impostazione predefinita, viene impostato a 3.0, un residuo bellico di quando le stampanti usavano quel filamento, oggi la maggior parte delle stampanti funziona solitamente con un diametro di 1,75. Molto importante cambiarlo.

// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

Sensori di temperatura (TEMP_SENSORS)

In questa sezione del firmware Marlin definiremo i sensori di temperatura esistenti nella nostra stampante 3D. A partire dalla versione versione 2.0.7.2, è stato aggiunto il supporto per più estrusori (per un totale di 11 supportati) incluso un sensore per la camera chiusa.

Come puoi vedere, ce ne sono molti e un elenco appare nel codice stesso. Se non disponi di informazioni sulla tua, prova a controllare su Google troverai diverse indicazioni da parte degli utenti con stampanti uguali o simili.

Per impostazione predefinita, solo TEMP_SENSOR_0 è configurato con il valore “1”. Nel mio caso va bene essendo il sensore montato sulla Ender 3.

Avendo anche il piano riscaldato, per migliorare l’adesione durante la stampa ed evitare problemi di Warping, configuro TEMP_SENSOR_BED con il valore 1. Il resto lo lascio a 0 poiché non ho più estrusori né una camera riscaldata (Chamber Temp).

/**
 * Temperature Sensors:
 *
 * NORMAL IS 4.7kΩ PULLUP! Hotend sensors can use 1kΩ pullup with correct resistor and table.
 *
 * ================================================================
 *  Analog Thermistors - 4.7kΩ pullup - Normal
 * ================================================================
 *     1 : 100kΩ EPCOS - Best choice for EPCOS thermistors
 *   331 : 100kΩ Same as #1, but 3.3V scaled for MEGA
 *   332 : 100kΩ Same as #1, but 3.3V scaled for DUE
 *     2 : 200kΩ ATC Semitec 204GT-2
 *   202 : 200kΩ Copymaster 3D
 *     3 : ???Ω  Mendel-parts thermistor
 *     4 : 10kΩ  Generic Thermistor !! DO NOT use for a hotend - it gives bad resolution at high temp. !!
 *     5 : 100kΩ ATC Semitec 104GT-2/104NT-4-R025H42G - Used in ParCan, J-Head, and E3D, SliceEngineering 300°C
 *   501 : 100kΩ Zonestar - Tronxy X3A
 *   502 : 100kΩ Zonestar - used by hot bed in Zonestar Průša P802M
 *   503 : 100kΩ Zonestar (Z8XM2) Heated Bed thermistor
 *   504 : 100kΩ Zonestar P802QR2 (Part# QWG-104F-B3950) Hotend Thermistor
 *   505 : 100kΩ Zonestar P802QR2 (Part# QWG-104F-3950) Bed Thermistor
 *   512 : 100kΩ RPW-Ultra hotend
 *     6 : 100kΩ EPCOS - Not as accurate as table #1 (created using a fluke thermocouple)
 *     7 : 100kΩ Honeywell 135-104LAG-J01
 *    71 : 100kΩ Honeywell 135-104LAF-J01
 *     8 : 100kΩ Vishay 0603 SMD NTCS0603E3104FXT
 *     9 : 100kΩ GE Sensing AL03006-58.2K-97-G1
 *    10 : 100kΩ RS PRO 198-961
 *    11 : 100kΩ Keenovo AC silicone mats, most Wanhao i3 machines - beta 3950, 1%
 *    12 : 100kΩ Vishay 0603 SMD NTCS0603E3104FXT (#8) - calibrated for Makibox hot bed
 *    13 : 100kΩ Hisens up to 300°C - for "Simple ONE" & "All In ONE" hotend - beta 3950, 1%
 *    14 : 100kΩ  (R25), 4092K (beta25), 4.7kΩ pull-up, bed thermistor as used in Ender-5 S1
 *    15 : 100kΩ Calibrated for JGAurora A5 hotend
 *    17 : 100kΩ Dagoma NTC white thermistor
 *    18 : 200kΩ ATC Semitec 204GT-2 Dagoma.Fr - MKS_Base_DKU001327
 *    22 : 100kΩ GTM32 Pro vB - hotend - 4.7kΩ pullup to 3.3V and 220Ω to analog input
 *    23 : 100kΩ GTM32 Pro vB - bed - 4.7kΩ pullup to 3.3v and 220Ω to analog input
 *    30 : 100kΩ Kis3d Silicone heating mat 200W/300W with 6mm precision cast plate (EN AW 5083) NTC100K - beta 3950
 *    60 : 100kΩ Maker's Tool Works Kapton Bed Thermistor - beta 3950
 *    61 : 100kΩ Formbot/Vivedino 350°C Thermistor - beta 3950
 *    66 : 4.7MΩ Dyze Design / Trianglelab T-D500 500°C High Temperature Thermistor
 *    67 : 500kΩ SliceEngineering 450°C Thermistor
 *    68 : PT100 Smplifier board from Dyze Design
 *    70 : 100kΩ bq Hephestos 2
 *    75 : 100kΩ Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32
 *   666 : 200kΩ Einstart S custom thermistor with 10k pullup.
 *  2000 : 100kΩ Ultimachine Rambo TDK NTCG104LH104KT1 NTC100K motherboard Thermistor
 *
 * ================================================================
 *  Analog Thermistors - 1kΩ pullup
 *   Atypical, and requires changing out the 4.7kΩ pullup for 1kΩ.
 *   (but gives greater accuracy and more stable PID)
 * ================================================================
 *    51 : 100kΩ EPCOS (1kΩ pullup)
 *    52 : 200kΩ ATC Semitec 204GT-2 (1kΩ pullup)
 *    55 : 100kΩ ATC Semitec 104GT-2 - Used in ParCan & J-Head (1kΩ pullup)
 *
 * ================================================================
 *  Analog Thermistors - 10kΩ pullup - Atypical
 * ================================================================
 *    99 : 100kΩ Found on some Wanhao i3 machines with a 10kΩ pull-up resistor
 *
 * ================================================================
 *  Analog RTDs (Pt100/Pt1000)
 * ================================================================
 *   110 : Pt100  with 1kΩ pullup (atypical)
 *   147 : Pt100  with 4.7kΩ pullup
 *  1010 : Pt1000 with 1kΩ pullup (atypical)
 *  1022 : Pt1000 with 2.2kΩ pullup
 *  1047 : Pt1000 with 4.7kΩ pullup (E3D)
 *    20 : Pt100  with circuit in the Ultimainboard V2.x with mainboard ADC reference voltage = INA826 amplifier-board supply voltage.
 *                NOTE: (1) Must use an ADC input with no pullup. (2) Some INA826 amplifiers are unreliable at 3.3V so consider using sensor 147, 110, or 21.
 *    21 : Pt100  with circuit in the Ultimainboard V2.x with 3.3v ADC reference voltage (STM32, LPC176x....) and 5V INA826 amplifier board supply.
 *                NOTE: ADC pins are not 5V tolerant. Not recommended because it's possible to damage the CPU by going over 500°C.
 *   201 : Pt100  with circuit in Overlord, similar to Ultimainboard V2.x
 *
 * ================================================================
 *  SPI RTD/Thermocouple Boards
 * ================================================================
 *    -5 : MAX31865 with Pt100/Pt1000, 2, 3, or 4-wire  (only for sensors 0-2 and bed)
 *                  NOTE: You must uncomment/set the MAX31865_*_OHMS_n defines below.
 *    -3 : MAX31855 with Thermocouple, -200°C to +700°C (only for sensors 0-2 and bed)
 *    -2 : MAX6675  with Thermocouple, 0°C to +700°C    (only for sensors 0-2 and bed)
 *
 *  NOTE: Ensure TEMP_n_CS_PIN is set in your pins file for each TEMP_SENSOR_n using an SPI Thermocouple. By default,
 *        Hardware SPI on the default serial bus is used. If you have also set TEMP_n_SCK_PIN and TEMP_n_MISO_PIN,
 *        Software SPI will be used on those ports instead. You can force Hardware SPI on the default bus in the
 *        Configuration_adv.h file. At this time, separate Hardware SPI buses for sensors are not supported.
 *
 * ================================================================
 *  Analog Thermocouple Boards
 * ================================================================
 *    -4 : AD8495 with Thermocouple
 *    -1 : AD595  with Thermocouple
 *
 * ================================================================
 *  Custom/Dummy/Other Thermal Sensors
 * ================================================================
 *     0 : not used
 *  1000 : Custom - Specify parameters in Configuration_adv.h
 *
 *   !!! Use these for Testing or Development purposes. NEVER for production machine. !!!
 *   998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
 *   999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
 */
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_5 0
#define TEMP_SENSOR_6 0
#define TEMP_SENSOR_7 0
#define TEMP_SENSOR_BED 1
#define TEMP_SENSOR_PROBE 0
#define TEMP_SENSOR_CHAMBER 0
#define TEMP_SENSOR_COOLER 0
#define TEMP_SENSOR_BOARD 0
#define TEMP_SENSOR_REDUNDANT 0

Limitatori di temperatura (MINTEMP & MAXTEMP)

La configurazione di questi parametri in Marlin 2 è molto importante, poiché controllano le temperature massime e minime della nostra stampante.

Definiremo in quali intervalli dovrebbe trovarsi ciascuno dei sensori disponibili. In questo modo, se qualche sensore non raggiunge o supera questa temperatura, Marlin segnala un errore sul display e disattiva l’Hotend e il piano riscaldato.

Nel mio caso solitamente configuro le temperature dell’estrusore a 5 gradi (minima) e 275 gradi (massima). Nel caso in cui un estrusore o un letto non raggiunga i 5º gradi, dedurremo che il termistore non è installato correttamente o è fisicamente danneggiato.

Allo stesso modo, ci proteggerà nel caso in cui venga accidentalmente superata la temperatura massima, cosa fondamentale per la nostra sicurezza e quella della nostra casa.

// Below this temperature the heater will be switched off
// because it probably indicates a broken thermistor wire.
#define HEATER_0_MINTEMP   5
#define HEATER_1_MINTEMP   5
#define HEATER_2_MINTEMP   5
#define HEATER_3_MINTEMP   5
#define HEATER_4_MINTEMP   5
#define HEATER_5_MINTEMP   5
#define HEATER_6_MINTEMP   5
#define HEATER_7_MINTEMP   5
#define BED_MINTEMP        5
#define CHAMBER_MINTEMP    5

// Above this temperature the heater will be switched off.
// This can protect components from overheating, but NOT from shorts and failures.
// (Use MINTEMP for thermistor short/failure protection.)
#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define HEATER_4_MAXTEMP 275
#define HEATER_5_MAXTEMP 275
#define HEATER_6_MAXTEMP 275
#define HEATER_7_MAXTEMP 275
#define BED_MAXTEMP      125
#define CHAMBER_MAXTEMP  60

PID Tuning (Estrusore)

Sezione che controlla le impostazioni dell’algoritmo responsabile della gestione della temperatura degli estrusori e del letto riscaldato.

Potremmo entrare più nel dettaglio su come funziona, ma non è questo il momento. Se sei interessato a saperne di più sul PID Tuning, scrivi nei commenti e ci organizzeremo per dettagliarlo maggiormente. E’ possibile anche visionare la guida presente sul sito reprap.

Per impostazione predefinita, alcuni valori sono predeterminati per molte delle stampanti più conosciute sul mercato. Nel mio caso, per la Ender 3 troviamo i seguenti valori:

//===========================================================================
//============================= PID Settings ================================
//===========================================================================

// @section hotend temp

/**
 * Temperature Control
 *
 *  (NONE) : Bang-bang heating
 * PIDTEMP : PID temperature control (~4.1K)
 * MPCTEMP : Predictive Model temperature control. (~1.8K without auto-tune)
 */
#define PIDTEMP           // See the PID Tuning Guide at https://reprap.org/wiki/PID_Tuning
//#define MPCTEMP         // ** EXPERIMENTAL ** See https://marlinfw.org/docs/features/model_predictive_control.html

#define PID_MAX  255      // Limit hotend current while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1     0.95   // Smoothing factor within any PID loop

#if ENABLED(PIDTEMP)
  //#define PID_DEBUG             // Print PID debug data to the serial port. Use 'M303 D' to toggle activation.
  //#define PID_PARAMS_PER_HOTEND // Use separate PID parameters for each extruder (useful for mismatched extruders)
                                  // Set/get with G-code: M301 E[extruder number, 0-2]

  // Creality Ender-3
 #if ENABLED(PID_PARAMS_PER_HOTEND)
    // Specify up to one value per hotend here, according to your setup.
    // If there are fewer values, the last one applies to the remaining hotends.
   #define DEFAULT_Kp_LIST {  21.73,  21.73 }
    #define DEFAULT_Ki_LIST {   1.54,   1.54 }
    #define DEFAULT_Kd_LIST {  76.55,  76.55 }
  #else
    #define DEFAULT_Kp  21.73
    #define DEFAULT_Ki   1.54
    #define DEFAULT_Kd  76.55
  #endif
#else
  #define BANG_MAX 255    // Limit hotend current while in bang-bang mode; 255=full current
#endif

Per ottenere i valori dalla tua stampante, puoi consultarli su Internet oppure puoi farli tu stesso con una funzione interna Marlin chiamata PID Autotune.

Per fare ciò, collega la tua stampante a Repetier/Simplify3D o qualsiasi altro software che ti consenta di utilizzare i comandi Gcode. Una volta connesso, invia il comando M303 E0 S200 C8 e il processo inizierà.

Dopo aver riscaldato e raffreddato il fusore per 8 volte, si chiuderà e verranno visualizzate le seguenti informazioni. Dovrai solo prendere i valori Kp, Ki e Kd e inserirli nel tuo firmware, nei campi DEFAULT_Kp, DEFAULT_Ki e DEFAULT_Kd.

Pid Tuning (letto riscaldato)

Come prima, ma per il nostro piano di stampa. Per impostazione predefinita nel nuovo firmware sarà disabilitato. Se hai un letto riscaldato devi decommentare l’opzione #define PIDTEMPBED come vedrai nella mia configurazione.

Puoi anche eseguire un’altra funzione Marlin interna per ottenere i valori dal letto. Questo viene fatto con il comando Gcode M303 E-1 C8 S90.

Sul preconfigurato per Ender 3, il PID del letto è disattivato, di seguito vedete un esempio di come deve essere attivato, ma mi raccomando di fare l’autotune con il Gcode indicato sopra.

//===========================================================================
//====================== PID > Bed Temperature Control ======================
//===========================================================================

// @section bed temp

/**
 * Max Bed Power
 * Applies to all forms of bed control (PID, bang-bang, and bang-bang with hysteresis).
 * When set to any value below 255, enables a form of PWM to the bed that acts like a divider
 * so don't use it unless you are OK with PWM on your bed. (See the comment on enabling PIDTEMPBED)
 */
#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current

/**
 * PID Bed Heating
 *
 * The PID frequency will be the same as the extruder PWM.
 * If PID_dT is the default, and correct for the hardware/configuration, that means 7.689Hz,
 * which is fine for driving a square wave into a resistive load and does not significantly
 * impact FET heating. This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W
 * heater. If your configuration is significantly different than this and you don't understand
 * the issues involved, don't use bed PID until someone else verifies that your hardware works.
 *
 * With this option disabled, bang-bang will be used. BED_LIMIT_SWITCHING enables hysteresis.
 */
#define PIDTEMPBED

#if ENABLED(PIDTEMPBED)
  //#define MIN_BED_POWER 0
  //#define PID_BED_DEBUG // Print Bed PID debug data to the serial port.

  #define DEFAULT_bedKp 50.71
  #define DEFAULT_bedKi 9.88
  #define DEFAULT_bedKd 173.43

  // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
 #else
  //#define BED_LIMIT_SWITCHING   // Keep the bed temperature within BED_HYSTERESIS of the target
#endif

Tuttavia, ci sono momenti in cui l’attivazione del parametro PIDTEMPBED è più dannosa che non attivarlo. Ti consiglio di non abilitarlo dall’inizio.

Estrusione a freddo (PREVENT_COLD_EXTRUSION)

Entrambe le funzioni gestiscono l’estrusione a freddo presso Marlin. Come tutti sappiamo, non è consigliabile estrudere il filamento se il nostro Hotend non è acceso.

L’opzione PREVENT_COLD_EXTRUSION ci impedirà direttamente di estrudere materiale se il nostro hotend non raggiunge la temperatura minima definita.

Possiamo configurare a quale temperatura minima consentiremo a Marlin di estrudere il filamento con il parametro EXTRUDE_MINTEMP. Per impostazione predefinita sono entrambi attivi, quindi non dovresti preoccuparti.

Ti consiglio di non disattivare questi comandi, a meno che non devi fare dei test di estrusione.

/**
 * Prevent extrusion if the temperature is below EXTRUDE_MINTEMP.
 * Add M302 to set the minimum extrusion temperature and/or turn
 * cold extrusion prevention on and off.
 *
 * *** IT IS HIGHLY RECOMMENDED TO LEAVE THIS OPTION ENABLED! ***
 */
#define PREVENT_COLD_EXTRUSION
#define EXTRUDE_MINTEMP 170

Lunghezza di estrusione (PREVENT_LENGTHY_EXTRUDE)

Come indicato nei commenti, impedisce estrusioni di filamento di una distanza maggiore di quella che abbiamo configurato.

Ciò significa che Marlin ti consentirà di estrudere solo un massimo di 200 mm in un singolo comando GCODE come misura di default.

Se si desidera estrudere molto più di 200mm con un singolo comando, ad esempio nel caso di avere una funzione per caricare il filamento dal display utilizzando Bowden (questo e’ il caso della ender 3 standard), è necessario modificare il parametro EXTRUDE_MAXLENGTH ad un valore più alto, nell mio caso 600.

/**
 * Prevent a single extrusion longer than EXTRUDE_MAXLENGTH.
 * Note: For Bowden Extruders make this large enough to allow load/unload.
 */
#define PREVENT_LENGTHY_EXTRUDE
#define EXTRUDE_MAXLENGTH 600

Protezioni termiche (THERMAL_PROTECTION)

Questi tre parametri attivano la protezione termica aggiuntiva che Marlin 2.0.x offre per prevenire danni alle nostre stampanti. Devono essere sempre attivi, infatti in Marlin 2 arrivano di default, quindi non li toccheremo in alcun modo.

//===========================================================================
//======================== Thermal Runaway Protection =======================
//===========================================================================

/**
 * Thermal Protection provides additional protection to your printer from damage
 * and fire. Marlin always includes safe min and max temperature ranges which
 * protect against a broken or disconnected thermistor wire.
 *
 * The issue: If a thermistor falls out, it will report the much lower
 * temperature of the air in the room, and the the firmware will keep
 * the heater on.
 *
 * If you get "Thermal Runaway" or "Heating failed" errors the
 * details can be tuned in Configuration_adv.h
 */

#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
#define THERMAL_PROTECTION_BED     // Enable thermal protection for the heated bed
#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber
#define THERMAL_PROTECTION_COOLER  // Enable thermal protection for the laser cooling

Parametri meccanici (cinematica COREXY e Delta)

Sul mercato esistono diverse stampanti con cinematiche diverse. Ad esempio cinematica cartesiana, delta, tripteron, corexy (e sue varianti), ecc. L’a verità è che per parlarne basterebbe un solo articolo, l’argomento è molto ampio e servirebbero più articoli. Una breve introduzione la trovi in questo nostro vecchio articolo.

Se la tua stampante utilizza la cinematica diversa dalla cartesiana, devi attivare il parametro corrispondente. Dato che la mia Ender 3 usa la cinematica cartesiana, lascio tutto disabilitato.

Se sei curioso, allego la configurazione presente con tutto disattivati nel firmware precompilato per la mia ender 3, essendo molto lunga la sezione, allego un file di testo.

Logica dei finecorsa (ENDSTOP_INVERTING)

A seconda del tipo di sensore o finecorsa che utilizziamo, avranno una logica diversa. Non è un gran mistero, lasciali tutti su FALSE e se qualcuno di loro non funziona, cambia la logica in questa sezione (inserendo TRUE). Nel mio caso particolare, il firmware preconfigurato, è impostato tutto su false.

// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.

.......

#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe.

Configurazione dei passi/step (DEFAULT_AXIS_STEPS_PER_UNIT)

In questa sezione diremo alla nostra stampante quanti passi verranno eseguiti per ogni unità di movimento. Le unità possono essere definite in millimetri o pollici.

Nel caso si utilizzino i pollici è necessario attivare il parametro INCH_MODE_SUPPORT. Non attiveremo questo parametro, poiché lavoriamo con i millimetri.

È necessario conoscere in anticipo i valori da inserire, quindi ti consiglio di estrarli da alcuni firmware già disponibili per la tua stampante (per andare sul sicuro).

Un’altra opzione è cercarlo su Internet da un altro utente, navigare nei forum, consultare il produttore o, come ultima opzione, calcolarli tu stesso come puoi vedere in questo video.

/**
 * Default Axis Steps Per Unit (linear=steps/mm, rotational=steps/°)
 * Override with M92
 *                                      X, Y, Z [, I [, J [, K...]]], E0 [, E1[, E2...]]
 */
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 400, 93 }

Invertire la direzione del motore (INVERT_X_DIR)

Modificheremo questi parametri se durante l’esecuzione di un HOME o durante la stampa di qualsiasi parte con la nostra stampante, uno qualsiasi dei motori va nella direzione sbagliata. Di default sono tutti configurati con l’opzione false. Nel mio caso X, Y ed estrusore sono su true.

Tuttavia, un’altra opzione è quella di invertire il cavo di collegamento del motore, ma se fatto male, può provocare danni ai motori.

// @section motion

// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR true
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false
//#define INVERT_I_DIR false
//#define INVERT_J_DIR false
//#define INVERT_K_DIR false
//#define INVERT_U_DIR false
//#define INVERT_V_DIR false
//#define INVERT_W_DIR false

// @section extruder

// For direct drive extruder v9 set to true, for geared extruder set to false.
#define INVERT_E0_DIR true
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false
#define INVERT_E5_DIR false
#define INVERT_E6_DIR false
#define INVERT_E7_DIR false

Volume di stampa (X_BED_SIZE e Y_BED_SIZE)

Definiremo qui le misure esatte del nostro volume di stampa (letto). La mia stampante ha un piano orizzontale di 235 mm x 235 mm, quindi dovrebbe essere configurata in questo modo:

// The size of the printable area
#define X_BED_SIZE 235
#define Y_BED_SIZE 235

Limiti di movimento (MIN_POS e MAN_POS)

Una volta definite le misure del nostro piano di stampa (letto), dobbiamo configurare Marlin 2 con i limiti minimo e massimo di movimento.

Di default per i minimi Marlin è configurato con il valore 0, che non dobbiamo modificare poiché è la HOME. Per i limiti massimi, Marlin utilizza direttamente le misure attuali del nostro letto in X e Y (che avevamo precedentemente lasciato configurate nel parametro precedente.

Per finire con la configurazione, sull’asse Z la misura che dobbiamo aggiungere è l’altezza massima di stampa della nostra macchina. Nel mio caso particolare posso stampare circa 250 mm, quindi inserisco il suo valore.

// Travel limits (linear=mm, rotational=°) after homing, corresponding to endstop positions.
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 250
//#define I_MIN_POS 0
//#define I_MAX_POS 50
//#define J_MIN_POS 0
//#define J_MAX_POS 50
//#define K_MIN_POS 0
//#define K_MAX_POS 50
//#define U_MIN_POS 0
//#define U_MAX_POS 50
//#define V_MIN_POS 0
//#define V_MAX_POS 50
//#define W_MIN_POS 0
//#define W_MAX_POS 50

Restrizioni di movimento (MIN_SOFTWARE_ENDSTOPS)

Per sicurezza, e per evitare di danneggiare i componenti della nostra stampante, Marlin 2 è configurato di default in modo da non poter superare i limiti minimi. Ciò significa che quando si raggiunge un finecorsa o un sensore, il motore non potrà avanzare ulteriormente, anche se lo si fa manualmente.

Tuttavia, con alcuni comandi, puoi disabilitare quel limite se lo desideri. Operazione sconsigliata, perché, se non esperti, si possono fare danni alla stampante.

Il limite che si rimuove più spesso, è quello dell’asse Z per effettuare alcune regolazioni.

/**
 * Software Endstops
 *
 * - Prevent moves outside the set machine bounds.
 * - Individual axes can be disabled, if desired.
 * - X and Y only apply to Cartesian robots.
 * - Use 'M211' to set software endstops on/off or report current state
 */

// Min software endstops constrain movement within minimum coordinate bounds
#define MIN_SOFTWARE_ENDSTOPS
#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
  #define MIN_SOFTWARE_ENDSTOP_X
  #define MIN_SOFTWARE_ENDSTOP_Y
  #define MIN_SOFTWARE_ENDSTOP_Z
  #define MIN_SOFTWARE_ENDSTOP_I
  #define MIN_SOFTWARE_ENDSTOP_J
  #define MIN_SOFTWARE_ENDSTOP_K
  #define MIN_SOFTWARE_ENDSTOP_U
  #define MIN_SOFTWARE_ENDSTOP_V
  #define MIN_SOFTWARE_ENDSTOP_W
#endif

// Max software endstops constrain movement within maximum coordinate bounds
#define MAX_SOFTWARE_ENDSTOPS
#if ENABLED(MAX_SOFTWARE_ENDSTOPS)
  #define MAX_SOFTWARE_ENDSTOP_X
  #define MAX_SOFTWARE_ENDSTOP_Y
  #define MAX_SOFTWARE_ENDSTOP_Z
  #define MAX_SOFTWARE_ENDSTOP_I
  #define MAX_SOFTWARE_ENDSTOP_J
  #define MAX_SOFTWARE_ENDSTOP_K
  #define MAX_SOFTWARE_ENDSTOP_U
  #define MAX_SOFTWARE_ENDSTOP_V
  #define MAX_SOFTWARE_ENDSTOP_W
#endif

#if EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)
  //#define SOFT_ENDSTOPS_MENU_ITEM  // Enable/Disable software endstops from the LCD
#endif

Memorizzazione nella EEPROM (EEPROM_SETTINGS)

Abbiamo parlato all’inizio di questa configurazione.

Marlin ci offre la possibilità di modificare la configurazione della nostra stampante dal display stesso e quindi salvare le modifiche nella EEPROM.

Se vogliamo avere questa possibilità attiva, dobbiamo attivare questo parametro nel nostro firmware.

// @section eeprom

/**
 * EEPROM
 *
 * Persistent storage to preserve configurable settings across reboots.
 *
 *   M500 - Store settings to EEPROM.
 *   M501 - Read settings from EEPROM. (i.e., Throw away unsaved changes)
 *   M502 - Revert settings to "factory" defaults. (Follow with M500 to init the EEPROM.)
 */
#define EEPROM_SETTINGS       // Persistent storage with M500 and M501
//#define DISABLE_M503        // Saves ~2700 bytes of flash. Disable for release!
#define EEPROM_CHITCHAT       // Give feedback on EEPROM commands. Disable to save flash.
#define EEPROM_BOOT_SILENT    // Keep M503 quiet and only give errors during first load
#if ENABLED(EEPROM_SETTINGS)
  #define EEPROM_AUTO_INIT    // Init EEPROM automatically on any errors.
  //#define EEPROM_INIT_NOW   // Init EEPROM on first boot after a new build.
#endif

Preriscaldamento ABS/PLA (PREHEAT)

Come potresti aver visto se hai già armeggiato con la tua stampante, Marlin ti offre due opzioni iniziali per preriscaldare la stampante prima della stampa.

Puoi configurare le temperature disponibili per i filamenti ABS e PLA, anche se puoi aggiungerne altre se lo desideri.

Qualcosa di molto utile perché quelli forniti di default nel firmware possono essere migliorati.

// @section temperature

//
// Preheat Constants - Up to 10 are supported without changes
//
#define PREHEAT_1_LABEL       "PLA"
#define PREHEAT_1_TEMP_HOTEND 185
#define PREHEAT_1_TEMP_BED     45
#define PREHEAT_1_TEMP_CHAMBER 35
#define PREHEAT_1_FAN_SPEED   255 // Value from 0 to 255

#define PREHEAT_2_LABEL       "ABS"
#define PREHEAT_2_TEMP_HOTEND 240
#define PREHEAT_2_TEMP_BED    110
#define PREHEAT_2_TEMP_CHAMBER 35
#define PREHEAT_2_FAN_SPEED   255 // Value from 0 to 255

Lingua del menu (LCD_LANGUAGE)

Lingua che apparirà sul display del firmware Marlin 2. Per impostazione predefinita è l’inglese, personalmente lascio inglese, in quanto le traduzioni potrebbero avere errori, però, se vuoi, Lingua del menu (LCD_LANGUAGE)

Lingua che apparirà in ognuno dei menu (display) del firmware Marlin 2. Al momento quello che mi convince di più è quello spagnolo, quindi è quello che ho selezionato. Per impostazione predefinita è l’inglese, probabilmente vorrai cambiarlo. disponibile anche il menu italiano.

/**
 * LCD LANGUAGE
 *
 * Select the language to display on the LCD. These languages are available:
 *
 *   en, an, bg, ca, cz, da, de, el, el_CY, es, eu, fi, fr, gl, hr, hu, it,
 *   jp_kana, ko_KR, nl, pl, pt, pt_br, ro, ru, sk, sv, tr, uk, vi, zh_CN, zh_TW
 *
 * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek (Greece)', 'el_CY':'Greek (Cyprus)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'hu':'Hungarian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ro':'Romanian', 'ru':'Russian', 'sk':'Slovak', 'sv':'Swedish', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)' }
 */
#define LCD_LANGUAGE en

Supporto per scheda SD (SDSUPPORT)

Questa opzione ti consente di caricare i file STL utilizzando una scheda SD.

Che tu ci creda o no, è disabilitato per impostazione predefinita nel firmware Marlin di default. Nel caso della preconfigurazione per Ender 3 risulta già attivato.

/**
 * SD CARD
 *
 * SD Card support is disabled by default. If your controller has an SD slot,
 * you must uncomment the following option or it won't work.
 */
#define SDSUPPORT

Semplifica i menu (SLIM_LCD_MENUS)

Marlin ti dà la possibilità di navigare attraverso innumerevoli menu dal suo display.

Molti di questi parametri dovrebbero essere stati precedentemente configurati nel firmware, senza la necessità di modificarli “al volo”.

Per ridurre i menu, Marlin offre la possibilità di semplificarli con il parametro SLIM_LCD_MENUS. Non solo semplificherà i menu, ma risparmierai una notevole quantità di memoria. Ti consiglio di attivare questa opzione se non hai la necessità di fare modifiche “al volo”. Io preferisco interazione maggiore, pertanto lo lascio disabilitato

/**
 * LCD Menu Items
 *
 * Disable all menus and only display the Status Screen, or
 * just remove some extraneous menu items to recover space.
 */
//#define NO_LCD_MENUS
//#define SLIM_LCD_MENUS

Tipo di display (LCD/selezione controller)

Osservando il file configuration.h, vediamo che per il display sono presenti diverse configurazioni.

Può sembrare un po’ complicato, ma in realtà tutto ciò che dobbiamo fare è trovare la descrizione del nostro schermo LCD e rimuovere i commenti per poter configurare Marlin 2.

Esistono display basati su testo, display LCD grafici, display OLED e molti altri. Per la Ender 3 il display di default e’ indicato con CR10_STOCKDISPLAY.

Se non riesci ad identificare il tuo display, può esserti utile questo link.

Se usi i TFT della BTT va bene il display stock, in quando in modalità emulazione Marlin, simulano il display stock.

// Factory display for Creality CR-10 / CR-7 / Ender-3
// https://marlinfw.org/docs/hardware/controllers.html#cr10_stockdisplay
//
// Connect to EXP1 on RAMPS and compatible boards.
//
#define CR10_STOCKDISPLAY