Migrando la Anet A8 a una MKS Base V1.5


Hola amigos, en la publicación de esta semana quiero compartir mi experiencia con respecto a la actualización que le hice a la tarjeta de mi impresora 3D Anet A8 por una MKS Base V1.5. Lo cierto es que estuve investigando bastante en los foros de RepRap y Thingiverse y no hay mucha información clara y específica, por lo que me di a la tarea de preparar esta publicación. Espero les sea de utilidad.

Te recomiendo que primero leas todo el artículo y después realices las actividades.

Prerrequisitos

El primer paso consiste en descargar el compilador Arduino IDE desde http://www.arduino.cc/en/Main/Software. Si usas Windows puedes descargar la versión instalable o la portátil que no requiere instalación, elige la que mejor consideres, pero yo te recomiendo que sea a partir de la versión 1.8.0 e instalable para que se carguen los controladores de Arduino en tu computadora.

También debemos descargar la última versión de Marlin Firmware desde la web oficial http://marlinfw.org/meta/download. Una vez que se haya descargado, descomprime el archivo en alguna carpeta de tu disco duro. La versión que programaremos en este tutorial es la 1.1.6.

Antes de conectar todos los cables, te recomiendo que primero conectes solamente el puerto USB de la MKS Base V1.5 con tu computadora. De esta manera, Windows deberá detectar automáticamente la tarjeta e instalará los controladores Arduino que hagan falta. Si los drivers no se instalan, puedes descargarlos de este enlace:

Marlin contiene una gran cantidad de archivos y puede parecer complicada su configuración pero la realidad es que es bastante sencillo de manejar y una vez que comprendes su funcionamiento, podrás hacer los ajustes sin mayor problema.

En Marlin solo tenemos que modificar el archivo Configuration.h, desde el editor de Arduino. Para abrir este archivo, debemos iniciar una sesión de Arduino IDE y cargar el archivo Marlin.ino; al hacer esto, se abrirán todos los archivos de código que se relacionan con el firmware y entre las pestañas deberemos ubicar el Configuration.h y comenzar a editarlo:

Configurando Marlin

A partir de aquí todas las modificaciones se harán sobre el archivo Configuration.h.

Información de Hardware

  1. Primero debemos seleccionar cómo se va a comunicar la motherboard con el host, que en nuestro caso podría ser la misma PC o una Raspberry Pi. Dado que dicha conexión se realiza por medio de un cable USB, entonces:
    #define BAUDRATE 115200
  2. Lo siguiente consiste en decirle a Marlin, cuál tarjeta o motherboard estamos instalando. La lista completa de tarjetas compatibles con Marlin la encuentran en este enlace. Para nuestro caso, estamos instalando una MKS Base V1.5, sin embargo yo tuve muchos problemas seleccionando BOARD_MKS_13, la cual en teoría correspondería con nuestra tarjeta, pero aquí el truco es que elijan:
    #ifndef MOTHERBOARD
      #define MOTHERBOARD BOARD_RAMPS_14_EFB
    #endif
  3. Bautiza tu impresora y ponle un nombre. En la siguiente línea puedes ponerle un nombre a tu impresora, mismo que se mostrará en la pantalla LCD (si es que tienes un LCD compatible):
    #define CUSTOM_MACHINE_NAME "NiftyMaker"
  4. Asígnale un identificador único (UUID). Si tienes varias impresoras, Cura o el slicer que usas tomará este número para diferenciar cada impresora. Puedes generarlo en este enlace y lo defines en la siguiente línea:
    #define MACHINE_UUID "040b7d67-b251-421a-90d5-e742c60ddea7"

Información del Extrusor

  1. Asumiendo que estamos migrando desde la configuración original de la Anet A8 con un solo extrusor, entonces le decimos a Marlin que solo tenemos uno:
    #define EXTRUDERS 1

    Si tienes 2 o más extrusores, entonces deberás cambiar el valor correspondiente, pero además configurar cada uno de los extrusores de manera independiente. Ese tema no lo tocaré hoy porque no es mi caso.

  2. De ahí, saltaremos hasta casi el final del archivo hasta la línea en la que definimos el diámetro nominal del filamento que estaremos trabajando y elegimos 1.75 o 3 mm.
    #define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

    Aquí es importante aclarar que solo se está refiriendo al diámetro nominal del filamento y no al diámetro real. El diámetro real se indica durante el proceso de rebanado en Cura o Slicer. Lo más común es elegir 1.75, pero si tu utilizas filamentos de 3 mm, entonces cambialo por 3.00 (incluyendo el punto y los ceros).

