viernes, 24 de abril de 2015

Pasos para calibrar una impresora 3D(Prusa-i3).

En esta entrada se describe un proceso para llegar a una impresión óptima con medidas reales (teniendo en cuenta un error admisible de 0,1mm aprox), siguiendo unos pasos que van descartando posibles causas que dificultan la calibración.

Si durante un tiempo de funcionamiento, nuestras impresiones comienzan a presentar deficiencias, se acerca el momento de realizar una re-calibración y continuar con el mantenimiento de la impresora 3D para evitar futuros fallos.




1ºPaso: Eliminar posibles fallos estructurales y mecánicos para tener la certeza de que el fallo sea de Configuración.

-Apretar toda la tornillería que soporta la estructura principal.Pueden estar flojos y producen vibraciones.

-Las varillas y rodamientos deben estar limpios. Limpiar la suciedad acumulada y la grasa con impurezas.

-Se revisa el cableado de la cama caliente y se repone cinta kapton para fijar los cables.

-Tensar las correas si notamos que vibran durante el movimiento de desplazamiento en los ejes, y si utilizamos un tensor de correa, debe mantener la tensión y esten paralelas sin doblar las correas.

-Revisar las conexiones de la electrónica, y fijar los cables previamente a la placa Arduino para que durante el movimiento en la impresión no se aflojen o produzcan problemas de conexión.

-Para finalizar este paso, imprimir un circulo de calibración, que se puede apreciar si se mantiene una retracción, extrusión y distancia constante y medir con un calibre si las medidas son reales.


2ºPaso: Medidas reales.

 Para descartar posibles fallos de configuración a nivel de Slic3r, marcamos en Arduino "medidas reales" modificando los parámetros del código(g-code).

Realizar pruebas de medida del movimiento con el calibre:
-Exactitud: Se marca un punto inicial, luego se realizan movimientos y se vuelve de nuevo al punto inicial. Si existe una variación, la impresora(motores) pierde pasos o la relación pasos/mm es incorrecta.

-Precisión: Se realizan desplazamientos desde pequeñas medidas(por ejemplo 0,5mm, 1,5mm, 3mm ...) a grandes distancias(por ejemplo 100mm, 150mm...) y se mide si el recorrido es correcto.
Con el método de la regla de 3 se ajusta en Arduino(STEP PER UNITS 80,80,4000,780) cada uno de los ejes y el extrusor, por ejemplo, si le damos desde el control manual al eje X un desplazamiento de 100mm, medimos con el calibre la distancia recorrida y medimos 96mm, realizamos el calculo para hallar el nuevo valor, y vamos afinando este valor hasta lograr que el desplazamiento sea el correcto.




NOTA:Este valor puede variar ligeramente dependiendo de la tensión de la correa.

 Un consejo para trabajar y hacer pruebas más rápidamente es utilizar a nivel de Repetier-Host la modificación de la escala del objeto, la extrusión, velocidad general, la temperatura y posteriormente esos valores adaptarlos al código de Arduino.

El control manual nos puede ayudar a realizar cambios simultaneos durante la impresión para contrastar varias modificaciones.

Tras estas pruebas, las conclusiones obtenidas son:

-Velocidad:
  • Velocidad lenta, mejora el perímetro.
  • No afecta a la cantidad de extrusión, porque la Arduino mantiene una proporción constante.
-Temperatura:
  • Temperatura del filamento, afecta a la densidad volumétrica del ABS.
  • A mayor temperatura, mas volumen, a menor temperatura, más fino, pero también menos adhesión.


NOTA:Cuando el material sale como si estuviera "frito", la temperatura parece mejorar(aunque más adelante se mejora aún más)

Esto ocurre por dos razones:
Si mantienes la temperatura alta, pero extruye rápidamente, el material sale bien, pero si bajas la velocidad, la extrusión también baja de la misma manera,y el material permanece durante más tiempo en el extrusor, y por esa razón sale como "frito".

Un registro sobre la temperatura media lo podemos obtener con la ventana gráfica del Repetier-Host.



Para regular la cantidad de material durante la extrusión se pueden utilizar varios caminos:

