Links
Comment on page

Guía Calibración Impresoras 3D FDM/Filamento

La puesta en marcha de una impresora así como el calibrado preventivo es muy importante para un correcto funcionamiento y precisión de nuestra impresora.
Aunque probablemente muchos de vosotros sepáis como funciona una impresora FDM puede ser instructivo para algunos repasar a grandes rasgos como es su funcionamiento. La siguiente infografía, aunque algo antigua, creemos que refleja de una forma bastante sencilla y clara el funcionamiento general de esta tecnología de impresión 3D:
Por otro lado y dado que en algunas partes de los pasos de calibración mencionaremos algunas partes de nuestras impresoras a continuación os facilitamos un esquema de las partes de una impresora 3D FDM:
Os recordamos que tienes mas guias de ayuda en nuestro bot de Telegram @ThreeDWorkHelpBot
Para realizar los diferentes tests indicados en esta guía es necesario un laminador, os aconsejamos varios, ordenados por nuestro gusto personal, podéis probar varios y usar el que más os guste:
OrcaSlicer
PrusaSlicer
SuperSlicer
Bambu Studio
Cura
IdeaMaker
Lychee FDM
⚠️ OrcaSlicer - es un fork de Bambu Studio con algunas mejoras interesantes... como la compatibilidad incluyendo perfiles de otras máquinas como Ratrig, Voron, Creality, Anycubic, Prusa...
Dado que es un fork de PrusaSlicer comparte muchas opciones y funcionamiento pero con una interfaz reformulada, junto con algunas funciones de SuperSlicer, Cura y otros laminadores... además de incluir algunas funciones centradas en producción interesantes como múltiples platos de impresión, generación de 3mf con todo el contenido, acceso a la interfaz web de la impresora si esta cuenta con ella, etc...
Podemos descargar OrcaSlicer:
Si estáis interesados podéis acceder anuestro grupo de Telegram.
Uno de los laminadores más potentes hoy en día con un flujo de trabajo basado en perfiles que permite un gran control y versatilidad.
Aúnque está especialmente pensado para impresoras Prusa incluye perfiles de impresión para otras impresoras 3D y podemos crear las nuestras propias.
SuperSlicer es un fork de PrusaSlicer que cuenta con muchas funciones extras para controlar más en detalle el laminado.
También cuenta con un menú específico de calibración que es extremadamente útil para realizar de forma sencilla algunos de estos tests.
Al ser un fork de PrusaSlicer mantenido por la comunidad en ocasiones puede no estar alineado con la última versión de PrusaSlicer.
Bambu Studio es el laminador creado, como fork de PrusaSlicer, para las máquinas de Bambu Labs como la X1 o la P1P.
Dado que es un fork de PrusaSlicer comparte muchas opciones y funcionamiento pero con una interfaz reformulada, junto con algunas funciones de SuperSlicer además de incluir algunas funciones centradas en producción interesantes como múltiples platos de impresión, generación de 3mf con todo el contenido, acceso a la interfaz web de la impresora si esta cuenta con ella, etc...
Podemos descargar Bambu Studio:
⚠️ OrcaSlicer - es un fork de Bambu Studio con algunas mejoras interesantes... como la compatibilidad incluyendo perfiles de otras máquinas como Ratrig, Voron, Creality, Anycubic, Prusa...
Si estáis interesados podéis acceder anuestro grupo de Telegram.
Otro laminador clásico con un interfaz muy sencilla y potente en opciones. Si comparamos con PrusaSlicer/Superslicer se puede quedar corto en algunas opciones pero con sus extensiones/plugins se pueden extender.
Aunque Cura esta pensado para máquinas Ultimaker también cuenta con muchos perfiles para otras impresoras.
Os sugerimos añadir este plugin, Calibration Shapes, que permite generar muchos de los tests que se sugieren en esta guía de una forma más sencilla.
Donde vais a disponer de una gran variedad de tests:
Otro laminador que aunque no es muy popular tiene algunas funciones muy interesantes (texturas, corte, etc...)
Su flujo de trabajo recuerda un poco a Simplify3D y puede ser un poco tosco de manejar inicialmente.
Recientemente lanzado Lychee da un aire nuevo a los laminadores aplicando los conocimientos del laminado SLA a FDM. Muy visuel e intuitivo.
Aconsejamos el uso de OrcaSlicer (fork de Bambu Studio) o SuperSlicer (un fork de PrusaSlicer donde integran opciones avanzadas antes de incorporarlas) ya que tiene unas estupendas opciones para generar algunos de los tests de calibración usados en esta guía.

Índice Tests Calibración:

Tenemos organizados por orden lógico los tests de calibración, en cualquier caso os vamos a agrupar estos en diferentes categorías que permitan localizar mejor el test adecuado en nuestro caso:
BÁSICOS
MEDIOS
AVANZADOS
A continuación os vamos a sugerir, por orden, los tests y ajustes que pensamos interesantes para la calibración de nuestra impresora 3D. En todo caso, y aunque está en inglés, os aconsejamos este "cheat sheet" de core-electronics muy visual que nos puede ser de gran utilidad:

1. Ajuste vref/corriente Motores

VREF/corriente es simplemente el voltaje regulado que entregan nuestros drivers al motor. Un ajuste correcto del VREF/corriente nos permitirá una calibración precisa de nuestros motores.
Si nuestro VREF/corriente es muy bajo nuestro motor no tendrá suficiente torque y puede causar la temida pérdida de pasos en forma de pérdida de precisión y el efecto de capas desplazadas en nuestras impresiones. Si por el contrario nuestro VREF es muy alto nuestros motores puedes sobrecalentarse ocasionando efectos similares al punto anterior e incluso hacer fallar los motores o dañarlos.

Cálculo de nuestro VREF óptimo

En el caso que tengamos una maquina comercial y siempre que no modifiquemos sustancialmente su mecánica/cinemática, motores o no tengamos los problemas citados anteriormente (perdida de pasos o sobrecalentamiento/fallo de los motores) no es normalmente necesario realizar este ajuste.
El calculo de VREF depende principalmente de dos factores... el tipo de drivers que usemos y los A soportados por nuestros motores.
Es muy importante que en el caso de cambio de drivers o motores tengamos en cuenta las características de los mismos y las capacidades de los drivers. Como ejemplo revisa la siguiente lista sobre los A soportados por estos tipos de drivers listando algunos a modo de ejemplo:
  • A4988 -> 2A
  • DRV8825 -> 2A
  • TMC2208 -> 1.2A
  • TMC2209 -> 1.7A
Debemos intentar tener en concordancia los A de nuestros motores con las capacidades de nuestros drivers para evitar problemas
Con estos datos y para que sea sencillo el cálculo os aconsejamos el uso de una calculadora online donde indicar los A de vuestro motor y el % de seguridad el cual es aconsejable colocar entre 80-90%, tenéis una buena explicacion en este documento de E3D

Ajustar el VREF en nuestra impresora

Para el ajuste del VREF tenemos dos opciones dependiendo de como nuestros drivers esten instalados/configurados, normalmente tenemos dos modos... modo UART/SPI que es un modo inteligente donde el firmware puede controlar al detalle los ajustes del driver o Standalone/StepDir donde el driver usa una configuración estática:
UART/SPI - Marlin
UART/SPI - Klipper
STANDALONE/StepDir

En modo UART... ajuste recomendable si nuestros drivers/placa lo soportan

El modo UART o modo gestionado dinámico de drivers es el más adecuado para poder aprovechar al máximo nuestros drivers siempre que estos y nuestra placa los soporten y estén configurados en nuestro Marlin.
En el caso de usar nuestra calculadora deberemos usar el valor de la misma marcada en la siguiente captura:
Para ajustar el VREF en este caso es muy sencillo y básicamente tenemos 3 opciones:
  • Usando nuestra pantalla LCD/TFT, en pantallas LCD modo Marlin dispondremos de un menu Configuracion/Avanzado/TMC donde ajustar la corriente antes calculada o simplemente ajustarla a nuestro gusto. Para pantallas TFT depende de cada fabricante en que parte del interfaz dispongan de esta configuración. En cualquier caso es importante salvar a EEPROM una vez hecho el cambio (modo Marlin menú Configuracion/Salvar EEPROM) para evitar que este se pierda al reiniciar la impresora.
  • Mediante gcode usando un cliente terminal como Pronterface/Octoprint o algunas pantallas TFT. Para ello enviaremos el comando M906. M906 X5 Y5 Z5 por ejemplo ajustariá la corriente de los ejes X Y Z a 0.5V (500)... al igual que el punto anterior es importante salvar los cambios en EEPROM con un M500
  • En los ficheros de Marlin, en configuration_adv y dependiendo de nuestros drivers tenemos la configuración... os aconsejamos revisar la documentación de vuestra placa para encontrar donde se ubican exactamente los cambios
En este caso es muy aconsejable realizar un M503 y/o un M122 para verificar que los datos estan correctmente.
Klipper funciona diferente a Marlin en muchos aspectos, en el caso del ajuste de corriente en lugar de usar Vref utiliza RMS (Root Mean Squared) que normalmente se indica en los datasheet de motores como Peak Current Capacity en A.
En el caso de usar nuestra calculadora deberemos usar el valor de la misma marcada en la siguiente captura:
Posteriormente en nuestro printer.cfg, o en un include del mismo si tenemos una configuración modular, localizaremos la sección del driver/eje donde ajustaremos el parámetro run_current.
En el siguiente ejemplo, para un driver TMC2209 en el extrusor, ajustaremos el run_current al valor obtenido:
[tmc2209 extruder]
uart_pin: P0.5
#diag_pin: P1.26
run_current: 0.570

En modo STANDALONE... usando potenciómetro y disponible en la mayoria de drivers aunque a día de hoy no tan aconsejable

Para drivers en STANDALONE depende del driver deberemos medir en unos puntos con nuestro tester/multimetro, a modo de ejemplo podéis consultar la siguiente tabla donde se incluye una descripción de diferentes drivers, sus caracteristicas/configuracion y como medir el VREF:
MUY IMPORTANTE!!! teniendo el tamaño y accesibilidad de los puntos donde medir ir con extremo cuidado, usar un destornillador cerámico para el ajuste del tornillo y girar este en pasos muy muy pequeños.
Es importante al ajustar estos valores realizar un seguimiento de nuestros motores para ver si los valores de vref/run_current son los adecuados para nuestra máquina:
  • En el caso que observemos un calor excesivo de los motores deberemos reducir el valor vref/run_current hasta unos valores que no afecten a la temperatura del motor en exceso. No hay una fórmula mágica pero generalmente si tocando con el dedo no aguantamos el calor del motor es síntoma de exceso de temperatura en el mismo
  • Por otra parte si vemos pérdida de pasos ya sea constante o puntuales que no estén relacionadas con problemas mecánicos deberemos aumentar el valor vref/run_current. Dado que normalmente aconsejamos un 80-90% de seguridad al calcular los valores suele ser el caso más común tener que ajustar al alza los valores vref/run_current pero siempre teniendo en cuenta los límites de nuestro motor y drivers!!!

2. Pasos Extrusor

Una parte crítica en una impresora 3D es el control del filamento extruido. Este proceso no es en un eje de movimiento si no de extrusión así que se aconseja que el test se realice extruyendo filamento por el nozzle.
Marlin
Klipper
Antes de comenzar a imprimir, si... ya hay ganas!!!, tenemos que calibrar los pasos de nuestro extrusor.
  • Con el hotend a la temperatura aconsejada para el material que usemos realizaremos una marca a 120mm de la entrada del extrusor.
Si en lugar de realizar el test extruyendo en caliente queréis hacerlo al "aire"/frio sin extruir deberéis desconectar el extrusor del hotend o desmontar este y usar el comando M301 P1 o S0 para poder extruir en frio.
  • Desde nuestra pantalla o mediante gcode mandaremos extruir 100mm.
  • Después de extruir mediremos desde la entrada del extrusor, donde previamente tomamos como referencia para marcar los 120mm, hasta la marca que hicimos en el primer punto y con ese valor realizaremos la siguiente fórmula (asumiremos que, aunque en un mundo perfecto debería medir 20mm esa distancia, hemos obtenido 19mm): 120mm-19mm= 101mm
  • Ahora calcularemos nuestros nuevos steps utilizando el valor de la siguiente fórmula: (valor_actual_steps*100)/(valorcalculado_medicion_extruido)= nuevo_valor_steps Como ejemplo: (33 * 100)/(101) = 32.673
El ajuste de los pasos los puedes realizar de diferentes formas:
  • desde la pantalla en modo Marlin en Configuración/Avanzado/Steps
  • mediante gcode desde un terminal como Pronterface con M92 Exxx (donde xxx serían los pasos calculados previamente).
