Marlin es el firmware open source más usado en la historia de la impresión 3D, operando como el cerebro central detrás de innumerables impresoras cartesianas y CoreXY. Si necesitás actualizar tu placa base, instalar una sonda de nivelación o afinar la mecánica de tu máquina, entender y editar su configuración es un paso obligado.
Qué es y para qué sirve
Marlin es el software de bajo nivel que corre directamente en la placa base de la impresora (ya sea de 8 o 32 bits). Su función principal es procesar el gcode generado por el slicer y traducirlo en movimientos precisos de los motores paso a paso, además de encargarse del control térmico (PID) del hotend y el build plate. A diferencia de klipper, que delega el procesamiento pesado a un host externo como una Raspberry Pi, marlin procesa todas las trayectorias de manera interna en el microcontrolador de la impresora.
Para personalizar el comportamiento de la máquina, toda la configuración vive en dos archivos fuente principales en lenguaje C++: Configuration.h y Configuration_adv.h. Desde ahí definís qué tipo de termistor tenés, los límites físicos de los ejes, los drivers de los motores y si habilitás funciones avanzadas como el linear advance o el input shaping.
Instalación y primer uso
- Descargá el código fuente directamente desde el repositorio oficial de GitHub de MarlinFirmware. No bajes archivos.hex precompilados porque no vas a poder editar los parámetros de tu máquina.
- Instalá Visual Studio Code y agregale la extensión PlatformIO. Esta es la herramienta estándar para compilar el firmware hoy en día.
- Abrí la carpeta del código en VS Code y buscá los archivos de configuración en la carpeta
Marlin. Vas a necesitar definir tu placa exacta (por ejemplo, una BTT SKR o una Creality 4.2.2) y el puerto serie enConfiguration.h. - Ajustá los parámetros básicos: dimensiones del volumen de impresión, tipo de cinemática, configuración de endstops y termistores.
- Compilá el proyecto desde PlatformIO. Si todo está correcto, el proceso te va a escupir un archivo.bin o.hex.
- Flasheá la placa base metiendo el archivo.bin en una tarjeta SD vacía y prendiendo la máquina, o usando un cable USB con un software flasheador si es una placa de 8 bits más vieja.
- Apenas arranque con el firmware nuevo, mandá un
M502seguido de unM500desde la terminal para limpiar la EEPROM y cargar los valores por defecto frescos.
Interfaz y flujo de trabajo
El día a día con marlin se maneja típicamente a través de la pantalla LCD de la impresora o mandando comandos vía terminal desde plataformas como OctoPrint o Pronterface. El flujo de trabajo asume que el firmware contiene las reglas "duras" de la máquina, por lo que cualquier cambio estructural requiere recompilar y reflashear. Sin embargo, ajustes de calibración fina (como los steps/mm, los valores de PID y el Z-offset) se pueden guardar en la memoria no volátil (EEPROM) enviando comandos gcode en vivo.
En el flujo de impresión estándar, el slicer manda un G28 para hacer homing de todos los ejes, seguido muchas veces de un G29 para generar o cargar la malla de nivelación de la superficie, antes de comenzar a purgar filamento e imprimir.
Ajustes clave recomendados
| Ajuste | Valor recomendado | Para qué sirve |
|---|---|---|
| e-steps | Depende de tu extruder | Garantiza que si el slicer pide 100 mm de filamento, el engranaje empuje exactamente 100 mm. Se ajusta con M92 E<valor>. |
| Z-offset | Negativo (ej: -1.25 mm) | Define la distancia exacta entre el disparo de la sonda y la punta del nozzle para lograr el first layer squish ideal contra el PEI o FEP. |
| linear advance | K0.02 a K0.20 | Compensa la presión interna del hotend durante la aceleración, previniendo esquinas sobreextruidas y reduciendo el stringing. |
| PID hotend | Calibrado in situ | Mantiene la temperatura estable sin fluctuaciones. Indispensable después de cambiar el bloque calentador, el nozzle o el termistor. |
Funciones destacadas
- Linear advance — Similar al pressure advance en klipper, esta función altera la velocidad del extruder en base a la aceleración del cabezal. Es vital habilitarlo descomentando
LIN_ADVANCEenConfiguration_adv.hsi querés imprimir rápido manteniendo bordes afilados. - Baby stepping — Una función salvavidas que te permite micro-ajustar el Z-offset en tiempo real mientras se imprime la primera capa, garantizando la adhesión perfecta.
- Input shaping — En las versiones más recientes (2.1.2 en adelante), marlin sumó compensación de resonancias para cancelar vibraciones mecánicas y mitigar el ringing a altas velocidades.
- Adaptive bed mesh — Si usás OrcaSlicer, podés mandarle las variables de los límites del modelo impreso para que marlin haga un mallado rápido solo en la zona donde se va a depositar plástico, ahorrando mucho tiempo en el pre-print.
Tips y buenas prácticas
- Calibrá tus e-steps (o steps/mm) siempre en frío y, si es posible, desconectando el tubo bowden o retirando el hotend si tenés direct drive. Esto evita que un nozzle parcialmente tapado o la resistencia térmica generen una lectura errónea de los pasos reales del motor.
- Hacé siempre un PID tune usando el comando
M303 E0 S210 C5cada vez que toques el ensamble térmico, y no te olvides de guardar el resultado conM500. - Verificá exhaustivamente que la protección contra Thermal Runaway esté activa en
Configuration.h. Es tu principal seguro contra incendios si el termistor se llega a salir del bloque. - Si vas a modificar
Configuration_adv.h, guardate siempre un backup local de tu versión funcional anterior. Un error de sintaxis te puede dejar la placa colgada al compilar. - Deshabilitá características innecesarias como el soporte de menús arcaicos o melodías de inicio si tu placa de 8 bits se queda sin memoria flash al tratar de compilar.
Errores comunes
- MINTEMP o MAXTEMP: Marlin detiene todo el sistema por una medida de seguridad estricta. MINTEMP suele indicar que el cable del termistor está cortado o desenchufado. MAXTEMP significa que el termistor está en cortocircuito.
- Skipping steps: Si escuchás ruidos secos y ves un salto masivo en los ejes X o Y, o bien los drivers tienen una corriente muy baja y el motor pierde torque, o les pusiste demasiada corriente, se recalientan y entran en protección térmica.
- Imprimiendo en el aire: Pasa cuando configurás mal la dirección del sensor Z. Un Z-offset de sonda tiene que ser un número negativo para bajar el nozzle hacia el build plate.
- Timeout solicitud Marlin: Si usás OctoPrint o un host externo y mandás un G29 detallado o un calentamiento lento, el host puede agotar su tiempo de espera antes de que marlin le responda el "ok". Aumentá los tiempos de timeout en el host.
- Micro-pausas imprimiendo curvas: Ocurre a menudo en placas de 8 bits cuando el gcode tiene demasiada resolución en arcos (G2/G3). Reducí la resolución en el slicer o limitá el buffer serial de marlin para que el microprocesador no se sature procesando segmentos cortos.