Para modificar la cantidad de material en los perimetros, relleno(infill), o soportes, cambiar los valores en la pestaña de advanced(print settings).Por ejemplo, si queremos añadir mas material en el perímetro, y tenemos un valor de 0.4mm, aumentar a 0,42 o 0,45 y comparar entre una mejora de apariencia y una variación en las medidas reales.
En 0, se aplica un valor por defecto donde Arduino calcula internamente el ancho de extrusión, por esta razón es recomendable tener valores con medidas reales a nivel de Arduino para no obtener resultados erróneos.

Con este valor modificamos de manera general la extrusión.Si notamos falta de extrusión en toda la pieza y tenemos un valor de 1, aumentar a 1.15 y comprobar si conseguimos mejorar el resultado.
Modificando el ancho de los perímetros y/o el extrusión multiplier se corrige el exceso o la falta de extrusión hasta equilibrarse.



NOTA:También se puede modificar la cantidad de material extruido modificando el valor del diametro del filamento(fill diameter), pero los cambios son más pronunciados que mediante el multiplicador de extrusión.


3ºPaso:Perfeccionamiento:

Una vez que logramos imprimir con medidas reales y ademas tener una extrusión buena, se pasa a mejorar la apariencia ajustando pequeños detalles.
Durante la práctica de calibrado, se determinaron varios factores, la temperatura de extrusión y la velocidad de extrusión

Comenzamos bajando la velocidad de extrusión en general, y luego se modifica la temperatura por distintas formas(ventilación o disminuición de temperatura).

La extrusión se marca en random, para eliminar el error por comenzar en el mismo punto, (salvo que se quiera comprobar la retracción)

Para disminuir la temperatura de extrusión, comenzamos aplicando el ventilador en la punta del extrusor y la mejora es visible desde la 1ªimpresión, el problema que podemos encontrar es que el flujo de ventilación no es regular en toda la superficie, y esto causa que se levanten las esquinas por la contracción del material en la parte más fría.

Tras varias pruebas, disminuimos la temperatura de extrusión de 236ºC a 232ºC y obtenemos un buen resultado(este factor puede variar dependiendo de la temperatura ambiente donde se encuentre la impresora 3D ubicada).

El tiempo de enfriamiento es de mucha importancia, es decir, si un cubo de calibración de 10x10x10 se observa que no llega a endurecerse por completo, es porque el extrusor se mantiene en un área muy pequeña realizando continuos movimientos sin dejar que la pieza se vaya solidificando.

Este problema para figuras y objetos muy pequeños puede solucionarse aprovechando para hacer varias impresiones simultáneas, así, el extrusor tardará más tiempo en cada capa y da tiempo a enfriarse cada capa, o aumentar el liftZ en cada cambio de capa.

Antes de terminar, fijamos una retracción adecuada.Si notamos huecos vacios en el perímetro, es por causa de excesiva retracción, cuando se produce un cambio de línea o de capa y retrae filamento, al continuar la siguiente capa durante unos instantes no sale filamento por el extrusor causando pequeñas imperfecciones.
Esto se corrige aumentando la distancia de relleno extra(Extra Length on re-start) justo antes de volver a imprmir.




Con estos pasos se asegura que nuestra impresora vuelve  a imprmir correctamente, manteniendo los valores reales, teniendo una apariencia óptima y un funcinamiento adecuado, sin ruidos ni vibraciones.  

Calibrar la extrusión de una impresora 3D

Un saludo a todos,
Ingenio Triana

