Configurar Marlin 2.0.x Desde Cero
Configurar Marlin 2.0.x Desde Cero
Configurar Marlin 2.0.x Desde Cero
x desde cero
Recientemente, algunos usuarios de nuestro canal de Telegram en 3DWork.io se interesaron sobre como
configurar Marlin 2.0.x. y lo expusieron en el grupo. Visto lo visto pensé, ¿porque no redactar una guía para
configurar Marlin paso por paso?
Era algo que me rondaba la mente desde hacía tiempo, ya que mis impresoras continuaban trabajando con una
versión antigua de firmware (1.1.9). Así que sin más miramientos, me puse manos a la obra.
Esta guía no pretende ser un aburrido manual sobre Marlin. Te mostrará las opciones imprescindibles a tener en
cuenta para configurar Marlin rápidamente. Utilizaré como ejemplo una impresora «Custom», y paso a paso
descubrirás dónde y cómo configurar Marlin 2.0.x con éxito para tu impresora.
Te recomiendo encarecidamente que sigas el orden del artículo a la hora de configurarlo. El motivo es que los
parámetros los encontrarás también en ese mismo orden. Y de esta forma no correrás el riesgo de dejarte alguno
por el camino.
Lo más importante en mi opinión es perderle el miedo a Marlin, y si este artículo te sirviera de ayuda habría
cumplido con creces su objetivo. Conociendo Marlin lograrás entender y disfrutar un poquito más el apasionante
mundo de la impresión 3D y todas sus posibilidades.
Y si te surge alguna duda por el camino, siempre puedes compartirla en nuestro canal de Telegram. Seguro que
algún compañero estará más que dispuesto a echarte un cable. Así que vamos con el artículo sin más dilación…
Introducción
Configurar Marlin 2.0.x en tu impresora puede parecer un reto a simple vista y algo que solamente programadores
avezados pueden conseguir. Pero esa afirmación no puede estar más lejos de la realidad, créeme.
Con un poquito de paciencia y un editor de texto, podemos configurar cualquier impresora basada en arduino con
las últimas versiones de firmware sin problema alguno (y sin conocimientos de programación). De hecho, Marlin está
compuesto de muchísimos archivos, pero solamente necesitaremos modificar uno o dos a lo sumo, para compilar un
firmware funcional y después subirlo a nuestra impresora.
Por supuesto, puedes personalizar Marlin 2 hasta donde tu quieras, pero ya precisamos de modificar bastantes
archivos que de momento no vamos a mencionar o que lo haremos más adelante.
Es probable que te estés preguntando qué necesidad tienes de aprender a configurar Marlin 2.0.x. Las respuestas
pueden ser diversas, pero la que más me convence es que nos aporta seguridad, mejoras de rendimiento, y como
no, correcciones de posibles errores reportados en versiones previas.
No obstante, no voy a negar que durante el proceso de configuración y compilación se pueden presentar errores o
problemas que pueden aparentemente difíciles de solventar. Pero con Google y un poco de paciencia, no
deberíamos tener excesivos problemas. Somos Makers, ¿Quién dijo miedo?
En este manual para configurar Marlin usaremos como ejemplo una impresora «Custom» que tiempo atrás diseñe y
construí. Así podrás ver los cambios que efectúo y después aplicarlo a vuestra máquina. Abriremos los archivos e
iremos cambiando los parámetros por orden (desde el principio del archivo al final).
Sobra comentar que para configurar Marlin 2 necesitarás conocer de antemano todos los datos y componentes de
vuestra máquina, como por ejemplo tipo de extrusor, volumen de impresión, tipo de termistor, etc. Así que recopila
toda esta información previamente y vamos a ello sin más dilación.
Antes de comenzar esta guía completa sobre como configurar Marlin quería mostraros una aplicación muy reciente
que hemos desarrollado en 3DWork.io, su nombre es Marlin Builder. La forma «ortodoxa» de compilar un
firmware de Marlin se resume en lo siguiente: Descargar el firmware, editarlo a mano y compilarlo (3 pasos).
No obstante, la edición del firmware es bastante extensa y debido a ello hemos creado Marlin Builder, que te
puede servir de «alternativa» a editar a mano todo ese código. Si lo que deseas es editarlo a mano, cosa que a mi
me encanta lo reconozco, sigue leyendo desde el siguiente punto del artículo donde ya explico todo el proceso.
Si por el contrario deseas editar vía web el firmware de Marlin, accede a nuestra aplicación en el siguiente
enlace: Marlin Builder.
Básicamente, Marlin Builder se compone de un Wizard (o asistente de configuración) qué nos guiará por 5
secciones. Cada una de estas secciones controla los parámetros básicos para poder compilar un Marlin acorde a la
mecánica y electrónica. Así que cuando tengas las 5 secciones configuradas, le das a descargar firmware y ya lo
tienes listo. Suena fácil ¿Verdad?
Bueno, pues no te alegres tanto ya que Marlin Builder no hace milagros. Si algo lo configuras mal, el compilador te
mostrará error. No obstante puedes consultar todos los parámetros en este mismo articulo, y si no tienes
experiencia previa, es prácticamente obligatorio que lo leas. Suerte con ello!
Lo primero que debemos hacer es preparar nuestro PC para poder compilar el firmware (y editarlo obviamente).
Simplemente serán tres sencillos pasos, así que vamos a ello:
Tras descargarlo, lo descomprimimos en una carpeta en el escritorio de nuestro ordenador. No borreis el archivo
comprimido, siempre nos puede servir para volver atrás en nuestros pasos si modificamos «demasiadas cosillas»
dentro del firmware 🙂
Editor de texto (Notepad, Sublime, Atom, etc.)
También precisamos (aunque no es obligatorio) de un buen editor de textos. Se puede usar el interface del Arduino
IDE, pero yo os recomiendo utilizar algún editor orientado a programación. Estos suelen detectar las estructuras de
programación y las colorean, de tal forma que facilitan de forma considerable la compresión del código.
Yo personalmente utilizo Sublime, pero dispones de decenas de opciones, como Atom, Vim, VS Code, Notepad++ y
muchos otros más. Todos funcionan muy bien, simplemente es adaptarte al que más te guste.
Como es lógico, lo podremos descargar de la web oficial de arduino. Para ello, deberéis acceder a la
sección Software->Downloads, selecciona Windows Installer (por ejemplo) y apreta el botón Just Download para
descargarlo. También podéis efectuar una contribución al grandioso equipo de desarrollo que hay detrás de
Arduino, simplemente pulsando en Contribute & Download y siguiendo las instrucciones que os mostrarán en su
web.
Archivo «Configuration.h»
Como comenté anteriormente, existen 2 archivos principales que gestionan toda la configuración del firmware
Marlin. Por supuesto, existen muchos más cambios y modificaciones que podríamos hacer pero para nuestro
propósito actual, no son necesarios de momento (modificaciones del menú original, logotipos, etc.)
Vamos a comenzar a editar el archivo Configuration.h con el editor que hemos escogido (en mi caso Sublime), y
seguiremos por orden las distintas opciones más comunes a configurar. Comentar que este archivo contiene las
configuraciones principales de hardware, idiomas y controladores, así como configuraciones para las características y
componentes más comunes de nuestra impresora.
En blanco, podréis ver las opciones que he activado (o que vienen activadas por defecto), y en gris oscuro las
opciones que están desactivadas. Para activar una opción solamente debemos eliminar las dos barras «//» delante
del parámetro en cuestión. Y para desactivarlas lo contrario, añadirlas. Si eres programador ya estarás bastante
familiarizado con este procedimiento.
En el supuesto que nos dejemos algún parámetro en el tintero debido a la innumerable cantidad de impresoras
existentes, no dudéis en indicarlo en los comentarios al final del artículo. De esta manera iremos completando poco
a poco toda la información y podrá ser útil a más usuarios.
Y si lo deseáis, siempre podéis acceder a nuestro canal de Telegram y exponer vuestras dudas. Es probable que
alguno de nosotros se haya peleado ya con ellas. Os dejo por aquí el enlace directo: Telegram de 3DWork.io
/**
* This setting determines the communication speed of the printer.
*
* 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 250000
// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Wid
#define DEFAULT_NOMINAL_FILAMENT_DIA 3.0
/**
* Prusa Multi-Material Unit v2
*
* Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails.
* Requires EXTRUDERS = 5
*
* For additional configuration see Configuration_adv.h
*/
//#define PRUSA_MMU2
Como podéis comprobar, hay un montón, y en el propio código os aparece un listado. En el caso que no dispongas
de información acerca del tuyo, puedes consultar en Google, probablemente estará documentado de algún otro
usuario con tu misma impresora.
Por defecto solamente viene configurado el TEMP_SENSOR_0 con valor «1». En mi caso, allí debo colocar el valor
«5» . Como además dispongo de cama calefactable para mejorar la adherencia durante la impresión,
configuro TEMP_SENSOR_BED con el valor 1. El resto lo dejo a 0 ya que no dispongo de más extrusores ni de
cámara caliente)
/**
* --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resist
*
* Temperature sensors available:
*
* -5 : PT100 / PT1000 with MAX31865 (only for sensors 0-1)
* -3 : thermocouple with MAX31855 (only for sensors 0-1)
* -2 : thermocouple with MAX6675 (only for sensors 0-1)
* -4 : thermocouple with AD8495
* -1 : thermocouple with AD595
* 0 : not used
* 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
* 331 : (3.3V scaled thermistor 1 table)
* 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
* 3 : Mendel-parts thermistor (4.7k pullup)
* 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !
* 5 : 100K thermistor - ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan &a
(4.7k pullup)
* 501 : 100K Zonestar (Tronxy X3A) Thermistor
* 512 : 100k RPW-Ultra hotend thermistor (4.7k pullup)
* 6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pu
* 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
* 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
* 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
* 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
* 10 : 100k RS thermistor 198-961 (4.7k pullup)
* 11 : 100k beta 3950 1% thermistor (4.7k pullup)
* 12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
* 13 : 100k Hisens 3950 1% up to 300°C for hotend &
& &am
ONE"
* 15 : 100k thermistor calibration for JGAurora A5 hotend
* 18 : ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327
* 20 : Pt100 with circuit in the Ultimainboard V2.x
* 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
* 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
* 61 : 100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup
* 66 : 4.7M High Temperature thermistor from Dyze Design
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
* 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for
* (but gives greater accuracy and more stable PID)
* 51 : 100k thermistor - EPCOS (1k pullup)
* 52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
* 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan &am
*
* 1047 : Pt1000 with 4k7 pullup
* 1010 : Pt1000 with 1k pullup (non standard)
* 147 : Pt100 with 4k7 pullup
* 110 : Pt100 with 1k pullup (non standard)
*
* 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 5
#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 1
#define TEMP_SENSOR_CHAMBER 0
En mi caso, suelo configurar las temperaturas de los extrusores en 5 grados (mínima) y 265 grados (máxima). En el
caso de que un extrusor o la cama no llegue a 5º grados, deduciremos que el Termistor no esta instalado
correctamente, o se encuentra dañado físicamente.
De igual modo, nos protegerá en el caso de que accidentalmente se sobrepase la temperatura máxima, algo crucial
para nuestra seguridad.
// 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
Por defecto vienen ya predeterminados algunos valores para varias de las más conocidas impresoras del mercado.
Como mi impresora no coincide con la descripción, simplemente he añadido mis propios valores.
// Pulsar X1 PRO
#define DEFAULT_Kp 20.3
#define DEFAULT_Ki 1.43
#define DEFAULT_Kd 71.84
// Ultimaker
//#define DEFAULT_Kp 22.2
//#define DEFAULT_Ki 1.08
//#define DEFAULT_Kd 114
// MakerGear
//#define DEFAULT_Kp 7.0
//#define DEFAULT_Ki 0.1
//#define DEFAULT_Kd 12
Tras calentar y enfriar el fusor 8 veces, finalizará y mostrará la siguiente información. Solamente deberéis coger los
valores de Kp, Ki y Kd e introducirlos en vuestro firmware.
También puedes ejecutar otra función interna de Marlin para sacar los valores de la cama. Esta se efectúa con el
comando Gcode M303 E-1 C8 S90.
//===========================================================================
//====================== PID > Bed Temper
//===========================================================================
/**
* PID Bed Heating
*
* If this option is enabled set PID constants below.
* If this option is disabled, bang-bang will be used and BED_LIMIT_SWITCHING will enable hystere
*
* 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.
*/
#define PIDTEMPBED
//#define BED_LIMIT_SWITCHING
/**
* 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
if ENABLED(PIDTEMPBED)
//#define MIN_BED_POWER 0
//#define PID_BED_DEBUG // Sends debug data to the serial port.
Si este parámetro se encuentra activo, podremos configurar a qué minima temperatura le permitiremos a Marlin
extruir filamento con el parámetro EXTRUDE_MINTEMP. Por defecto ambas vienen activas, así que no deberemos
preocuparnos, pero siempre es interesante conocer estas opciones de seguridad.
/**
* 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
Si no es tu caso, déjalo como está, yo por ejemplo introduzco el filamento a mano, así que no tengo necesidad
alguno de modificarlo, pero siempre está bien saberlo 🙂
/**
* 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 200
/**
* 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&a
failed" errors the
* details can be tuned in Configuration_adv.h
*/
Se pueden instalar además sensores extra para determinar los máximos recorridos. Nos servirán para prevenir que la
máquina se desplace más allá de lo estrictamente necesario. No son imprescindibles, pero sí una buena opción para
tener todos los imprevistos bajo control.
En mi caso particular, yo dispongo de dos finales de carrera mecánicos en el eje X (extrusor) y en el eje Y (cama), y
aparte tengo un sensor de nivelación en Z. Así que dejo activos en el firmware solamente los finales de carrera
mínimos, como puedes comprobar tu mismo en las siguientes líneas.
// Specify here all the endstop connectors that are connected to any endstop or probe.
// Almost all printers will be using one per axis. Probes will use one or more of the
// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG
En mi impresora tengo 3 motores en los 3 ejes (X, Y, Z), y un solo motor para el extrusor. Así que habilito las
opciones necesarias. El primer extrusor siempre se denomina E0 como puedes comprobar.
Pero no solo deberemos habilitar la opción, sino también indicarle el driver que tienes montado en tu electrónica.
Como yo tengo DRV8825, se lo he indicado al compilador, y listo. En los comentarios puedes ver todos los tipos de
drivers disponibles en Marlin 2, así que localiza el tuyo y anótalo tal y como aparece.
/**
* 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
*
* A4988 is assumed for unspecified drivers.
*
* Options: A4988, A5984, DRV8825, LV8729, L6470, 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', 'L6470', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'T
'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660',
'TMC5160_STANDALONE']
*/
#define X_DRIVER_TYPE DRV8825
#define Y_DRIVER_TYPE DRV8825
#define Z_DRIVER_TYPE DRV8825
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define Z3_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE DRV8825
//#define E1_DRIVER_TYPE A4988
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
//#define E4_DRIVER_TYPE A4988
//#define E5_DRIVER_TYPE A4988
Nosotros no vamos a activar ese parámetro, ya que solemos trabajar con milímetros, e introduciremos en este
apartado nuestros pasos para cada uno de los ejes y el extrusor. Precisas previamente conocer los valores a
introducir, así que te recomiendo que los extraigas de algún firmware ya disponible de tu impresora (para ir sobre
seguro).
Otra opción es buscarlo por Internet de algún otro usuario, navegar en foros, consultar al fabricante o como última
opción, calcularlos tu mismo como puedes ver en este vídeo.
/**
* Default Axis Steps Per Unit (steps/mm)
* Override with M92
* X, Y, Z, E0 [, E1[, E2...]]
*/
#define DEFAULT_AXIS_STEPS_PER_UNIT { 160, 160, 800, 803 }
Mi sensor de nivelación se encuentra 37mm a la derecha del fusor, y 2 mm más atrás del mismo, así que quedaría la
siguiente configuración:
/**
* Z Probe to nozzle (X,Y) offset, relative to (0, 0).
*
* In the following example the X and Y offsets are both positive:
*
* #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 }
*
* +-- BACK ---+
* | |
* L | (+) P | R <-- probe (20,20)
* E | | I
* F | (-) N (+) | G <-- nozzle (10,10)
* T | | H
* | (-) | T
* | |
* O-- FRONT --+
* (0,0)
*
* Specify a Probe position as { X, Y, Z }
*/
#define NOZZLE_TO_PROBE_OFFSET { 37, -2, 0 }
// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wro
#define INVERT_X_DIR false
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false
Volumen de impresión (X_BED_SIZE & Y_BED_SIZE)
Definiremos aquí las medidas exactas de nuestro volumen de impresión (cama). Mi impresora dispone de una cama
en posición horizontal de 285 mm x 206 mm, así que quedaría de esta forma configurada:
Por defecto para los mínimos Marlin viene configurado con el valor 0, el cual no debemos modificar ya que es
el HOME. Para los límites máximos Marlin directamente usa las medidas actuales de nuestra cama en X e Y (que
previamente habíamos dejamos configuradas en el parámetro anterior.
Para finalizar con la configuración, en el eje Z la medida que debemos añadir es la altura máxima de impresión de
nuestra máquina. En mi caso particular puedo imprimir unos 296mm aproximadamente, así que introduzco su valor.
Sin embargo, como muchas otras cosas en Marlin 2, puedes inhabilitar ese límite si lo deseas. Es una opción que NO
RECOMIENDO, pero que quería comentaros para conocer su existencia. Yo personalmente suelo quitar el límite en el
eje Z, pero como os he comentado, salvo que sea imprescindible o sepas muy bien lo que haces, debes dejar los
valores por defecto.
// 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
#endif
Modificando esta sección, incluirás tus propias temperaturas, algo bastante útil porque las que vienen por defecto
en el firmware son mejorables. Yo personalmente dejo estas configuraciones:
// Preheat Constants
#define PREHEAT_1_LABEL "PLA"
#define PREHEAT_1_TEMP_HOTEND 195
#define PREHEAT_1_TEMP_BED 65
#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255
/**
* LCD LANGUAGE
*
* Select the language to display on the LCD. These languages are available:
*
* en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
* ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
* :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Dan
'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'It
'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak'
(Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE es
/**
* 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
Para reducir los menús, Marlin te ofrece la opción de simplificarlos con el parámetro SLIM_LCD_MENUS. No
solamente simplificará los menús, sino que ahorrarás una no despreciable cantidad de memoria.
/**
* 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
Y por último, hemos llegado a la configuración del display. Si echamos un detenido vistazo al
archivo configuration.h veremos que hay infinidad de displays. Puede parecer un poco complicado, pero en
realidad lo único que debemos hacer es encontrar la descripción de nuestra pantalla LCD y descomentar para poder
configurar Marlin 2.
Existen displays basados en texto, displays LCD gráficos, OLED displays, y alguno más que otro. Yo tengo uno
basado en gráficos denominado MKS MINI 12864 (foto arriba). Para ello he descomentado la siguiente linea.
Si no encuentras el nombre de tu display, te recomiendo que utilices la función «Buscar» de windows, es lo más
rápido y sencillo.
//
// MKS MINI12864 with graphic controller and SD support
// https://reprap.org/wiki/MKS_MINI_12864
//
#define MKS_MINI_12864
Un pequeño detalle a tener en cuenta. En algunos casos (como el mío particular), es necesario disponer de librerías
externas para compilar el firmware con soporte a nuestro display. Es el caso del display MKS MINI12864, precisa de
buscar e instalarlas manualmente.
Si intentas compilarlo Marlin te dará error, y te indicará qué librería precisas instalar. A mi por ejemplo en mi
compilación me pide la librería U8glib, veamos el error:
sketch\src\HAL\HAL_AVR\u8g_com_HAL_AVR_sw_spi.cpp:65:10: fatal error: U8glib.h: No such file or directory
La solución es muy sencilla, iremos al menú Herramientas -> Administrar bibliotecas… y haremos clic. En el cuadro
de búsqueda introduciremos U8glib y presionaremos INTRO. Nos aparecerán las librerías online disponibles con
este parámetro de búsqueda y veremos que al final se encuentra la nuestra «U8glib by Oliver». Otro clic en el botón
INSTALAR y solucionado.
Por último, la configuración de contraste del display no me convencía demasiado, ya que se veía algo oscura al
principio, así que decidí cambiarla. Puedes modificar el contraste (poner la pantalla más clara/oscura) desde el
propio display, pero prefiero dejárselo ya puesto en el mismo firmware, ya que es una opción que no volveré a
modificar, y en caso de que resetee la EEPROM no tendré que configurarlo de nuevo.
Para ello tuve que editar un archivo especial denominado «pins_RAMPS.h» localizado en la
ruta \Marlin\src\pins\ramps\. Una vez editado, añadiremos la línea «#define LCD_CONTRAST 150» tal y como
podemos ver en las siguientes líneas:
#elif ENABLED(MINIPANEL)
#define BEEPER_PIN 42
// not connected to a pin
#define LCD_BACKLIGHT_PIN 65 // backlight LED on A11/D65
#define DOGLCD_A0 44
#define DOGLCD_CS 66
// GLCD features
// Uncomment screen orientation
//#define LCD_SCREEN_ROT_90
//#define LCD_SCREEN_ROT_180
//#define LCD_SCREEN_ROT_270
#define BTN_EN1 40
#define BTN_EN2 63
#define BTN_ENC 59
#define SD_DETECT_PIN 49
#define KILL_PIN 64
#define LCD_CONTRAST 150    // Añadido por Pet
Explicarlas todas y cada una de ellas daría para escribir un artículo completo, así que directamente os mostraré cómo
nivelar la cama de dos formas distintas. La primera en el caso de que no dispongamos de un sensor de nivelación
instalado y la segunda en el caso de que sí.
Para comenzar, y en ambos casos, debemos descomentar la función AUTO_BED_LEVELING_BILINEAR y después la
función RESTORE_LEVELING_AFTER_G28, para que queden activas en nuestro firmware.
/**
* Choose one of the options below to enable G29 Bed Leveling. The parameters
* and behavior of G29 will change depending on your selection.
*
* If using a Probe for Z Homing, enable Z_SAFE_HOMING also!
*
* - AUTO_BED_LEVELING_3POINT
* Probe 3 arbitrary points on the bed (that aren't collinear)
* You specify the XY coordinates of all 3 points.
* The result is a single tilted plane. Best for a flat bed.
*
* - AUTO_BED_LEVELING_LINEAR
* Probe several points in a grid.
* You specify the rectangle and the density of sample points.
* The result is a single tilted plane. Best for a flat bed.
*
* - AUTO_BED_LEVELING_BILINEAR
* Probe several points in a grid.
* You specify the rectangle and the density of sample points.
* The result is a mesh, best for large or uneven beds.
*
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually
* The result is a mesh, suitable for large or uneven beds. (See BILINEAR.)
* For machines without a probe, Mesh Bed Leveling provides a method to perform
* leveling in steps so you can manually adjust the Z height at each grid-point.
* With an LCD controller the process is guided step-by-step.
*/
//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING
/**
* Normally G28 leaves leveling disabled on completion. Enable
* this option to have G28 restore the prior leveling state.
*/
#define RESTORE_LEVELING_AFTER_G28
De esta forma, nuestro sensor bajará en diversos puntos y creará una malla virtual con las diferentes alturas. Y como
me gusta hacer siempre el HOME en el centro de la cama activo la opción Z_SAFE_HOMING.
#define Z_SAFE_HOMING
#if ENABLED(Z_SAFE_HOMING)
#define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2) // X point for Z homing when homing all axes (G2
#define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2) // Y point for Z homing when homing all axes (G2
#endif
Una vez configurado todo esto, aplica solamente la opción que necesites para tu firmware, opción 1 sin sensor u
opción 2 con sensor. Activar las 2 no es necesario y puede darte problemas o fallos de compilación. Vamos a ello…
/**
* The "Manual Probe" provides
"Auto" Bed Leveling without a p
* Use G29 repeatedly, adjusting the Z height at each point with movement commands
* or (with LCD_BED_LEVELING) the LCD controller.
*/
#define PROBE_MANUALLY
//#define MANUAL_PROBE_START_Z 0.2
Después indicaremos cuantos puntos de prueba (Probe points) deseamos que efectúe nuestra nivelación manual, así
que modificaremos los parámetros GRID_MAX_POINTS. Para nivelar las 4 esquinas necesitaremos de 4 puntos, así
que dejaremos la configuración de esta forma.
Por último, y no menos importante, activaremos las funciones LCD_BED_LEVELING y LEVEL_BED_CORNERS. Esto
creará en el display los menús oportunos para tal efecto.
/**
* Add a bed leveling sub-menu for ABL or MBL.
* Include a guided procedure if manual probing is enabled.
*/
#define LCD_BED_LEVELING
#if ENABLED(LCD_BED_LEVELING)
#define MESH_EDIT_Z_STEP 0.025 // (mm) Step size while manually probing Z axis.
#define LCD_PROBE_Z_RANGE 4 // (mm) Z Range centered on Z_MIN_POS for LCD Z adjustment
//#define MESH_EDIT_MENU // Add a menu to edit mesh points
#endif
// Add a menu item to move between bed corners for manual bed adjustment
#define LEVEL_BED_CORNERS
Opción 2: Configuración con sensor (BABYSTEPPING)
Esta es la configuración que yo personalmente utilizo en mi impresora con mi sensor de nivelación en el cabezal. En
mi caso utilizo un sensor de infrarrojos, pero es aplicable para cualquier tipo de sensor (inductivo, capacitivo, IR, etc.)
Si dispones de un BLTouch, si que te recomiendo que busques algún manual más específico, ya que Marlin trae
funciones específicas para él. En un futuro próximo publicaremos un artículo sobre BLTouch y como configurarlo.
Volviendo a nuestra configuración, la primera modificación que efectuaremos será indicarle a Marlin que
disponemos de un sensor de autonivelación fijo en nuestra máquina, para ello editaremos la siguiente línea y la
dejaremos así:
/**
* A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
* (e.g., an inductive probe or a nozzle-based probe-switch.)
*/
#define FIX_MOUNTED_PROBE
Luego configuraremos cuantos puntos de prueba (Probe points) deseamos que efectúe nuestra nivelación con
sensor, así que modificaremos los parámetros GRID_MAX_POINTS. Yo suelo efectuar 9 puntos de comprobación
antes de cada impresión, así que dejo las opciones por defecto que son 3 por eje (3 x 3 = 9).
Después debemos editar un nuevo archivo denominado configuration_adv.h. Se diferencia del primero
básicamente en que nos ofrece opciones de personalización más detalladas, complementos y funciones
experimentales o en desarrollo (como es el BABYSTEPPING)
Yo en mi impresora uso una función de nivelación disponible en Marlin 2 denominada BABYSTEPPING. Esta función
me permite calibrar con un folio la altura de mi sensor de nivelación en el centro de la cama una sola vez.
Más tarde, la impresora efectuará 9 puntos de testeo (probe points) automáticamente al comenzar cada impresión.
De esta forma no tendré que ir esquina por esquina innecesariamente para calibrar mi cama. Por defecto viene
desactivada, así que activaremos la opción BABYSTEPPING tal y como os muestro a continuación:
#define BABYSTEPPING
#if ENABLED(BABYSTEPPING)
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
#define BABYSTEP_MULTIPLICATOR_Z 20 // Babysteps are very small. Increase for faster motion.
#define BABYSTEP_MULTIPLICATOR_XY 1
Desde que las nuevas versiones de Marlin aparecieron (2.0.x) es posible generar mallas en 3D de nuestra superficie
de impresión sin la necesidad de utilizar Octoprint o cualquier de sus interesantísimos plugins.
Marlin ahora te facilita un archivo que puedes modificar y cargar en Open SCAD para visualizar nuestra malla en
cualquier momento. Puedes leer el artículo completo en el siguiente enlace: Visualizar malla en 3D de nuestra
superficie de impresión con Marlin 2.x (y sin Octoprint)
Tienes el artículo completo en el siguiente enlace: Habilitando juegos ocultos en Marlin 2.0.x para tu impresora
3D
Por supuesto deberás modificar algunas cosillas dentro del mismo firmware. Puedes leer el artículo completo en el
siguiente enlace: Crea tu propio logotipo personalizado de inicio en Marlin 2.0.x
Para ello, abriremos la carpeta donde teníamos descomprimido el firmware, iremos a la carpeta /Marlin y haremos
clic dos veces en el archivo del proyecto denominado Marlin.ino. Esto debería cargar el proyecto completo en el
IDE.
Tenemos básicamente dos opciones, una es verificar/compilar el firmware. Esta opción simplemente hará una
compilación previa del firmware y nos indicará si está todo correctamente configurado. La segunda opción es subir
el firmware, la cual directamente lo compilará y lo subirá a tu impresora.
Ten en cuenta que si le das a subir el firmware, deberás haber previamente configurado el IDE de arduino y
conectado tu impresora por USB a tu ordenador. Si no detecta la placa de tu impresora, después de la compilación
dará error y no subirá el firmware.
Así, que llegados a este punto, nos vamos a limitar simplemente a darle a la opción verificar/compilar el firmware, y
una vez veamos que compila todo correctamente pasaremos al siguiente paso que ya será el definitivo, subir el
firmware a nuestra máquina. Para ello iremos al menú Programa -> Verificar/Compilar o pulsaremos las teclas
rápidas Ctrl+R.
Como hemos comentado en el apartado previo, antes de poder subir el firmware finalizado a nuestra impresora,
debemos configurar el IDE de Arduino. Iremos al menú Herramientas y configuraremos estos 3 apartados:
Si hemos seleccionado todo correctamente, no deberíamos tener mayor problema. Para subirlo definitivamente
iremos a Programa -> Subir o pulsaremos las teclas rápida Ctrl+U.
Compilar electrónicas de 32bits con Visual Studio Code y
Platform.io
En el supuesto de que dispongas de una placa electrónica de 32bits, te recomendamos utilizar Visual Studio Code y
su extensión Platform.io, el cual es un editor freeware de código muy ligero y potente.
Tienes un estupendo artículo también en nuestra página web donde paso a paso se explica como hacerlo, te dejo
por aquí el enlace directo: Configura y actualiza tu impresora 3D utilizando Visual Studio Code y Platform.io
Observaciones finales
Espero y deseo que este artículo con la última versión de Marlin 2 haya podido ser de ayuda para ti. No obstante, tal
como comenté al principio, no pretende ser un manual específico de uso, sino una sencilla introducción a él usando
mi actual impresora como ejemplo.
Si bien, la idea es ir completando día a día el artículo con mucha más información. De antemano no descarto que se
te pueda presentar algún imprevisto a la hora de configurar Marlin 2 para ti. Si ese fuera el caso, te agradecería que
lo compartieras con nosotros en los comentarios o en nuestro canal de Telegram.
Y bueno, ya por último, si existe alguna errata en el artículo te pido disculpas. Configurar Marlin 2 como puedes
comprobar es bastante laborioso (que no difícil), y es posible que algún parámetro se nos haya pasado por alto
(nada más fácil que corregirlo en alguna posterior edición). No dudes en notificarnoslo.
Como siempre, os dejamos por aquí otros increíbles artículos que seguro que son de vuestro interés: