Input Shaper
Guía completa de calibración de Input Shaper en Klipper: compensación de resonancias y ringing con acelerómetro ADXL345/LIS2DW, interpretación de gráficas, Shake&Tune y método manual.
Una de las grandes funcionalidades de Klipper —y que hoy también está disponible en Marlin (desde la versión 2.1) y en Duet— es el soporte a Input Shaping, una técnica que permite reducir las vibraciones/ondas (ringing, echoing, ghosting, rippling son otros nombres de ese tipo de artefactos).

Este tipo de artefactos están producidos por vibraciones mecánicas originadas normalmente por los movimientos bruscos en los cambios de direcciones. Algo ocasionado normalmente por... un chasis no suficientemente rigido, correas muy o poco tensas, problemas de alineación en partes del chasis o cinemática, movimientos de masas grandes en los ejes de movimiento, etc... por lo que es aconsejable que antes de comenzar en estos ajustes nos aseguremos que hemos intentado solventar lo máximo posible los fallos más comunes comentados.
Input Shaping nos permite minimizar esas vibraciones, normalmente a altas velocidades, optimizando los movimientos de los motores para producir las mínimas vibraciones. El objetivo es realizar unas aceleraciones suaves y fluídas que emitan menos vibraciones para conseguir una mayor calidad en nuestras impresiones.

Dmitry Butyugin fué el primero en implementar Input Shaping en Klipper en Agosto 2020. Con la ayuda de un acelerómetro ADXL34X encontró una forma de medir las frecuencias de resonancia de la impresora y determinar los parámetros para minimizarlas tal como os comentamos en el punto anterior.
Dado que es un proceso muy extenso os vamos a explicar las dos formas de poder ajustar Input Shaping facilitando links a la documentación oficial, recordaros que en nuestro caso usamos un sensor para medir las resonancias de nuestra máquina ya que suele ser la forma más precisa y automática para obtener los mejores resultados.
Acelerómetro
ADXL345, LIS2DW o el integrado en tu toolhead board (EBB, SB2209...)
Host Klipper
Raspberry Pi, CB1, Orange Pi u otro host compatible
Software
numpy + matplotlib (ya incluidos en MainsailOS / FluiddOS / RatOS)
Tiempo estimado
20-30 minutos la primera vez
Acelerómetros
Como os aconsejamos en el punto anterior es aconsejable del uso de un acelerómetro que de una forma más automatizada y fiable nos va a proporcionar datos más fiables.
Aunque no esté relacionado directamente con Klipper creemos muy interesante hacer una muy breve introducción a que es un acelerómetro y como funciona. Un acelerómetro básicamente es un dispositivo que nos va a permitir medir y analizar la aceleración lineal/angular convirtiendo la energía generada por las vibraciones en una señal eléctrica proporcional a la aceleración momentánea del objeto.
Normalmente se suelen usar acelerómetros MEMS (Micro Electro Mechanical System) dado que son precisos, fiables y baratos. Básicamente, tal como podéis ver las siguientes imágenes, es un peso montado en unos resortes mientras el otro es fijo normalmente en forma de peine:


Cuando se produce una aceleración la parte en el resorte se desplaza y gracias a ese movimiento podemos medir la capacidad eléctrica que nos va a permitir obtener un valor:


Por último y a modo de ejemplo tenéis una imagen de como sería internamente un acelerómetro de 3 ejes donde podréis ver lo anterior en el mundo real:

Acelerómetros compatibles con Klipper
Klipper soporta de forma nativa los siguientes acelerómetros para medición de resonancias:
ADXL345 / ADXL343
SPI
El histórico, sigue siendo el más usado. Económico y muy probado.
MPU-6050 / MPU-9250
I2C
Alternativa I2C muy habitual en toolheads que no exponen SPI.
LIS2DW
SPI o I2C
Integrado en muchas toolhead boards modernas (EBB, SB2209).
LIS3DH
SPI o I2C
Añadido recientemente a Klipper. Misma configuración que LIS2DW.
ICM-20948
I2C
Añadido recientemente a Klipper. Compatible con la familia MPU.
Acelerómetro, puesta en marcha
En las siguientes pestañas podéis encontrar las diferentes opciones para disponer de un acelerómetro para nuestra máquina:
Si no os queréis complicar montando vosotros mismos las soldaduras y cableado necesarios, aunque es muy divertido hacerlo!!!, podéis optar por unos comerciales que ya vienen montados:

https://s.click.aliexpress.com/e/_DcynuSh
Fysetc Pico firmware Klipper
El siguiente paso a realizar los siguientes pasos para preparar y aplicar el firmware Klipper a nuestra Fysetc Pico accediento a nuestro host Klipper por SSH (PuTTy/Terminus):
Lanzaremos el comando para preparar nuestro firmware Klipper para nuestra Fysetc Pico:
En la configuración del firmware seleccionaremos:

Presionaremos Q y luego Y para guardar los cambios
Reiniciaremos el servicio Klipper:
Haremos una limpieza de make para asegurarnos que todo está limpio
Generaremos el firmware:
Conectaremos nuestra Fysetc Pico por USB a nuestra Raspberry Pi dejando presionado el botón de boot en la Pi Pico para que monte la unidad de boot y ejecutaremos lo siguiente:


ya podemos reconectar Fysetc pi pico por USB y buscaremos el serial id el cual anotaremos ya que deberemos de usarlo en siguientes pasos

una vez finalizado el proceso arrancaremos el servicio Klipper de nuevo:
Configuración Klipper
dentro de nuestra interfaz de Klipper y para que el uso sea modular lo ideal es crear un nuevo fichero de configuración PIS.cfg para incluir la configuración de nuestro acelerómetro Fysetc:
Sobre el PIS.cfg de Fysetc vamos a realizar algunos ajustes importantes:
En la sección [mcu PIS] ajustaremos el valor de serial para que se ajuste al que obtivimos previamente, en nuestro ejemplo:
También, por compatibilidad con algunos sistemas como RatOS, ajustaremos la sección [adxl345] para añadir un identificador en nuestro caso usaremos fysetc para distinguirlo de otros posibles que podamos tener:
Ajustaremos,
axes_mapque indicara la dirección de movimientos de la máquina. Para más información sobreaxes_mappodéis revisar la documentación oficial de Klipper aquí. Básicamente es para indicar con respecto a la posicion del acelerómetro y el movimiento de la máquina... por ejemplo si colocamos el sensor con orientación Y para el eje de movimiento X usaremos y, x, z... y si lo tenemos invertido usaremos el simbolo - delantePor último y en la sección [resonance_tester] ajustaremos el accel_chip para indicarle el nuestro con el ID que establecimos en el paso anterior, y segundo ajustar las coordenadas probe_points a unas adecuadas a nuestra máquina... normalmente en el centro de nuestra cama de impresión:
Con el fichero de configuración de nuestro Fysetc Pico ajustado tan solo tendremos que indicar a nuestro printer.cfg que lo cargue.
incluiremos nuestro nuevo fichero de adxl345_pico.cfg en nuestro printer.cfg habilitándolo cuando necesitemos realizar el proceso de input shaper:
Reiniciaremos Klipper usando el comando RESTART
La CB1 de Bigtreetech es una gran alternativa a las Raspberry Pi que cuentan con la ventaja de su precio, grandes prestaciones y poder usarse en la serie Manta de Bigtreetech.
La CB1, al estar conectada a la electrónica Manta o alguno de sus adaptadores, dispone de un GPIO el cual... aunque limitado con respecto a la Raspberry Pi... podremos usar para conectar nuestro acelerómetro.

Para poder cablear nuestro acelerómetro seguiremos el siguiente diagrama:
GND
25
Ground
VCC
17
3v3
CS
15
GPIO22
SDO
21
GPIO9
SDA
19
GPIO10
SCL
23
GPIO11
El siguiente paso será habilitar SPI en nuestra CB1 en el directorio /boot/ en su BoardEnv.txt... podéis acceder a el por SSH o WinSCP.

Descomentaremos o añadiremos las siguientes líneas:
Guardamos los cambios y reiniciamos nuestra CB1. Ajustaremos nuestro printer.cfg:
Otra opción muy interesante es la de instalar nuestro sensor directamene a nuestra electrónica de esta forma no necesitamos componentes externos.
Es importante aclarar que NO todas las electrónicas pueden usarse de esta manera, en concreto aquellas que no tengan pines SPI expuestos para su uso.
En la siguiente imagen puedes ver como conectar el sensor a una Octopus en su puerto SPI:

Añadiremos la configuración de sensor en nuestro printer.cfg:
En axes_map que indicara la dirección de movimientos de la máquina.
Para más información sobre axes_map podéis revisar la documentación oficial de Klipper aquí. Básicamente es para indicar con respecto a la posicion del acelerómetro y el movimiento de la máquina... por ejemplo si colocamos el sensor con orientación Y para el eje de movimiento X usaremos y, x, z... y si lo tenemos invertido usaremos el simbolo - delante
Usando Pi Pico como interfaz/MCU secundaria para conectar nuestro acelerómetro nos permite el tener una solución más cómoda y común para todas nuestras impresoras además que nos permite normalmente reducir enormemente la longitud del cableado entre el sensor y el host/MCU de control reduciendo problemas relacionados con interferencias en los cables de forma considerable.
La Pi Pico es una MCU de Raspberry de bajo coste y fácil de encontrar. Nuestro BOM de componentes.
Cables USB, conectores DuPont, cable CAT6, soldador
La conexión entre nuestra Pi Pico y nuestro acelerómetro es relativamente sencilla y podéis usar el siguiente esquema como referencia:

VCC (3v3)
36
3v3 VCC
GND
38
Ground
CS
2
SPIO CSn
SDO
1
SPIO Rx
SDA
5
SPIO Tx
SCL
4
SPIO SCK

Pi Pico firmware Klipper
El siguiente paso a realizar los siguientes pasos para preparar y aplicar el firmware Klipper a nuestra Pi Pico accediento a nuestro host Klipper por SSH (PuTTy/Terminus):
Lanzaremos el comando para preparar nuestro firmware Klipper para nuestra Pi Pico:
En la configuración del firmware seleccionaremos:
Presionaremos Q y luego Y para guardar los cambios
Reiniciaremos el servicio Klipper:
Haremos una limpieza de make para asegurarnos que todo está limpio
Generaremos el firmware:
Conectaremos nuestra Pi Pico por USB a nuestra Raspberry Pi dejando presionado el botón de boot en la Pi Pico para que monte la unidad de boot y ejecutaremos lo siguiente:
ya podemos reconectar la pi pico por USB y buscaremos el serial id el cual anotaremos ya que deberemos de usarlo en siguientes pasos
una vez finalizado el proceso arrancaremos el servicio Klipper de nuevo:
Configuración Klipper
dentro de nuestra interfaz de Klipper y para que el uso sea modular lo ideal es crear un nuevo fichero de configuración adxl345_pico.cfg para incluir la configuración de nuestro acelerómetro:
En axes_map que indicara la dirección de movimientos de la máquina.
Para más información sobre axes_map podéis revisar la documentación oficial de Klipper aquí. Básicamente es para indicar con respecto a la posicion del acelerómetro y el movimiento de la máquina... por ejemplo si colocamos el sensor con orientación Y para el eje de movimiento X usaremos y, x, z... y si lo tenemos invertido usaremos el simbolo - delante
incluiremos nuestro nuevo fichero de adxl345_pico.cfg en nuestro printer.cfg habilitándolo cuando necesitemos realizar el proceso de input shaper:
Reiniciaremos Klipper usando el comando RESTART
La opción más común suele ser conectar directamente nuestro acelerómetro directamente a nuestro host Klipper, en el caso de ser una Raspberry Pi o similar.
Aunque Klipper es compatible con diferentes tipos de acelerómetros vamos a usar el más común que es el ADXL345 en cualquier caso en la documentación de Klipper podéis encontrar otras opciones.
Cables USB, conectores DuPont, cable CAT6, soldador
El primer paso será montar el cableado para nuestro sensor y nuestra Pi. Tal como os adelantábamos es importante que usemos conectores dupont que proporcionen una buena conexión y un cableado adecuado, normalmente cable de red CAT6 suele dar un buen resultado gracias al trenzado y apantallado.

Una vez tenemos las conexiones nos aseguraremos que tenemos activado la comunicación SPI en nuestra Pi. Para ello conectaremos por SSH (PuTTy o Terminus) a nuestra Pi y lanzaremos la utilidad raspi-config:
Dentro del menú de configuración que aparece seleccionaremos
#3 >> Interface Options >> P4 SPI >> Yes >> OK >> Finish

Configuración Pi como segunda MCU
Para poder acceder a determinados recursos de nuestra Pi, como es el caso del acelerómetro, deberemos realizar el proceso explicado en esta guía para poder usar nuestra Pi como segunda MCU.
Configuración Klipper
dentro de nuestra interfaz de Klipper y para que el uso sea modular lo ideal es crear un nuevo fichero de configuración adxl345_rpi.cfg para incluir la configuración de nuestro acelerómetro:
En
axes_mapque indicara la dirección de movimientos de la máquina. Para más información sobreaxes_mappodéis revisar la documentación oficial de Klipper aquí. Básicamente es para indicar con respecto a la posicion del acelerómetro y el movimiento de la máquina... por ejemplo si colocamos el sensor con orientación Y para el eje de movimiento X usaremos y, x, z... y si lo tenemos invertido usaremos el simbolo - delanteincluiremos nuestro nuevo fichero de adxl345_rpi.cfg en nuestro printer.cfg habilitándolo cuando necesitemos realizar el proceso de input shaper:
Reiniciaremos Klipper usando el comando RESTART
Otra opción es la de usar un Arduino que seguro que tenemos por casa para nuestros proyectos maker para gestionar nuestro acelerómetro. Es importante recordar que es aconsejable usar un Arduino con una MCU relativamente potente dado que el flujo de datos entre el acelerómetro y nuestro Arduino es bastante intensivo.
Conectaremos ambos componentes siguiendo el siguiente esquema de conexiones:

GND
GND
3v3
VCC
10
CS
12
SDO
11
SDA
13
SCL
Arduino firmware Klipper
Conectamos el cable USB a nuestra Raspberry Pi
Buscaremos el id del serial para detectar nuestro Android mediante el siguiente comando:
Iremos a la carpeta Klipper:
Lanzaremos el comando para preparar nuestro firmware Klipper para Arduino:
En la configuración del firmware seleccionaremos:
Atmega AVR como arquitectura del micro-controlador
En el modelo del procesador seleccionaremos el nuestro, para el ejemplo atmega328p
Presionaremos Q y luego Y para guardar los cambios
Reiniciaremos el servicio Klipper:
Subiremos el firmware Klipper a nuestro Arduino con el siguiente comando, es importante usar el id del serial detectado en pasos anteriores:
una vez finalizado el proceso arrancaremos el servicio Klipper de nuevo:
Configuración en Klipper
En nuestro printer.cfg añadiremos el siguiente include al incio:
Crearemos un nuevo archivo con el nombre arduino.cfg a la misma altura que nuestro printer.cfg, deberemos ajustar el serial por el que detectamos en pasos anteriores además de las coordenadas para los test:
En
axes_mapque indicara la dirección de movimientos de la máquina. Para más información sobreaxes_mappodéis revisar la documentación oficial de Klipper aquí. Básicamente es para indicar con respecto a la posicion del acelerómetro y el movimiento de la máquina... por ejemplo si colocamos el sensor con orientación Y para el eje de movimiento X usaremos y, x, z... y si lo tenemos invertido usaremos el simbolo - delanteReiniciaremos Klipper:
Los acelerómetros LIS2DW son soportados recientemente (Agosto 2023, por lo que si vuestra instalación es más antigua es hora de actualizar!!!) por parte de Klipper. Al igual que los ADXL345 utilizan el interfaz SPI para cominicarse con el host/MCU lo que permiten unas velocidades de hasta 400kbit/s.