Recuerda, si tienes un Marlin cocinado por ti anotar estos valores, y si modificaste por pantalla ir a Configuración/Salvar EEPROM o si lo hiciste por terminal lanzar un M500.
Antes de comenzar a imprimir, si... ya hay ganas!!!, tenemos que calibrar los pasos de nuestro extrusor.
  • Con el hotend a la temperatura aconsejada para el material que usemos realizaremos una marca a 120mm de la entrada del extrusor.
  • Desde Mainsail en Control extruiremos 50mm dos veces (para hacer un total de 100mm extruídos) lo hacemos en dos veces porque por defecto Klipper tiene limitado la distancia máxima de extrusión la cual por otro lado podremos ajustarla si deseamos.
  • Después de extruir mediremos desde la entrada del extrusor, donde previamente tomamos como referencia para marcar los 120mm, hasta la marca que hicimos en el primer punto y con ese valor realizaremos la siguiente fórmula (asumiremos que, aunque en un mundo perfecto debería medir 20mm esa distancia, hemos obtenido 19mm): 120mm-19mm= 101mm
  • Ahora calcularemos nuestro nuevo rotation_distance en la parte del extrusor de nuestro printer.cfg utilizando el valor de la siguiente fórmula: valor_actual_rotationdistance*(valor_realextruído_pasoanterior/valor_solicitadoaextruir_pasoanterior)= nuevo_valor_rotationdistance Como ejemplo: 4.63 * (101/100) = 4.67
A continuación, y para simplificar el proceso podéis encontrar una calculadora donde introducir los valores comentados y obtener vuestro valor.
Puedes acceder a la calculadora E-step/rotation_distance aquí a continuación puedes ver como es:

3. Ajuste PID/MPC

Esta calibración es independiente del resto, dado que no requiere que se hayan reslizado otros tests previamente
Ejemplo de impresora con los valores PID ajustados incorrectamente.
Antes de meternos en lo que es la calibración en sí, sería bueno entender que es el PID/MPC, lo cual básicamente es un algoritmo que ayuda a la máquina a mantener los valores de temperatura deseados tanto en el Nozzle como en la Cama caliente, para ello tiene una serie de valores que ajustan la cantidad de corriente que llega a los calentadores de estos y la varía en función de las lecturas recogidas por los termistores (sensores de temperatura).
En el caso de la cama os aconsejamos ver el siguiente video para entender la importancia de usar o no PID en la cama.
Marlin - PID/MPC
Klipper - PID
En Marlin contamos con tres formas diferentes de ajustar temperaturas:
  • BANG BANG, es el método tradicional que actúa básicamente como un termostato apagando o encendiendo cuando un valor este por encima o debajo del umbral establecido. No suele ser el aconsejable salvo en casos muy específicos como con calentadores accionados por relés mecánicos o si tenemos inductancias como vimos en el video anterior
  • PID, es el más usado y básicamente es un algoritmo que actúa sobre la potencia del calentador para ajustar/mantener la temperatura de nuestros calentadores.
  • MPC, o Model Predictive Temperature Control, disponible desde las versiones 2.1.x es más inteligente y adaptable ya que usa la simulación y aprendizaje para el mantenimiento de nuestra temperatura. Esto añade unas ventajas como una configuración sencilla aportando más estabilidad térmica

PID

Para realizar este ajuste podemos realizarlo de dos formas distintas:
IMPORTANTE!!! Es aconsejable realizar el PID con la ventilación de capa activada al 100%, la cama a la temperatura normal de impresion y la algura de Z a 5mm. En el caso de necesitar el proceso PID varias veces asegurarse que la temperatura del hotend/cama sea la ambiente para obtener valores más precisos.
  • Desde el LCD dentro del menú Temperatura o Configuración/Avanzado
Recordar habilitar en Marlin (configuration.h) las siguientes opciones:
#define PID_EDIT_MENU #define PID_AUTOTUNE_MENU
  • Desde terminal como Pronterface
    • Para realizar el PID del hotend: M303 E0 S200 C8 U
    • Para realizar el PID de la cama: M303 E-1 S60 C8 U
El comando M303 de Marlin tiene los siguientes parámetros:
  • C<número>, le indicamos el número de ciclos PID que queremos que haga. Por defecto hace 5 en el caso que no se especifique aunqe lo ideal es al menos 3. Normalmente un numero entre 8-10 suele ser más preciso
  • E<indice>, le indicamos el índice de nuestros calentadores.
    • Para la cama caliente indicaremos -1
    • Para hotends comenzaremos desde 0 para el primero, 1 para el segundo, ...
  • S<temperatura>, la temperatura objetivo a realizar el PID que os aconsejamos usar la temperatura máxima que uséis con vuestros filamentos
  • U, para que nuestros parámetros se apliquen en EEPROM... si no simplemente los mostrará en el terminal y será necesario guardarlos manualmente
En el caso que no deje realizar el PID de la cama (M303 E-1) es muy probable que no esté habilitado en Marlin (configuration.h): #define PIDTEMPBED
Guardar datos del PID en nuestra EEPROM!!!
Para que los valores obtenidos sean efectivos tenemos que asegurarnos que estos se almacenan en nuestra EEPROM para ser usados por el firmware. Tenemos tres formas de realizar este proceso:
  • directamente durante el proceso de calibración usando el flag U
  • anotando los valores obtenidos y aplicarlos con los gcodes M301 y M304
M301 P19.56 I0.71 D134.26 - hotend M304 P1 I2 D3 - cama
y en cualquier caso un M500 para que estos valores se almacenen en nuestra EEPROM
  • anotando los valores en las fuentes de nuestro Marlin, recordad que en caso que se haga un reset de la EEPROM si estos valores no estaban en nuestras fuentes/firmware compilado desaparecerán!!!, compilando y subiendo nuestro firmware con los nuevos valores... recordad que SIEMPRE que subamos una nueva versión de firmware debemos de realizar al menos un M502 (Factory reset) y un M500 (almacenar datos en EEPROM).
En caso que por protección térmica, nos puede saltar un aviso por pantalla o en raras ocasiones incluso resetear la impresora, no permita hacer el autoPID deshabilitar momentáneamente:
#define THERMAL_PROTECTION_HOTENDS
#define THERMAL_PROTECTION_BED
En el caso de alarmas por protección de temperaturas que no se solucione con un PID se tendrán que variar los parámetros de tiempo e histéresis de dicha protección.

MPC

Como ya os comentamos MPC es una nueva función para el control que tiene en cuenta los siguientes aspectos:
  • el valor de potencia del hotend
  • temperaturas ambientes
  • efecto del ventilador en la temperatura del ambiente
  • temperatura del filamento y su feedrate, entendiendo que por defecto el filamento tiene la misma temperatura que el ambiente
Durante el proceso de calibración Marlin realiza todos los calculos y compara su predicción con la lectura del sensor haciendo diferentes simulaciones para obtener su algoritmo.
Os recordamos que MPC esta actualmente en modo EXPERIMENTAL por lo que puede no ser estable.
Dado el funcionamiento de MPC y siendo mucho más preciso que el PID tambien require de más cálculos por parte de la MCU lo que puede hacer que en electrónicas antiguas o con MCU lentas provoque problemas de rendimiento.
Habilitar MPC es bastante sencillo aunque actualmente solamente se encuentra esta función para el hotend:
  • Nos aseguraremos que NO tenemos habilitado PIDTEMP (Hotend)
  • Habilitaremos MPCTEMP en configuration.h
//#define PIDTEMP // See the PID Tuning Guide at https://reprap.org/wiki/PID_Tuning
#define MPCTEMP // ** EXPERIMENTAL **
  • Configuraremos la potencia de nuestro calentador de hotend, normalmente las máquinas montan de 30W o 40W, en MPC_HEATER_POWER
#define MPC_HEATER_POWER { 40.0f } // (W) Heat cartridge powers.
  • Nos aseguraremos que en MPC_TUNING_POS tenemos unas coordenadas adecuadas para nuestra máquina como las que ya lleva por defecto que son en medio de los ejes X e Y y entre altura de primera capa y 1mm
#define MPC_TUNING_POS { X_CENTER, Y_CENTER, 1.0f } // (mm) M306 Autotuning position, ideally bed center at first layer height.
  • También es interesante habilitar los menús de ajustes y de autotune que aparecerán en la sección Advanced Settings de nuestro display
#define MPC_EDIT_MENU // Add MPC editing to the "Advanced Settings" menu. (~1300 bytes of flash)
#define MPC_AUTOTUNE_MENU // Add MPC auto-tuning to the "Advanced Settings" menu. (~350 bytes of flash)
Con esto ya tenemos la configuración de nuestro firmware, solo tendremos que compilar y aplicarlo a nuestra electrónica.
Una vez ya tenemos todo listo lanzaremos el autotune de MPC ya sea desde la pantalla como os sugeriamos antes o por gcode con el comando M306 T. En nuestro caso os mostramos por gcode:
  • Nos conectaremos desde un terminal a nuestra máquina y lanzaremos el gcode M306 T para hacer el autotune del hotend. El proceso moverá nuestro cabezal de impresión al centro de la cama y cerca de la superficie de la cama. Enfriará el hotend usando el ventilador de capa para conocer el efecto de este en la temperatura ambiente. Calentará el hotend varias veces, a 200ºC, para realizar mediciones. Mantendrá la temperatura y realizará más mediciones durante unos minutos. Con todos los datos realizará los cálculos para nuestra máquina y finalizará el proceso mostrando los valores a ajustar.
MPC Autotune start for E0
Cooling to ambient
Heating to over 200C
Measuring ambient heat-loss at 209.64
MPC Autotune finished! Put the constants below into Configuration.h
MPC_BLOCK_HEAT_CAPACITY 18.42
MPC_SENSOR_RESPONSIVENESS 0.2176
MPC_AMBIENT_XFER_COEFF 0.0664
MPC_AMBIENT_XFER_COEFF_FAN255 0.099
  • Una vez finalizado el proceso guardaremos en la eeprom con un M500 e idealmente anotaremos los valores que nos sufiere el proceso en nuestras fuentes de Marlin.
Klipper con sus comandos/macros extendidos Gcode hacen que el proceso para ajustar el PID sea muy sencillo. Podemos seguir los siguientes pasos para realizarlos:
  • Desde la ventana de CONSOLA lanzaremos los comandos necesarios para realizar el proceso.
  • Primero nos aseguraremos de que nuestros calentadores estén apagados con el comando TURN_OFF_HEATERS y esperaremos a que estos se encuentren a temperatura ambiente.
Aprovechando que estamos en Klipper os sugerimos añadir las siguientes macros a vuestro cfg:
# More information https://3dwork.gitbook.io/3dwork.io/guias-impresion-3d/calibracion_3d#3.-ajuste-pid-mpc
#### PID ####
[gcode_macro PID_EXTRUDER]
description: Extruder temperature calibration / Calibra la temperatura del extrusor.
gcode:
{% set T = params.T|default(195)|int %}
M117 Homing...
G28
M117 Extruder PID calibration...
M106 S255
PID_CALIBRATE HEATER=extruder TARGET={T}
M107
SAVE_CONFIG
[gcode_macro PID_BED]
description: Bed temperature calibration / Calibra la temperatura de la cama.
gcode:
{% set T = params.T|default(45)|int %}
M117 Homing...
G28
M117 Bed PID calibration...
PID_CALIBRATE HEATER=heater_bed TARGET={T}
SAVE_CONFIG
[gcode_macro PID_ALL]
description: Heater and Bed temperature calibration / Calibra la temperatura del extrusor y la cama
gcode:
{% set TE = params.TE|default(195)|int %}
{% set TB = params.TB|default(45)|int %}
M117 Homing...
G28
M117 Extruder PID calibration...
M106 S255
PID_CALIBRATE HEATER=extruder TARGET={TE}
M107
M117 Bed PID calibration...
PID_CALIBRATE HEATER=heater_bed TARGET={TB}
SAVE_CONFIG
Con esto tendremos 3 nuevas macros para lanzar la calibración del extrusor (PID_EXTRUDER), de la cama (PID_BED) o ambas (PID_ALL) automatizando y simplificando el proceso.
Podemos ajustar las temperaturas default del extrusor (195) y cama (45) en la macro a nuestro gusto.
Desde nuestro interfaz web podremos lanzarlas e indicar las temperaturas para el test:
  • Lanzaremos el comando PID_CALIBRATE HEATER=<nombrecalentador> TARGET=<temperatura> donde para nombre_calentador usaremos el nombre asignado al calentador que queramos realizar el PID, normalmente extruder o bed, y en temperatura la temperatura a la cual queramos realizar el PID.
