Welcome! Log In Create A New Profile

Advanced

MarlinKimbra Setup Guide

Posted by MagoKimbra 
MarlinKimbra Setup Guide
December 07, 2014 06:00AM
MarlinKimbra-Firmware
configuration Set-up Guide


Spero di riuscire a fare una cosa completa e adatta a tutti, una guida per come configurare e installare al meglio il mio firmware per stampanti 3D MarlinKimbra, un'evoluzione del Marlin. Quindi questa guida può essere usata anche per un normale Marlin bypassando le funzioni che non ci sono.
Il primo consiglio che vi do è quello di installarvi WinMerge, anch'esso open e free, parole tanto amate dalla maggioranza, esiste sia per windows che per linux, per Mac so che ne esiste un altro tipo.
Cosa fa WinMerge? Lo potete leggere in questa guida che feci già a suo tempo.
Iniziamo invece a vedere il firmware vero e proprio. Scaricatevi da github il firmware, scomprimetelo in una cartella sul vostro sistema e apritelo. All'interno ci sono vari file, se avete scaricato e installato Arduino IDE, quello su cui dovrete cliccare è MarlinKimbra.ino.
Vi si aprirà direttamente l'ide con tutti i file in tab, andate sul tab Configuration.h che il primo file che andremo ad analizzare.

Configuration.h

Per ora non toccate altre parti che non vi necessitano, poi in futuro con la conoscenza del firmware potrete anche toccare altre parti. Arduino usa le due // per far diventare una riga un commento, in programmazione un commento non viene compilato serve solo per appunto commentare una riga per spiegare cosa faccia.
Per esempio:
// Questa riga non viene compilata potete scrivere quello che volete...
Ecco questa riga ha il solo scopo per spiegare cosa fanno le linee di codice successive. In alcuni casi vengono usate per commentare una funzione in modo che sia inizialmente non attiva, ma se gli togliamo le due // la renderemo attiva.
Per esempio:
// #define baudrate 250000.
In questo caso la lineà non è attiva, ma se vogliamo renderla attiva per attivare quella determinata funzione basta togliere le due //.
Iniziamo con le varie linee...

Velocità di trasmissione della seriale:
// This determines the communication speed of the printer
#define BAUDRATE 115200
//#define BAUDRATE 250000
Qui settiamo la velocità di trasmissione in seriale verso il nostro computer. Di default è attiva la riga con la velocità a 115200 e disattiva la linea con il 250000. Per fare le prime prove vi conviene mantenere attiva la velocità a 115200, poi con il tempo potrete provare a velocità più alta. Spesso problemi di cavo o d'interferenza possono creare problemi di comunicazione, per questo conviene mantenere la velocità bassa. In più è utile per utilizzare la funzione di firmware test.

Funzione firmware test:
//#define FIRMWARE_TEST
Decommentando la linea si abilita il firmware test. Una volta scaricato il firmware nella nostra scheda rimanendo sempre su arduino abilitiamo il monitor seriale che troviamo nel menu strumenti del programma. Si aprirà una finestra di comunicazione seriale con la scheda. Abilitiamo la velocità a 115200 e dovremo vedere la nostra scheda rispondere. Quì già possiamo controllare che tutto sia ok, se la risposta della scheda c'è la comunicazione seriale è ok. Ma non è tutto, la scheda ci propone di iniziare un test sugli endstop se rispondiamo y, mettendolo nella riga comando e dando invio inizierà il test. Seguite le istruzioni e vedrete subito se qualcosa o a livello hardware o a livello software è andato storto. Dopo il test degli endstop inizierà un test dei motori, stessa cosa seguite le istruzioni e almeno potrete subito avere un controllo che tutto sia ok. Una volta che tutto è ok, potete di nuovo commentare questa linea per disabilitarlo, anche perché ogni volta che resettate la stampante partirà il test quindi non conviene mantenerlo attivo.

Scelta del tipo di stampante:
#define CARTESIAN
//#define COREXY
//#define DELTA
//#define SCARA
Qui si sceglie decommentando la lina giusta il tipo di stampante che avete. Le più comuni sono le cartesiane (Prusa, mendelmax, etc), cioè quelle stampanti che hanno un motore per ogni asse, o meglio un driver per ogni asse. Cioè il movimento dell'asse X è determinato solo ed esclusivamente dal movimento del/i motore/i montati su quel driver. Le altre stampanti invece hanno movimenti più complessi, le coreXY infatti hanno due motori che a secondo di come ruotano muovono i due assi X e Y, girano nella stessa direzione si muove l'asse Y, se invee girano in direzioni opposte muovono l'asse X. Le delta ancora più complesse dove i tre motori contribuiscono ai movimenti di tutti e tre gli assi. Quindi se avete una stampante comune lasciate decommentato cartesian.