En el caso del BTT S2DW es una solución que funciona con su propia MCU, una RPI2040 con doble ARM Cortex-M0+ @ 133MHz que nos asegura que no vamos a tener problemas de proceso, y la conectaremos por USB lo que va a eliminar problemas de cableado y simplificar su uso aunue tambien disponemos del interfaz SPI para poder conectar con cables.

Por otro lado estos acelerómetros prometen casi el doble de precisión, menos nivel de ruido y menos afectación por la temperatura comparados con un ADXL345:

Pasos para preparar y aplicar el firmware Klipper a nuestra BTT S2DW accediento a nuestro host Klipper por SSH (PuTTy/Terminus):
Lanzaremos el comando para preparar nuestro firmware Klipper para nuestra BTT S2DW:
En la configuración del firmware seleccionaremos:

Presionaremos Q y luego Y para guardar los cambios
Reiniciaremos el servicio Klipper:
Haremos una limpieza de make para asegurarnos que todo está limpio
Generaremos el firmware:
Conectaremos nuestra BTT S2DW por USB a nuestro host dejando presionado el botón de BOOT para entrar en modo DFU y ejecutaremos lo siguiente:

Usaremos el comando
lsusbpara listar los dispositivos conectados a nuestro host y localizar el de nuestra BTT S2DW, en nuestro caso 2e8a:0003:

A continuación lanzaremos el comando para aplicar el firmware, recuerda ajustar el FLASH_DEVICE al obtenido en el paso anterior:
Una vez ya tenemos el firmware aplicado lanzaremos el siguiente comando para obtener el serial ID (/dev/serial/by-id/xxx) que usaremos mas tarde en Klipper:
Ahora iremos a nuestro interfaz Klipper web para añadir la configuración del acelerómetro, del cual tenéis un ejemplo en https://github.com/bigtreetech/LIS2DW/blob/master/Firmware/sample-bigtreetech-lis2dw-v1.0.cfg ,
Ajustaremos, de la configuración anterior, nuestro
serialcon el que obtivimos en el paso anterior yaxes_mapque indicara la dirección de movimientos de la máquina. Para más información sobreaxes_mappodéis revisar la documentación oficial de Klipper aquí. Básicamente es para indicar con respecto a la posicion del acelerómetro y el movimiento de la máquina... por ejemplo si colocamos el sensor con orientación Y para el eje de movimiento X usaremos y, x, z... y si lo tenemos invertido usaremos el simbolo - delante
Pasos para preparar y aplicar el firmware Klipper a nuestra Mellow FLY-USB accediento a nuestro host Klipper por SSH (PuTTy/Terminus):
El primer paso para preparar el dispositivo será aplicar el bootloader a nuestro FLY-USB, os aconsejamos seguir el procedimiento directamente desde la web de Mellow, no es complejo pero tenemos diferentes opciones.
Lanzaremos el comando para preparar nuestro firmware Klipper para nuestra BTT S2DW:
En la configuración del firmware seleccionaremos:

Presionaremos Q y luego Y para guardar los cambios
Reiniciaremos el servicio Klipper:
Haremos una limpieza de make para asegurarnos que todo está limpio
Generaremos el firmware:
Hemos de disponer de katapult instalado en nuestro host, de no tenerlo podremos instalarlo lanzando
Buscaremos el ID del dispositivo Mellow Fly utilizando
lsusbSi no nos funciona el comandolsusbpodemos instalarlo lanzando:

Nos anotaremos el ID del dispositivo el cual usaremos para lanzar el comando para actualizar el firmware
Si el firmware se aplico correctamente el led de la siguiente imagen se encenderá

Ahora iremos a nuestro interfaz Klipper web para añadir la configuración del acelerómetro, del cual tenéis un ejemplo en
Ajustaremos, de la configuración anterior, nuestro
serialcon el que obtivimos en el paso anterior yaxes_mapque indicara la dirección de movimientos de la máquina. Para más información sobreaxes_mappodéis revisar la documentación oficial de Klipper aquí. Básicamente es para indicar con respecto a la posicion del acelerómetro y el movimiento de la máquina... por ejemplo si colocamos el sensor con orientación Y para el eje de movimiento X usaremos y, x, z... y si lo tenemos invertido usaremos el simbolo - delante
Gracias al compañero Xander de nuestro grupo Klipper de Telegram por ayudar en el proceso.
Muchas placas toolhead actuales como la BTT EBB SB2209, EBB SB2240, EBB36, EBB42 o la Mellow FLY-SB2040 incluyen un acelerómetro ADXL345 integrado en la propia placa. Si usas una de estas placas, no necesitas ningún acelerómetro externo — el sensor ya está ahí.
Esta es la opción más recomendada en máquinas CoreXY modernas (Voron 2.4, Trident, VzBot…) ya que el acelerómetro está montado directamente en el cabezal, muy cerca del nozzle, lo que da las medidas más precisas posibles.
Configuración Klipper (ajusta el nombre EBBCan al que hayas definido en tu [mcu]):
Puedes añadir estos bloques directamente en printer.cfg o en un archivo separado adxl.cfg incluido desde printer.cfg:
Para saber exactamente los pines SPI de tu placa toolhead específica consulta su configuración de ejemplo oficial:
Acelerómetros adicionales soportados nativamente por Klipper
Desde 2024 Klipper soporta dos sensores adicionales que vienen integrados en cada vez más toolhead boards:
LIS3DH — alternativa al LIS2DW, mismo fabricante (ST) y misma filosofía de uso. Se configura igual, soporta SPI o I2C. Habitual en placas SHT36/SHT42 de Mellow y similares.
ICM-20948 — de la familia MPU (Invensense/TDK), conexión I2C. Reemplazo natural del MPU-9250 con mejores prestaciones.
Configuración LIS3DH (SPI), ejemplo en una toolhead Mellow SHT36 v3:
Configuración LIS3DH (I2C):
Configuración ICM-20948 (I2C):
Instalando el software necesario en nuestro Klipper
Para procesar los datos del acelerómetro Klipper necesita algunas dependencias Python. La mayoría de distribuciones modernas (MainsailOS, FluiddOS, RatOS) las incluyen preinstaladas — si acabas de instalar desde una de ellas puedes pasar directamente a la sección de comprobaciones.
Si tienes una instalación antigua o una imagen base sin estas dependencias, instálalas por SSH:
Más información en la documentación de Klipper.
Comprobaciones
Con todo conectado iremos a la consola/terminal de nuestra UI de Klipper y ejecutaremos:
Si obtenemos una respuesta como la siguiente el acelerómetro funciona correctamente!!!

Medición de resonancias
Ahora que ya tenemos todo configurado vamos a proceder a realizar nuestro test de resonancias.
En el caso que nuestra impresora sea Cartesiana, nuestra cama es un eje de movimiento, debereis realizar los tests en los ejes X e Y de forma independiente colocando vuestro acelerómetro bien anclado en el eje X y después moverlo al eje Y.
En el caso de una CoreXY no necesitamos cambiar el acelerómetro ya que anclando firmemente este a nuestro cabezal de impresión podremos medir ambos ejes.
Test resonancias eje X
lanzaremos por consola/terminal desde nuestra UI el siguiente comando
Test resonancias eje Y
lanzaremos por consola/terminal desde nuestra UI el siguiente comando
Revisar los resultados
El proceso anterior generará dos ficheros CSV con los resultados del test.
Estos CSV se procesarán ejecutando (hay algunos scripts/macros que pueden simplificar la vida) los siguientes comandos desde el terminal SSH:
Estos scripts generarán unas imágenes con unas gráficas con información de las respuestas en frecuencia de nuestra máquina además de sugerirnos las más adecuadas:

Como interpretar los resultados
Un aspecto importante es interpretar los resultados que nos aportan las gráficas generadas de Input Shaper:

las lineas contínuas son las frecuencias medidas por el acelerómetro
las lineas de puntos representan la teórica reducción de vibraciones dependiendo del tipo de método de compensación de input shaper.
En cualquier caso os damos algunas sugerencias que pueden ayudar en el proceso.
la ubicación y anclaje del sensor es muy importante, aunque no es necesario estrictamente el ajuste de la orientación del sensor si que es aconsejable seguirla y dejar el sensor centrado en el cabezal de impresion a ser posible lo más cercano a la vertical del nozzle
generalmente buscamos que las líneas de puntos (estimación de reducción de vibraciones) se encuentren lo más bajas posibles en contraposición a las líneas continuas (lecturas de vibración del sensor)
las vibraciones por debajo de 25Hz no son buenas amigas.... básicamente porque las vibraciones a más altas frecuencias son más fáciles de cancelar, idealmente superiores a 50-70 Hz. Si las tienes es aconsejable revisar en detalle holguras/escuadras en el chasis, problemas de cinemática como correas poco o demasiado tensas... básicamente porque van a limitar bastante las aceleraciones de la máquina
lo ideal es que las graficas no tengan doble o más picos siendo lo ideal una onda como podéis ver en la imagen del video de abajo. En el caso de tenerlas revisar holguras además de tensiones de correas. Aunque no siempre tiene porqué ser así ya que es importante fijarse en la escala y sus magnitudes.
En máquinas CoreXY el rango de frecuencias debería de ser muy similar en ambos casos aunque normalmente el eje Y suele estar un poco más bajo que el X
Además de lo anterior es importante, con referencia al tipo de Input Shaper sugerido, que tengamos en cuenta los siguientes puntos:
los tipos 2HUMP_EI y 3HUMP_EI normalmente se sugieren cuando nuestras gráficas tengan varias puntas de resonancias, picos en nuestra onda, por lo que si se os sugieren este tipo de Input Shaper lo ideal es revisar nuestro chásis (sin holguras y escuadrado), mecánica (motores con su configuración óptima y bien anclados) y cinemática (tensado y alineado de correas, poleas en buen estado, lubricación, ajuste excéntricas) para intentar mitigar esos picos de vibraciones. Por lo anterior son los métodos idealmente a evitar usar ya que indicaría que nuestra máquina estructuralmente pueda tener deficiencias. En el siguiente ejemplo veréis una máquina sin ajuste de correas como aparece la gráfica y el tipo que suguiere de input shaper y una vez tensadas correctamente las correas:


Normalmente los Input Shaper más aconsejables son MZV y EI
EI normalmente suele ser el más adecuado para máquinas Cartesianas (el eje Y, cama, se desplaza) y Delta ya que se comporta mejor con cambios en resonancias en la máquina.
MZV o ZV normalmente funcionan mejor en máquinas CoreXY
Smoothing/Alisado
Por último nos gustaría comentar que Input Shaper puede llegar a generar unas piezas "alisadas" en exceso afectando al acabado final de esta y sus detalles por lo que en estos casos que el algoritmo elige una frecuencia que no es óptima podemos optar por aplicar menos alisado con el coste de incrementar las resonancias.
Dependiendo del tipo de Input Shaper seleccionado:
ZV/MZV/EI, suelen tener unos valores bajos de smooth por lo que es un tipo adecuado para no requerir un ajuste fino de alisado
2HUMP_EI/3HUMP_EI, suelen tener unos altos valores de smooth por lo que si no nos queda mas remedio que usarlo es aconsejable un ajuste fino de alisado
Para realizar un ajuste fino de smooth/alisado cuando usamos Input Shaper:
Teniendo el siguiente resultado de un test normal:

Vemos que ZV apenas tiene smoothing/alisado, MZV/EI tienen unos valores medios de smoothing/alisado, y 2HUMP_EI/3HUMP_EI tienen unos valores altos.
En el caso que usemos unos de estos tipos con medio/alto smoothing/alisados podremos intentar ver como reducir este lanzando una simulación limitando el valor máximo de smoothing, lo que nos adaptará para aquellos que superen ese valor máximo de smoothing los valores calculados. Añadiremos el valor smoothing máximo deseado, --max_smoothing=0.2 en la parte final, en el siguiente script :

Comparando ambos resultados veremos que tenemos más resonancias pero el valor de alisado/smoothing es mucho mejor algo que afectará a las las aceleraciones de Input Shaper.
Una vez tengamos el valor de max_smooth deseado lo meteremos en la sección [resonance_tester] y recordad actualizar las aceleraciones máximas de la impresora tal y como las calculamos en puntos anteriores ya que con este ajuste suelen cambiar:
Como siempre os aconsejamos realizar varios tests en real para encontrar el balance en vuestra máquina y piezas impresas que se ajusten más a vuestras necesidades.
Videos interesantes en referencia a como interpretar la información del proceso Input Shaper
A continuación podéis ver estos videos que pueden ayudar a comprender estas gráficas:
Añadir la información de Input Shaper en nuestra configuración
Una vez ya tenemos la configuración sugerida para nuestra máquina añadiremos esta a nuestro printer.cfg en la sección [input_shaper] y actualizaremos las aceleraciones máximas de nuestro [printer]
En el caso de las acceleraciones máximas es aconsejable seleccionar el valor que no supere los valores calculados en el ejes X e Y (usaremos el más bajo de ellos) además de añadir un cierto margen de seguridad como por ejemplo el 90% del valor que obtuvimos en los tests (de nuevo sobre el eje que nos dio el valor más bajo):
Ajuste automático de valores de resonancia por Klipper
Klipper dispone de una macro que ejecuta los tests de Input Shaper y seleccionará de forma automática, y en ocasiones no tienen porqué ser los más óptimos, los ajustes de Input Shaper.
Lanzaremos desde nuestro terminal la siguiente macro:
En el caso de máquinas CoreXY o si disponemos de 2 acelerómetros instalados y configurados para X e Y:
En el caso que tengamos una máquina no CoreXY y que tengamos que medir de forma independiente cada eje lanzaremos la macro especificando cada eje a testear:
Al igual que el proceso manual lanzará el proceso Input Shaper y nos generará nuestro csv en /tmp/calibration_data_*.csv y nos indicará en el terminal también la información del test:
En el caso que nos parezcan bien los parámetros sugeridos ejecutaremos la macro SAVE_CONFIG y reniciar Klipper. Recuerda que este proceso no ajusta el max_accel de la sección [printer] que deberemos ajustar manualmente tal como hicimos anteriormente.
Calibración en una sola pasada (single pass)
Habitualmente en una cartesiana (bed slinger) hay que ejecutar SHAPER_CALIBRATE AXIS=X y luego SHAPER_CALIBRATE AXIS=Y moviendo el acelerómetro entre el cabezal y la cama. Con dos acelerómetros ese paso desaparece: Klipper mide ambos ejes simultáneamente en una única ejecución.
Configuración con dos acelerómetros (ej. ADXL345):
Variante con dos MPU-9250 / ICM-20948 (I2C):
Como ambos chips comparten bus, hay que jugar con i2c_address (pin AD0 a GND o a VCC):
Sweeping vibrations — método de medición mejorado (Klipper 0.13+)
A partir de Klipper v0.13.0 (abril 2025) se introdujo un nuevo método de medición de resonancias llamado sweeping vibrations. El proceso clásico generaba vibraciones a frecuencia fija con el cabezal parado en un único punto; el nuevo método superpone un movimiento lento de barrido (sweep) mientras se inyectan las vibraciones, de forma que el cabezal recorre una pequeña área en lugar de quedarse quieto.
¿Qué mejora respecto al test clásico?
Excita mejor los modos de resonancia mecánica, especialmente los que dependen de la posición del cabezal.
Reduce los falsos positivos cuando justo el punto de sondeo coincide con una zona con fricción anómala o una holgura local.
Detecta resonancias a frecuencias ligeramente más bajas que el método antiguo, normalmente más cercanas al comportamiento real durante una impresión.
Cómo activarlo
El nuevo método se controla mediante dos parámetros en la sección [resonance_tester]:
sweeping_period: 0(valor por defecto) → desactivado, se usa el método clásico de toda la vida.sweeping_period > 0→ activa el barrido. La amplitud del recorrido durante el test es aproximadamentesweeping_accel * sweeping_period² / 32(con los valores del ejemplo, unos 18 mm).
Automatizando el test de resonancias
El proceso anterior es el aconsejado por Klipper pero gracias a los amigos de Ratrig con su RatOS podemos aprovechar algunas partes para automatizar el proceso y que simplemente con unos clicks desde nuestra UI podamos realizar el proceso de forma mucho más cómoda.
Creando nuestros scripts de test de resonancias
Para seguir con la misma estructura que tiene RatOS lo ideal es crear una carpeta "scripts" en nuestro directorio de configuraciones Klipper donde crearemos los siguientes ficheros.
generate-shaper-graph-x.sh - para generar gráficas del eje X
generate-shaper-graph-y.sh - para generar gráficas del eje Y
generate-belt-tension-graph.sh - para generar gráficas de tensión de correas (CoreXY aconsejable)
Estos scripts se usarán por nuestras nuevas macros para generar las gráficas con los resultados de nuestros tests de input shaper.
Creando nuestras nuevas macros para input shaper
Ahora que ya tenemos nuestros scripts listos crearemos nuestras macros de gestion de input shaper.
Para ello y a la altura de nuestro printer.cfg crearemos un nuevo fichero shell-macros.cfg donde añadiremos nuestras macros que usen scripts, dado que Klipper tiene un sistema modular creemos que es la mejor forma para que quede todo más limpio y fácil de tener la configuración de nuestra máquina ordenada.
Recordad que para que estas macros estén disponibles en Klipper hemos de añadir mediante include del fichero shell-macros.cfg creado anteriormente:
Estas nuevas macros se encargan de:
GENERATE_SHAPER_GRAPHS, lanzará el proceso de generar test de resonancias y las gráficas de input shaper para ambos ejes de forma automatizada (o de uno en concreto si así se lo indicas como parámetro) y nos dejara las imagenes dentro de la carpeta input shaper para poderlas bajar de forma cómoda desde nuestra UI
MEASURE_COREXY_BELT_TENSION, generará las gráficas de tensión de correas aconsejable en el caso de máquinas CoreXY
Klippain Shake&Tune — análisis avanzado de resonancias
Klippain Shake&Tune es una extensión de Klipper desarrollada por Frix-x que va mucho más allá del proceso estándar. Genera gráficas más detalladas, analiza la condición mecánica de la máquina y detecta problemas como correas desiguales o holguras.