// Ejemplo PID para extrusor, PLA
PID_CALIBRATE HEATER=extruder TARGET=210
// Ejemplo PID para bed, P
PID_CALIBRATE HEATER=heater_bed TARGET=60
En el caso de calibrar el hotend/extrusor es aconsejable colocar el nozzle a unos 5mm de la cama, activar los ventiladores de capa al 100% y calentar la cama a la temperatura normal de impresión. De esta forma realizará el PID en las peores condiciones posibles para asegurarnos un ajuste óptimo.
  • Esperaremos a que el proceso termine, y usaremos SAVE_CONFIG para guardar nuestro nuevo PID
Durante el proceso veremos como varía la gráfica de temperaturas y al finalizar nos muestra los valores PID calculados y la opción de guardarlos con SAVE_CONFIG
Se puede dar el caso que no sea posible realizar el proceso PID por diferentes causas y que este proceso se pare por la protección termal de Klipper.
En esos casos, Y SOLAMENTE PARA REALIZAR EL PID, podemos relajar los valores de control de temperatura.
Para ello normalmente ajustaremos en la sección [verify_heater extruder] o [verify_heater bed], dependiendo del caso, y si no la tenemos la crearemos ajustando el valor de hysteresis a nuestras necesidades:
printer.cfg
### Ejemplo para el extrusor
[verify_heater extruder]
hysteresis: 10
# The maximum temperature difference (in Celsius) to a target
# temperature that is considered in range of the target. This
# controls the max_error range check. It is rare to customize this
# value. The default is 5.
### Ejemplo para la cama
[verify_heater bed]
hysteresis: 10
# The maximum temperature difference (in Celsius) to a target
# temperature that is considered in range of the target. This
# controls the max_error range check. It is rare to customize this
# value. The default is 5.
En otros casos nuestro termistor y electrónica pueden dar lecturas poco fiables con lo que ajustaremos el valor de smooth_time:
### Ejemplo para el hotend
[extruder]
smooth_time: 2.0
# A time value (in seconds) over which temperature measurements will
# be smoothed to reduce the impact of measurement noise. The default
# is 1 seconds.
### Ejemplo para la cama
[heater_bed]
smooth_time: 2.0
# A time value (in seconds) over which temperature measurements will
# be smoothed to reduce the impact of measurement noise. The default
# is 1 seconds.
  • Para asegurarnos que los valores nuevos de PID se aplican es aconsejable reiniciar el firmware de la impresora.

Información extra

A continuación puedes ver información extendida con referencia al PID:
  • Nombres de nuestros calentadores configurados, Si no estas seguro del nombre de tus calentadores ves al fichero de configuración y busca los nombres... normalmente se usa extruder para el hotend y heater_bed para la cama.
  • Log, en caso de tener problemas para calcular el PID es aconsejable activar el log del proceso. Para hacer esto añadiremos WRITEFILE=1 al final de la lina PID_CALIBRATE. Esto creará un fichero de log llamado /tmp/heattest.txt con información detallada del proceso que seguro que nos ayudará a encontrar el problema.
  • Comando PID no funciona, en el caso que el comando de calibración del PID no haga nada deberemos buscar en los ficheros de configuración por la clase PIDCalibrate el cual habilita el comando PID_CALIBRATE.
  • Valores PID no se actualizan, si al hacer el SAVECONFIG no actualiza automáticamente nuestros valores PID podemos añadirlos de forma manual. Abriremos nuestro printer.cfg y buscaremos dichos valores en las secciones de extruder o heater_bed y actualizaremos manualmente a los nuevos valores.
  • PID sin resultados, si no encontramos los valores nuevos del PID en nuestra consola gcode o en la configuración es aconsejable revisar el klippy.log para encontrarlos y ponerlos de forma manual en nuestro printer.cfg.

4. Nivelación de la cama

El nivelado de cama es crítico para poder disponer de una buena base para nuestras impresiones.
Infografía del compañero @BillieRubenMake
Dado que las primeras capas son extremadamente importantes para la adherencia de nuestras piezas es importante disponer de un sistema de nivelación que nos ayude a compensar desviaciones en nuestra máquina:
Marlin
Klipper

Nivelación manual

En Marlin y si no contamos con sensor de nivelación es muy aconsejable activar el nivelado MESH manual, tenéis una guía nivelación MESH aquí, ya que podéis ajustar y solventar problemas en el caso que vuestra cama no esté totalmente plana.
También en Marlin y para el ajuste manual 4 esquinas contamos con una interesante función de tramming (LEVEL_BED_CORNERS) que si disponemos de sensor de nivelación podremos usar nuestro sensor de nivelación como ayuda para el ajuste haciendo que el nivelado sea mucho más preciso.

Nivelación automática

Si disponéis de sensor de nivelación y sois usuarios de Marlin os aconsejamos usar la nivelación UBL, la más potente en Marlin, y que gracias a sus opciones y asistentes nos facilitará enormemente el proceso de nivelación. Si queréis más información la podéis encontrar en nuestra guía UBL.
En el caso de ser necesario ajustar el ZOffset a partir del valor obtenido (en el caso de disponer de sensor de nivelación o MESH como sistema de nivelación) sumaremos el valor de babbystepping a nuestro ZOffset.
Podéis ver una explicación en forma de video aqui
De nuevo en Klipper el funcionamiento es ligeramente diferente pero gracias a sus macros asistidas podemos realizar un nivelado de cama relativamente sencillo:
  • Nivelación manual mediante ajuste de tornillos ya sea manual o asistida por el sensor, tenéis más información en la siguiente guía específica.
  • Mallado de la cama para corrección de desviaciones, podemos revisar esta guía
También contamos con las opciones de Z-Tilt cuando disponemos de dos o más motores en Z y que nos va a permitir alinear nuestros ejes para que estén perfectamente alineados.
Se aconseja realizar el nivelado manual de la cama desde los tornillos y el z-tilt en bucl hasta que ambos apenas requieran correcciones y con los ejes perfectamente a escuadra realizar el mallado de cama.
Podemos verificar el estado de nuestra cama y si disponemos de un sistema de nivelación realizando un test de primeras capas:
SuperSlicer
Cura - Calibration Shapes
Manual
Nuestro laminador favorito también nos permite crear un test de primeras capas en unos cuantos clicks.
Dado que SuperSlicer y PrusaSlicer suelen usar la misma base es muy sencillo el exportar/importar sus perfiles o usando un fichero 3mf
  • Iremos al menú de Calibration donde seleccionaremos Bed/Extruder leveling desde donde se nos abrirá una nueva pantalla con descripción del proceso y pulsar a generar nuestro test de primeras capas
  • Nos va a generar 5 rectángulos con una solapa para retirarlos fácilmente ubicados en las cuatro esquinas y otro central en nuestra cama.
El plugin Calibration Shapes para Cura nos facilita enormemente generar tests de calibración ya que cuenta con casi todos los necesarios para el ajuste de nuestra máquina o perfil de impresión.
En este caso disponen de un test en formato SCAD que podremos parametrizar para nuestra impresora.
Nuestro compañero TeachingTech dispone de un generador online para poder generar un test de primeras capas https://teachingtechyt.github.io/calibration.html#firstlayer
Con unos cuantos clicks y ajustando las opciones a nuestra máquina podremos crear nuestro test a medida.
También podemos usar este test de nivelación o uno similar https://www.thingiverse.com/thing:34558 y usando babystepping ajustar correctamente el nivelado de la cama para una correcta primera capa.

Babystepping... ajuste zoffset durante una impresión

Una función que incorporan la mayoría de los firmware para impresoras 3D es babystepping que básicamente nos permite realizar ajustes en la distancia de Z durante una impresión, normalmente usado en primeras capas.
Normalmente durante el test de primeras capas utilizaremos esta función para ajustar a nuestro gusto el ajuste de estas:
Marlin
Klipper
Desde Marlin, es imprtante que tenéis que tener habilitada esta opción (más información aquí), tenemos diferentes formas de realizar el ajuste:
  • Desde la pantalla (ejemplo para pantalla emulación Marlin, si dispones una táctil deberás revisar donde se encuentra en tu caso la opción) durante la impresión para poder usar Babystepping iremos al menú Tune y seleccionaremos Babystep Z y ajustaremos a nuestro gusto prestando atención al valor de Babystep ya que usaremos este después.
  • Enviando comandos gcode, desde un cliente terminal como Pronterface/Octoprint/TFT, disponemos de los comandos M290 Zx.xx (para pedir que baje Z enviaremos M290 Z-0.0125 o para subir M290 Z0.0125) donde x.xx es la distancia en mm a subir o bajar nuestro eje Z
Klipper también contamos con esta interesante función y tenemos diferentes formas de ajustarlo/usarlo:
  • Pantalla/LCD, dentro del menú Tune encontraremos Offset Z
  • Interfaz web, tendremos en nuestro dashboard un apartado para realizar estos ajustes:
Ejemplo sección babystepping de Mainsail
Ejemplo sección babystepping de Fluidd
  • Consola, utilizando las macro de sistema SET_GCODE_OFFSET Z_ADJUST=x.xx MOVE=1 donde x.xx será la distancia de ajuste Z en mm (por ejemplo para bajar Z utilizaremos SET_GCODE_OFFSET Z_ADJUST=-0.0125 MOVE=1 y para subirlo SET_GCODE_OFFSET Z_ADJUST=0.0125 MOVE=1

5. Ajuste Flujo/Flow

El ajuste de flujo permite ajusta la cantidad de plástico extruído por la impresora. Una correcta calibración del flujo/flow permite solucionar problemas de falta o sobre extrusión además de mejorar los valores de retracción, ayudar a mejorar las esquinas y el efecto costura en nuestras impresiones.
Como paso previo al ajuste de flujo/flow es imprescindible que previamente tengamos correctamente ajustados los pasos de nuestros motores, encontrada la temperatura adecuada para nuestro filamento y el PID.
Un paso previo muy importante para una correcta calibración es realizar una comprobación del diámetro de nuestro filamento. Aunque el filamento que compramos normalmente indique 1,75mm en la realidad depende de la calidad del fabricante que este sea así cuando lo normal seria una desviación de 0.02mm en buenas marcas nos podemos encontrar con desviaciones de hasta/o más del 0.05mm. Para realizar esta comprobación mediremos 5 secciones de filametos con una distancia de unos 10cm en cada una y realizaremos una media.
Una vez tengamos este valor medio para este filamento lo ajustaremos en nuestro perfil de filamento en nuestro fileteador/slicer.
PrusaSlicer/SuperSlicer
Cura
Filament Settings -> Filament -> Diameter
Preferences -> Printers -> your printer -> Machine Settings -> Extruder 1
Como generar un test para comprobar nuestro flow idóneo:
SuperSlicer
OrcaSlicer
Cura - Calibration Shapes
Manual - Cubo hueco
Otra forma menos centrada en la precisión geométrica, que para ello hay otros parámetros que actuaran sobre ella, y más en el acabado final es el test de flujo de SuperSlicer el cual como ya os comentamos dispone de un cómodo menú desde donde poder generar estos tests directamente.
Dado que SuperSlicer y PrusaSlicer suelen usar la misma base es muy sencillo el exportar/importar sus perfiles o usando un fichero 3mf
Aunque es uno de los test, por su simplicidad y por su eficacia que más nos gustan lo ideal sería que los objetos de test sean lo más grandes posibles para poder ver mejor los detalles y desviaciones.
Siempre podemos crear nuestros propios objetos, cubos simples de unas capas de grosor... por ejemplo de 30x30x3mm... y más grandes que los objetos del test predeterminado, y ajustarles a ellos el valor de Extrusion multiplier.
Crearemos tantos de estos cubos como necesitemos y podamos imprimir como objetos
En las opciones del laminador configuraremos:
- Relleno : 30%+
- Top Infill Extrusion Width : 0.4 (en el caso de un nozzle 0.4)
- Bottom Layers : 2
- Minimum Shell Thickness : 0
- Top Layers : 10
- Infill : Monotonic (Filled)
- Minimum Layer Time : 0
- Fan Speed : moderado o alto dependiendo de nuestra maquina
Una vez impreso nos centraremos en las partes centrales y después en los contornos siendo importante no encontrarnos con huecos entre las trazadas y que quede una superficie lo más lisa posible.
  • Iremos al menú de Calibration donde seleccionaremos Filament flow desde donde se nos abrirá una nueva pantalla con descripción del proceso, seleccionar los intervalos de los tests y pulsar a generar nuestro test de flujo
  • Una vez impreso prestaremos atención al acabado de la parte superior de los bloques y al aro que se encuentra en el seleccionando el % que mejor quede.
Es aconsejable realizar un primer test usando 10% como variación en los intervalos y con el valor obtenido ajustar nuestro perfil (Extrusion Multiplier) para generar un segundo test con variaciones del 2% para afinar aún más.
En OrcaSlicer, podemos encontrar un test de flujo que podemos generar en unos pocos clicks:
  • Seleccionamos el perfil de impresora y filamento con el que queremos realizar el test de flujo.
  • Se nos crea un nuevo proyecto con 9 bloques, cada uno con un modificador de flow. Procederemos a laminar e imprimirlo.
  • Una vez impreso examinaremos los diferentes bloques de test para determinar cual es el que tiene una superficie más lisa.
  • Ajustaremos nuestro valor de Flow Ratio, dentro del perfil de filamento, haciendo una regla de 3: FlowRatio_orig*(100+modificador)/100 Si nuestro Flow Ratio original era 0.98 y en nuetro test hemos seleccionado el bloque de +5 el nuevo valor lo calcularemos: 0.98*(100+5)/100= 1.029 -> valor a colocar en Flow Ration
  • Volveremos al menú de calibración pero esta vez lanzaremos el Pass 2. Este proceso es similar al anterior pero en este caso generará 10 bloques con rangos de flow de -9 a 0.
  • Volvemos a imprimir el proyecto y seleccionaremos el bloque con mejor acabado. Teniendo en cuenta el Flow Ratio calculado previamente de 1.029 y seleccionando del nuevo test -6 el nuevo valor de Flow Ratio lo calcularemos de la siguiente forma: 1.029*(100-6)/100= 0.96726
En el caso que tengamos una Bambu Lab X1 o X1C, y para lanzar este test, deberemos desmarcar la opción Flow Calibration
El plugin Calibration Shapes para Cura nos facilita enormemente generar tests de calibración ya que cuenta con casi todos los necesarios para el ajuste de nuestra máquina o perfil de impresión.
Os aconsejamos usar el FlowTower Test que imprimirá una torre de flujo con diferentes valores, podemos parametrizarla a nuestro gusto usando SCAD con este modelo.
  • Una vez cargada nuestra torre de flujo en el laminador seleccionaremos el script de post-procesado FlowTower
  • configuración aconsajable para el test
- Nozzle Size : 0.4
- Layer Height : 0.2
- Initial Layer Height : 0.2
- Z Hop When Retracted : True
- Line Width : 0.4
- Wall Line Count : 3
- Top/Bottom Thickness : 0.8 mm
- Enable Bridge Settings : True
- Use adaptative layers : False
- Support : None
- Print Thin Walls : True
- Flow : 100%
  • Una vez impreso el objetivo es imprimir la parte con forma de pin dentro del cubo del mismo número, cogeremos el que entre sin forzar de mayor valor... en el ejemplo de la imagen el test a partir del 106% son difíciles de insertar/retirar
  • otra forma es la de medir en tres partes del pin, inicio medio y final, anotando los valores y realizando una media... el que más se aproxime a 4mm será el % de flujo adecuado. En el ejemplo a continuación nos indica que el flujo al 100% es el adecuado
Asegúrate de eliminar este script para tu siguiente impresión!!!
Aunque este método está bastante extendido no suele ser el más preciso ya que imprimir 2 o x perímetros no suele ser muy fiable por artefactos como layer wobble provocado por la cinemática, extrusión inconsistente o diámetro del filamento inconsistente.
Este tipo de artefactos van a provocar que las medidas siempre sean superiores a las correctas.
También es importante tener en cuenta la calidad del calibre que usemos, el estado y calidad de nuestro nozzle.
Por último pero no menos importante es el hecho que realizar este tipo de mediciones en un test tan pequeño no va a darnos unas medidas correctas... pequeños errores se transforman en grandes desviaciones.
El siguiente paso es imprimir un cubo "hollow" (hueco), os sugerimos usar este...
...ya que cuenta con ejemplos de practicamente todas las medidas de nozzle que hay y es muy rápido de hacer.
  • Escogeremos de la los diferentes modelos el que coincida con el diámetro de nuestro nozzle
  • Configuraremos los siguientes valores básicos de la impresión:
Altura capa - 0.2mm (para un nozzle de 0.4)
Perimetros - 2
Capas superiores - 0
Capas inferiores - 1
Relleno - 0%
Velocidad - 50 mm/s (puedes adaptarlo a tu maquina)
Flow/Flujo/Multiplicador Extrusion - 1 o 100% dependiendo del fileteador/slicer
  • Una vez impreso mediremos el grosor de las paredes del cubo.
  • Estas deberían medir lo más cercano al doble de la medida del nozzle que tengamos o seleccionamos al hacer el cubo. Es importante no aplicar mucha presión al calibre y realizar la medida en diferentes partes del cubo y en la parte alta del cubo realizando una media de todas las medidas.
  • Con estos valores realizaremos la siguente formula: (A/B)*F= Nuevo valore de flujo/flow A= Medida deseada, para el caso nozzle 0.4 debería de ser 0.8 B= Medida real, media de las diferentes medidas F= Valor de flujo/flow aplicado en el test... en el caso de % si el valor era 100% usaremos 1, 98% seria 0.98...
  • Una vez tenemos el valor nuevo volvemos a repetir el test con el nuevo valor de flujo/flow y volvemos a medir hasta conseguir las medidas más exactas posible.
Una vez tengámos nuestro valor de flujo/flow en nuestro fileteador/slicer lo podemos encontrar en...
PrusaSlicer/SuperSlicer
Bambu Studio/OrcaSlicer
Cura
IdeaMaker
Extrusion Multiplier
Filament settings/Filament/Basic information/Flow ratio
Flow
Template Settings -> Advanced -> Primary Filament Flowrate
Asegúrate que tienes la opción Override Filament Settings marcada.
Ultimas recomendaciones sobre el flujo/flow...
  • A veces es muy difícil obtener unas correctas dimensiones de los muros, dada la naturaleza de la impresión FDM es complicado obtener unos valores exactos y repetibles
  • El test de flujo no es necesario en cada bobina de un mismo tipo/color de filamento pero si seria aconsejable realizarlo en cada tipo y color de filamento para tenerlo como referencia ya que los valores de flow pueden cambiar significativamente sobretodo por tipo de filamento (PLA/PLA+/SPLA/PETG/TPU/ABS/etc...)

6. Torre de temperatura

Las torres de temperaturas nos permiten encontrar la temperatura óptima para un determinado filamento.
Es importante hacer este test con cada bobina que usemos para ajustar o verificar que los valores son los correctos.
Como crear nuestra torre de temperatura:
SuperSlicer
Bambu Studio/OrcaSlicer
Cura - Calibration Shapes
IdeaMaker
Generador Online
Como ya os hemos comentado usando SuperSlicer contamos con un menú dedicado para crear nuestros tests de una forma muy sencilla.
Dado que SuperSlicer y PrusaSlicer suelen usar la misma base es muy sencillo el exportar/importar sus perfiles o usando un fichero 3mf
  • Iremos al menú de Calibration donde seleccionaremos Filament temperature calibration desde donde se nos abrirá una nueva pantalla con descripción del proceso y algunos ajustes para poder generar nuestra torre de temperatura
  1. 1.
    Descripción del test con algunas imágenes de ejemplo
  2. 2.
    Zona importante dado que nos indica que tests deberíamos de tener hechos antes de realizar este
  3. 3.
    Número de tests por debajo de la temperatura actual definida en nuestro perfil de filamento
  4. 4.
    Lo mismo que el anterior pero por encima de la temperatura
  5. 5.
    Aquí indicaremos el salto, por encima o por debajo, de temperatura en cada test. Por ejemplo con 2 saltos por encima y por debajo con un salto de 10 grados tendremos.. -20 -10 0 +10 +20. En el caso de ser un filamento totalmente nuevo hacer saltos en 10 suele ser un test bueno de aproximación siendo aconsejable hacer otro más fino después
  6. 6.
    Desde aquí podremos generar el test
  7. 7.
    Recuerda que si pasas el cursor por encima de las funciones tendrás una descripción de que hacen
  • Una vez todo ajustado y generado el test veremos nuestra torre de temperatura!!! en 4 clicks
  • podemos hacer el laminado y revisar el preview para verificar temperaturas en el
Tal como os hemos comentado al inicio de la guía recientemente hemos probado este nuevo laminador, fork de PrusaSlicer para máquinas Bambu Lab aunque podemos usarlo para otras.
Generación de torre de temperatura asistida (OrcaSlicer)
OrcaSlicer, un fork de Bambu Studio con interesantes añadidos como por ejemplo tests de calibración, incluye un asistente para generar un test de temperatura lo cual nos va a facilitar enormemente el proceso.
Si no tienes disponible el test de temperatura en tu versión de OrcaSlider asegúrate que esta es la última versión.
  • El primer paso será ir al menú Calibration y seleccionar la opción Temperature
  • Nos creará una torre de temperatura basada en perfiles preconfigurados aunque podemos ajustar a nuestro gusto:
Generación de torre de temperatura manual
En este caso usaremos una torre de temperatura más compacta aunque permite testear temperatura, puentes, voladizos, retracciones, etc... podéis encontrar la torre de 5 tests o 10 tests.
Una vez tengamos el STL deberemos de asegurarnos de ajustar algunos parámetros:
Este tipo de test suelen ser aconsejables hacerlos en dos tandas:
  • test de temperatura, el cual lanzaremos asegurandonos que no se active la ventilación de capa
  • test de ventilación, el cual realizaremos a la temperatura óptima obtenida en el paso anterior y variaremos en cada test el porcentaje de ventilación. Normalmente en caso que usemos PLA o similares no sería necesario este test.
  • ventilación, es importante ajustarlas temporalmente dentro de nuestro perfil de filamento y ajustando para que no se active ventilación en las primeras 1000 capas para asegurarnos que no se activa
  • deberemos ajustar nuestro script anterior al cambio de capa (Before Layer Change G-Code donde crearemos us script para ajustar temperatura o ventilación por altura de capas
Temperature Tower - Before layer change G-code
{if layer_z<2.0}M104 S285 ; Temp Tower starting temp
{elsif layer_z<=12.0} M104 S285 ; Temp Tower Temp #1
{elsif layer_z<=22.0} M104 S280 ; Temp Tower Temp #2
{elsif layer_z<=32.0} M104 S275 ; Temp Tower Temp #3
{elsif layer_z<=42.0} M104 S270 ; Temp Tower Temp #4
{elsif layer_z<=52.0} M104 S265 ; Temp Tower Temp #5
{endif}
Fan Tower - Before layer change G-code
{if layer_z<2.0}M106 S0 ; FanTest floor 1 (no fan)
{elsif layer_z<=12.0} M106 S26 ; FanTest floor 2 (10% fan)
{elsif layer_z<=22.0} M106 S51 ; FanTest floor 3 (20% fan)
{elsif layer_z<=32.0} M106 S77 ; FanTest floor 4 (30% fan)
{elsif layer_z<=42.0} M106 S102 ; FanTest floor 5 (40% fan)
{elsif layer_z<=52.0} M106 S128 ; FanTest floor 6 (50% fan)
{elsif layer_z<=62.0} M106 S153 ; FanTest floor 7 (60% fan)
{elsif layer_z<=72.0} M106 S179 ; FanTest floor 8 (70% fan)
{elsif layer_z<=82.0} M106 S204 ; FanTest floor 9 (80% fan)
{elsif layer_z<=92.0} M106 S230 ; FanTest floor 10 (90% fan)
{elsif layer_z<=102.0} M106 S255 ; FanTest floor 11 (100% fan)
{endif}
El plugin Calibration Shapes para Cura nos facilita enormemente generar tests de calibración ya que cuenta con casi todos los necesarios para el ajuste de nuestra máquina o perfil de impresión.
Para generar vuestra torre de temperatura, vamos a usar como ejemplo una para PETG entre 230-260º, es muy sencillo.
  • dentro de las opciones de Post Processing (necesitamos disponer de este plugin) seleccionaremos TempFanTower y ajustaremos los parámetros como veis en la siguiente imagen (si usáis otra torre de temperatura ajustarla a vuestra torre):
Asegúrate de eliminar este script para tu siguiente impresión!!!
Algo que nos gusta de este laminador es que las opciones de configuración por capa son muy visuales.
Cargamos nuestra torre de temperaturas favorita, en esta colección de Printables tenéis algunas, y dentro de las opciones de laminado ajustaremos los rangos de temperatura:
Desde el