Qui vorrei aprire una parente (come diceva il grande e mitico Totò) a livello di programmazione, tranquilli non vi ammorberò con chi sa quali paroloni. Molti mi hanno detto che hanno paura a montare il mio firmware perché lo ritengono troppo corposo rispetto agli altri. E' vero rispetto agli altri il mio firmware a livello di file è molto più pesante in termini di byte, ma stiamo parlando di file da scaricare sul PC e non del firmware vero e proprio. Qui ci viene incontro un pratico comando di C (linguaggio di programmazione), il comando in questione è #ifdef o #if defined. Il comando if è un comando molto comune in programmazione esiste in tutti i linguaggi, magari con nomi diversi, ma nei più è sempre stato if dai tempi del basic su ZX81, Spectrum, Commodore etc etc... Cosa fa l'if, semplice if vuol dire se, per esempio if (A=cool smiley, se la variabile A è uguale alla variabile B allora fai quello che segue, altrimenti quello che segue non viene eseguito. Questo è il funzionamento del semplice if, ma cosa fa invece #ifdef o #if defined? Questo è quello che a noi interessa, se è definita quella variabile allora... Ecco la magia allora compila quello che segue, cioè quel controllo non è a livello di processore ma quando viene trovato il carattere # tutto viene processato a livello di compilazione, cioè il compilatore vede che c'è il comando #ifdef verifica che la variabile successiva è stata definita se si allora compilerà tutto ciò che viene dopo altrimenti non lo compilerà affatto e non lo invierà al nostro processore. Vi faccio un esempio pratico:
#if defined(CARTESIAN)
#include "Configuration_Cartesian.h"
#elif defined(COREXY)
#include "Configuration_Corexy.h"
#elif defined(DELTA)
#include "Configuration_Delta.h"
#elif defined(SCARA)
#include "Configuration_Scara.h"
#endif
Quindi se è definita la variabile CARTESIAN (dalla spiegazione precedente) allora include nella compilazione il file Configuration_Cartesian.h, se invece è definita la variabile COREXY includerà il file Configuration_Corexy.h e via discorrendo, quindi il fatto che ci siano più file nel mio firmware che ne hanno aumentato il peso, non vuol dire che verranno scaricati tutti nel processore, bensì verrà compilato solo quello che necessita, quindi in questo caso il i dati della stampante che noi abbiamo il resto resterà sul nostro PC, che per fortuna non ha questi limiti. Questo vale anche per tutte le altre funzioni che ho inserito. Per esempio il laserbeam, le istruzioni di funzionamento del laserbeam sono tutte precedute da #ifdef LASERBEAM, questo vuol dire che se non definite la variabile allora non verranno mai prese in considerazione dal compilatore che non le compilerà per nulla e il peso effettivo del firmware finale sarà lo stesso di un Marlin classico. Chiaro?
Abbiamo aperto una parente? Si bene chiudiamola....

Matherboard:
#ifndef MOTHERBOARD
#define MOTHERBOARD 33
#endif
Qui dobbiamo mettere un numero che equivale alla nostra matherboard, poco sopra a queste linee c'è la lista di tutte le motherboard su cui si può montare il firmware, cercatevi quella più adatta a voi ed inserite il numero esatto.

Numero estrusori:
#define EXTRUDERS 1
Dovete definire quanti estrusori avete sulla vostra scheda. Estrusore è il motore che estrude il filo, che lo spinge verso l'hotend non confondetevi con questi termini. Il mio Marlin supporta fino a 4 estrusori (Marlin normale 3) reali e virtuali. Si avete letto bene virtuali cosa cuol dire virtuali. Di norma i nostri estrusori sono dei motori che andranno collegati a un driver, quindi 4 estrusori 4 driver, 2 estrusori 2 driver e cosi via, ma nel mio marlin c'è la possibilità di arrivare fino a 4 estrusori con un solo driver. Come lo vediamo subito dopo per ora settate qui quanti estrusori avete.

Singlenozzle:
//#define SINGLENOZZLE
Ecco un'altra novità rispetto a Marlin normale. Come ho detto prima l'estrusore è una cosa, l'hotend è un'altra. Possiamo avere due estrusori e due hotend, ma possiamo anche avere 4 estrusori e un singolo hotend utilizzando il famoso flusso canalizzatore a 4 vie di Immaginaecrea (piccolo spazio pubblicità). Quindi qui dobbiamo attivare o meno questa funzione, se abbiamo un solo hotend decommentiamo questa riga e tutto il fw terrà conto che abbiamo un solo termistore e una sola resistenza da tenere in considerazione, pur avendo fino a 4 estrusori...

Sistema MKR4:
//#define MKR4
Cos'è il sistema MKR4? Il Marlin Kimbra Relè 4, appunto MKR4 è il mio sistema per usare più estrusori con meno driver, grazie a una schedina relé. Il sistema si basa sul fatto che gli estrusori almeno per ora vengono usati uno alla volta, quindi perché usare più driver quando non si usano, allora basta commutare le 4 uscite dei driver per i motori tramite dei relé per l'appunto su due motori in questo modo con due driver e una scheda rele (con 8 relé a bordo) posso pilotare 4 estrusori. Quindi con le più comuni ramps 1.4 posso avere i 4 estrusori che mi necessitano a pilotare il flusso canalizzatore a 4 vie e poter stampare a colori. Quindi se abbiamo questo sistema possiamo per esempio avere due estrusori con un driver, oppure 3 o 4 estrusori con 2 driver, in questo caso gli estrusori sono reali, ma con meno driver, quindi una volta abilitato dobbiamo indicare quanti driver sono montati sulla nostra scheda:
#define DRIVER_EXTRUDERS 1
Quindi abbiamo un solo driver e due estrusori, oppure metteremo 2 e avremo 2 driver e 4 estrusori.

Multiestrusore NPr2:
//#define NPR2
Qui si abilita il multiestrusore di NicolaP a 4 o 6 estrusori con solo due motori, per ora ancora non in commercio, ma so che Nicola è in procinto di rilasciarlo quindi mi permetto di scriverlo, anche perchè tra un po non avrò più la possibilità di modificare questo post e quindi o lo metto subito nella guida o poi era difficile reinserirlo... Quindi se abbiamo questo multi estrusore ecco che dobbiamo abilitare questa funzione. Il sistema di Nicola ha in questo caso 4 estrusori, ma virtuali perché effettivamente i motori sono due, ma noi ce ne freghiamo e mettiamo come numero di estrusori 4 e 2 Driver:
#define DRIVER_EXTRUDERS 2
ma se abbiamo una scheda con un solo driver possiamo usare il multiestrusore abilitando anche MKR4 con un solo driver_extruder cosi avremo un driver e 4 estrusori virtuali.

Funzione di FILAMENT_END_SWITCH:
// #define FILAMENT_END_SWITCH
Questa funzione serve per abilitre uno switch meccanico o ottico, quello che più volete, per il controllo di fine filamento. Se abilitata la funzione mette in pausa la stampante spostandosi di X e Y a zero per permettere la sostituzione del filo.

Sistema di alimentazione:
#define POWER_SUPPLY 0
// #define PS_DEFAULT_OFF
La prima linea definisce il tipo di alimentatore collegato: 0 Normal power; 1 ATX; 2 XBOX 360. Normalmente si usa il numero 0 anche per alimentatori non di tipo ATX. L'unica differenza che si ha con gli alimentatori ATX è che possono essere accesi o spenti da fw, collegando il pin Power on al cavetto apposito degli alimentatori ATX, di solito il verde che si trova sul connettore bianco grande che si attacca sulle schede madri dei pc. Se si fa ciò è possibile accendere o spegnere da fw l'alimentatore con i comandi M80 e M81. Se si decommenta la seconda linea di defautl l'ali è spento, in questo modo quando accendiamo la nostra stampante l'ali rimane spento fino a quando non lo accendiamo collegandoci con il nostro pc con repetier o altri software.

Impostazioni termiche


Ora veniamo alla sezione impostazioni termiche del firmware MarlinKimbra, dove le cose si fanno un po più complicate. In pratica tutto quello che dobbiamo fare è selezionare un tipo di sensore di temperatura per ciascuno dei sensori installati sulla stampante 3D. Dobbiamo essere sicuri di che tipo di sensori abbiamo scegliendoli da una lista. Informazioni sulla Wiki RepRap.

Termistori:
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_BED 0
Qui dobbiamo mettere il numero corrispondente al nostro sensore, per i 4 hotend se li abbiamo altrimenti lasciamo 0 e per il bed, anche qui se lo abbiamo altrimenti lasciamo 0

Temperature minime:
#define HEATER_0_MINTEMP 5
#define HEATER_1_MINTEMP 5
#define HEATER_2_MINTEMP 5
#define HEATER_3_MINTEMP 5
#define BED_MINTEMP 5
Questo serve per fare in modo che il fw blocchi tutto se la temperatura rilevata è inferiore ai valori impostati, per esempio stiamo stampando al polo nord... A parte gli scherzi se abbiamo un sensore montato male o settato male se la temperatura rilevata è minore di 0 di norma sono i fili in corto...

Temepratura massima:
#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define BED_MAXTEMP 150
Anche qui sia per un controllo che le cose siano montate giuste (un cavo staccato ci darà temperature altissime) sia per protezione del sistema se non si dovesse fermare alla giusta temperatura. Naturalmente vanno cambiate solo ed esclusivamente se si hanno le giuste nozioni dei nostri hotend, ho letto di persone che voi umani non potete neanche immaginare che sono arrivate a temp di oltre 400°....

Tutto quello che segue per la gestione delle temperature per ora lasciatelo invariato sono cose che vanno utilizzate solo da veri esperti, l'unica cosa che vi sottolineo è la gestione dei pid differenziata per ogni HOTEND
#define  DEFAULT_Kp {41.51,50,0,0}
#define  DEFAULT_Ki {7.28,15,0,0}
#define  DEFAULT_Kd {59.17,90,0,0}
A differenza del marlin normale io ho messo i valori in un array (matrice) uno per ogni hotend. Per ora lasciateli invariati o al massimo sostituite gli zeri con i valori precedenti se avete più di due hotend. Poi con il tempo capirete come modificarli per migliorare il vostro fuznionamento degli hotend in vostro possesso.

Funzione di controllo sull'estrusione:
#define PREVENT_DANGEROUS_EXTRUDE
#define PREVENT_LENGTHY_EXTRUDE
#define EXTRUDE_MINTEMP 170
Questa funzione serve ad evitare di rompere il/i nostri estrusori se la temperatura dell'hotend non è arrivata alla min temp settata nella terza linea. Questo cosa vuol dire, che se provate a estrudere a freddo l'estrusore non si muoverà, quindi se volete provare che tutto sia ok ci sono tre soluzioni:
  1. Quella di commentare la prima linea cosi disabilitiamo la funzione, ricordandoci di riabilitarla dopo le prove.
  2. Di abbassare a 10 (sotto la temperatura ambiente) la min temp della terza linea, anche qui rimettendo un giusto valore a fine test.
  3. Secondo me la migliore è dare il comando M302 S10 che setta temporaneamente la mint emp a 10 e a questo punto possiamo testare come vogliamo il nostro estrusore, dopo il reset o ridando il comando M302 S170 rimettiamo le cose a posto, senza dover riscaricare il fw.
Questo comando è utile anche per chi vuole caricare il bowden, io per esempio su repetier ho messo una sequenza del tipo:
M302 S10
M92 E0 // resetta l'estrusore
G1 E250 // estrude 250 mm di filo (io ho 25 cm di bowden)
M302 S170
M92 E0 // resetta l'estrusore


Per ora è tutto, seguirà una parte dettagliata sugli endstop e meccaniche.
Vi prego di non rispondere a questo topic per mantenerlo pulito, apro un topic in Software e firmware per commenti ed eventuali modifiche da apportare questa guida.

Edited 5 time(s). Last edit at 12/08/2014 03:22AM by MagoKimbra.


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
Re: MarlinKimbra Setup Guide
December 12, 2014 09:50AM
Meccaniche

Un'altra piccola differenza con Marlin normale sono i file di configurazione delle meccaniche differenziati per tipo di stampanti. Come detto prima una volta definito il tipo di stampante viene incluso nella compilazione solo il file che interessa. Nel Marlin normale questi settings si possono trovare nel file configuration.h.
#if defined(CARTESIAN)
#include "Configuration_Cartesian.h"
#elif defined(COREXY)
#include "Configuration_Corexy.h"
#elif defined(DELTA)
#include "Configuration_Delta.h"
#elif defined(SCARA)
#include "Configuration_Scara.h"
#endif

Configuration_Cartesian.h


Nome della macchina:
Il primo setting definisce il nome della macchina, che verrà usato poi nell'LCD collegato.
#define CUSTOM_MENDEL_NAME "Prusa I3"

Endstop:
Prima di tutto facciamo una precisazione, in quasi tutti i sistemi di controllo, vedi anche gli allarmi, i contatti a switch con filo vengono utilizzati con il sistema del normalmente chiuso. Cosa vuol dire questo? Vuol dire che lo switch nella sua posizione di standby (non premuto) chiude normalmente il contatto, quindi i due fili a esso collegati sono in corto. Questo consente il controllo del circuito. Se controllo il segnale e rilevo la chiusura del circuito vuol dire che non ci sono fili staccati e tutta la catena funziona perfettamente, l'unica cosa che non posso controllare è un eventuale problema di non apertura del contatto da parte dello switch quando premuto, ma questo problema è molto raro, molto più possibile che si dissaldi un filo o si interrompa un contatto. Immaginiamo di avere la situazione opposta cioè di usare il normalmente aperto, quando faccio la home di un'asse controllo l'endstop e verifico che non ho chiusura quindi sposto il motore fino alla chiusura del circuito, ma se c'è un filo interrotto, una saldatura saltata, io non rileverò mai una chiusura e quindi continuerò a spostare l'asse con possibili rotture.
Precisato ciò il consiglio è sempre quello di usare la normale funzione normalmente chiuso, almeno con gli switch meccanici, ma anche per gli endstop ottici e quelli magnetici possono essere settati in NC.
Qui c'è un'ottima guida fatta da Gordie per il collegamento degli endswitch.
Gli switch meccanici vengono collegati, dunque, con un contatto verso il pin di controllo del processore e l'altro sulla massa, quindi quando è chiuso il pin è a massa, leggendo quel pin leggo 0 quindi switch non premuto, ora se apro il contatto dello switch il pin rimane aperto a nulla, come si fa a leggere il valore 5v e quindi 1? Ci viene incontro il processore che ha la possibilità di attivare o meno una resistenza detta di PULLUP verso i 5 v, questa resistenza è interna al processore e consente di dare un valore 1 a un pin quando quel pin è aperto a nulla.

Nel caso in cui invece usassimo finecorsa (endstop) elettronici che generano sul signal un segnale alto o un segnale basso, questa resistenza non va abilitata.
Passiamo al file e troviamo quindi la definizione di queste resistenze.
#define ENDSTOPPULLUPS

Successivamente c'è un controllo e un'attivazione per ogni singolo endstop
#ifndef ENDSTOPPULLUPS
// fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
// #define ENDSTOPPULLUP_XMAX
// #define ENDSTOPPULLUP_YMAX
// #define ENDSTOPPULLUP_ZMAX
// #define ENDSTOPPULLUP_XMIN
// #define ENDSTOPPULLUP_YMIN
// #define ENDSTOPPULLUP_ZMIN
// #define ENDSTOPPULLUP_EMIN
#endif

#ifdef ENDSTOPPULLUPS
#define ENDSTOPPULLUP_XMAX
#define ENDSTOPPULLUP_YMAX
#define ENDSTOPPULLUP_ZMAX
#define ENDSTOPPULLUP_XMIN
#define ENDSTOPPULLUP_YMIN
#define ENDSTOPPULLUP_ZMIN
#define ENDSTOPPULLUP_EMIN
#endif

La prima serie viene eseguita se non si definisce ENDSTOPPULLUPS, togliendo le due // possiamo definire singolarmente le resistenze solo dove servono, per esempio se avessimo X e Y magnetici con generazione di segnale e una z invece meccanica possiamo togliere le // solo Z. Mentre la seconda parte si attiva se abbiamo definito ENDSTOPPULLUPS e vengono attivate tutte le resistenze su tutti gli endstop.

Per quelli più attenti vedranno subito che c'è una riga strana, la resistenza di pullup su EMIN. Ma gli estrusori non hanno endstop, quelli normali no, ma ce n'è uno che ha il minstop, NPr2 il multiestrusore di NicolaP.

A seguire invece c'è la possibilità di invertire la normale logica degli endstop, come detto prima la normale logica è quella del normalmente chiuso, ma se volessi invertire la logica basta invertire la logica di quel determinato endstop.
// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool E_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.

In una cartesiana normalmente si usano solo 3 endstop e normalmente i min, quindi se si volesse ridurre i controlli e anche eventuali disturbi si possono disabilitare quelli non usati
//#define DISABLE_MAX_ENDSTOPS
//#define DISABLE_MIN_ENDSTOPS


Stepper:

Iniziamo con la meccanica vera e propria dei motori.
La prima possibilità è settare il segnale di enable dei driver, alcuni driver hanno bisogno di un segnale alto per essere attivi sul loro pin enable.

Vedete in alto a sinistra il pin enable del più comunissimo stepper driver A4988 ha una linea sopra la scritta ENABLE, questo vuol dire che si attiva con un livello 0.
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
#define X_ENABLE_ON 0
#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
#define E_ENABLE_ON 0 // For all extruders
Quindi per settare bene questo parametro dovete conoscere bene i vostri driver, non sono tutti uguali...

Quando i driver sono abilitati (con il pin enable) erogano corrente mantenendo i motori fermi nella loro posizione, questo lo potete vedere anzi toccare con le vostre mani, abilitando i motori è impossibile muoverli a mano, mentre se li disabilitiamo possiamo muovere il nostro carrello tranquillamente. Quindi ci verrebbe da dire che è meglio disabilitarli sempre. Però se durante la stampa disabilitiamo i driver, per esempio dell'asse Z, in modo tale che non eroghi inutilmente corrente al motore Z per tutta la stampa del layer, vibrazioni o anche il peso del carrello X potrebbe far ruotare di poco le barre M5 abbassando di poco Z creando così un problema su quell'asse. Meglio tenerli sempre abilitati, gli unici che possiamo disabilitare sono forse quelli degli estrusori.
// Disables axis when it's not being used.
#define DISABLE_X false
#define DISABLE_Y false
#define DISABLE_Z false
#define DISABLE_E false // For all extruders
#define DISABLE_INACTIVE_EXTRUDER false //disable only inactive extruders and keep active extruder enabled
Diciamo che la scelta migliore è tenerli tutti i false e abilitare solo l'ultima riga che disabilita i driver degli estrusori non usati...


Se dopo aver montato i motori ci dovessimo accorgere che girano nel senso opposto a quello voluto possiamo invertire il senso di rotazione dalle seguenti righe
#define INVERT_X_DIR false     // for Mendel set to false, for Orca set to true
#define INVERT_Y_DIR false      // for Mendel set to true, for Orca set to false
#define INVERT_Z_DIR false     // for Mendel set to false, for Orca set to true
#define INVERT_E0_DIR false     // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E1_DIR false     // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E2_DIR false     // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E3_DIR false     // for direct drive extruder v9 set to true, for geared extruder set to false


Dobbiamo definire la posizione degli endstop rispetto alla home. Se per esempio facciamo una Prusa I3 gli endstop dovrebbero stare a sinistra per quanto riguarda la X, dietro dall'altra parte del fronte della stampa per quanto riguarda la Y e in basso per quanto riguarda la Z. Queste tre posizioni sono i tre minimi dei tre assi quindi useremo, come detto prima i tre endstop min e setteremo le linee seguenti al min.
// ENDSTOP SETTINGS:
// Sets direction of endstops when homing; 1=MAX, -1=MIN
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1
#define E_HOME_DIR -1
Il valore di E è sempre per il multi estrusore, potete lasciare cosi com'è o commentare la linea se volete...


Le linee successive definiscono la grandezza delle stampante
// Travel limits after homing
#define X_MAX_POS 200
#define X_MIN_POS 0
#define Y_MAX_POS 200
#define Y_MIN_POS 0
#define Z_MAX_POS 200
#define Z_MIN_POS 0
#define E_MIN_POS 0
I valori possono essere anche negativi, per esempio se facendo la home a sinistra, ma il nozzle è fuori dal piatto e per arrivare al piatto ci vogliono 12 mm possiamo mettere
#define X_MIN_POS -12
in questo modo X=0 sarà all'inizio del piatto.


Le prossime righe ci permettono di definire 4 punti dove fare il bed level, sia quello automatico (vediamo dopo) che quello manuale che si attiva con il comando G28 M. Il nozzle si sposta in quei 4 punti raggiungendo Z=0. Possiamo quindi regolare il piatto con le viti fino al passaggio del foglio, per poi passare a quello successivo. Questo comando è attivabile solo con l'LCD.
// set the rectangle in which to probe in manual or automatic
#define LEFT_PROBE_BED_POSITION 15
#define RIGHT_PROBE_BED_POSITION 185
#define BACK_PROBE_BED_POSITION 185
#define FRONT_PROBE_BED_POSITION 15

Nel prossimo post parliamo dell'autobed level....

Edited 1 time(s). Last edit at 12/12/2014 09:50AM by MagoKimbra.


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
Re: MarlinKimbra Setup Guide
December 28, 2014 06:14AM
Piccola correzione, visto che qualche utente mi ha fatto notare il grosso cambiamento che c'è stato...
Ora la MOTHERBOARD non va più configurata con un numero bensì con il nome della scheda, basta aprire il file boards.h per vederli. Faccio notare che questo cambiamento è stato implementato anche nel Marlin normale...
boards.h
#define BOARD_GEN7_CUSTOM       10   // Gen7 custom (Alfons3 Version) "https://github.com/Alfons3/Generation_7_Electronics"
#define BOARD_GEN7_12           11   // Gen7 v1.1, v1.2
#define BOARD_GEN7_13           12   // Gen7 v1.3
#define BOARD_GEN7_14           13   // Gen7 v1.4
#define BOARD_CHEAPTRONIC       2    // Cheaptronic v1.0
#define BOARD_SETHI             20   // Sethi 3D_1
#define BOARD_RAMPS_OLD         3    // MEGA/RAMPS up to 1.2
#define BOARD_RAMPS_13_EFB      33   // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Bed)
#define BOARD_RAMPS_13_EEB      34   // RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Bed)
#define BOARD_RAMPS_13_EFF      35   // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Fan)
#define BOARD_RAMPS_13_EEF      36   // RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Fan)
#define BOARD_DUEMILANOVE_328P  4    // Duemilanove w/ ATMega328P pin assignment
#define BOARD_GEN6              5    // Gen6
#define BOARD_GEN6_DELUXE       51   // Gen6 deluxe
#define BOARD_SANGUINOLOLU_11   6    // Sanguinololu < 1.2
#define BOARD_SANGUINOLOLU_12   62   // Sanguinololu 1.2 and above
#define BOARD_MELZI             63   // Melzi
#define BOARD_STB_11            64   // STB V1.1
#define BOARD_AZTEEG_X1         65   // Azteeg X1
#define BOARD_MELZI_1284        66   // Melzi with ATmega1284 (MaKr3d version)
#define BOARD_AZTEEG_X3         67   // Azteeg X3
#define BOARD_AZTEEG_X3_PRO     68   // Azteeg X3 Pro
#define BOARD_ULTIMAKER         7    // Ultimaker
#define BOARD_ULTIMAKER_OLD     71   // Ultimaker (Older electronics. Pre 1.5.4. This is rare)
#define BOARD_ULTIMAIN_2        72   // Ultimainboard 2.x (Uses TEMP_SENSOR 20)
#define BOARD_3DRAG             77   // 3Drag Controller
#define BOARD_TEENSYLU          8    // Teensylu
#define BOARD_RUMBA             80   // Rumba
#define BOARD_PRINTRBOARD       81   // Printrboard (AT90USB1286)
#define BOARD_BRAINWAVE         82   // Brainwave (AT90USB646)
#define BOARD_SAV_MKI           83   // SAV Mk-I (AT90USB1286)
#define BOARD_TEENSY2           84   // Teensy++2.0 (AT90USB1286) - CLI compile: DEFINES=AT90USBxx_TEENSYPP_ASSIGNMENTS HARDWARE_MOTHERBOARD=84  make
#define BOARD_GEN3_PLUS         9    // Gen3+
#define BOARD_GEN3_MONOLITHIC   22   // Gen3 Monolithic Electronics
#define BOARD_MEGATRONICS       70   // Megatronics
#define BOARD_MEGATRONICS_2     701  // Megatronics v2.0
#define BOARD_MEGATRONICS_1     702  // Minitronics v1.0
#define BOARD_MEGATRONICS_3     703  // Megatronics v3.0
#define BOARD_OMCA_A            90   // Alpha OMCA board
#define BOARD_OMCA              91   // Final OMCA board
#define BOARD_RAMBO             301  // Rambo
#define BOARD_ELEFU_3           21   // Elefu Ra Board (v3)
#define BOARD_5DPRINT           88   // 5DPrint D8 Driver Board
#define BOARD_LEAPFROG          999  // Leapfrog

#define BOARD_99                99   // This is in pins.h but...?

In configurations.h va messo quindi per una ramps 1.4 tipo Extruder, Fan, Bed:
#define MOTHERBOARD BOARD_RAMPS_13_EFB

In più il configuratore online fa già questo, quindi usatelo che conviene, anche perché cosi avrete la possibilità di poter modificare i setting senza sbattervi troppo, visto che c'è la possibilità di uplodare il file configuration.h (fatto però solo dal tool) per riavere i vostri setting.


Vi prego di non rispondere a questo topic per mantenerlo pulito, apro un topic in Software e firmware per commenti ed eventuali modifiche da apportare questa guida.

Edited 1 time(s). Last edit at 12/28/2014 06:17AM by MagoKimbra.


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
Re: MarlinKimbra Setup Guide
January 01, 2015 05:06AM
DELTA


Nome della macchina:
Il primo setting definisce il nome della macchina, che verrà usato poi nell'LCD collegato.
#define CUSTOM_MENDEL_NAME "Delta"


Delta Settings:
Qui iniziano i veri e propri setting di una delta. Per le misure e i nomi vi metto questa foto come riferimento:



#define DELTA_SEGMENTS_PER_SECOND 200
Questo è un numero molto importante nella geometria di una delta. Sappiamo che i movimenti dei tre assi sono lineari, ma dovendo far fare dei movimenti curvi al nozzle si fanno dei piccoli segmenti lineari.
Questo parametro definisce il numero di segmenti lineari al secondo. Però più segmenti si fanno più si sovraccarica la CPU creando dei movimenti balbuzienti specialmente verso l'esterno del piatto vicino alle tre torri.
Diminuendo questo valore invece aumenta la velocità della stampante e la sua linearità, ma perdendo un po in precisione. E' un valore che dovete trovare a seconda la vostra stampante. Io per esempio lo tengo a 150 che mi permette una buona linearità e una decente velocità di stampa.

#define DEFAULT_DELTA_DIAGONAL_ROD 217.0      // mm
Come si vede dalla foto è la distanza centro centro dei fori della barra diagonale. Ecco perché la meccanica della Delta deve essere precisa, abbiamo 6 barre e un'unica misura. Il valore può essere in decimale fino a 2 numeri dopo la virgola, quindi munitevi di calibro e prima di montare le ROD misurate la distanza e accertatevi che le 6 barre siano della stessa lunghezza.


#define DELTA_SMOOTH_ROD_OFFSET 145.0      // mm
Questa è la distanza che c'è tra il centro dell'effector (quindi diciamo il centro del nozzle) e il centro della torre dove scorre la carriage.


#define DELTA_EFFECTOR_OFFSET 20.0      // mm
Questo valore è la distanza tra il centro dell'effector e il centro dell'attacco delle ROD. Questo valore può essere preso con precisione durante la progettazione dell'effector se lo costruite voi, se invece è già bello e pronto lo si misura come al solito con il calibro.


#define DELTA_CARRIAGE_OFFSET 20.0      // mm
Distanza tra centro torre e centro attacco rod del carrello (carriage), anche questo dato come il precedente può essere calcolato in progettazione del pezzo o misurato.


#define PRINTER_RADIUS 70     //mm
Questo è il valore del raggio max di stampa, determina l'area massima di stampa della nostra stampante.


I valori che seguono servono per l'autoprobe.
Ricordo che Marlin normale non ha nessun sistema di probing per la Delta, alcune versioni fatte da altri utenti hanno inserito invece un sistema di probing. Io cercando qua e la e facendo un purpurì di funzioni ho inserito sia l'autobed level, il classico comando G29, che il sistema automatico delle geometrie (e anche il bed level) con il comando G30 A.
Facendo il G30 A tutta la geometria viene tarata in automatico dal Fw, gli endstop offset, le lunghezze della barra e dell'altezza, e una volta finito basta memorizzare il tutto nella EEPROM con il comando M500 per non aver più bisogno di fare nulla prima della stampa, neanche dell'autobed level. Il consiglio è cmq quello di rifare il tutto ogni tanto, per aggiustare eventuali piccoli cedimenti meccanici.


#define DEBUG_MESSAGES
Se è definito avremo durante la fase dell'autocalibrazione tutti i messaggi con i controllo di errori e le varie modifiche che vengono fatti ai valori. Può essere utile per vedere dove sono le imperfezioni meccaniche. Se non interessa lo si commenta e avremmo solo il risultato finale dopo il test.


#define AUTOCALIBRATION_PRECISION 0.1      // mm
Quì definiamo la precisione a cui vogliamo arrivare possiamo arrivare fino a un valore di 0.01 mm, io ce l'ho a 0.05. Questo valore, a secondo della precisione della nostra meccanica aumenta o diminuisce il numero di cicli che farà l'autocalibrazione. Maggiore saranno le imperfezioni meccaniche maggiore è il numero di cicli che farà la macchina per tararsi, il numero massimo può arrivare anche a 100 cicli completi e durare anche diverse ore....


#define BED_DIAMETER 140 // mm
Questo valore determina i punti massimi del piatto dove verranno effettuati i test con la sonda. Teoricamente corrisponde al doppio del PRINTER_RADIUS, ma se vogliamo farli più interni riduciamo il diametro.


#define PROBING_FEEDRATE 600     // Speed for individual probe Use: G30 A F600
La velocità espressa in mm/m con cui vogliamo fare i test, si può cambiare anche successivamente dando il comando G30 A F600 (o un altro valore).

#define Z_PROBE_OFFSET {0,-10,-11.5,0}      // X, Y, Z, E distance between hotend nozzle and deployed bed leveling probe.
Distanza tra nozzle e la sonda. Quindi essendo il nozzle più in alto della sonda la z è sicuramente negativa. I valori X e Y devono essere interi.


#define Z_PROBE_DEPLOY_START_LOCATION {0,0,30,0}      // X, Y, Z, E start location for z-probe deployment sequence
#define Z_PROBE_DEPLOY_END_LOCATION {0,0,30,0}      // X, Y, Z, E end location for z-probe deployment sequence
#define Z_PROBE_RETRACT_START_LOCATION {0,0,30,0}      // X, Y, Z, E start location for z-probe retract sequence
#define Z_PROBE_RETRACT_END_LOCATION {0,0,30,0}      // X, Y, Z, E end location for z-probe retract sequence
Questi valori servono nel caso si hanno sistemi di auto sgancio della probe e auto aggancio, per esempio il mio sistema magnetico prevede l'auto aggancio spingendo la sonda fino in fondo si aggancia con la calamita superiore che serve anche da tenuta, ma non ha l'auto sgancio.
Praticamente si settano due punti, il punto di partenza e quello di arrivo per sganciare o agganciare la sonda. Il movimento viene fatto molto lentamente.


#define AUTOLEVEL_GRID 20      // Distance between autolevel Z probing points, should be less than print surface radius/3.
La distanza tra due punti nell'auto bedlevel, di solito è un numero che è di poco inferiore al PRINTER_RADIUS/3


Ricordo inoltre che tutti i valori delle geometrie possono essere variati con il comando M666 e i suoi sotto comandi. La lista completa la si può avere con M666 L.
Per esempio io dando il comando M666 L ottengo:
10:36:44.417 : Current Delta geometry values:
10:36:44.417 : X (Endstop Adj): -1.39
10:36:44.417 : Y (Endstop Adj): -2.96
10:36:44.417 : Z (Endstop Adj): -1.94
10:36:44.433 : P (Z-Probe Offset): X0.00 Y-10.00 Z-11.50
10:36:44.433 : A (Tower A Position Correction): 0.24
10:36:44.433 : B (Tower B Position Correction): -0.24
10:36:44.433 : C (Tower C Position Correction): 0.00
10:36:44.433 : I (Tower A Radius Correction): 0.00
10:36:44.448 : J (Tower B Radius Correction): 0.00
10:36:44.448 : K (Tower C Radius Correction): 0.00
10:36:44.448 : R (Delta Radius): 106.56
10:36:44.448 : D (Diagonal Rod Length): 220.00
10:36:44.448 : H (Z-Height): 202.73

Questi sono i valori ricavati anche dopo l'autocalibrazione. Se volessi cambiare per esempio l'altezza perché il nozzle si ferma un pochino più in su del piatto basta che do il comando M666 H202.83
Come vedete ho usato il subcomando H che nella lista equivale all'altezza aumentando di 0.1 l'attuale valore di 202.73 e quindi portarlo a 202.83. A questo punto se provo a fare il G28 e portare il nozzle a zero verifico subito se l'altezza è giusta. Se trovo che sia giusta basterà salvare i valori in EEPROM con il comando M500 per riaverli a ogni accenzione della stampante.
Ricordo inoltre che eventuali download di aggiornamenti di firmware non sovrascrivono i valori in EEPROM, quindi se faccio variazioni nei valori dopo essermi collegato alla stampante col il mio software di gestione dovrò dare il comando M502 (richiama i valori di default, che poi sono quelli del FW) e poi storarli in memoria con il comando M500.
In molti si scordano di questa operazione, ma è importante altrimenti si cambiano i valori e poi non si ha nessun riscontro positivo o negativo del cambiamento perché si stanno usando sempre quelli precedenti che si trovano in memoria.


I successivi valori sono già ampiamente stati spiegati nel post precedenti, mi limito solo a dirvi che nelle Delta gli endstop sono solo MAX, ed eventualmente si usa lo Z min per la sonda. Che i valori di step per unit, feedrate e accelerazioni dei tre assi X, Y e Z sono riferiti alle tre torri e quindi devono essere necessariamente uguali per tutti e tre.
Quindi questo è giusto:
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,80,451,625,625,625}      // X, Y, Z, E0, E1, E2, E3

Questo è sbagliato:
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4,451,625,625,625}      // X, Y, Z, E0, E1, E2, E3


Vi prego di non rispondere a questo topic per mantenerlo pulito, è aperto un topic in Software e firmware per commenti ed eventuali modifiche da apportare questa guida.

Edited 3 time(s). Last edit at 01/01/2015 05:20AM by MagoKimbra.


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
Re: MarlinKimbra Setup Guide
April 19, 2015 05:21AM
Ringraziando infinitamente l'utente Simone Primarosa alias simone97 che mi sta dando un'enorme mano alla scrittura di MarlinKimbra ed ha anche aggiunto delle belle feature....

  1. Oozing prevent - Una ritrazione automatica appena la temperatura dell'hotend scende sotto una temperatura minima settata in Configuration_adv.
  2. Power Consumation - Grazie a un sensore (ACS712) è possibile leggere sull'LCD la potenza in Watt istantanea e totale.
  3. Scittura della configurazione su SD - Per ora alcuni dati vengono scritti nella SD su un file config.cfg (il nome è modificabile da configuration.h) come la potenza totale e il tempo di vita della stampante. Per ora la variabile permette fino a 136 anni di vita, penso possa bastare....

Simone sta lavorando anche sulla possibilità di poter scrivere sul file config.cfg anche lo stato di stampa per poter fermare la stampante e ricominciare successivamente da dove si è lasciato... Questo però non vuol dire che se manca la corrente possiamo ricominciare da quel punto!!!!

Altre novità in arrivo... Sempre tempo permettendo....

Edited 1 time(s). Last edit at 04/19/2015 05:26AM by MagoKimbra.


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
Re: MarlinKimbra Setup Guide
July 19, 2017 11:16AM
La guida è vecchia è tratta di firmware vecchi... Se hai scaricato dal configuratore una versione abbastanza recente avrai notato che c'è un file che si chiama configuration_overall.h quello contiene tutte le scelte da te fatte e sovrascrive tutti gli altri file...


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
Sorry, only registered users may post in this forum.

Click here to login