¿Qué añade respecto al proceso estándar?
Gráficas más completas: frecuencias, picos de resonancia, nivel de ruido y estimación de smoothing en una sola imagen
Análisis de correas (CoreXY): compara las resonancias de ambas correas para detectar desequilibrios
Análisis del sistema de extrusión: detecta vibraciones en el motor del extrusor que pueden afectar a la calidad
Diagnóstico mecánico: pistas sobre qué ajustar si los resultados son malos (holguras, correas, tornillos)
Macros integradas desde la UI de Mainsail/Fluidd: no hace falta SSH para nada
Instalación
Añade en tu moonraker.conf:
Añade en tu printer.cfg:
Macros disponibles
Una vez instalado tendrás estas macros disponibles desde la UI:
AXES_MAP_CALIBRATION
Detecta automáticamente el axes_map correcto del acelerómetro
COMPARE_BELTS_RESPONSES
Compara resonancias de correas A y B (CoreXY)
EXCITATE_AXIS_AT_FREQ
Excita un eje a una frecuencia para buscar holguras físicamente
AXES_SHAPER_CALIBRATION
Test completo de resonancias con gráficas avanzadas
CREATE_VIBRATIONS_PROFILE
Crea el perfil de vibraciones para Klipper
Para más información y documentación completa: https://github.com/Frix-x/klippain-shaketune
Método manual sin acelerómetro.
Compensación de resonancias manual, en este caso y mediante una torre de test podremos encontrar y ajustar los valores de Input Shaping siguiendo las instrucciones del link anterior.

Ajustes en el laminador para nuestra pieza de test:
Ajustaremos altura de capa a 0.2
Pondremos a 0 el relleno y capas superiores
Perímetros en 1 y a ser posible imprimir en modo vaso, 2 máximo si no usamos modo vaso
Perímetros externos entre 80-120mm/s, dependiendo de la calidad de nuestra máquina y la calidad de chasis/mecánica/cinemática... es aconsejable hacer el test a 80, 100, 120mm/s para ver en que rangos se comporta mejor la máquina.
Tiempo mínimo de capa 3 segundos, como mucho idealmente 0.
Deshabilitar cualquier función de gestión o límites de aceleraciones en el laminador.
No girar el modelo de test, está hecho para que cada cara coincida con el eje a probar.

Desde la consola de nuestra UI web de Klipper:
Si tenemos personalizado el valor
square_corner_velocitylo dejaremos por defecto a 5.0Deshabilitaremos
minimum_cruise_ratiopara que no limite las aceleraciones del test:SET_VELOCITY_LIMIT MINIMUM_CRUISE_RATIO=0Ajustaremos Pressure Advance a 0 con
SET_PRESSURE_ADVANCE ADVANCE=0.Deshabilitaremos Input Shaper
SET_INPUT_SHAPER SHAPER_FREQ_X=0 SHAPER_FREQ_Y=0. Si nos diera error no hemos de preocuparnos y continuamos con el siguiente paso.En el caso que queramos testear un tipo de compensación Input Shaper usaremos
SET_INPUT_SHAPER SHAPER_TYPE=MZVsustituyendoSHAPER_TYPEpor el que queramos testearEjecutaremos:
TUNING_TOWER COMMAND=SET_VELOCITY_LIMIT PARAMETER=ACCEL START=1500 STEP_DELTA=500 STEP_HEIGHT=5. Con este comando incrementamos cada 5mm la aceleración hasta finalizar la prueba de test en 7000 mm/s.
Una vez finalizado el test procederemos a analizar los resultados:

Aunque es obvio, usaremos las letras que aparecen en la pieza de test para identificar en que eje realizaremos los ajustes que obtengamos.
Usando un calibre de precisión mediremos la distancia entre varias oscilaciones como vemos en la imagen superior, obviaremos las series a mayor aceleraciones que tengan estas oscilaciones más marcadas y mediremos la distancia total entre 6-8 oscilaciones
Calcularemos la frecuencia de cada eje usando la siguiente fórmula:
Input Shaper configuración en Klipper
Editaremos nuestro printer.cfg
Añadiremos la siguiente sección:
Guardaremos los cambios y reiniciaremos Klipper.
Ahora que ya tenemos identificadas las frecuencias óptimas para nuestra máquina deberemos encontrar el tipo de Input Shaper adecuado para nuestra máquina.
Klipper, como tenéis más adelante explicado en detalle, cuenta con diferentes tipos de Input Shaper como MZV, EI, 2HUMP_EI, o 3HUMP_EI.
Para encontrar el tipo de Input Shaper adecuado:
Ejecutaremos los siguientes comando en consola para verificar nuestra configuración usando MZV como tipo de Input Shaper:
Volveremos a imprimir la torre de test que realizamos en el paso anterior.
Reiniciaremos el sistema Klipper y nuestra máquina al finalizar y lanzaremos los siguientes comandos en consola para verificar nuestra configuración con EI como tipo de Input Shaper:
Volveremos a imprimir la torre de test y una vez finalizado el proceso comprobaremos ambas impresiones para ver cual de ellas ha mejorado en calidad. En el caso que no veamos mejoras lanzaremos los tests para 2HUMP_EI y 3HUMP_EI aunque os adelantamos que si con estos vemos mejoras suele indicar que nuestra impresora pueda tener problemas mecánicos los cual se deberían revisar. Para elegir uno u otro se han de ajustar la línea de comandos
SET_INPUT_SHAPER SHAPER_TYPE=añadiendo al final los tipos que queramos testear de uno en uno.Una vez tengamos seleccionado el input shaper adecuado para nuestra máquina ajustaremos nuestra configuración de Klipper:
Guardaremos los cambios y reiniciaremos Klipper.
Otro paso aconsejable es ajustar la aceleaceleraciónración máxima ya que, en especial dependiendo del tipo de Input Shaper y tal como tenéis explicado con más detalle más adelante, una aceleración muy alta o muy baja puede llegar a "matar"/alisar detalles de nuestras impresiones.
Ya tenemos nuestro Input Shaper calculado, podemos verificar resultados repitiendo la pieza de test pero saltando el punto 3 dentro de la parte de comandos en consola evitando de esa forma deshabilitar Input Shaper.
Para encontrar el valor óptimo para nuestro caso volveremos a revisar la torre donde elegimos el tipo de Input Shaper para revisar:

Verificaremos donde la hendidura donde comience a ampliarse. La torre de test comienza con aceleración de 1500 mm/S2 y lo aumenta en 500 mm/S2 a cada intervalo de 5 mm. En la imagen anterior (que está rotada de 90 grados), puedes ver que el espacio se amplía y ve un hueco entre las trazadas de capa a aproximadamente 20-25 mm de altura. Esto indica que la mejor configuración de aceleración sería entre 3000-3500 mm/S2. Seleccionaremos el valor más bajo del último rango que salga correctamete, 3000 mm/s2 para la imagen anterior.
Iremos a nuestra configuración de Klipper y dentro de la sección
[printer]añadiremos o actualizaremos el valor demax_accelal valor óptimo, para el caso anteriormax_accel: 3000.
Si obtenemos un buen resultado podemos empezar a imprimir con un punto más de velocidad sin tener artefactos en nuestras impresiones!!!
Recuerda que para ello te aconsejamos revisar la velociada máxima de tu máquina y tests en real con tus piezas para un ajuste fino.
Última actualización








