La guía paso a paso para tunear tun ear tu impresora 3D y conseguir piezas de la máxima calidad
Índice
Qué es Marlin y para qué sirve Qué es un firmware y porqué necesito configurarlo Qué tiene de especial el firmware Marlin Tiene la comunidad más activa de desarrolladores Entiende comandos G-CODE Se comunica con el PC por el puerto USB Soporta muchos modelos de placas Traducido a más de 20 idiomas Planifica los movimientos, ajustando la velocidad. Soporta muchos tipos de pantallas LCD No necesita un PC para imprimir Imprime de forma automática Utiliza la EEPROM para guardar la configuración Soporta varios tipos de Impresoras 3D Soporte para arcos en el GCODE Mide la temperatura de forma precisa Control AutoTemp Calcula el Autonivelado de la cama caliente Cómo instalar Marlin paso a paso El fichero Configuration.h Configuración Mínima de la impresora 3D Tipo de Placa Base
Configurar la RAMPS 1.4 Otras placas conocidas ¿Qué electrónica tienes en la impresora? Sensor de temperatura Resistencia EndStop Pull Up Invertir la lógica del final de carrera Invertir sentido de giro del motor Medidas máximas de la impresión Configuración de los pasos por milímetro Ajustar la velocidad y aceleración máxima Velocidades máximas Aceleración máxima El parámtro JERK Configuración de la pantalla LCD Soporte para la tarjeta SD Modelo de la pantalla LCD Controles de temperatura Temperatura Mínima y Máxima Parámetros PID Autotune de los parámetros PID Control del comando M109 Configuración Avanzada Velocidad del puerto serie Uso de la EEPROM Nombre de la impresora Número de Extrusores Velocidad de Homing Resumen en formato vídeo Conclusión Final
Qué es Marlin y para qué sirve En esta sección voy a contarte qué es Marlin y por qué lo necesitas en la impresora 3D
Configurar la RAMPS 1.4 Otras placas conocidas ¿Qué electrónica tienes en la impresora? Sensor de temperatura Resistencia EndStop Pull Up Invertir la lógica del final de carrera Invertir sentido de giro del motor Medidas máximas de la impresión Configuración de los pasos por milímetro Ajustar la velocidad y aceleración máxima Velocidades máximas Aceleración máxima El parámtro JERK Configuración de la pantalla LCD Soporte para la tarjeta SD Modelo de la pantalla LCD Controles de temperatura Temperatura Mínima y Máxima Parámetros PID Autotune de los parámetros PID Control del comando M109 Configuración Avanzada Velocidad del puerto serie Uso de la EEPROM Nombre de la impresora Número de Extrusores Velocidad de Homing Resumen en formato vídeo Conclusión Final
Qué es Marlin y para qué sirve En esta sección voy a contarte qué es Marlin y por qué lo necesitas en la impresora 3D
Marlin es el programa que tienes que instalar en tu placa de Arduino para controlar la impresora. Una vez que lo instalas en tu placa, Marlin puede leer los programas de GCODE desde el puerto serie, o desde una tarjeta SD. Es un firmware que está muy tuneado tuneado para para las impresoras 3D. Está diseñado para controlar los movimientos de los motores paso a paso y del extrusor de tal forma que el resultado de la impresión sea perfecto.
G-CODE El lenguaje universal para controlar máquinas, impresoras 3D, cortadoras láser se llama G-CODE. Necesitas un programa como Slic3r o Cura para convertir un modelo 3D en un fichero GCODE que puedas enviar a Marlin. Lo que hace Marlin es leer la lista de comandos G-CODE, G-CODE, línea a línea, y va convirtiendo cada comando comando en los pulsos necesarios para mover los motores paso a paso. El origen de Marlin está en el conocido firmware para máquinas CNC, el GRBL. Es una versión extendida, con soporte para los extrusores, cama caliente, pantallas LCD y todo lo que necesita una impresora 3D.
Al usar una placa con un microprocesador, la impresora puede funcionar independiente de un PC. Marlin se instala en el la memoria interna del chip, y tiene todo lo necesario para controlar la impresora sin estar conectado al ordenador. Marlin tiene un sistema avanzado para controlar la temperatura del extrusor y de la cama caliente de forma precisa. Con esto vas a poder controlar la calidad del plástico en la impresión. Y además, incluye muchos sistemas de seguridad, que pueden evitar situaciones peligrosas. Por ejemplo, si el sensor de temperatura se estropea, Marlin lo detecta y detiene todo en plan emergencia, en vez de continuar calentando calentando el extrusor (que puede causar una desgracia si no estás vigilando la impresora). Marlin está pensado para chips de la famila AVR 8 bits de Atmel. La mayoría de las placas para impresoras 3D incluyen algún chip de este tipo.
Atmega 2560 de Atmel
La placa más conocida es la RAMPS 1.4, pero hay otras placas que también soportan el Marlin. En el fondo, f ondo, lo que diferencia una placa de otra son los pines de entrada/salida, el número de dispositivos, y los protocolos de comunicación. Pero el núcleo es
el mismo. Lo mismo ocurre con las pantallas LCD. Lo que cambia es el protocolo de comunicación entre la pantalla y el chip. Pero el
menú, las opciones, la información, es la misma para todos los modelos.
Qué es un firmware y porqué necesito configurarlo Voy a repasar este concepto para que tengas claro qué hay que hacer si quieres instalar el Marlin. El chip de tu electrónica es como un mini ordenador , con memoria, disco duro, duro, etc. Puedes pensar que el firmware es como el sistema operativo (pero en versión light) light)..
ARDUINO MEGA 2560
El firmware es el programa que va instalado en el chip de la impresora 3D.
Marlin es el firmware de tu electrónica Marlin es el firmware que escriben los desarrolladores para este chip, pensado para la impresora 3D. En la web te puedes descargar el código fuente completo, pero no vas a encontrar el fichero binario para instalar. Antes de instalar el firmware f irmware en la placa hay que configurar las opciones que se adaptan a tu modelo de impresora y de electrónica. ¿Porqué no hay un fichero que puedes enviar al Arduino y listo?
Pues porque necesitas configurarlo a medida para tu impresora. Por ejemplo, Marlin puede usar muchas pantallas LCD, pero tienes que decirle qué pantalla es la que estás usando. Si no, tendrías que incluir el código para todas las pantallas conocidas, y
el fichero sería enorme.
Por eso, lo que vas a hacer es descargar el codigo fuente, configurar los valores de tu impresora (para eso estoy escribiendo esta mega guía), y generar el fichero optimizado para tu placa.
El proceso de generar ese fichero binario se llama compilar. El programa de Arduino recorre todos los ficheros de texto con el código fuente, y va pasando todas las instrucciones al formato en binario. Al final de ese proceso, se genera un fichero con la extensión hex que es lo que hay que enviar a la placa. El programa de arduino, hace un upload de ese fichero a la placa, a través del puerto serie. Cuando termina, resetea la placa, y Marlin empieza a correr. Si te lías un poco con este paso, te recomiendo practicar antes con alguno de los ejemplos de Arduino (vienen incluidos cuando instalas el programa de Arduino). Si tienes problemas con esto, prueba hacer que parpadee el led de la placa. Asi vas a estar seguro que tienes todo bien
instalado. Además, tengo que decirte que si tuvieses el fichero .hex , y tuvieses que enviarlo a la placa por tí mismo, te ibas a liar un poco. Lo bueno de usar Arduino es que todo esto es sencillo y muy cómodo.
Qué tiene de especial el firmware Marlin Voy a destacar las características fundamentales de Marlin. Si estás leyendo este artículo es porque quieres conocer a fondo qué puedes hacer con este programa.
Tiene la comunidad más activa de desarrolladores Marlin es el firmware por defecto en la mayoría de impresoras 3D. Tiene una comunidad muy activa, y una base enorme de usuarios.
Hay algunas críticas a cómo está funcionando el desarrollo en la actualidad, y las versiones estables podrían tener un poco más de estabilidad… pero por el momento no hay alternativa y Marlin va
a durar mucho tiempo.
Contribuciones al código de Marlin
Entiende comandos G-CODE Marlin puede interpretar casi todos los comandos de movimiento del G-CODE. Desde luego los usados en las impresoras 3D. Además de eso, incluye una cantidad enorme de comandos de control (que tienen el prefijo M). Puedes acceder a todas las funciones de la impresora a través de estos comandos.
Se comunica con el PC por el puerto USB Puedes usar un programa como Pronterface para comunicarte con Marlin. El programa te permite mover la impresora, hacer el homing , encender los extrusores, y ejecutar un programa de GCODE. Además de esto, Marlin muestra mucha información a través del puerto serie. Si tienes algún problema, hay comandos que te explican qué está pasando (o lo que piensa la máquina que está pasando)
Soporta muchos modelos de placas
La lista es muy grande, más de 40 modelos. Todas las placas conocidas tienen soporte para Marlin. Asegúrate que la placa que vas a comprar está soportada por Marlin Marlin soporta chips de la familia AVR de Atmel. Es el chip que tienen los Arduinos Mega. Muchas placas usan la versión Mega 2560, y otros usan chips de la familia At90 (sobre todo por el soporte USB incluido). Se está trabajando en darle soporte a las placas con chips ARM de 32 bits, pero por el momento no es una versión estable.
Traducido a más de 20 idiomas Puedes poner el Marlin en Inglés, Español, Gallego, Catalán, Vasco, Aragonés, Chino, Ucraniano, Checo, Japonés, Ruso… Aunque como siempre me pasa con estos programas, hecho en falta la versión en Latín clásico.
Planifica los movimientos, ajustando la velocidad. Marlin tiene un sistema avanzado de planificación de velocidades. Esto es fundamental para conseguir el acabado perfecto.
Lo mío, desde luego, no es el dibujo
En cada movimiento, Marlin calcula la aceleración ideal en el principio y al fin de cada tramo. Pero para esto, tiene en cuenta el comando anterior y el comando siguiente. Si el próximo comando es un cambio de dirección muy brusco (por ejemplo, una esquina), Marlin frena el movimiento actual, para que la máquina no salga disparada. Si el cambio de dirección es muy pequeño, mantiene la velocidad para que el movimiento se mantenga suave. Puedes ver más sobre el planificador en el propio código fuente (sólo si eres un programador avanzado)
Soporta muchos tipos de pantallas LCD Puedes conectar muchos tipos de pantallas a tu impresora. La opción más común es la pantalla RepRap Discount. Hay dos versiones de esta pantalla. La que funciona sólo en modo texto, y la que tiene una pantalla más grande en modo gráfico.
Pantalla Reprap Discount Full Graphics
Desde la pantalla LCD puedes usar casi todas las funciones de Marlin. Puedes imprimir desde la tarjeta SD, ajustar la temperatura, acelerar la impresión, apagar los motores, etc.
No necesita un PC para imprimir Marlin puede imprimir desde la tarjeta SD sin problema. No necesitas tener la impresora conectada al ordenador. El proceso normal es generar el fichero gcode en el ordenador, grabarlo en la tarjeta SD, e imprimir desde el lector de la pantalla.
Imprime de forma automática Cuando marlin se inicia, busca el fichero llamado auto0.g y lo ejecuta de forma automática. Puedes tener varios (auto0.g, auto1.g, auto2.g, hasta auto9.g ) y usarlos para precalentar la máquina, limpiar el cabezal, colocar la máquina en la posición iniciar, o tocar una musiquita friki.
Utiliza la EEPROM para guardar la configuración Los micros tienen una memoria interna permanente. Algo así como un disco duro interno. Marlin puede almacenar casi todos los parámetros en esa memoria y leerlos al arrancar, sin tener que volver a compilar el programa cada vez que cambias algo.
Soporta varios tipos de Impresoras 3D A parte de las impresoras 3D más comunes (se llaman cartesianas), Marlin soporta otro tipo de gestión de movimientos.
Delta La impresora tiene 3 ejes que suben y bajan, moviendo una plataforma central. Esta impresora es la más rápida, porque un pequeño movimiento en el motor, produce un movimiento muy rápido en el extrusor. Además, permite impresiones muy altas. Al principio tenían el problema de que eran difíciles de calibrar, pero hoy en día son muy populares .
Delta Rostock
CoreXY Es una forma de mover los ejes XY usando una forma que tensiona las correas. Los motores se sincronizan para mover en el eje X y en el eje Y. La calidad depende mucho de la tensión de las correas.
CoreXY
SCARA (Selective Compliance Assembly Robotic Arm) Esta es una impresora muy rara (yo nunca he visto una). Es un brazo robot con dos motores que van movimiendo el extrusor.
Soporte para arcos en el GCODE Los comandos normales de gcode son líneas rectas. Pero también podemos definir curvas y arcos. Tengo que decir que no lo he visto nunca. En general, los programas aproximan las curvas usando muchas rectas.
Mide la temperatura de forma precisa
Marlin hace muchas mediciones de la temperatura, y te muestra la media. De esta forma, trabaja con la temperatura filtrada, sin ruidos de
medición.
Control AutoTemp Si quieres imprimir a una velocidad más rápida, tienes que subir la temperatura, para que el plástico vaya más fluido. Pero esto puede afectar a la calidad del plástico. Con la función AutoTemp, puedes definir un rango mínimo y máximo. Marlin ajusta la temperatura con la velocidad. Cuando va más lento, usa una temperatura menor , cuidando la calidad del plástico.
Calcula el Autonivelado de la cama caliente Con un sensor capacitivo, la impresora puede hacer varias pruebas en la cama caliente, y detectar posibles curvaturas. Marlin ajusta entonces todo el código para que se adapte a la altura real de la base.
Sensor capacitivo para Autolevel
Por lo que me comenta mucha gente que lo ha probado, el autolevel todavía necesita madurar.
Cómo instalar Marlin paso a paso Voy a explicarte cómo instalar Marlin paso a paso. No hace falta ser un super ingeniero para hacer esto, pero sí que necesitas tener alguna idea de algunos conceptos, como descomprimir ficheros, editar ficheros de texto, y esas cosas.
Para instalar Marlin necesitas:
Instalar el entorno de Arduino Descargar Marlin Configurarlo para tu impresora Compilarlo y grabarlo en tu placa Vamos por partes Lo primero es instalar el programa de Arduino. Esto es muy
1. 2. 3. 4.
sencillo, pero depende si tienes Windows, un Mac, o estás en Linux. Tienes que ir a la página de Arduino oficial, http://arduino.cc/en/main/software, y descargar la versión para tu ordenador. Hay muchos tutoriales en internet. Este vídeo me ha parecido bien explicado, y con una versión reciente del programa para Windows. Cuando tengas esto funcionando, puedes comenzar con el Marlin Para instalar el marlin, tienes que descargar el zip con la última versión desde la web de github: https://github.com/MarlinFirmware/Marlin
Descargarte Marlin de https://github.com/MarlinFirmware/Marlin
Descarga el fichero y descomprime el ZIP completo en una
carpeta. Yo uso una versión de Linux para estas cosas (Arch Linux con Gnome 3). Marlin, como todos los programas, utiliza un sistema de Releases. Esto es, van sacando nuevas versiones cada cierto tiempo. Si tienes algún problema con el software, puedes revisar una versión concreta: https://github.com/MarlinFirmware/Marlin/releases Ahora toca compilar el Marlin dentro del programa de Arduino.
Conecta el Arduino Mega 2560 al puerto USB! Antes de arrancar el programa de Arduino, mi consejo es que tengas la placa conectada al puerto USB. De esta forma, el programa va a detectar qué modelo tienes conectado, y todo va a ser más sencillo. Yo uso una versión de Linux para estas cosas (Arch Linux con Gnome 3). Si no lo has probado, te invito a darle una oportunidad.
Hay una versión muy guapa llamada Antergos que va muy bien. Ahora arranca el programa de Arduino. Vete a Fichero -> Abrir (o File -> Open.. si lo tienes en inglés)
Como en todos los programas, vete a File/Open…
El fichero que tienes que abrir está en la carpeta donde has descomprimido el Marlin. Entra en la carpeta, y verás otra carpeta que se llama Marlin. Dentro está el fichero que buscamos, Marlin.ino
Vete a la carpeta de Marlin, y abre el Marlin.ino
Aquí vas a tener un montón de pestañas. La que nos interesa es la de Configuration.h, que es donde vas a andar tocando para ajustar tu impresora.
Pulsa en la pestaña de Configuration.h
Tienes que decirle al arduino qué placa tienes, para que pueda generar el firmware adecuado a tu modelo. Para la RAMPS + Arduino Mega 2560, pues eso, selecciona el Arduino Mega 2560.
Selecciona la placa Arduino Mega 2560
Ahora sólo queda decirle en qué puerto tienes conectado el Arduino Mega. En las últimas versiones, el programa lo detecta sólo. En Linux no hay problema, pero en Windows a veces hay que instalar drivers especiales (si tienes una versión rara de Arduino)
Selecciona el puerto serie donde está conectada la placa Arduino Mega 2560
Para compilar el Marlin, e instalarlo en la placa, tienes que pulsar el botón Upload
Pulsa el botón de Upload para instalar Marlin
Espera a que te aparezca el mensaje de Done uploading
Marlin Done Uploading
Ya tienes Marlin instalado por primera vez! Ahora toca lo más divertido: la configuración
El fichero Configuration.h
Para cambiar las opciones de Marlin, tienes que editar el fichero Configuration.h a tu gusto. Puedes hacerlo dentro del propio programa de Arduino. Si nunca has programado antes (y menos en C++ o en entorno Arduino), te voy a explicar cómo cambiar las opciones de configuración. En los lenguajes de programación, puedes desactivar líneas. Es como si estuviesen borradas, pero están ahí para que puedas usarlas en el futuro. Cada lenguaje es distinto. En el caso de Marlin tienes que usar la doble barra // al principio de la línea. Linea no comentada // Linea comentada Con esto, Marlin activa o desactiva cada opción de la
configuración. Por ejemplo, esta línea le dice al Marlin que quieres usar la tarjeta de memoria SD: # define SDSUPPORT Asi para desactivar esa opción, tienes que escribir // al principio de la línea //# define SDSUPPORT
La palabra #define es la que importa. Si comentas la línea, esta opción no se activa, y es como si no existiese. Si quitas las dos barras del principio //, entonces la opción está activa.
Además, define puede tener un valor. Por ejemplo, con esta linea defines la temperatura máxima de la cama caliente # define BED_MAXTEMP 150 También podemos poner una fórmula, y asi te haces una idea de dónde viene ese valor. Por ejemplo, quiero que la temperatura de la cama sea 100º más que la temperatura mínima (es un ejemplo, no tiene mucho sentido hacer esto) # define BED_MAXTEMP (BED_MINTEMP+100) Si vas a usar fórmulas en el programa, mi consejo es que siempre pongas unos paréntesis en los números.
Puedes poner condiciones. Por ejemplo, si activas la pantalla LCD, también quieres que se active la tarjeta SD. Para eso existe la palabra #ifdef y #endif (tienen que ir en una línea separada) #ifdef PANTALLA_LCD # define SDSUPPORT #endif
Si no está activada la opción de PANTALLA_LCD, tampoco se activa la opción de SDSUPPORT. Con estas breves nociones, vas a dominar el fichero Configuration.h sin problema.
Configuración Mínima de la impresora 3D
Primer día con la impresora 3D
Voy a resumir las opciones mínimas que tienes que modificar para que la impresora arranque. Es lo mínimo que tienes que ajustar para poder empezar a imprimir.
Tipo de Placa Base Voy a empezar con el parámetro más importante: el modelo de placa que tienes instalada en la impresora. Cuando te descargar el Marlin de la web, viene configurado para la popular RAMPS 1.4 con un extrusor, un ventilador, y la cama caliente En versiones modernas, cada placa tiene su propio fichero. Por ejemplo la RAMPS tiene un fichero que define todos los pines . Cuando compres tu placa, asegúrate de leer la documentación, y buscar si está soportada en Marlin de forma oficial. En general, si te compras un kit, no vas a tener este problema, pero asegúrate antes. Para ver la lista de placas soportadas, tienes que consultar el fichero boards.h
Configurar la RAMPS 1.4
Cuando configuramos la RAMPS, tenemos varias opciones. Depende de si tenemos un extrusor o dos, o si usamos un par de ventiladores de capa, o si vamos a usar la cama caliente.
BOARD_RAMPS_14_EFB : Extrusor en la salida D10, ventilador en la D9, cama caliente en D8 (lo más común) BOARD_RAMPS_14_EEB : Extrusor 0 en D10, extrusor 1 en D9, cama caliente en D8 (o sea, sacrificamos el ventilador por tener un segundo extrusor) BOARD_RAMPS_14_EFF : Extrusor, ventilador 0, ventilador 1 BOARD_RAMPS_14_EEF : Extrusor 0 , extrusor 1 , ventilador
Otras placas conocidas BOARD_SAV_MKI : la SAV MKI de Francisco Malpartida BOARD_RAMBO : Esta es la Rambo Board, BOARD_RUMBA : la Rumba BOARD_BQ_ZUM_MEGA_3D : la placa de BQ para la prusa hephestos
BOARD_SANGUINOLOLU_12 : la Sanguinololu, antigua y de construcción algo cutrilla. BOARD_MELZI : Funciona con la placa que viene con la popular impresora anet a8 (pero no estoy 100% seguro)
Sensor de temperatura Ahora toca decirle a la placa cómo estás midiendo la temperatura de la cama y del extrusor.
El termistor Un termistor es una resistencia que varía con la temperatura. Al variar la resistencia, la placa puede medir los cambios de voltaje, y de ahí, sacar la temperatura.
Termistor EPCOS 100K
Cada termistor es distinto. Los hay más precisos, los hay que son más sensibles a temperaturas altas, los hay más baratos, más resistentes, mejor o peor protegidos, o el mismo termistor con formas variadas. Según se calienta el termistor, la resistencia cambia cada vez menos. A partir de los 190º cambia muy poco, y empieza a ser
dificil de medir. Para más temperatura, sobre los 250º, es recomendable usar un termocouple, que en castellano se llama par termoeléctrico, o termopar. El termopar no funciona tan bien en temperaturas bajas, y necesita un circuito adicional para hacer la medición. El más conocido es el EPCOS 100K, modelo B57540G0104F000, que tiene un margen de error del 1%. Se venden muchos más (de origen dudoso), y la tienda suele indicar el parámetro de marlin que tienes que poner. Los chinos de Aliexpress dicen que te venden un EPCOS 100k, pero vamos, ese termistor no vio una fábrica de EPCOS en su vida. Si te vende un termistor de 100k, date por contento. El número 1, es un termistor de 100k y el que tienes que poner en el 99% de los casos. El número 0 deshabilita el termistor.
Si tienes un modelo raro, o usas un termopar, puedes mirar la tabla de modelos soportados en el propio fichero de configuración (Por ejemplo, la prusa Hephestos 2 usa el termistor 70) Por defecto viene activado el termistor en el extrusor, y desactivado en la cama caliente. Para activar el termistor EPCOS 100k en la cama caliente: #define #define #define #define #define
TEMP_SENSOR_0 1 TEMP_SENSOR_1 0 TEMP_SENSOR_2 0 TEMP_SENSOR_3 0 TEMP_SENSOR_BED 1
Resistencia EndStop Pull Up Ahora toca hablar de los finales de carrera.
EndStop final de carrera
En su versión más sencilla, no es más que un interruptor que
corta/conecta los 5V con GND. Cuando los 5V se conectan con GND, en teoría, va a pasar corriente. Si no hay resistencia, va a pasar infinita corriente. Es lo que llamamos un cortocircuito. Asi que es una buena práctica conectar una resistencia para que limite la corriente, y no se queme nada. Por fortuna, el propio chip del Arduino incluye unas resistencias internas en los pines para limitar esto. Pero esto puede tener unas consecuencias, ya que afecta al circuito.
Marlin nos permite activar o desactivar las resistencias internas del chip. Asi que si usas un botón mecánico sin más, tienes que usar las
resistencias internas que trae el propio arduino. Si usas un final de carrera montado sobre una PCB, ya incluyen las resistencias soldadas en la placa.
Geeetech Mech Endstop con la resistencia pull up marcada
Si usas finales de carrera a pelo: #define ENDSTOPPULLUPS
Si usas finales de carrera montados en una placa, descomenta la linea: //#define ENDSTOPPULLUPS Puedes desactivar el pullup global, y activarlo en cada final de carrera por separado. #ifndef ENDSTOPPULLUPS // #define ENDSTOPPULLUP_XMAX // #define ENDSTOPPULLUP_YMAX // #define ENDSTOPPULLUP_ZMAX // #define ENDSTOPPULLUP_XMIN // #define ENDSTOPPULLUP_YMIN // #define ENDSTOPPULLUP_ZMIN #endif
No puedes hacerlo al revés. O sea, activar todos con ENDSTOPPULLUPS , y desactivar sólo alguno.
Es un poco lioso, y te pueden venir las dudas. Recuerda, o configuras ENDSTOPPULLUPS, o activas cada PULLPUP por separado.
Invertir la lógica del final de carrera Hay dos maneras de detectar si la máquina ha pulsado el final de carrera. Por un lado, el botón está Normalmente abierto (Normally Open en inglés), y cuando pulsas, se conecta una patilla con la otra. Como el interruptor de toda la vida. Por otro lado, puedes configurarlo para que el botón esté siempre conectado, y cuando lo pulsas, se corta el circuito. Esto se llama Normalmente cerrado(Normally Closed en inglés)
Un dibujito que intenta explicar la diferencia entre NO/NC
¿Cuál es mejor? Puedes pensar que la forma más intuitiva es la de normalmente abierto. Que cuando la máquina toque el botón detecte la
señal. Pero hay un problema. Imagínate que tienes la impresora funcionando, y sin querer, con el movimiento y las vibraciones, un cable se desconecta. Si usas finales de carrera normalmente abiertos, cuando los pulses, el circuito va a seguir abierto, (el cable está roto) y la impresora no sabe que has pulsado.
La máquina se mueve hasta el final, el botón no funciona, los motores siguien empujando…
Desastre Si usas finales de carrera normalmente cerrados, en cuanto el cable se desconecta, la impresora deja de funcionar. Por eso, es más seguro usar finales de carrera normalmente
cerrados, NC Los finales de carrera traen 3 patillas. Una tiene una marquita llamada C, o COM, de común. Otra es la patilla NC, y la otra es la patilla NO.
Un cable se conecta a la patilla C, el otro a la patilla NC
Uno de los cables lo tenemos que conectar a la patilla C, de común. El otro cable lo conectamos a la patilla que nos interesa. En este caso NC.
Marlin por defecto utiliza la configuración NC normalmente cerrada. Si quieres usar la configuración NO tienes que invertir la lógica. Para decirle al marlin que tenemos un final de carrera normalmente cerrado, tenemos que asegurarnos que no están invertidos y que INVERTING está a false #define X_MIN_ENDSTOP_INVERTING false #define Y_MIN_ENDSTOP_INVERTING false
#define #define #define #define #define
Z_MIN_ENDSTOP_INVERTING false X_MAX_ENDSTOP_INVERTING false Y_MAX_ENDSTOP_INVERTING false Z_MAX_ENDSTOP_INVERTING false Z_MIN_PROBE_ENDSTOP_INVERTING false
Invertir sentido de giro del motor Cuando conectas los motores, lo normal es enchufar todos los conectores en el mismo sentido. En una impresora tipo Prusa, si le dices que el motor vaya a la derecha, el motor va a la derecha. Si le dices a la Z que suba, el motor sube. Pero en la cama caliente, esto va al revés. Si quieres ir adelante, la
cama tiene que ir hacia atrás. El giro de motor depende de cómo lo conectas a la placa. Si el
motor gira al revés, sólo tienes que girar el conector. Pero si eres como yo, que tienes que tener los cables en orden… un conector al revés te puede quitar el sueño.
Conector del eje Y al revés, rompiendo el orden y el equilibrio en el universo
En Marlin podemos invertir la lógica del motor sin tener que girar el cable. #define #define #define #define #define #define #define
INVERT_X_DIR false INVERT_Y_DIR true INVERT_Z_DIR false INVERT_E0_DIR false INVERT_E1_DIR false INVERT_E2_DIR false INVERT_E3_DIR false
Si te fijas bien, por defecto, Marlin invierte el eje Y. Es lo que necesitas si tu impresora es una prusa, y la cama se mueve en dirección contraria.
Medidas máximas de la impresión Puedes conectar un final de carrera para el mínimo y otro para el máximo. Pero no es necesario. Marlin sólo necesita un punto de referencia para saber dónde empezar. A partir de ahí, puedes decirle el tamaño máximo, y nunca va a permitir movimientos que salgan por fuera. Es lo que se llama, soft limits, o límites por software. Por defecto Marlin define una impresora de 200mm x 200mm x 200mm #define #define #define #define #define #define
X_MIN_POS Y_MIN_POS Z_MIN_POS X_MAX_POS Y_MAX_POS Z_MAX_POS
0 0 0 200 200 200
Si el diseño de la impresora sólo te permite imprimir 175mm en el eje X, puedes ajustarlo con #define X_MAX_POS 175 , y te aseguras que la máquina no intente salir fuera por error. MIN_POS es el valor que toma la máquina cuando hace el Home. Lo normal es que sea cero. La posición mínima puede tener sentido, si por algún motivo tenemos el final de carrera algo desplazado y está dentro de la
cama caliente. Si la cama es de 200 mm x 200 mm, y el eje X está 20 mm dentro de la cama, podemos bajar el máximo, a 180, o subir el mínimo a
20. Si subes el mínimo, te va a ser más sencillo colocar algo en el centro, porque la posición central será 100×100.
Si quitamos 20mm a la cama caliente, y le decimos que mide 180, el centro se desplaza
En cambio, si le decimos que empieza en 20, y que mide 200, el centro coincide
Configuración de los pasos por milímetro Aqui tienes que prestar mucha atención porque es uno de los parámetros más importantes de la impresora. Voy a explicarte de dónde salen estos valores, y cómo calcularlos, paso a paso. Los motores de la impresora avanzan en pasos (por eso se llaman motores paso a paso ). Marlin envía un pulso al driver, y el motor avanza un paso.
Marlin necesita conocer cuantos pulsos tiene que enviar para que la impresora avance un milímetro. Y a partir de ahí, ya puede mover todo con precisón.
Esta conversión de pasos a milímetros tiene que ser perfecta si quieres que la impresora funcione bien. Es un parámetro crítico de configuración.
Empezamos por el motor y los drivers Pasos por cada motor Esto son los pasos que tiene que dar el motor para dar una vuelta completa. Este valor lo conoces al comprar el motor. El valor normal de los motores comunes es de 200 pasos por vuelta. Es muy raro que tengas un motor que no sea de 200. En algunas tiendas están empezando a vender motores de 400 pasos por vuelta, que son más caros y ofrecen más definición de movimiento, pero a costa de una menor velocidad. Te invito a leer el artículo sobre los motores paso a paso para aprender más sobre cómo funciona por dentro estos motores.
No es necesario que el motor avance un paso completo. Puede quedar en una posición intermedia entre un
imán y el siguiente. Los drivers modernos dividen este espacio intermedio en 16 o 32 posiciones intermedias. Esto son los famosos micropasos del driver. Los drivers DRV8825 (los que tienen un chip largo) funcionan a 32
micropasos. Los A4988 (los que tienen el chip cuadrado) funcionan a 16 micropasos como máximo.
Jumpers Si tienes una placa tipo RAMPS puedes ver que debajo de cada driver hay 3 jumpers. Sirven configurar los micropasos del driver. Con los 3 jumpers conectados le dices al driver que quieres funcionar con el máximo de micropasos posibles.
No hay que tocarlos para nada. En algún caso podrías querer cambiarlo, pero es muy raro. Si tienes un motor de 200 pasos por vuelta, y un driver DRV8825 de 32 micropasos: 200 x 32 = 6400 micropasos para dar la vuelta completa
La polea del motor En el caso de una correa dentada, vas a necesitar una polea atornillada al eje del motor. Ahora hay que saber cuánto avanza la correa en cada vuelta. Podrías medir el diámetro de la polea, pero hay otra forma más sencilla usando los dientes de la correa de referencia.
Es más fácil contar los dientes que medir el diámetro de la polea
Hay varios tipos de correas. Las más comunes son las T2.5, y las GT2. Las T2.5 están pensadas para sincronizar poleas (T es de timing) y no están pensadas para movimientos lineales. En teoría podrían causar imperfecciones en la impresión.
Dientes de la correa T2.5
Las GT2 están pensadas para movimientos lineales de máquinas CNC. Las puedes diferenciar porque los dientes son redondeados, en vez de ser rectangulares. De esta forma los dientes encajan perfecto durante todo el giro de la polea.
Dientes de la correa tipo G2
En teoría, las mejores son las GT2, aunque hay mucha gente que me ha comentado que no ha visto diferencia (si has notado alguna mejora cambiando el tipo de correa, deja un comentario al final de post) El número nos indica la distancia entre los dientes. Esto se llama el avance de la correa (en inglés, pitch). GT2 quiere decir que hay una separación de 2mm entre cada diente (y T2.5 que hay 2.5mm entre cada diente). Cuando compramos la polea, nos indica el tipo de correa (GT2/T2.5) y el número de dientes (20 o 16) Así que la cuenta es encilla si sabemos que nuestra polea tiene 20 dientes, y que cada diente avanza 2mm: 20 dientes x 2 mm = 40mm por vuelta Ahora sacamos los pasos por cada milímetro. En este ejemplo, 6400 pasos avanza 40 mm. Sólo hay que hacer la división: 6400 pasos / 40 mm = 160 pasos por mm La fórmula final queda asi:
Pasos por mm = (200 pasos por vuelta * 32 micropasos por cada paso) / ( 20 dientes por vuelta * 2mm por diente) = 160 pasos por mm. Ahora te voy a enseñar el caso de las varillas roscadas/husillos
Husillo para el eje Z
La varilla roscada también tiene un pitch, que nos dice cuánto avanza en cada vuelta. No es fácil de medir ese avance. Pero por suerte, el avance es estándard y viene calibrado.
Las varillas de métrica 5 (M5) tienen un avance de 0.8mm por vuelta. La varilla de métrica 8 (M8) tiene un avance de 1.25mm por
vuelta.
La varilla de 10mm tiene un avance de 1.5mm por vuelta. La fórmula para calcular los pasos por mm, con una varilla de métrica 5 (con el driver DRV8825): Pasos por mm = ( 200 pasos por vuelta * 32 micro pasos por cada paso) / 0.8 mm por vuelta = 8000 pasos por mm. Ahora viene la fórmula para el extrusor Esto depende mucho del tipo de extrusor que tienes, si tiene una rueda reductora o si es un extrusor directo.
Reductora Las reductoras sirven para dar más fuerza a costa de la velocidad, o al revés, para dar velocidad a costa de perder fuerza. Es lo que hace el cambio de marchas del coche.
Si el engranaje del motor es más pequeño que el segundo engranaje, es más potente pero más lento. Si el engranaje del motor es más grande que el segundo engranaje, es más rápido, pero tiene menos fuerza. Para empezar, voy a explicar un extrusor con una reductora (como el típico extrusor de tipo Wade). Cuando el motor gira, tiene un engranaje pequeño que a su vez, empuja una rueda más grande, que a su vez gira un tornillo con unas muescas.
Extrusor Gregs Wade, con unas marcas que le hice para contar los dientes
Necesitamos saber el diámetro de ese tornillo con las muescas. El tornillo tiene un diámetro de 8mm, pero con la muesca, el diámetro se reduce a 7mm. En cada vuelta, el filamento avanza 7 mm * π = unos 22mm aproximados Ahora viene el tema de la reductora. Hay que tener en cuenta los dientes de la rueda pequeña y de la rueda grande. Si una rueda tiene 47 dientes, y la otra tiene 9, pues la relación será de 47/9 = 5.2222
Esto quiere decir que tenemos que dar 5.222 vueltas en el motor, para que el tornillo con las muescas avance 1 vuelta. Con todas estas ideas, la fórmula final se queda: Pasos por mm = (200 pasos por vuelta del motor * 32 micro pasos por cada paso) * (47 dientes de la rueda grande / 9 dientes de la rueda pequeña) / ( 7mm de diámetro efectivo * π) = 1519.839
pasos por mm Este valor es muy distinto en cada modelo de impresora. Hay impresoras que usan reductoras 48/10, hay otras que usan una pieza llamada Mk7 para empujar el filamento, sin reductora (extrusor directo) Si el extrusor es directo, la relación es 1 vuelta de motor = 1 vuelta del tornillo = 1/1 Si tienes un extrusor directo, tienes que consultar con la tienda el diámetro del tornillo. La mayoría de tiendas online te indican los pasos por mm del extrusor que venden, pero si no, contacta con ellos para tener toda la información. Con esta información, edita esta línea del Configuration.h #define DEFAULT_AXIS_STEPS_PER_UNIT { 160, 160, 2000, 1519.839 } Todos estos valores los puedes consultar online en esta página: http://www.prusaprinters.org/calculator/
Calibración final Estos valores que calculamos se basan en que todo es perfecto. Que la distancia de la correa es de 2mm, que la polea tiene 20 dientes separados de forma perfecta, que el tornillo es de 7mm exactos. Pero en la vida real, puede haber alguna pequeña diferencia. Además esto se amplifica, por ejemplo, usando una reductora. Por eso, una vez que tengas la impresora funcionando, mi consejo es imprimir un cubo de calibración, de 5cm , y hacer las correspondientes correcciones. ( descarga uno de 1cm y escálalo por 5 ).
Por ejemplo, si la X os da 160 pasos, y el cubo sale de 520 mm, pues puedes hacer una regla de 3 para corregir los pasos: 160 pasos -> 520mm X pasos -> 500mm
X = (500 * 160) / 520 = 153,84 pasos por mm Con la Z es más dificil, porque la primera capa puede tener alguna mínima variación. Lo que yo hago es poner una marca en el husillo, subirlo 10cm, y repasar la cuenta.
Calibrar los pasos por mm del Extrusor Ahora toca calibrar el extrusor. Te voy a explicar como lo hago yo.
Es muy importante calibrar bien el filamento para la calidad de la impresión. Si tenemos de más, saldrá por las paredes, y si tenemos de menos, tendrás líneas que falta plástico. No tienes porqué gastar filamento. Lo que hago es desatornillar el fusor y dejar que el filamento pueda subir y bajar libre. Haz una muesca en el filamento, para que sea más sencillo medir después. Yo la hago por donde sale el filamento.
Dónde le hago la muesca al filamento, con el fusor desatornillado
Ahora avanza 15cm el filamento, y haz otra muesca en la misma zona del extrusor. Mide cuánto filamento ha salido de verdad.
Mi consejo es que hagas la prueba varias veces antes de cambiar los valores en el marlin. Si al repetir la prueba, te salen valores muy distintos (por ejemplo, una vez se traga 100mm, otra 60mm), entonces tienes un problema con el extrusor. No agarra bien el filamento y resbala. Cuando te salga la prueba varias veces con un valor estable, haz la regla de tres, y actualiza el valor en el Marlin. Ahora puedes imprimir una pieza para ver el resultado. Con el fusor conectado, el motor tiene que hacer mucha fuerza, y pueden aparecer los problemas.
Puede ser que no esté agarrando bien el filamento. El tornillo gira, pero el filamento no avanza. Puede que el driver pierda pasos. El motor hace un ruido raro, como golpes, y a veces no gira. Tienes que girar el potenciómetro del driver para darle más fuerza. Puede que el driver se sobrecaliente. El motor a veces no gira, y si tocas con el dedo el driver del extrusor está muy caliente (tocalo con cuidado, o usa un termómetro). Gira el potenciómetro para reducir la potencia. Voy a explicarte cómo ajustar al detalle los pasos por milímetro usando el método de Triffid Hunter. (el nombre tiene un toque molón) Este método es para ajustarlo al mínimo detalle. Si el extrusor está bien ajustado, en realidad vas a calibrar el diámetro del filamento (Hay bobinas que dicen 1,75mm de diámetro, pero en realidad son de 1,80mm). Asi que anota la bobina con la que
haces la calibración. Para ver si la extrusión es la correcta, y realizar los ajustes finales, tienes que usar este fichero.
Objeto para calibración el filamento
El tamaño de estas escaleras es muy pequeño. Mi consejo es que lo escales por 250% en el Slic3r o en el Cura. Lo que vamos a hacer es imprimirlo, e ir modificando los pasos por mm del extrusor en directo. Lo puedes hacer con la pantalla del Marlin. En la parte de Control/Motion/E steps per mm. Puedes ir cambiando el valor según imprimes la pieza. (también puedes enviar el comando M92 Exxx en el pronterface, si no tienes una pantalla) Imprímelo con el 95% de relleno. Es importante que lo imprimas con la mínima altura de capa con la que vayas a trabajar. Cuanto menos altura de capa, mejor vas a calibrar el extrusor (pero más tiempo vas a perder calibrando). Puedes hacerlo con altura de 0.2mm, y si te ves con ganas, repítelo con 0.1mm Deja las primeras capas para que la altura se estabilice y el filamento esté bien distribuido. Cuando se imprime el relleno, si no puedes ver una separación mínima entre el filamento, reduce los pasos un 0.5%, y déjalo imprimir un par de capas. Si puedes ver esta separación cuando imprimes las partes superiores, aumenta los pasos un 0.5% cada dos capas.
En las capas exteriores, aumentas los pasos para quitar la separación entre cada línea. En las capas interiores reduces pasos para aumentar la separación.
Durante la impresión vas ajustando estos valores, hasta que la parte interna tiene unos mínimos espacios, y la parte superior está bien cerrada. Anota el valor definitivo, y actualiza el fichero Configuration.h con el nuevo valor. Recompilas el marlin y ya te queda para siempre.
Con estos consejos vas a dejar la impresora calibrada al 100%!
Ajustar la velocidad y aceleración máxima Aunque en el Slic3r o en el Cura, le digas que imprima a la velocidad de la luz, tu impresora va a tener una velocidad
máxima. Esto depende la robustez de la impresora y lo bien lubricada que la tengas. Del tipo de materiales, de la correa o del tipo de husillo que estés usando. Los valores que trae Marlin están fuera de la realidad. Son demasiado rápidos. A ver, tiene lógica porque Marlin está pensado para la impresora Ultimaker. Pero para una una Prusa, es demasiado.
Velocidades máximas Con este parámetro puedes configurar la velocidad máxima del eje X,Y,Z,E #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } Para una impresora tipo reprap, 300 es un valor bastante alto. Lo que puedes hacer es ir probando velocidades con el pronterface. Por ejemplo: G0 X170 F75 G0 X10 F75
Con este código, vas a ir a la posición X=170, y volver a la posición 10, a 75 mm/s
Repite la operación, subiendo la velocidad. No apures al máximo. Corres el riesgo de que en una impresión, el motor acabe perdiendo pasos. Déjalo en una velocidad suficiente para que la máquina se mueva suave. Repite el proceso para el eje Y, y para el eje Z. Al limitar la velocidad máxima, vas a evitar que, por una mala configuración del slic3r/cura, la impresora te pierda pasos.
Aceleración máxima Lo mismo ocurre con la aceleración. Cuando le dices a la impresora que se mueva a una velocidad, el marlin no aplica esa velocidad al momento. Si la impresora está parada, el motor no va a poder mover tanto peso en frio. Para arrancar, aplica una aceleración progresiva, hasta alcanzar la velocidad objetivo. Lo mejor de Marlin es que también lo hace cuando termina el movimiento. Marlin sabe cuál es el siguiente movimiento, y calcula la frenada con antelación. De esta forma, el motor no sale disparado, y las esquinas salen bien. Cuando reduces la aceleración, los movimientos son más suaves y la calidad de la impresión mejora. #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } Para una impresora tipo RepRap, estos valores son demasiado rápidos. Mi consejo es comenzar con unos valores de 1200,1200,75,1200 También tenemos que cambiar la aceleración por defecto. Es la que se aplica cuando no se especifica una aceleración en los comandos gcode. #define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves #define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
DEFAULT_ACCELERATION es la aceleración cuando está imprimiendo.
DEFAULT_RETRACT_ACCELERATION es la aceleración para hacer la retracción (cuando la impresora quiere parar de extruir). Este valor tiene que ver con los hilos finos, como pelitos, que quedan en la pieza. DEFAULT_TRAVEL_ACCELERATION es la aceleración cuando la impresora no se está moviendo. El valor por defecto es, una vez más, muy rápido para una impresora tipo reprap. Prueba con 750.
El parámtro JERK Voy a intentar explicar este valor para entender su significado y para qué sirve. Marlin aplica una aceleración/deceleración en los movimientos si el cambio de velocidad es muy brusco. Pero si el cambio no es brusco, no se complica la vida y cambia la velocidad al instante. Por ejemplo, si vas a 100mm/s, y quieres cambiar a 50mm/s, eso es un frenazo brusco. Marlin tiene que ir frenando poco a poco. En cambio, si pasas de 100mm/s a 95mm/s no es un frenazo brusco, y Marlin no frena poco a poco. Esto es, pasa de 100mm/s a 95mm/m al instante, sin pasar por el algorimo de frenado.
JERK es la máxima diferencia de velocidad para que un movimiento considere brusco. Por defecto, es muy alto, y eso hace que los movimientos no vayan todo lo fluido que debería. Mi consejo es bajarlo bastante #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.4 #define DEFAULT_EJERK 0.10
Configuración de la pantalla LCD En versiones antiguas de Marlin, esta parte era un poco lío. Pero en las versiones más recientes, es casi automático.
Sólo tienes que saber el modelo de pantalla que tienes, para poder activarla en la configuración. Como te he aconsejado con la electrónica, es importante que revises que la pantalla está soportada en Marlin. Consulta con la tienda donde la has comprado.
Soporte para la tarjeta SD Si tienes una RAMPS o una placa con lector de tarjetas SD, tienes que activar esta linea. Por defecto viene desactivada. //#define SDSUPPORT Con esto puedes leer y escribir ficheros en la tarjeta. Poca gente lo sabe, Puedes hacer un fichero que se llame auto0.g Cuando enciendes la máquina, Marlin va a ejecutar ese programa de forma automática. Puedes usarlo para que la impresora haga un Home, caliente la cama y el extrusor, y suene una
musiquita
Modelo de la pantalla LCD Esta sección depende mucho de la pantalla que tengas. Las más comunes hoy en día son las pantallas de RepRap Discount. Son baratas y muy comunes. Hay dos modelos.
La más barata de todas, funciona sólo en modo texto. Esta pantalla es muy sencilla y va a funcionar siempre.
Pantalla sólo texto RepRap Discount Smart Controller
//#define REPRAP_DISCOUNT_SMART_CONTROLLER
La pantalla gráfica, que vale un poco más, y es más grande. Al funcionar por píxeles, muestra mucha más información, y de una forma más sencilla de ver.
Pantalla gráfica Reprap Discount Full Graphic Smart Controller
//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER Esta pantalla funciona muy bien, pero para poder usarla tienes que instalar una librería adicional en Arduino. La librería se llama u8glib, y permite dibujar gráficos en pantallas LCD. Para instalarla, es muy sencillo. Vete a esta dirección, y descarga el fichero ZIP con el código fuente. En Arduino tienes que ir a la opción Sketch > Import Library… > Add Library , y seleccionas el ZIP que acabas de descargarte. Con esto, ya tienes el Marlin preparado para mostrar la información por la pantalla.
Los parámetros que te he comentado son los que necesitas para configurar la impresora. Sólo con eso es suficiente para poder imprimir.
Controles de temperatura Voy a explicarte cómo ajustar el algoritmo de control de temperatura. No es realmente necesario, y puedes imprimir piezas de calidad sin problema. Pero es mejor ajustarlos para que la impresora se estabilize más rápido, y para que no arda por accidente.
Temperatura Mínima y Máxima La temperatura mínima sirve para detectar cuando se ha desconectado la corriente del extrusor o de la cama. Puede pasar que por algún motivo, el cable se suelte, la resistencia se rompa o el termistor de desconecte. En ese caso, el motor sigue empujando el plástico sólido, y puede romper algo. #define #define #define #define #define
HEATER_0_MINTEMP HEATER_1_MINTEMP HEATER_2_MINTEMP HEATER_3_MINTEMP BED_MINTEMP 5
5 5 5 5
El valor de 5 está bien, si vives en un sitio normal. Si vives en Siberia, pues tienes que bajarlo. Lo mismo con la temperatura máxima. Si por algún caso, el GCODE pone una temperatura loca, esto te va a proteger. Pero si el termistor está loco, y no lee la temperatura correcta… cuidado. #define HEATER_0_MAXTEMP 275 #define HEATER_1_MAXTEMP 275 #define HEATER_2_MAXTEMP 275 #define HEATER_3_MAXTEMP 275 #define BED_MAXTEMP 150
Parámetros PID Marlin controla la temperatura del extrusor y de la cama caliente con un algoritmo matemático muy conocido, el PID.
Su nombre viene de Proporcional, Integral, derivado. Marlin mide la temperatura del extrusor y de la cama caliente de forma constante, y decide si tiene que encender o apagar la corriente en cada momento. Aqui tienes un vídeo explicativo de un sistema PID muy bueno: Imagina que quieres que el extrusor se caliente hasta una temperatura (por ejemplo, para llegar a los 190º). Marlin mide la diferencia entre la temperatura actual, y la temperatura que quieres conseguir. Esa diferencia es el error que hay que corregir (calentando el extrusor). Si tenemos un error muy grande, le damos caña al extrusor. Si el error es pequeño, le damos un poquito de calor. Esta es la parte proporcional. Pero esto no es suficiente. Si lo hacemos así, lo normal es que se pase de frenada, y supere los 190º… luego hay que esperar a que el extrusor enfríe, y bajaremos de 190º, y volvemos a calentar… enfriar… Lo que ocurre es que la temperatura comienza a oscilar.
PID proporcional oscilando y pasándose de frenada.
Además de la diferencia de temperatura, hay que tener en cuenta el error acumulado. Si el extrusor lleva mucho tiempo sin llegar al objetivo, hay que darle más caña, pero si está dando vueltas por el mismo punto, hay que calmarlo, para que deje de oscilar. Esta es la parte integral, porque en matemáticas (más bien, en cálculo) la suma de muchos valores pequeños se llama integral . Si le damos caña al extrusor, y cambia muy rápido de temperatura, hay que controlarse un poco.
Asi que tenemos que tener en cuenta la velocidad a la que el extrusor se calienta, para que no se pase del objetivo. En cálculo, la velocidad de cambio de un valor se llama derivada. La función de este componente es corregir los problemas de la parte proporcional y la parte integral. El algoritmo de PID necesita unos valores de configuración. Aunque el algoritmo es el mismo, estos valores son distintos para un extrusor, una cama caliente, un horno, una válvula, un drone, etc.
¿Cómo sabemos si los parámetros están bien configurados? Lo primero, decir que no hay unos valores perfectos. Puedes configurarlo para que caliente más rápido, o para que nunca se pase y no caliente de más, o para que sea más estable. A tu gusto.
Voy a contarte cómo yo lo veo para el caso de la impresora 3D. Cuando la impresora está fria, y quieres que se ponga, por ejemplo a 200º, ocurre lo siguiente: Lo primero le metes mucha caña al extrusor, el 100% de la corriente, para que el extrusor comience a calentar. La
temperatura empieza a subir sin control. Pero cuando se acerca a la temperatura objetivo, el LED de la corriente empieza a parpadear (primero de forma ocasional, y luego más rápido). Lo que ocurre es que se reduce la cantidad de corriente que pasa por la resistencia del extrusor. La temperatura sigue subiendo, pero cada vez más despacio. Cuando la temperatura llega a su objetivo, y lo ideal es que no se pase, o se pase apenas un par de grados. Entonces comienza a enfriar y a volver a calentar. La temperatura comienza a oscilar. Lo que quieres es que apenas oscile, y que se mantenga en el punto objetivo, de forma estable, sin variar apenas 1 ó 2 grados. Cada extrusor es distinto, y deberías consultar con el vendedor qué parámetros son los adecuados.
En Marlin tienes 3 parámetros, KP, KI, KD, para configurar el algoritmo.
KP se corresponde a la parte proporcional , y dice cuanta caña hay que darle para corregir el error. Si este valor es muy alto, llegas rápido a la temperatura objetivo, pero te vas a pasar un huevo de frenada. KI es la parte integral , y la idea es reducir la oscilación, cuando llega a la temperatura objetivo. KD es la parte derivada, y se ajusta para que nunca te pases del valor objetivo, y quemes el plástico.
Autotune de los parámetros PID Puedes poner estos parámetros a mano, pero la verdad es que hay que ser un maestro jedi para saber qué poner. Por fortuna, Marlin tiene una función para autocalibrar (PID AUTOTUNE). Asi que no te tienes que preocupar. Lo que hace es probar diferentes parámetros, y ver cómo responde el extrusor. En ese caso, te conectas a la placa por el puerto serie, con un programa como Pronterface, y escribes: M303 E0 S200 C8 Con esto, le decimos a Marlin que realize una prueba sobre el extrusor 0, a una temperatura de 200º, y que pruebe 8 veces. Cuando termina, Marlin imprime por la consola los valores calculados. Si usas pronterface, podrás verlo sin problema. bias: 92 d: 92 min: 196.56 max: 203.75 Ku: 32.59 Tu: 54.92 Clasic PID Kp: 19.56 Ki: 0.71 Kd: 134.26 PID Autotune finished ! Place the Kp, Ki and Kd constants in the configuration.h
La cama es el extrusor -1, asi que tienes que usar: M303 E-1 S60 C8 Con esto vas a probar la cama 8 veces, a una temperatura de 60 grados.
Con estos valores, actualizamos la configuración en marlin. A mí me gusta tener mi propia sección. Así que comento la configuración de Ultimaker (la que viene por defecto), y meto la mía. #define DEFAULT_Kp 19.56 #define DEFAULT_Ki 0.71 #define DEFAULT_Kd 134.26
Control del comando M109 Cuando defines una temperatura para el extrusor puedes usar el comando M109 (o con el comando M190 para la cama). Este comando va a esperar a que la temperatura se estabilice, y no te permite continuar enviando más comandos. Asi que te garantizas que la temperatura esté correcta a partir de este
comando. Cuando el extrusor alcanza la temperatura deseada, el control PID tiende a oscilar (si no lo tenemos bien calibrado).
Con estos parametros puedes configurar el tiempo que Marlin espera para que se estabilice. Si tenemos el PID bien ajustado (con el comando M303), puedes reducirlo, y comenzar a imprimir antes. #define TEMP_RESIDENCY_TIME 10 // (seconds) #define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered “close” to the target one #define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early. // Bed temperature must be close to target for this long before M190 returns success #define TEMP_BED_RESIDENCY_TIME 10 // (seconds) #define TEMP_BED_HYSTERESIS 3 // (degC) range of +/temperatures considered “close” to the target one #define TEMP_BED_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
Con TEMP_RESIDENCY_TIME le dices el tiempo que espera una vez que se alcanza la temperatura para que se estabilize. Si te molesta que la impresora tarde mucho en imprimir, mi consejo es que calibres el PID, y bajes este tiempo. TEMP_HYSTERESIS es el margen que tiene Marlin para considerar que la temperatura está en el rango adecuado. Un valor de 3 quiere decir que si le decimos 190º, considera la temperatura desde 187º hasta 193º como temperaturas válidas, mientras nos estamos estabilizando. Para mí, con un valor de 3 va bien.
TEMP_WINDOW es el margen, en grados, para empezar la estabilización. Si quieres llegar a los 190º, en cuanto llegue a 189º ya empieza a contar los 10 segundos de estabilización. El valor de 1 está bien, pero si el PID calienta rápido y oscila poco, con un valor de 3 ahorramos unos segundos.
Configuración Avanzada Cuando tengas la impresora funcionando, puedes tunerla un poco a tu gusto. Estos parámetros que te voy a contar aqui son opcionales, pero muy recomendables.
Velocidad del puerto serie Con esto ajustamos la velocidad del puerto serie USB, y la velocidad a la que se envían comandos entre el ordenador y la electrónica. #define BAUDRATE 250000 Yo suelo bajar la velocidad a 115200 porque alguna vez he tenido problemas con esto. Depende sobre todo del cable que uses. Si tienes un cable con ferrita, no hay problema, pero con cables normales, no es la primera vez que me falla la comunicación. La verdad que para enviar unas líneas de gcode, 115200 es más que suficiente.
Uso de la EEPROM
Con los comandos GCODE,puedes cambiar casi todos los valores, sin tener que volver a compilar el marlin. //#define EEPROM_SETTINGS Activando este parámetro, Marlin puede leer y escribir los valores de configuración en la memoria permanente del micro. Si usas una pantalla LCD, te van a aparecer unas opciones para guardar la configuración. Puedes probar a cambiar algún valor, si cuando estés contento, lo almacenas. Si no te gusta, reinicias, y
vuelves a empezar.
Nombre de la impresora Si estás usando una pantalla LCD, te recomiendo poner un nombre a la impresora //#define CUSTOM_MACHINE_NAME "3D Printer" Yo les pongo nombres a las impresoras para identificar su configuración. Lo que hago es copiar el marlin en una carpeta para cada impresora, configurar los parámetros y definir este nombre. Cuando vuelvo a mirar el código varias semanas más tarde, para estar seguro, miro el nombre. Si hago un cambio, suelo poner algún tag, como “slow”, o “accel 1000” para saber que he cambiado algo especial.
Número de Extrusores El siguiente parámetro es el número de extrusores. Si te has comprado la primera impresora, lo más normal es que tengas sólo un extrusor. # define EXTRUDERS 1 Con Marlin puedes configurar hasta 4 extrusores como máximo.
Extrusor Dual
A la hora de generar el gcode, el primer extrusor es el 0. Asi que en el GCODE, vas a ver que los comandos ponen E0 para mover el primer extrusor. G0 X100 Y100 Z10 E3 ; muévete a 100,100, con altura 10, y extruye 3mm con el extrusor 3
Velocidad de Homing Cuando buscamos el final de carrera, el motor no debería de ir muy rápido, si no quieres cargarte algo. Pero tampoco puedes ir muy lento si no quieres perder el tiempo. Con este parámetro, puedes ajustar esa velocidad. #define HOMING_FEEDRATE_XY (50*60) #define HOMING_FEEDRATE_Z (4*60) Lo de multiplicarlo por 60 viene de pasar mm por segundo a mm por minuto. Decir 50 mm por segundo es lo mismo que decir
3000 mm por minuto. Para esta opción, Marlin necesita los mm/m, pero es más común hablar de mm/s, y es lo más recomendable. Yo no tocaría este parámetro, a no ser que quieras acelerar un poco el proceso de impresión.