7 comentarios:

  1. Hola al foro, dejo un video que explica de otra manera como calibrar la Anet a8 para que no se despeguen las piezas.

    https://youtu.be/1aidIqU8gso

    Saludos

    ResponderEliminar
  2. Hola a todos tengo un una duda como se podría aplicar la ecuación de precisión o Axis per units (de E) para el extrusor propiamente. me refiero a cual seria el procedimiento recomendado. gracias

    ResponderEliminar
    Respuestas
    1. Hola,

      1º abres tu código de Arduino y anotas el valor de axis step per units que tiene.

      2º Le das a extruir una cantidad 10mm por ejemplo. Con un calibre, mides la cantidad de filamento que introduce al extrusor marcando con una señal y midiendo varias veces para tener un resultado más preciso.

      3ºHaces la ecuación pero para el extrusor (E), por ejemplo, si tenia un axis step per unit de 700, y al darle a extruir 10mm extruye 8,7mm, la ecuación sería de la siguiente forma:
      X=(10 * 700) / 8,7 =804,59 y redondeando el valor, podemos escribir 804.5 .

      4º Repite este proceso varias veces, hasta afinar a los 10mm o el valor que elijas de referencia.

      NOTA: Durante el proceso de medición, ten parámetros de extrusión adecuados, como velocidad del extrusor y temperatura.

      Eliminar
  3. Aplica tambien para la Lion 2 de Leon 3D?

    ResponderEliminar
    Respuestas
    1. Hola Juan,

      Para usar alguno de estos métodos debes disponer de una impresora 3D al que tengas acceso al firmware de la máquina. Desconozco si la Lion 2 te permite acceder a dicha información, pero seguramente desde el software puedas realizar algunos ajustes.

      Coméntanos el software que utilizas para poder responderte con mayor seguridad.


      Un saludo,
      Ingenio Triana.

      Eliminar
  4. ¿Han podido probar el autonivelado? Me han dicho que es muy bueno pero la verdad creo que sera cuestion de consultar con ellos mismos antes de hacer una inversion, el link es este por si os interesa http://www.leon-3d.es

    ResponderEliminar

  5. Estimados soy nuevo en Impresoras 3D, me he armado una Prusa I3 con Mega 2560 Ramps 1.4, endstops Max y min XY no en Z, Cama MK2 y Extrusor MK9. Estoy teniendo un problema cuando realizo homing, este se va fuera de los limites establecidos sin respetar los endstops. Copio parte de firmware Marlin específicamente el archivo configuration.H. Me podrian dar una idea de como resolver este tema?



    //#define CONFIGURATION_H

    //============================== Endstop Settings ===========================
    // @section homing
    #define USE_XMIN_PLUG
    #define USE_YMIN_PLUG
    #define USE_ZMIN_PLUG
    //#define USE_XMAX_PLUG
    //#define USE_YMAX_PLUG
    //#define USE_ZMAX_PLUG

    #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors

    #if DISABLED(ENDSTOPPULLUPS)
    // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
    //#define ENDSTOPPULLUP_XMAX
    //#define ENDSTOPPULLUP_YMAX
    //#define ENDSTOPPULLUP_ZMAX
    //#define ENDSTOPPULLUP_XMIN
    //#define ENDSTOPPULLUP_YMIN
    //#define ENDSTOPPULLUP_ZMIN
    //#define ENDSTOPPULLUP_ZMIN_PROBE
    #endif

    // Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
    #define X_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
    #define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
    #define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
    #define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
    #define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
    #define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
    #define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the probe.


    // @section machine

    #define INVERT_X_DIR true
    #define INVERT_Y_DIR true
    #define INVERT_Z_DIR true

    // @section extruder

    // For direct drive extruder v9 set to true, for geared extruder set to false.
    #define INVERT_E0_DIR true
    #define INVERT_E1_DIR false
    #define INVERT_E2_DIR false
    #define INVERT_E3_DIR false
    #define INVERT_E4_DIR false

    // @section homing


    #define X_HOME_DIR -1
    #define Y_HOME_DIR -1
    #define Z_HOME_DIR -1

    // @section machine

    // The size of the print bed
    #define X_BED_SIZE 200
    #define Y_BED_SIZE 200


    #define X_MIN_POS 0
    #define Y_MIN_POS 0
    #define Z_MIN_POS 0
    #define X_MAX_POS X_BED_SIZE
    #define Y_MAX_POS Y_BED_SIZE
    #define Z_MAX_POS 190


    //#define MIN_SOFTWARE_ENDSTOPS
    #if ENABLED(MIN_SOFTWARE_ENDSTOPS)
    #define MIN_SOFTWARE_ENDSTOP_X
    #define MIN_SOFTWARE_ENDSTOP_Y
    #define MIN_SOFTWARE_ENDSTOP_Z
    #endif

    #define MAX_SOFTWARE_ENDSTOPS
    #if ENABLED(MAX_SOFTWARE_ENDSTOPS)
    #define MAX_SOFTWARE_ENDSTOP_X
    #define MAX_SOFTWARE_ENDSTOP_Y
    #define MAX_SOFTWARE_ENDSTOP_Z
    #endif


    //#define Z_SAFE_HOMING

    #if ENABLED(Z_SAFE_HOMING
    #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axes (G28).
    #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axes (G28).
    #endif

    // Homing speeds (mm/m)
    #define HOMING_FEEDRATE_XY (50*60)
    #define HOMING_FEEDRATE_Z (4*60)

    ResponderEliminar