Ajustes avanzados TMC (VFA)
TEST AVANZADO!!! REALIZAR SOLAMENTE SI TIENES UNOS CONOCIMIENTOS MINIMOS DE IMPRESORAS/FIRMWARE
Última actualización
TEST AVANZADO!!! REALIZAR SOLAMENTE SI TIENES UNOS CONOCIMIENTOS MINIMOS DE IMPRESORAS/FIRMWARE
Última actualización
Klipper pone a nuestra disposición diferentes funciones para optimizar movimientos y extrusión de la máquina como puede ser Pressure Advance, Input Shaper, y otros...
En este caso vamos a atacar la configuración avanzada de nuestros drivers TMC para mejorar la calidad de sus ajustes junto con nuestros motores. En concreto, vamos a intentar eliminar o disminuir los artefactos verticales (VFA - Vertical Fine Artifacts) que suelen aparecer en nuestras impresiones.
Klipper, en las secciones driver_xxx, dispone de ajustes avanzados para TMC que normalmente no son usados o nos los facilitan algunos fabricantes. Básicamente, estos ajustes que vamos a emplear nos permitirán alterar la forma de onda generada por nuestros drivers para la gestión de nuestros motores.
En esta guía vamos a intentar explicar como encontrar esos valores para vuestra máquina.
IMPORTANTE!!!
Nuestra configuración de drivers deberá de estar en SpreadCycle (modo torque/potencia).. en cualquier caso este ajuste avanzado mejora el uso de la corriente en los motores lo que permite reducir significativamente el ruído que generan
Estas configuraciones avanzadas NO suelen llevarse bien con StealChop (modo silencioso)
Estos ajustes son exclusivos para la combinación de drivers/motores para los cuales se calcule
Queremos dejar claro que el proceso de ajuste correcto para estos parámetros sería realizando una batería de tests usando un osciloscopio tal y como podéis encontrar en el siguiente PDF con el proceso. En nuestro caso y dado que no todos tenemos un osciloscopio en casa vamos a ajustar esos parámetros mediante unos cálculos en base a nuestros drivers y motores.
Para realizar el proceso descrito en esta guía vamos a necesitar dos cosas:
Las fórmulas, en este caso Trinamic (TMC) nos facilita unas hojas de cálculo para simplificar el proceso... a continuación puedes encontrarlos para los drivers más comunes
Encontrar el datasheet de nuestro motor
IMPORTANTE!!!
un fallo bastante común, sobretodo en máquinas modificadas o DIY, es que el cableado de nuestros drivers->motores no estén del todo correctos.
Algo que normalmente hacemos mal es, al intentar cambiar el giro de un motor cuando este no lo hace correctamente y por pereza de cambiar nuestro firmware, es invertir cables y lo ideal siempre es ajustar el firmware dejando nuestro cableado siguiendo las especificaciones de los fabricantes... en este caso de electrónica de control de vuestra impresora y el de los motores.
Las electrónicas en sus esquemas de pines cuentan con el orden tanto de bobinas como de polaridad inicial:
Como puedes observar en la captura anterior para esta electrónica, una SKR Octopus, tienen definidos los pines como A1 A2 B2 B1 donde:
A/B hacen referencia a la bobina en cada caso
1/2 hacen referencia al polo de polaridad de la bobina
Ahora si nos fijamos en el esquema de un motor estándar de impresora 3D veremos que en su datasheet nos facilitan la información necesaria para identificar nuestras bobinas y polaridad inicial de pines:
En el caso anterior lo ideal es realizar el cableado de la siguiente forma:
A1 (Octopus) -> Bobina A/Polaridad inicial 1/+ -> pin 1 A+ BLK (negro) (motor)
A2 (Octopus) -> Bobina A/Polaridad inicial 2/- -> pin 2 A- GRN (verde) (motor)
B2 (Octopus) -> Bobina B/Poladirad inicial 2/- -> pin 4 B- BLU (azul) (motor)
B1 (Octopus) -> Bobina B/Polaridad inicial 1/+ -> pin 3 B+ RED (rojo) (motor)
Porqué es importante hacer esto?
Si bien tener cruzadas las polaridades iniciales o el orden de las bobinas puede hacer que nuestra impresora esté funcionando correctamente el no disponer de un orden correcto en estas puede provocar pérdida de precisión y pasos, además, que en velocidades medias/altas nuestros motores pueden generar más ruído y vibraciones que de no estar correctamente.
El primer paso será revisar en nuestro printer.cfg, o si tenemos una configuración modular en el include que los contenga, las secciones que hacen referencia a nuestros drivers y motores:
[stepper_x] donde encontramos la configuración del motor, en especial el valor de micropasos que se usarán
[tmc2209 stepper_x] donde veremos la configuración TMC para un eje/motor en concreto
Tal como indica la propia documentación de Klipper algunos de las propiedades de estas secciones es aconsejables eliminarlas en cualquier caso:
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
Si tenías actualmente en tu configuración habilitada la opción de interpolate, el driver dinámicamente según las necesidades ajustaba los micropasos desde el valor establecido hasta 256, para realizar el ajuste fino usaremos un valor de micropasos medio en este caso podemos comenzar en 64.
Como norma os diremos que con lo explicado anteriormente nuestra experiencia con los micropasos es que NO siempre es beneficioso usar un número alto de micropasos ya que nos van a limitar considerablemente el rendimiento/velocidad por pérdida de torque, añadir más imprecisión y aumentar exponencialmente la carga del sistema.
Como consejo para máquinas de entrada o gama media (Ender 3, Artillery, etc...) os aconsejamos 16... 32 a lo sumo. Para máquinas de gama media/alta con un buen conjunto cinemática/motores/electrónica y dependiendo de sus características podremos utilizar un valor de micropasos superiores... SIEMPRE realizando los tests oportunos para ver las posibles mejoras en calidad e impacto en velocidad y fiabilidad.
Dependiendo del tipo de máquina, motores, etc... podemos obtener mejores o peores resultados dependiendo de los micropasos. Es aconsejable comenzar en 16 y comparar resultados usando 32 y 64.
Cambiando esta configuración tal cual explicada directamente veremos que la máquina es sensiblemente más ruidosa que usando interpolate... el procedimiento de ajuste nos va a permitir solventar esto aprovechando el modo SpreadCycle con sus mejoras, torque/velocidad, y con un nivel de ruido similar al no tenerlo.
El uso de Stealthchop en los motores Z suele ser aconsejable dado que reduciremos el ruido y al no ser un eje de movimientos particularmente rápido no tendremos problemas. Así que nuestros motores usados en el eje Z podrían operar en modo Stealthchop utilizando un valor de micropasos que mantengan el torque y precisión de nuestra mecánica especialmente porque a más micropasos perdemos exponencialmente torque/fuerza y precision algo crítico a la hora de procesos como homing o mallado de cama.
Podemos hacer que siempre funcionen en este modo ajustando la propiedad de la siguiente forma stealthchop_threshold: 999 en la sección TMC de nuestro eje Z.
Además y para este eje Z no realizaremos los ajustes/optimizaciones que sugeriremos mas adelante.
El motor de extrusión va a ser un caso especial, lo que se recomienda dejarlos en 16 micropasos al igual que no tener activo el modo Stealthchop con stealthchop_threshold: 0.
No suele ser aconsejable utilizar este ajuste fino en ellos ya que como se indicó al inicio de la guía se cuentan con otras funciones para ajustar el control de la extrusión.
Las propiedades de nuestra sección TMC que nos vamos a centrar serán las siguientes:
driver_TBL
: Blanking Time
driver_TOFF
: Time to Slow Decay
driver_HSTRT
: Hysteresis start
driver_HEND
: Hysteresis end
Básicamente lo que haremos ajustando estos valores será ajustar los tiempos y configuraciones de histéresis de las señales de nuestros drivers.
Si queréis información más detallada de estas opciones os aconsejamos leeros la sección SpreadCycle Settings de, por ejemplo, el datasheet de los TMC2209
Como siguiente paso vamos a centrarnos en los cálculos de la hoja de excel comentadas en puntos anteriores, en concreto en la segunda hoja donde encontraremos Chopper Parameters donde ajustaremos los valores de las celdas en color amarillo:
fCLK, normalmente 12Mhz que suele ser el valor por defecto para unos TMC2209 (no hace referencia al reloj de nuestra electrónica!!!)
VM[V], indicaremos el voltaje de nuestra fuente o en su defecto al que alimentemos nuestra electrónica o motores si estos disponen de una fuente dedicada a otro voltaje diferente
TBL, normalmente lo dejaremos en 1 ya que es un valor que suele ir bien en todos los motores de hasta 2A.
Dependiendo del fabricante se puede dar el caso que a partir de 1.5A (o si usamos drivers/motores HighVoltage) se puede sugerir utilizar 2. Es aconsejable en estos casos realizar los cálculos con ambos valores y revisar resultados.
L[H], la inductancia de nuestro motor que encontraremos en su datasheet en mH normalmente. Por ejemplo si nuestro datasheet nos indica 1.6mH pondremos 0.0016 como valor en la celda de a hoja
Rcoil[Ohm], este valor también lo obtendremos del datasheet de nuestro motor aunque también lo podremos obtener midiendo con un multímetro las bobinas de nuestro motor
Icoil(peak)[A], la corriente de pico de nuestros motores y que debería indicar nuestro datasheet, este valor no es el mismo que usamos en current en nuestro cfg de Klipper
toff, es un valor reactivo, lo dejaremos a 3 inicialmente
CS, este valor lo ajusta el driver basado en la corriente (y su resistencia) y lo usaremos para simular más adelante
En el caso que pongamos valores que esten en límites la hoja de cálculo nos mostrará avisos.
Una vez ajustado todo los valores que nos van a interesar son los que aparecen en la sección de color azul Register values for CHOPCONF register bits, no las dos celdas bajo Desired value.
Lo siguiente será ajustar manualmente los valores de CS hasta que RSENSE using VSENSE=1 al final de la hoja sea igual a nuestro sense resistor, normalmente 0.110 Ohms en motores de impresora 3D. Nos interesa mantener el valor CS bastante alto para que nuestros micropasos funcionen correctamente, la propia hoja de cálculo nos avisará si usamos un valor demasiado bajo.
Cuando encontremos nuestro valor CS óptimo:
usaremos los valores en la sección azul antes comentada y los ajustaremos en nuestra configuración de Klipper en driver_HSTRT y driver_HEND
también ajustaremos driver_TBL y driver_TOFF con los valores indicados en la parte de arriba de nuestra hoja... normalmente 1 y 3 respectivamente
ajustaremos nuestro valor run_current usando Icoil (RMS)[A]
Recordemos que tal como os comentamos para el eje Z no haremos estos cálculos
Vamos a usar como referencia un motor OMC 17HM19-2004S1 de 48mm y 0.9º donde encontramos en su datasheet 1.45 ohm como resistance y 4 mH como inductancia además de usar 1 A como corriente RMS.
Dejaremos TBL a 1 y TOFF a 3. Ajustando CS para obtener un valor de 0.110 en VSENSE=1 que obtubimos con un CS de 31 y una corriente ICoil(Peak)[A] a 1.38A.
Usaremos el valor de Icoil (RMS)[A], de 0.976 A como el valor de run_current.
Por último los valores de la sección azul CHOPCONF register bits que deberían ser 0 para HSTRT y 3 para HEND.
Además os aconsejamos realizar pruebas con los valores TBL y TOFF para ver como varia el resultado en nuestra máquina.
Realizaremos los mismos cálculos para el resto de ejes de movimiento en el caso que usemos diferentes componentes/ajustes.
Es importante recalcar que estos valores obtenidos son simplemente como punto de referencia y que es posible que, ya sea por hacer los cásculos de forma incorrecta o por peculiaridades de los componentes/mecánica de nuestra máquina, requieran de ajustes manuales en base a tests o simplemente mejor dejarlos deshabilitados.
En cualquier caso si se hace un ajuste manual solamente os aconsejariamos tocar los siguientes valores:
driver_TBL, este tiempo debe cubrir de forma segura los eventos de conmutación del driver TMC. Tal como comentamos anteriormente un valor de 1 o 2 (dependiendo de las especificaciones o características del motor) debería funcionar bien para la mayoría de máquinas normales, pero cargas capacitivas más altas pueden requerir que se ajuste en 3. Podemos utilizar este valor de 0 a 3. Aunque no suele ser aconsejable habilitar StealthChop, en el caso de que por requerimientos sea necesario, lo ideal es establecer este valor en 0.
driver_TOFF, establece el tiempo de caída lenta (tiempo de apagado) del ciclo de corte. Esta configuración también limita la frecuencia máxima de corte. Podemos usar este valor de 0 a 15. Si utilizamos velocidades muy altas en nuestra máquina a veces suele funcionar mejor ajustar el valor driver_TOFF a 1 o 2 y establecer un valor para driver_TBL corto de 1 o 0
Os aconsejamos mucho tener vuestra propia base de datos o documentar estos cálculos de drivers/motores diferentes. El uso de configuración modular mediante includes puede ayudarnos.
Es importante añadir comentarios en nuestra configuración donde guardemos información de nuestro tipo, modelo y características del motor:
Os aconsejamos este vídeo donde podréis ver el proceso:
Créditos y agradecimientos a MakerBogans
Dado que Klipper es un sistema modular y flexible la comunidad desarrolla extensiones para mejorar este.
Una de estas extensiones es Klipper TMC Autotune.
En nuestro caso y probado en varias máquinas, así como el feedback de usuarios de nuestros grupos, no siempre suele ir bien e incluso empeorar los resultados si no se ajusta correctamente.
Os aconsejamos realizar vuestros propios cálculos y tests primero con el método descrito en esta guía, comparar resultados con una configuración estándar... y si aún así queréis utilizar este TMC Autotune hacerlo pudiendo comparar con los dos tests anteriores.