Primeros pasos con Klipper
Ajustar nuestro printer.cfg y primeros tests de máquina
En esta guía intentaremos aconsejaros los diferentes pasos iniciales usando Klipper para poner nuestra máquina en marcha.
Para realizar los pasos explicados en esta guía anteriormente vuestra máquina tiene que ser funcional a nivel mecánica/electrónica, instalamos Klipper en vuestro host, se creó/aplicó el firmware Klipper a vuestra electrónica y obtuvimos nuestra cadena de conexión serial para nuestra electrónica... si alguno no lo tienes puedes seguir los links.
Conexión al interfaz web de Klipper
Una vez tenemos nuestro Klipper instalado y este conectado a nuestra red podremos acceder al interfaz web de control.
Para ello, sabiendo la IP de nuestra red asignada a nuestro Klipper, abriremos nuestro navegador favorito y pondremos http://IP_HOST (donde IP_HOST será la IP de nuestra red asignada a nuestro Klipper) y podremos ver el interfaz web para la gestión remota de este:

En ocasiones si se hace una instalación personalizada de estos interfaces estos se montan en un puerto quedando la URL de acceso de la siguiente forma: http://IP_HOST:puerto (donde puerto es el número que se usó o se facilitó durante la instalación personalizada.
Nuestro host no conecta a nuestra red:
Es un problema que puede surgir os damos algunas sugerencias de que mirar.
Si conectamos por WiFi tenemos que tener algunos aspectos en cuenta:
Algunos hosts no se llevan bien con redes mesh y algunas de sus funciones
Al igual que el punto anterior en ocasiones el host solamente puede utilizar redes 2.4GHz y usando WPA-Personal + WPA 2 como método de autenticación
En el caso de conectar por cable de red asegurarse que el cable hace link con nuestro hub/router y verificar que la configuración de red para nuestra red sea la correcta si forzamos una IP en el interfaz o usamos DHCP
Por otro lado, si necesitáis más información podéis conectar a vuestro host utilizando un cable y SSH, una pantalla o un teclado con los siguientes comandos:
dmesgnos va a listar el estado de los diferentes componentes en el arranque del sistema

ifconfig,nos va a proporcionar información de nuestra conexión e interfaces

sudo iw dev, nos va a proporcionar información del estado de nuestros interfaces de red

sudo iw list, nos va a proporcionar una información de tallada de nuestros interfaces

Conexión a SSH
Dependiendo del método elegido para instalar Klipper o si creamos manualmente el firmware Klipper para nuestra MCU (electrónica de la impresora) probablemente vimos que algunos de estos pasos se hacían por "línea de comandos" utilizando SSH para conectarnos a nuestro host (dispositivo donde instalamos Klipper).
Si no ha sido el caso tarde o temprano, más bien esto último, vas a necesitar lanzar comandos en el terminal de Klipper (Linux) dado que algunos procesos van a requerir ser lanzados desde línea de comandos
Para conectarnos por SSH a nuestro host deberemos tener en cuenta:
Es importante que revises tu host para habilitar el servicio SSH para que puedas utilizarlo, normalmente las distribuciones de Klipper como MainsailOS o RatOS ya lo llevan habilitado... si usas otros revisa su documentación para habilitarlo.
disponer de un cliente SSH en o los equipos (ordenadores, tables, teléfonos...) desde donde queramos administrar. En nuestro caso siempre aconsejamos Terminus por ser multiplataforma, sencillo y no tiene coste para el uso de administrar tus máquinas con Klipper. También dispones de otras como Putty.

lo segundo a tener en cuenta es conocer la IP de acceso a nuestro host Klipper que ya vimos en el paso anterior
por último para poder conectar necesitamos conocer el usuario/contraseña que nos va a permitir conectar con nuestro host. A continuación os facilitamos algunos de los usuarios/password por defecto usados en diferentes distribuciones:
MainsailOS
Raspberry Pi
pi/raspberry
Orange Pi
pi/armbian
RatOS
Raspberry Pi
pi/raspberry
Bigtreetech CB1
CB1
biqu/biqu
Si ya tenemos todo lo anterior ya estaremos listos para conectar y verificar nuestra conexión SSH a nuestro host.
Os facilitamos algunos comandos útiles:
ls, permite listar los ficheros de un path o directorio. Podemos añadir parámetros comols -lque nos darán más informacion como el tamaño o permisos.dfodu, permite mostrar la información de uso de nuestro sistema de archivos tenemos opciones comodf -hpara mostrar el espacio de una forma mas entendible,df -anos muestra todo el sistema de ficheros. Muy útil cuando queremos ver el espacio disponible o ver donde se nos va el espacio utilizado.cd, nos va a permitir cambiar de path o directoriocd <nombre_directorio>(podemos comenzar a poner las primeras letras y pulsar el tabulador para ver opciones que coincidan con lo introducido). También podemos volver a un path o directori padre del que nos encontremos concd ..cp y mv, el primero permite hacer una copia o duplicado de un ficherocp <nombre original> <nuevo_nombre>. Con el comando mv podemos mover el fichero pudiendo cambiar el path/directorio y el nombre.nano, es un editor simple de ficherosnano <nombre_fichero>. Una vez dentro de el podemos usarctrl-xpara salir (si modificamos el fichero nos preguntará si queremos guardar los cambios antes de salir) octrl-opara guardar el fichero... podemos ver más en la parte inferior del editor.sudo, por defecto en Linux el usuario no tiene permisos de super administrador o root así que para lanzar según que comandos es necesario lanzarlo, es aconsejable ponerlo antes del comando a lanzar en lugar de solo.tail, nos permite mostrar las últimas lineas de un fichero lo que es ideal para ver logstail <nombre_fichero>chmod, nos permite modificar los permisos de lectura/escritura/ejecución de un archivo o directorio. Linux cada archivo/directorio esta asociado a tres clases de usuarios propietario/grupo/otros. Ejemplochmod 777 printer.cfgcon esto permitimos acceso total acualquier usuario/grupochown, permite cambiar la propiedad de un archivo/directorio/link simbólico a un usuario específicochown pi printer.cfgcambiaria la propiedad deprinter.cfgal usuario pi.
Si queréis tener más datos de otros comandos Linux os aconsejamos revisar el siguiente link con los 40 comandos básicos de Linux que todo usuario debe saber.
printer.cfg ... configuraciones Klipper para nuestra máquina
A día de hoy Klipper cuenta con muchos ejemplos de configuración de impresoras y electrónicas que nos pueden ayudar a disponer de una configuración base para comenzar.
Podéis revisar estos ejemplos aquí desde su Github o por otro lado podréis acceder a ellos usando el interfaz de Klipper (Mainsail, Fluidd u otro) en el apartado de ajuste de configuraciones de máquina accediendo al directorio /config.
La forma más sencilla de manejar nuestro printer.cfg es usando la propia UI:


Una vez localizado el o los ejemplos que necesitemos los copiaremos en nuestro printer.cfg asegurándonos que tenemos el serial id correcto para nuestra/s MCUs que encontramos durante la instalación de Klipper.
Procesado del printer.cfg por parte de Klipper!!!
Klipper procesa la configuración de una forma secuencial, esto quiere decir que si tenemos una sección o parámetros de esta en varios sitios de nuestra configuración la configuración efectiva para Klipper será la última que procese.
Si tenéis una configuración modular o un printer.cfg muy extenso, aconsejable siempre modularizarlo, siempre se pueden crear conflictos de configuraciones así que en caso que algo no funcione como deseamos siempre revisar el log de Klipper donde se podrá encontrar la configuración efectiva que este ha procesado y será un claro indicativo que puede que tengamos duplicada esa sección o parámetro.
Zonas del printer.cfg donde colocar las configuraciones y donde no!!!
Al usar determinadas funciones o asistentes/macros de Klipper que guardan información de configuración de máquina de forma automática nos podemos encontrar hacia el final de nuestro printer.cfg con estos datos.
Es importante que NO pongamos ninguna configuración nuestra dentro o por debajo de la zona #*# <---------------------- SAVE_CONFIG ---------------------->
Secciones a revisar de tu printer.cfg
Si usamos un printer.cfg de algún ejemplo debemos de prestar especil atención a las siguientes secciones antes de continuar con las comprobaciones iniciales:
cadena de conexión o serial id de nuestra MCU, asegurándonos que tenemos el serial id correcto para nuestra/s MCUs que encontramos durante la instalación de Klipper
tipo de termistores definidos para nuestro hotend y cama
configuración de nuestros drivers/steppers, en especial:
posición de los endstops
posición máxima del area de impresión
tipo de driver
nivelacion de cama que trataremos con más detalle más adelante
posición y configuración de nuestro sensor de nivelación o z endstop
En caso de errores de Klipper a la hora de procesar nuestra configuración os aconsejamos revisar la guía de troubleshooting/resolución de problemas ya que os pueden aportar ideas para resolver la mayoría de estos.
Definiciones de nuestra impresora
En la sección [printer] de nuestro printer.cfg deberemos definir los parámetros que defined nuestro tipo de impresora como por ejemplo:
cinemática que usa nuestra impresora
velocidad máxima
aceleraciones máximas
// Ejemplo de configuración de impresora corexy
[printer]
kinematics: corexy
max_velocity: 350
max_accel: 3000
max_z_velocity: 50
max_z_accel: 350
square_corner_velocity: 10.0Otras secciones importantes
Vamos a revisar otras secciones importantes para asegurarnos que estas están correctamente configuradas:
secciones [stepper...] deberemos tener por lo menos position_endstop y position_max que se ajusten a nuestra impresora
en [tmcXXXX stepper...] donde XXXX será e tipo de drivers por ejemplo [TMC2208 stepper_x] indicará que nuestro eje X usará un TMC2208
Tal como indica la propia documentación de Klipper algunas de las propiedades de estas secciones es aconsejables eliminarlas, si has extraído un ejemplo de configuración de Klipper de terceros y basado en configuraciones antiguas es aconsejable revisarlo:
interpolate: True, aunque es una función interesante que el propio driver permita seleccionar dinámica mente el valor de micropasos dependiendo de las necesidades en la práctica esto puede repercutir en pérdida de precisión de ahí que sea aconsejable cambiarlo a interpolate: False
hold_current, otra función que se aconseja deshabilitar/borrar es la de definir un valor de corriente cuando los motores están en modo descanso. Estos cambios de corrientes pueden provocar imprecisiones en su posicionamiento en determinados casos
[stepper_z] deberiamos definir position__max, en algunos casos podemos tener varios Z que iremos añadiendo con Z1 Z2 Z3
[extruder] es la seción de nuestro extrusor y deberemos prestar atención al tipo de termistor definido en sensor__type
[heater__bed] lo mismo que hicimos para el extrusor, revisaremos que el tipo de termistor es el correcto
Comprobaciones iniciales
Una vez ya tenemos nuestro printer.cfg listo revisaremos que al recargar nuestra configuración no nos de ningún error y procederemos a realizar unos tests básicos.
Para ello usaremos principalmente la consola:

Controles de movimientos:

Y otras herramientas que nos facilita el interfaz de Klipper para gestionar nuestra máquina.
Sensor temperaturas
La primera comprobación que debemos realizar es verificar que nuestros termistores están reportando temperatura de forma correcta y estable:

En el apartado de temperaturas de nuestro interfaz Klipper verificaremos que las temperaturas del nozzle y cama están presentes y no fluctúan de forma anormal.
Si vemos que la temperatura comienza a subir nada más encender la impresora procederemos a apagar de forma inmediata la impresora y a revisar el estado de cableado y del MOSFET de nuestra placa.
En el caso de ver lecturas de temperaturas que fluctúan o no son precisas deberemos revisar:
el cableado y estado de nuestro termistor en el caso de fluctuaciones extrañas en las lecturas, sobretodo con la máquina en movimiento
que en nuestro printer.cfg hemos definido correctamente sensor_type que coincida con el tipo/modelo de termistor instalado, normalmente cuando tengamos lecturas extrañas tanto por altas como por bajas
también e nuestro printer.cfg el sensor_pin y revisar que el termistor esta en el conector correcto en el caso de no tener lecturas
Calentadores
Una vez que ya tenemos correctamente nuestras lecturas de temperatura el siguiente paso será verificar que nuestros calentadores funcionan correctamente.
Para ello y desde la parte de temperaturas que ya vimos en el paso anterior:
En la columna Target de nuestro Extruder le pediremos que caliente a 60 grados nuestro extrusor, en unos segundos deberíamos de ver que la gráfica y lecturas de temperatura comienzan a ascender. Una vez llegue a la temperatura y después de unos segundos manteniendola podemos seleccionar en Target Off
Realizaremos el mismo proceso para Heater Bed

En siguientes pasos veremos como realizar un ajuste del PID antes de intentar hacer ningún test de impresión.
Motores
Este test nos permitirá identificar si nuestros motores están conectados a nuestra placa/drivers y que están en la ubicación correcta.
Usaremos el comando STEPPER_BUZZ STEPPER=stepper_x desde la consola donde el valor de STEPPER es el eje que queremos verificar.
El comando STEPPER_BUZZ lanzado sobre uno de los ejes realizará un movimiento oscilante que nos ayudará a identificar que motor está asignado/conectado al eje que queramos comprobar.
Este movimiento se iniciara hacia coordenadas positivas (1mm y en el caso que nuestro endstop se encuentre en MIN/0) y volverá a su posición anterior durante 10 veces.
En el caso que no obtengamos ningún movimiento o este no sea en el sentido deseado:
asegurarnos que el valor de STEPPER es el adecuado para nuestra configuración
verificar que los valores enable_pin y step_pin son los correctos para el pin de nuestra electrónica que controle el driver/motor que falle
si al encender la máquina y sin hacer nada intentamos mover los ejes de forma manual no nos deja porque los motores están activados, o la inversa... si vamos a realizar un movimiento de estos y entonces si que quedan libres pudiendo mover el eje con la mano, probablemente deberemos modificar la lógica de enable_pin añadiendo o eliminando ! al inicio de la definición.
en el caso que el movimiento no sea hacia cordenadas positivas deberemos verificar dir_pin y añadiremos o eliminaremos ! al inicio de la definición del pin para invertir el giro del motor
en el caso que veamos que el movimiento es significativamente mayor o menor a 1 mm deberemos revisar la configuración de nuestro rotation_distance
En cuanto a rotation_distance os aconsejamos que os paséis por la guía de calibración FDM, en concreto por el apartado de pasos ejes ya que contiene información muy interesante de como funciona rotation distance e incluso como compensar de forma adecuada nuestras impresiones dimensionalmente en nuestra impresora cartesiana/CoreXY y Delta.
Otro aspecto importante es el de ajustar el run_current de nuestros motores, aquí tenéis una guia y calculadora para ello.
En cualquier caso os indicamos una forma de calcularlo:
Revisaremos las características de nuestro motor y nos fijaremos en el valor limite de pico de corriente del mismo
Multiplicaremos este valor por 0.707 para determinar el valor máximo de corriente RMS el cual redondearemos en .1.
Por ejemplo usando un motor LDO 42STH130-1684 que su datasheet indica un pico de corriente de 1.68A calcularemos que su runcurrent es... 1.68*0.707=1.1877, lo redondearemos a 1.1A que será el valor que usaremos como run_current: 1.1
Es importante, dado que en muchas ocasiones estos datos del motor no suelen ser fiables del todo, realizar el cálculo de este valor usando un % de seguridad. Entre un 80-90% del valor A puede ser un buen punto de partida para después ajustarlo durante el uso: - en el caso de temperaturas excesivamente altas en el motor (bajar el % de seguridad para hacer el cálculo) - si observamos pérdida de pasos (subir el % de seguridad para hacer el cálculo).
También, si usamos un fichero de configuración de ejemplo y si este es antiguo, es importante eliminar cualquier ajuste the hold_current dado que no es aconsejable su uso.
Es importante tambien saber las limitaciones de nuestros drivers en la entrega sostenida de corriente, por ejemplo la máxima capacidad de un TMC2209 es de unos 1.2A.
Una vez ajustados es importante verificar:
los motores pierden pasos, iremos subiendo el valor en 0.1 hasta encontrar el valor óptimo
los motores se calientan en exceso, bajaremos el valor en 0.1 hasta encontrar el valor óptimo
Os incluimos también la calculadora de nuestros compañero Laureano con diferentes fórmulas que nos ayudarán a ajustar nuestros motores que podéis acceder desde aquí que os puede ser de ayuda para convertir steps de Marlin a Klipper.
En todo caso tal como os aconsejábamos arriba es mejor ir a la guía de calibración FDM, en concreto por el apartado de pasos ejes ya que contiene información muy interesante de como funciona rotation distance e incluso como compensar de forma adecuada nuestras impresiones dimensionalmente en nuestra impresora cartesiana/CoreXY y Delta.
Para verificar que nuestros pasos sean correctos podemos utilizar la macro SET_KINEMATIC_POSITION que se utiliza para diagnóstico/debug en este tipo de situaciones.
El proceso sería el siguiente y os aconsejamos el uso de una regla:
IMPORTANTE!!! aunque ya verificamos motores y finales de carrera es más que aconsejable que estemos delante de la máquina para poder apagarla de emergencia en caso de que algo salga mal durante el proceso.
colocaremos manualmente nuestro cabezal de impresión en la mitad de recorrido de todos los ejes.
lanzaremos el comando SET_KINEMATIC_POSITION X=xxx Y=yyy Z=zzz donde ajustaremos los valores xxx yyy zzz a la mitad del valor del área de impresión que soporte nuestra impresora
verificaremos cada eje desde la consola primero indicando que los movimientos serán relativos al punto actual usando G91 para después ordenar un movimiento de, por ejemplo, 100mm con un G1 X100 F300 donde el valor de X serán los mm a mover el eje X y el F el feedrate en mm/min... realizaremos lo mismo para el restos de ejes : G1 Y100 F300 o G1 Z50 F300 (en el caso de Z os aconsejamos reducir el movimiento para evitar sustos)
con una regla por ejemplo, del tamaño adecuado a los movimientos de test a realizar, mediremos desde el origen del movimiento hasta el final para asegurarnos que están correctos... tampoco es imprescindible que lleguen hasta la micra ya que más adelante ajustaremos fino esto pero si que no veamos que las distancias son sustancialmente menores/mayores a lo solicitado
para evitar cualquier problema del este proceso de check es más que aconsejable, y lo tenéis más adelante en el proceso de homing, hacer un homing de todos los ejes o apagar la impresora totalmente o lanzar gcodes M84/M18 para deshabilitar los motores
En el caso que la dirección o distancia no sean adecuadas revisar de nuevo lo comentado al inicio de esta sección del ajuste de dirección y rotation distance de nuestros ejes de movimiento.
Endstops
El siguente paso imprescindible/básico es la comprobación de nuestros finales de carrera, en este caso para aquellas máquinas que usen sensores físicos, este procedimiento no nos será de ayuda en el caso de usar sensorless.
Desde la consola enviaremos el comando QUERY_ENDSTOPS y deberemos de ver una respuesta como:
Send: QUERY_ENDSTOPS
Recv: x:open y:open z:openDejaremos pulsados todos nuestros finales de carrera y volveremos a lanzar el comando con ellos pulsados:
Send: QUERY_ENDSTOPS
Recv: x:triggered y:triggered z:triggeredEn el caso que tengamos problemas con los estados reportados:
en el caso que sin el endstop activado nos devuelva el estado triggered y con el pulsado open, invertiremos la lógica de Klipper para ese endstop añadiendo o quitando ! delante del pin asignado
endstop_pin: P1.28 -> endstop_pin: !P1.28en el caso que no cambie su estado al ser pulsado deberemos revisar el cableado, el puerto que hemos usado en placa y la definición del endstop sean correctas
Los fiales de carrera o endstops usan un pin de entrada input normalmente. Este tipo de pines pueden ser del tipo pull-up o pull-down.
Aunque normalmente la mayoría de nuestras impresoras usan pull-up dependiendo de nuestra electrónica o endstops para estos pines deberemos de indicar si es pull-up ^ o pull-down ~.
En ocasiones no definir esto de forma correcta puede inplicar que todo este bien pero el estado del endstop no cambie correctamente al estar este activado o no.
Sensorless
Algo que viene siendo muy común y aconsejable es el uso de sensorless si disponemos de una electrónica que lo soporte dado que funciona muy bien, si lo configuramos correctamente, y nos ayuda a aligerar el número de cables y componentes en nuestra máquina.
IMPORTANTE!!!
La función sensorless solamente es aconsejable usarla en ejes X e Y.
Vamos a describir a grandes rasgos las cosas a tener en cuenta para configurar sensorless en Klipper y no morir en el intento 😄
Asegurarnos que a nivel hardware/electrónica tenemos todo de forma correcta:
La funcionalidad sensorless suele venir implementada en drivers TMC pero recuerda que no todos los TMC cuentan con ella, revisa las características de tus drivers antes.
Para que funcione correctamente tu placa ha de disponer en su zócalo de drivers de un pin llamado DIAG. Aunque en algunos tipos de drivers avanzados no es necesario.
Los drivers han de estar en modo UART o SPI configurados siempre dependiendo del modelo usará un tipo de comunicación para habilitar esta función
Normalmente deberemos poner un jumper en la electrónica para que un driver funcione en sensorless, revisa las características de tu electrónica. De no tenerlo revisa las opciones para puentear con cable el pin DIAG con el pin endstop correspondiente. O si como es el caso de las electrónicas SKR 1.4 ya viene por defecto conectado internamente, algo que puede crear problemas en ejes que no se use sensorless y se requiere en ocasiones "mutilar" el pin DIAG del driver ya sea cortando o desoldando este para que no conecte a la eléctronica y cree interferencias.
Asegurate que los endstops o finales de carrera fisicos, si los tenias y en los ejes donde uses sensorless, esten desconectados totalmente de la electrónica ya que van a afectar al funcionamiento de sensorless.
Configuración de steppers en Klipper deberemos tener en cuenta lo siguiente:
Asegurarte que tus drivers están en UART/SPI
Asegurarte que diag_pin está definido en el pin o alias correcto, normalmente suele ser el endstop de ese eje
Ajustar la sensibilidad mediante el valor
driver_SGTHRS, revisa el cuadro y descripción que puedes encontrar a continuación. El valor de sensibilidad va a depender de cada máquina y deberás encontrar el valor correcto para tu caso. Estos valores van desde el valor más bajo donde no detectará ningún cambio en la corriente, por lo que chocará sin parar, hasta el valor máximo en el cual cualquier variación en el consumo de corriente, provocada por cualquier mínima resistencia al movimiento, disparará la señal de final de carrera. Comenzaremos por lanzar un home en el eje X ya sea desde la interfaz web, el menú de nuestra pantalla o desde la consola (G28 X0oG28 Y0en el caso del eje Y). Asegurandonos antes que se encuentra a cierta distancia de los limites del recorrido para que el proceso no falle. Antes de realizar este proceso por favor termina de leer toda esta sección ya que hay ciertas dependencias o ajustes/configuraciones a tener en cuenta antes. Deberemos estar muy atentos por si el ajuste de la sensibilidad no es la adecuada y tenemos que apagar la corriente de la impresora!!!Nos podremos encontrar con dos situaciones:
Que se pare al mover unos mm realizando el proceso de homing, en ese caso reduciremos la sensibilidad y volveremos a realizar el proceso.
Que no pare o que lo haga dando un golpe fuerte, en este caso aumentaremos la sensibilidad y volveremos a realizar el proceso.
Podremos ajustar este valor utilizando la macro
SET_TMC_FIELDindicando enVALUEel valor a utilizar de sensibilidad y enSTEPPERel id/nombre del eje: - (TMC2209/TMC2226)SET_TMC_FIELD STEPPER=stepper_x FIELD=SGTHRS VALUE=255- (TMC2240, TMC21x, TMC51x,TMC26x)SET_TMC_FIELD STEPPER=stepper_x FIELD=sgt VALUE=-64Es aconsejable que los ajustes los hagamos de 10-5 unidades en cada ajuste para encontrar el punto correcto para nuestra máquina. Una vez encontrado el valor haremos lo mismo con el eje Y.Asegurarte que en la sección stepper de tu eje tengas homing_retract_dist a 0
[stepper_x]
...
homing_retract_dist: 0 ## TMC SENSORLESS
[tmc2209 stepper_x]
uart_pin: PC11
tx_pin: PC10
uart_address: 0
diag_pin: ^x_diag_pin ## Definiremos el pin del endstop/sensorless
driver_SGTHRS: 14 ## Ajustaremos la sensibilidadOtro apartado importante es el proceso de homing, el cual lo ideal es hacer un homing_override incluyendo la reducción del voltaje en los motores para que mejore el funcionamiento de sensorless (podéis encontrar un ejemplo muy completo aquí)
Si usamos home_override y tenemos/usamos z_safe_homing Klipper nos mostrará un error de incompatibilidad, lo ideal es comentar o borrar z_safe_homing y asegurarnos que nuestro home_override realiza el homing de Z en una posición segura.
En el ejemplo de home_override de la parte de abajo podéis ver como realiza este en el centro de nuestra cama.
[homing_override]
...
SET_TMC_CURRENT STEPPER=stepper_x CURRENT=0.5
SET_TMC_CURRENT STEPPER=stepper_y CURRENT=0.5
G28También dentro de nuestro homing_override es importante ajustar las aceleraciones ya que pueden crear falsos positivos...
en el proceso de homing_override bajaremos las aceleraciones al inicio y volveremos a dejarlas por defecto una vez finalizado el proceso usando el comando M204 Sxxxx
También es muy aconsejable realizar una pequeña pausa de 2 segundos entre los movimientos de homing para asegurarnos que el proceso funciona bien usando el comando G4 P2000
En el siguiente ejemplo podemos ver un homing para sensorless de forma completa y correcta en los pasos.
En el ejemplo de macro home_override incluída en esta guía usaremos notificaciones para indicar en que paso estamos durante el proceso de homing sensorless. Necesitamos que tu printer.cfg o includes del mismo tengan la sección [respond]:
[respond][homing_override]
axes: x,y
gcode:
# ========================
# INITIAL SETUP BEFORE HOMING
# ========================
M400 # Wait for all previous movements to finish
G90 # Set absolute positioning mode
G0 Z10 F600 # Move Z-axis up by 10mm to avoid collisions
M204 S1000 # Set acceleration to 1000 mm/s² for homing
# ========================
# CHECK HOMING STATUS
# ========================
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
# Display the status of X and Y homing
M117 X Homed: {x_homed} | Y Homed: {y_homed}
RESPOND PREFIX="Homing Status: " MSG="X Homed: {x_homed} | Y Homed: {y_homed}"
G4 P2000 # Pause 2 seconds to allow reading the status
# ========================
# REDUCE STEPPER CURRENT FOR SAFE HOMING
# ========================
M117 Reducing Stepper Current for Homing...
RESPOND PREFIX="Homing Status: " MSG="Reducing stepper current for homing"
SET_TMC_CURRENT STEPPER=stepper_x CURRENT=0.5
SET_TMC_CURRENT STEPPER=stepper_y CURRENT=0.5
# ========================
# HOME X AXIS (IF NOT ALREADY HOMED)
# ========================
{% if not x_homed %}
M117 Homing X Axis...
RESPOND PREFIX="Homing Status: " MSG="Homing X Axis..."
G4 P2000 # Pause 2 seconds before homing
G28 X
G0 X{printer.toolhead.axis_maximum.x / 2} F9000 # Move X to its midpoint
{% else %}
M117 X Already Homed
RESPOND PREFIX="Homing Status: " MSG="X Already Homed"
{% endif %}
# ========================
# HOME Y AXIS (IF NOT ALREADY HOMED)
# ========================
{% if not y_homed %}
M117 Homing Y Axis...
RESPOND PREFIX="Homing Status: " MSG="Homing Y Axis..."
G4 P2000 # Pause 2 seconds before homing
G28 Y
G0 Y{printer.toolhead.axis_maximum.y / 2} F9000 # Move Y to its midpoint
{% else %}
M117 Y Already Homed
RESPOND PREFIX="Homing Status: " MSG="Y Already Homed"
{% endif %}
# ========================
# RESTORE STEPPER CURRENT AFTER HOMING
# ========================
M117 Restoring Stepper Current...
RESPOND PREFIX="Homing Status: " MSG="Restoring stepper current"
# Restore current for TMC2209
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current}
# Uncomment for TMC2130
# SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2130 stepper_x"].run_current}
# SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2130 stepper_y"].run_current}
# Uncomment for TMC5160
# SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc5160 stepper_x"].run_current}
# SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc5160 stepper_y"].run_current}
# ========================
# FINAL Z MOVE & RESET ACCELERATION
# ========================
G0 Z10 F600 # Move Z up by 10mm after homing
M204 S{printer.configfile.config.printer.max_accel} # Restore max acceleration
M117 Homing Completed!
RESPOND PREFIX="Homing Status: " MSG="Homing Completed!"
Nos aseguraremos de indicar que nuestros drivers X Y usen el virtual endstop sensorless
[stepper_x]
rotation_distance: 40
...
endstop_pin: tmc2209_stepper_x:virtual_endstopPor último el otro factor importante es ajustar la velocidad de homing en la definición de nuestros steppers, debemos encontrar una velocidad media que permita detectar sin reducir el rango de sensibilidad. Una velocidad de homing aconsejada es usar el valor de rotation_distance dividido entre 2:
[stepper_x]
rotation_distance: 40
...
endstop_pin: tmc2209_stepper_x:virtual_endstop
homing_retract_dist: 0 ## TMC SENSORLESS
homing_speed: 20 ## TMC SENSORLESS
[tmc2209 stepper_x]
uart_pin: PC11
tx_pin: PC10
uart_address: 0
diag_pin: ^x_diag_pin ## Definiremos el pin del endstop/sensorless
driver_SGTHRS: 14 ## Ajustaremos la sensibilidadSensor de nivelación (PROBE)
Antes de proceder con ninguno de estos tests es aconsejable revisar la guía de sensores de nivelación Klipper donde encontraréis información más detallada sobre estos.
Con el cabezal de impresora en el centro de la cama usaremos el comando QUERY_PROBE en este caso para verificar el estado de nuestro sensor, aplicaremos las mismas soluciones dependiendo de la repuesta de estado que usamos en el punto anterior.
Prueba de precisión del sensor de nivelación (PROBE)
Con la cama y el hotend fríos (por ahora) podemos realizar un test de precisión lanzando el comando PROBE_ACCURACY.
Este test va a realizar 10 lecturas para comprobar la desviación de cada una de esas lecturas:
Send: PROBE_ACCURACY
Recv: // PROBE_ACCURACY at X:125.000 Y:125.000 Z:7.173 (samples=10 retract=2.000 speed=2.0
Send: M105
Recv: // probe at 125.000,125.000 is z=4.975000
Recv: // probe at 125.000,125.000 is z=4.960000
Recv: // probe at 125.000,125.000 is z=4.955000
Recv: // probe at 125.000,125.000 is z=4.952500
Recv: // probe at 125.000,125.000 is z=4.950000
Recv: // probe at 125.000,125.000 is z=4.947500
Recv: // probe at 125.000,125.000 is z=4.942500
Recv: // probe at 125.000,125.000 is z=4.937500
Recv: // probe at 125.000,125.000 is z=4.937500
Recv: // probe at 125.000,125.000 is z=4.932500
Recv: // probe accuracy results: maximum 4.975000, minimum 4.932500, range 0.042500, average 4.949000, median 4.948750,
standard deviation 0.011948Otro tema importante en referencia a los endstops es la correcta definición para indicar a Klipper donde se encuentran para realizar el proceso de homing correctamente.
Cada eje (X,Y,Z) en Klipper tiene una posición mínima (position_min) y posición máxima (position_max), además para cada uno de ellos tenemos que definir una posición del endstop (position_endstop) ya sea físico o virtual para definir el punto de referencia (home) para a partir de ahí ubicar la posición de la máquina.

Suele ser lo más común y es hacer el homing en las coordenadas 0:
[stepper_x]
endstop_pin: ^!PC0
position_endstop: 0
position_max: 220
homing_speed: 50En este caso:
El eje X tiene su endstop al inicio del recorrido (izquierda).
Cuando hace
G28 X, va hacia el lado negativo hasta pulsar el switch.Luego, la posición 0 se define ahí.
Puede moverse desde
0hasta220 mm.
Determinadas impresoras hacen el homing en la posicion máxima del recorrido de la máquina:
[stepper_y]
endstop_pin: ^!PC1
position_endstop: 250
position_min: 0
position_max: 250
homing_positive_dir: trueEn este caso:
El endstop está en el extremo máximo del recorrido (250 mm).
Al hacer
G28 Y, el eje se mueve en dirección positiva.Cuando toca el endstop, se fija la posición
Y=250.El área de trabajo válida va de
0a250.
Cómo sabe Klipper hacia donde moverse?
Si
position_endstop= 0 o menor queposition_max/2→ se asume que el endstop está en el mínimo, y Klipper se moverá en dirección negativa.Si
position_endstop= igual aposition_max→ el homing se hará en dirección positiva, a menos que lo fuerces conhoming_positive_dir: true.
Errores comunes al definir los endstops o dirección de movimientos:
❌ Homing en dirección equivocada → usar
!delante dedir_pino cambiarhoming_positive_dir.❌ Posiciones negativas después del homing →
position_endstopmal definido.❌ Movimiento fuera del área → límites
position_min/position_maxincorrectos.
TESTS BÁSICOS
Ahora que ya tenemos nuestra máquina y configuración de Klipper correctamente ajustada para por lo menos poder usar su cinemática y sistema de extrusión os aconsejamos realizar los siguientes pasos:
HOMING
Una vez verificado que nuestros motores van en las direcciones correctas y los finales de carrera (endstops) funcionan correctamente ya podemos iniciar con más seguridad el proceso de homing.
Simplificando, el homing es el proceso por el cual nuestra máquina permite ubicar el punto de origen de sus coordenadas para a partir de este poder realizar los movimientos dentro de su área de movimiento o impresión.
Básicamente el proceso mueve los motores para encontrar el punto de activación de los finales de carrera en cada eje y a partir de ahí ya poder establecer su ubicación y límites de movimiento definidos en nuestra configuración.
Para verificar el proceso de home en cada eje:
IMPORTANTE!!! aunque ya verificamos motores y finales de carrera es más que aconsejable que estemos delante de la máquina para poder apagarla de emergencia en caso de que algo salga mal durante el proceso.
Comenzaremos haciendo el home del eje X, podemos hacer esto de diferentes formas ya sea mediante el interfaz web (siguiente captura), desde la pantalla de la impresora/host, o desde la propia consola lanzando el comando
G28 X

Haremos lo mismo para nuestro eje Y, desde el interfaz web, pantalla o desde consola con
G28 YPor último haremos lo mismo con el eje Z, desde el interfaz web, pantalla o desde la consola con
G28 Z
En el caso que algo no funcione según lo esperado es aconsejable volver a revisar el apartado de comprobación de motores y endstops de nuevo para verificar que no se nos pasó nada por alto.
NIVELACIÓN CAMA
Antes de comenzar a fundir filamento, es aconsejable asegurarnos que nuestro área de impresión esté lista para poder imprimir cualquier test necesario para el ajuste de la máquina.

Para ello os aconsejamos seguir las siguientes guías específicas, en el caso que apliquen a nuestra máquina, para tener nuestra cama correctamente nivelada:
Nivelado manual, disponemos de diferentes asistentes en Klipper para ayudarnos en el ajuste manual (típicas ruedas de ajuste) ya sea con o sin sensor... este último siempre es aconsejable ya que además de facilitar el proceso lo hará más preciso.
Nivelación del gantry (o z-tilt), en el caso que nuestra máquina disponga de 2 o más motores (en drivers independientes) en nuestro eje Z podemos usar esta función que nos va a permitir alinear correctamente nuestro gantry de una forma automatizada y precisa.
Mallado de cama, podremos generar una tabla o malla de desfases en nuestra cama para que el sistema pueda compensar desviaciones de nuestra mecánica o cinemática... de nuevo, aunque se puede hacer un mallado de forma manual, es aconsejable el uso de un sensor de nivelación
PID
El PID, Proportional Integral Derivative, es un algoritmo que nos va a permitir que el proceso de calentado de nuestra cama o hotend sea consistente (suele afectar a la calidad de impresión) y más eficiente.

El ajuste del PID se realiza de uns forma sencilla mediante macros de sistema, que podemos incluir en propias tal como veréis en la guía sugerida para automatizar el proceso, y realiza unos tests usando la temperatura del material que normalmente usemos. Por ejemplo si normalmente usamos PLA a 210º (hotend) y 45º (cama) usaremos estos valores para realizar el proceso de ajuste del PID. En el caso que usemos diferentes materiales podemos usar una temperatura en medio del rango de dichos materiales o realizar los tests en el peor de los casos con el material que use más altas temperaturas.
Z-OFFSET
En el caso que usemos un sensor nivelación en nuestra máquina es importante, además de su configuración de sensor de nivelación en Klipper que podéis encontrar en la siguiente guía, el ajuste de su z-offset.
El z-offset es la distancia entre el nozzle y el punto en que se activa el sensor, en la siguiente imágen tenéis un ejemplo, y es crucial ajustar este z-offset de forma correcta dado que la calidad y fiabilidad de vuestras impresiones van a depender del correcto ajuste... así que te aconsejamos que realices el proceso sin prisas!!

Podéis encontrar el proceso de ajuste de z-offset en la siguiente guía.
E-STEPS (rotation_distance)
El siguiente paso aconsejable es ajustar nuestra configuración de Klipper para encontrar el valor apropiado de rotation_distance para nuestra máquina y filamento, que en ocasiones pueden diferir bastante con lo que tengamos en las configuraciones de ejemplo de Klipper o terceros.

Podéis encontrar el proceso con detalle en la siguiente guía de ajuste de e-steps. No os preocupéis en el caso que uséis diferentes tipos de filamentos, normalmente ajustaremos los e-steps para el material que uséis normalmente y para el resto lo podéis ajustar con test de flujo en cada uno de ellos y ajustarlo en vuestro laminador.
SLICER (laminador)
Antes de comenzar a realizar tests que requieran generar piezas de tests usando un laminador es importante seleccionar aquel que se adecue a nuestras necesidades/conocimientos, idealmente que disponga de soporte Klipper nativo y si este dispone de tests de calibración integrados mejor.
Nuestro laminador favorito actualmente es OrcaSlicer ya que incorpora soporte a Klipper, incluye funciones y mejoras de otros laminadores (como Bambu Studio del cual es un fork basado en PrusaSlicer pero con un cambio de interfaz y flujo de trabajo que nos encanta, SuperSlicer el cual parece que su desarrollo a día de hoy está parado pero que por su número de ajustes en el laminado y generador de tests de calibración era una delicia, PrusaSlicer que continúa siendo un referente hoy en día en cuanto a funciones y soporte, y por último Cura que a día de hoy pese a tener grandes funciones su soporte para Klipper requiere de ciertos ajustes extras).
Os aconsejamos revisar nuestra guía de laminadores ya que a parte de configurar correctamente ciertos parámetros es muy importante como adaptar este a las macros de Klipper en especial para el START y END scripts.
INPUT SHAPER
Con Klipper podemos llegar, normalmente, a imprimir a más velocidad y aceleraciones que con otros sistemas/firmwares 3D lo cual puede provocar llevar a límite a nuestra máquina afectando en la calidad de nuestras impresiones creando un efecto de olas también llamado ghosting.

Klipper cuenta con Input Shaper como función para eliminar/disminuir/minimizar este efecto que tenéis explicado con más detalle aquí.
El proceso de Input Shaper podremos realizarlo de varias formas:
automático usando un acelerómetro... lo más aconsejable, cómodo y preciso
de forma manual... calculando de forma manual el efecto de las vibraciones en una pieza de test
Dado que es un ajuste clave para la calidad final de nuestras piezas os aconsejamos realizar con paciencia el proceso!!!
SKEW
La corrección skew nos va a permitir compensar un descuadre provocado por nuestra mecánica o chasis que pueden original piezas geométricamente imperfectas.
Dado que son descuadres mecánicos normalmente por un ensamblado de la máquina incorrecto o por falta de un correcto mantenimiento os aconsejamos siempre intentar corregir estos físicamente y solo recurrir a la corrección por software en última instancia.
La corrección skew por el sistema va a hacer que este realice pequeños ajustes en los movimientos de nuestro cabezal para asegurar que compensa esos desfases de nuestra mecánica.

El test básicamente consta de la impresión de una pieza de test y añadir configuración en nuestro fichero printer.cfg de Klipper tal como tenéis explicado en nuestra guía de corrección de skew para Klipper utilizando un método simple para máquinas cartesianas.
Además disponemos de otro más completo, compatible con Marlin y compatible con máquinas delta, en nuestra guia de calibración FDM.
TESTS FILAMENTOS
Una vez ya tenemos realizados los tests básicos es importante conocer aquellos ajustes que son específicos según el filamento que usemos en nuestra máquina y que van a requerir de unos tests específicos:
TORRE TEMPERATURA
Cada material y tipo pueden y van a tener unas propiedades diferentes siendo una de ellas la temperatura óptima de fusión. A esta van a influir otros aspectos como nuestro tipo de hotend, las condiciones ambientales y de estado del filamento... etc.
Para encontrar el valor óptimo para nuestra máquina, material y condiciones de impresión normalmente realizaremos un test de temperaturas para encontrar la ideal para nuestro caso.

Podéis encontrar la guía para realizar una torre de temperatura aquí. Estos tests también nos permiten ver como afecta la temperatura en puentes, voladizos, retracciones, etc...
PRESSURE ADVANCE (PA)
Otro ajuste que depende del tipo de filamento es el Pressure Advance o PA. El PA permite controlar el flujo de extrusión para disminuir los artefactos en determinados movimientos como cambios de dirección o aceleraciones.

Para realizar los tests puedes seguir la siguiente guía de PA aquí.
EXTRUSION MULTIPLIER (flujo)
En pasos anteriores cuando os comentamos el ajuste de los e-steps de vuestra máquina ya os adelantamos que dependiendo del tipo de filamento puede ser necesario ajustar el EM (Extrusion Multiplier) de este en nuestro laminador.

Para realizar el test de EM os aconsejamos seguir la siguiente guía donde tenéis más detalle del proceso.
MEJORAS KLIPPER
Klipper es un firmware que por su arquitectura es modular y permite que tanto sus componentes tradicionales puedan incorporar mejoras como que se puedan añadir mejoras de terceros. A continuación os sugerimos algunas interesantes.
3DWORK KLIPPER BUNDLE
Desde 3Dwork hemos recopilado y ajustando un conjunto de macros, configuraciones de máquinas y electrónicas, así como otras herramientas para una gestión sencilla y potente de Klipper.
Gran parte de este paquete está basado en RatOS mejorando las partes que creemos interesantes, así como otras aportaciones de la comunidad.
Si queréis más información de sus funciones y como instalarlo pasaros por la siguiente guía.
M600 (cambio filamentos)
Dado que en Klipper muchas de las funciones especiales como un cambio de filamentos se realizan mediante macros y, aunque puedes encontrar diferentes opciones en Internet, os sugerimos revisar la que solemos utilizar en nuestras máquinas y sugerimos en nuestros canales de Telegram.
Dado que ahora nos centramos en el 3Dwork Klipper Bundle que incluye M600 y muchas más macros interesantes te aconsejamos usar las de este.
LAYER PAUSE (macro para pausado avanzado)
Al igual que el M600 podemos crear macros que permitan realizar una pausa en una capa de forma programada si se nos olvidó realizar ese ajuste en nuestro laminador.
Si os parece de utilidad podéis encontrar información de como implementarla aqui.
EXCLUDE OBJECTS
Una función muy útil para nuestro Klipper es Exclude Objects, con ella podemos cancelar/omitir un objeto de nuestra impresión en caso de que tenga algún problema, ponga en peligro el conjunto de la impresión o que lo incluyésemos por equivocación.
En la siguiente guía sobre Exclude Objects podéis encontrar información para habilitarlo en vuestras máquinas.
MALLADO CAMA INTELIGENTE
Un excelente añadido si contamos con sensor de nivelación que nos va a permitir poder realizar una malla de nivelación del área de la pieza que imprimamos haciendo esto que nuestros ajustes de desfases en nuestra cama sean más precisos.
Podéis encontrar más información aqui.
TELEGRAM (control remoto)
En Klipper contamos con diferentes integraciones para poder controlarlo desde fuera de nuestra red. En nuestro caso por su simplicidad y utilizar nuestro IM favorito (Telegram) solemos usar este.
Podéis encontrar más información aqui.
TESTS AVANZADOS
Si hemos llegado a este paso nuestra máquina probablemente esté ajustada lo suficiente como para comenzar a imprimir con una buena calidad... pero seguro que podemos sacarle un punto extra para aprovecharla!!!
MAX SPEED (velocidad máxima)
Gracias a las bondades de Klipper podemos realizar fácilmente tests donde podremos encontrar la velocidad máxima de nuestra máquina.
Estos tests constan de dos partes:
tests de cinemática... donde encontraremos la máxima velocidad de movimientos sin pérdida de pasos
tests de extrusión volumétrica... donde encontraremos la máxima velocidad de extrusión de nuestro sistema y filamento
TMC TUNNING
Este es un ajuste para usuarios muy avanzados pero que puede mejorar el rendimiento de la máquina significativamente en ocasiones y reducir algunos tipos de artefactos como el VFA.

Básicamente mediante unos cálculos por nuestro tipo de motores y drivers vamos a poder ajustar las opciones avanzadas de drivers TMC para que estos rindan de una forma más óptima.
Podéis encontrar más información en la guía de ajustes avanzados TMC.
FIRMWARE RETRACTION (retracciones por firmware)
Klipper cuenta con opciones de ajuste de retracciones por firmware que podemos ajustar durante una impresión y que podéis configurar siguiendo la siguiente guía.
Aunque poder controla las retracciones desde el firmware puede tener algunos puntos positivos dado que en un momento dado podremos realizar el ajuste fino, probablemente la gestión de estas desde el laminador va a aportar más opciones y ajustes aún perdiendo ese ajuste "en caliente".
Aconsejamos el usar el proceso clásico de ajuste de retracciones por el laminador tal y como tenéis en la guía de calibración FDM.
Última actualización
¿Te fue útil?