Fuente de poder (PSU)

Lo siguiente consiste en definir el tipo de fuente de poder que se utiliza con la impresora:

#define POWER_SUPPLY 0

Aquí es importante que elijas el valor que mejor corresponda con tu caso:

  • Elige 0 si utilizas la fuente de poder que vino incluida con tu impresora Anet A8 (sin switch de encendido).
  • Elige 1 si utilizas una fuente de poder de computadora de escritorio tipo ATX. En mi caso yo utilizo un ATX CoolerMaster Elite 460
  • Elige 2 si tu fuente de poder es la del Xbox 360 modificada (yo tampoco sabía que se podía hacer eso).

Actualización 01/02/2018: Independientemente de si tienes una fuente de poder ATX o no, se sugiere que utilices el valor 0 para evitar conflictos con la sincronización de los motores Z cuando conectas el Z2 al conector E1. Para más información puedes leer este issue de Marlin en GitHub.

Configuración de los termistores

Los sensores de temperatura son elementos fundamentales de nuestra impresora, por lo que es muy importante tenerlos configurados y calibrados adecuadamente para que las lecturas de temperatura sean las correctas.

  1. En el apartado de Thermal Settings de nuestro Configuration.h se enlistan todos los modelos de termistores compatibles con Marlin. Para el caso de la Anet A8, los termistores empleados son los del valor 5.
    #define TEMP_SENSOR_0 5
    #define TEMP_SENSOR_1 0
    #define TEMP_SENSOR_2 0
    #define TEMP_SENSOR_3 0
    #define TEMP_SENSOR_4 0
    #define TEMP_SENSOR_BED 5

    El TEMP_SENSOR_0 corresponde al termistor del extrusor principal (en nuestro caso el único) y el  TEMP_SENSOR_BED al de la cama caliente. Si no tuvieras cama caliente, entonces debes asignarle el valor 0. Marlin recomienda que si no encuentras tu termistor entre los de la lista, elijas el valor 1, que corresponde al perfil genérico.

  2. ¿Has notado que justo antes de iniciar una impresión, cuando se alcanzan las temperaturas iniciales la impresora hace una pausa antes de comenzar la secuencia de inicio? A esa pausa se le llama tiempo de residencia y es el tiempo que debe conservarse la temperatura antes de la secuencia de G-code inicial. Ese tiempo de residencia se define aquí y lo recomendable es colocarlo en 6:
    #define TEMP_RESIDENCY_TIME 6

    Y para la cama caliente:

    #define TEMP_BED_RESIDENCY_TIME 6

Configuración PID del extrusor

La configuración PID se refiere a una serie de constantes (Kp, Ki y Kd) que utiliza Marlin para estabilizar la temperatura de los componentes de la impresora. Los valores PID dependen de factores como el tipo de ventilación del extrusor que utilizamos, la potencia de los ventiladores, el voltaje de la fuente de poder, entre otros.

En el video que les comparto a continuación (no es mío), explican cómo se pueden determinar los valores PID correspondientes a tu impresora:

Sin embargo, existen valores predeterminados que puedes utilizar de manera temporal y después cambiarlos por los tuyos. Aquí es importante que agregues barras // en los valores de Ultimaker (para anular esos valores) y agregues las líneas correspondientes a la Anet A8, de tal forma que quede de la siguiente manera:

// ANET A8 Standard Extruder at 210 Degree Celsius and 100% Fan
//(obtenidos mediante M106 S255 con M303 E0 S210 C8)
#define  DEFAULT_Kp 21.0
#define  DEFAULT_Ki 1.25
#define  DEFAULT_Kd 86.0

Configuración PID de la cama caliente

De manera similar al PID del extrusor, también se deben determinar los de la cama caliente, ya que algunos usan camas con cristal de borosilicato, otros con vidrio templado, o simplemente aluminio. Estos factores modifican la forma como se distribuye el calor en la cama y es necesario calibrarlo adecuadamente.

En el mismo video de arriba se explica el procedimiento para determinar los valores PID de la cama caliente, sin embargo, los valores estándar de la Anet A8 son los siguientes:

#define  DEFAULT_bedKp 	10.00
#define  DEFAULT_bedKi 	0.023
#define  DEFAULT_bedKd 	305.4

Puedes utilizar estos valores o determinar los tuyos.

Configuración cinemática

Los siguientes valores a configurar son los correspondientes con los motores, los ejes, las bandas, el desplazamiento de X, Y y Z, entre otros factores.

Configuración de los endstops

Para la Anet A8, cambia a true X_MIN, Y_MIN, Z_MIN y Z_MIN_PROBE. Lo demás déjalo en false:

#define X_MIN_ENDSTOP_INVERTING true
#define Y_MIN_ENDSTOP_INVERTING true
#define Z_MIN_ENDSTOP_INVERTING true
#define X_MAX_ENDSTOP_INVERTING false
#define Y_MAX_ENDSTOP_INVERTING false
#define Z_MAX_ENDSTOP_INVERTING false
#define Z_MIN_PROBE_ENDSTOP_INVERTING true

Configuración de los motores

Dado que la tarjeta MKS Base V1.5 solamente tiene un conector para el motor Z y dos conectores para el extrusor, lo que vamos a hacer es configurar los motores de la siguiente manera:

  • El motor X en el conector X.
  • El motor Y en el conector Y.
  • El motor Z1 en el conector Z.
  • El motor E en el conector E0.
  • El motor Z2 en el conector E1.

Tenemos que decirle que el conector E1 funcionará como Z2. Para lograrlo haremos los siguientes cambios:

  1. Nos cambiamos a la pestaña del archivo Configuration_adv.h
  2. Buscamos la línea 281 y borramos la doble diagonal para que quede así:
    #define Z_DUAL_STEPPER_DRIVERS

    Al activar esta función, Marlin interpretará que el conector E1 funcionará como Z2.

  3. Volvemos al archivo Configuration.h y editamos las siguientes líneas:
    #define INVERT_X_DIR 	true
    #define INVERT_Y_DIR 	false
    #define INVERT_Z_DIR    true
    #define INVERT_E0_DIR   false
    #define INVERT_E1_DIR   false
    #define INVERT_E2_DIR   false
    

Si después quisiéramos agregar un segundo extrusor a nuestra impresora, será necesario cambiar la forma cómo funciona Z, ya sea conectando ambos motores Z en un circuito en serie o utilizando una modificación para que Z funcione con un solo motor (más adelante explicaré cómo hacer esto).

Configuración de movimiento

Los parámetros que se van a configurar a continuación corresponden a los pasos que deben dar los motores para que el desplazamiento de las bandas sea lo más preciso posible en cuanto a milímetros en X, Y y Z. Aquí le vamos a decir a Marlin las características de nuestros motores, poleas y bandas o cintas de desplazamiento.

  1. Para los componentes de la Anet A8, se pueden definir los siguientes valores predeterminados:
    #define DEFAULT_AXIS_STEPS_PER_UNIT   { 100, 100, 400, 105 }
    #define DEFAULT_MAX_FEEDRATE          { 400, 400, 8, 50 }
    #define DEFAULT_MAX_ACCELERATION      { 2000, 2000, 100, 10000 }
  2. Después cambiamos los parámetros de aceleración por los siguientes valores:
    #define DEFAULT_ACCELERATION          400
    #define DEFAULT_RETRACT_ACCELERATION  1000
    #define DEFAULT_TRAVEL_ACCELERATION   1000
    
    #define DEFAULT_XJERK 20.0
    #define DEFAULT_YJERK 20.0
    #define DEFAULT_ZJERK 0.3
    #define DEFAULT_EJERK 5.0

    Todos estos valores pueden cambiarse y variar de acuerdo a los parámetros de cada quien. De hecho, estos pequeños cambios son los que nos pueden ayudar a aumentar la precisión de la impresora, por lo cual les recomiendo que vean la calculadora de Prusa y hagan sus propios cálculos.

  3. Lo siguiente es configurar las dimensiones de la cama caliente, la cual es de 220 x 220 mm para el modelo incluido con la Anet A8. Estos valores se definen en las siguientes líneas:
    #define X_BED_SIZE 220
    #define Y_BED_SIZE 220
  4.  Ahora vamos definir la distancia entre el endstop y el borde de la cama caliente. Para el caso del eje X, existe una distancia horizontal entre el borde de la cama y la posición del home de 34 mm, de 10 mm con respecto al eje Y y dejamos el valor de Z en 0. Entonces editamos las siguientes líneas:
    #define X_MIN_POS -34
    #define Y_MIN_POS -10
    #define Z_MIN_POS 0

    Con estos parámetros le estamos diciendo a Marlin que cuando ejecutamos el auto-home con G28, el extrusor se encuentra a 33 mm por fuera de la cama en X y 10 mm en Y. Después definimos el valor máximo de Z en 230 mm:

    #define Z_MAX_POS 230

Configuración del Z-probe (para sensores autoelevables)

Si no tienes un sensor Z autoelevable, entonces omite por completo esta sección. En caso contrario, tenemos que decirle a Marlin el tipo de sensor Z-probe que tenemos instalado y su posición XY con respecto al extrusor.

  1. Para definir la existencia del sensor, elimina la doble diagonal en el siguiente código:
    #define FIX_MOUNTED_PROBE

    Esta opción funciona para los sensores autoelevables tipo Tronxy o similares. En cambio, si tienes un BLTouch, deberás quitar las barras diagonales en #define BLTOUCH

  2. El siguiente paso consiste en decirle a Marlin, la posición XY (en milímetros) del Z-probe con respecto al extrusor. Aquí los valores dependerán de cada tipo de soporte de Z-probe que tengan instalado. Yo utilizo este soporte trasero, el cual coloca a mi sensor a 18 mm a la derecha del extrusor y 60 mm hacia atrás; entonces el código quedaría así:
    #define X_PROBE_OFFSET_FROM_EXTRUDER 18
    #define Y_PROBE_OFFSET_FROM_EXTRUDER 60

    Aquí es importante mencionar que si el Z-probe se encuentra hacia atrás o a la derecha del extrusor, la distancia debe ser positiva; pero si está a la izquierda o al frente, entonces es negativa.
    Si utilizan el soporte de acrílico que viene con el Z-probe que venden en Gearbest, entonces utilicen -21 en X y -43 en Y o hagan sus propias mediciones.

  3. Lo siguiente es configurar los parámetros de nivelación automática de la cama caliente. Igual que en el paso anterior, los valores que les presento a continuación aplican para la posición de mi Z-probe con el soporte trasero que les comenté. Lo primero será eliminar la doble diagonal en:
    #define AUTO_BED_LEVELING_LINEAR

    Después le decimos a Marlin los puntos donde deseamos que realice las mediciones de autolevel cuando ejecuta el comando G29. En mi caso sería lo siguiente:

    #define LEFT_PROBE_BED_POSITION 50
    #define RIGHT_PROBE_BED_POSITION 180
    #define FRONT_PROBE_BED_POSITION 60
    #define BACK_PROBE_BED_POSITION 180

    De manera alternativa, si utilizan el soporte de acrílico del Z-probe que mencionaba anteriormente, puedes utilizar los siguientes parámetros:

    #define LEFT_PROBE_BED_POSITION 20
    #define RIGHT_PROBE_BED_POSITION 160
    #define FRONT_PROBE_BED_POSITION 20
    #define BACK_PROBE_BED_POSITION 160

    La diferencia entre estas dos configuraciones es para evitar que el Autobed leveling (G29) no se haga fuera de la cama, lo cual puede resultar desastroso e incluso dañar irreparablemente tus motores Z, tu sensor autoelevable, el extrusor o incluso la integridad de la cama caliente.

  4. Ahora, hay que borrar la doble diagonal en:
    #define Z_SAFE_HOMING

    Este parámetro nos previene de cualquier posibilidad de que el Z-home se haga fuera de la cama caliente.

  5. Por último tenemos que activar la siguiente función para que el Autobed leveling y el Safe homing puedan funcionar:
    #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

    Con este código le estamos diciendo a Marlin que se va a utilizar el mismo sensor Z-probe para hacer el cálculo de autonivelación.

Configuración de hardware

LCD, SD y ventiladores

Si aún conservamos la pantalla LCD que venía con la Anet A8 (2004LCD), les tengo una mala noticia: esta pantalla no es compatible con la MKS Base V1.5  porque los chinos cablearon de manera diferente el bus (cable gris plano). Entonces tenemos que decirle a Marlin que deshabilite el LCD. Para ello debemos asegurarnos de que ninguna de las opciones de controladoras de LCD esten activas en la sección LCD and SD Support.

Y dado que la MKS Base V1.5 tampoco tiene puerto SD, también tenemos que deshabilitar esta función:

//#define SDSUPPORT

La verificación del SD es uno de los parámetros de arranque de Marlin, por lo que es muy importante deshabilitarla, ya que si no lo hacemos, tendremos errores en el arranque y posiblemente no podremos utilizar la impresora.

En la MKS Base V1.5 el ventilador que se encarga de disipar el calor del extrusor se conecta directamente a la corriente eléctrica. Es por ello que debemos de decirle a Marlin que controle los ventiladores desde ahí por lo que debemos activar:

#define FAN_SOFT_PWM
#define SOFT_PWM_SCALE 0

Es hora de compilar Marlin

Hasta aquí son todos los parámetros que deben configurarse para que la impresora funcione con nuestra MKS Base V1.5. Lo siguiente será compilar Marlin y subirlo a la placa para que se apliquen las configuraciones. Estos serían los pasos:

  1. En el menú de Arduino seleccionamos HERRAMIENTAS » PLACA » ARDUINO MEGA O MEGA 2560

  2. Después en HERRAMIENTAS » PROCESADOR » ATmega2560 (Mega 2560)
  3. Si ya tienes conectada la placa por medio del cable USB, tendrás que elegir el puerto donde Arduino la debe de encontrar, ya sea COM1 o COM# según sea tu caso:
  4. Seleccionamos el tipo de compilador que se va a utilizar en HERRAMIENTAS » PROGRAMADOR » AVRISP mkII:
  5. Si ya tienes todo listo, lo siguiente es darle FUEGO! seleccionando ARCHIVO »  Subir o presionando CTRL + U:

Si todo sale bien, Marlin se habrá cargado en tu MKS Base V1.5 en un par de minutos. A menos de que te muestre algún error, aunque no debería. Si tienes algún problema, deja tu comentario al final del post.

Adaptando el cableado en la MKS Base V1.5

Si ya has hecho el intento por conectar todos los componentes de la impresora a la MKS Base V1.5, te habrás dado cuenta de que algunos conectores son diferentes a los de la Anet Board. Es por ello que resulta necesario hacer algunas adecuaciones al cableado para que los conectores coincidan con los pines de la tarjeta.

Endstops

El primer paso será adaptar los conectores de los endstops. En la Anet A8, los cables negro y rojo están en un conector de 3 pines, con un hueco en medio; pero para la MKS Base V1.5 debemos cambiar el cable negro hacia el pin central y después los enchufamos al conector X-, Y- y Z-, respectivamente.

Cableado de endstops en la MKS

La foto anterior aplica para los endstops XYZ mecánicos que venían originalmente con la Anet A8. Pero si al igual que yo, tienes un Z-probe inductivo tipo Tronxy, entonces tienes que cambiar también el cableado a como venía originalmente de fábrica. Esto lo menciono porque para el correcto funcionamiento de este sensor en la Anet Board, era necesario intercambiar la posición del cable café por la del azul,  y ahora en la MKS Base V1.5 es necesario regresarlo a como estaba. Entonces debe quedar de la siguiente manera:

Termistores

Para conectar los termistores vamos a necesitar 2 conectores tipo JST-XH hembra de 2 pines (también conocidos como conectores en arnés de 2 pines). Si no los tienes al alcance, puedes tomar uno de estos conectores del ventilador del extrusor (FAN1) o incluso de los 2 ventiladores, ya que es más importante conectar los dos termistores para poder imprimir y prescindir temporalmente del ventilador del motor E (FAN2).

Primero separas los cables de los termistores de su respectivo conector de 3 pines y los insertas en el conector de 2 pines que le quitaste a los ventiladores; aquí no importa la polaridad, es decir, que es indiferente el orden de los cables en los conectores. El termistor de la cama caliente debe conectarse en A14, mientras que el del extrusor en A13. Guíate con la siguiente imagen:

Conexión de los termistores a la MKS Base V1.5

Ventiladores

Si ya reciclaste el conector de 2 pines del FAN1, entonces ahora toca cortarles la punta y desnudarlos para insertarlos en los terminales con la nomenclatura FAN, a un costado de los conectores de corriente de la cama caliente. En la siguiente imagen se muestra el orden de las conexiones.

Conexiones de la MKS Base V1.5

Para el segundo ventilador (FAN2) que corresponde al del motor del extrusor (que en mi opinión no sirve para nada), vamos a utilizar un tercer conector JST-XH de 2 pines y lo vamos a conectar en el enchufe de FAN1 de la MKS Base V1.5.


A partir de aquí ya estamos listos para terminar de conectar tanto los calentadores del extrusor como de la cama caliente, así como los mosfets de cada uno (si es que los tienen)… y que empiece la diversión!

Si te ha gustado este artículo, regálame un like o compártelo en tus redes.

Compártelo: