Configuración del firmware

Para que la impresora funcione, la placa que controla todas las funciones es la combinación de un Arduino MEGA + RAMPS 1.4 que contiene los drivers para el manejo de los motores paso a paso.

En esta guia de configuración se va a hacer referencia a porciones de código pertinente para el funcionamiento de la impresora, el firmware que se utilizará es el Marlin del cual hay una versión subida al servido en forma de .tar.gz a modo de snapshot, si eventualmente se requiera actualizar se puede clonar el Repositorio Oficial.
A continuación se hace referencia a lo mas importante en la configuración básica de la impresora. Para más información consultar la Documentación Oficial .

Configuración de versión

 #define CONFIGURATION_H_VERSION 010100 

Esta opción dentro del firmware es de utilidad cuando uno está en el proceso de calibración o actualización, y de alguna manera uno tiene que ir versionando la modificaciones que uno hace.


Información de Hardware

Serial Port

 #define SERIAL_PORT 0 

Si bien el puerto serie 0 es el que se usa por defecto, dependiendo la placa utilizada requerirá el cambio de puerto al adecuado.

Baud Rate

 #define BAUDRATE 115200 

La comunicación serie con la impresora debería ser lo mas rápida posible, con lo cual es acosejable usar una velocidad de 250000, sin embargo algunos drivers y el uso de cables usb no mallados puede llevar a errores aleatorios en la comunicación con el dispositivo, por lo tanto de encontrarse errores se aconseja disminuir la velocidad de conexión hasta que la comunicacón sea estable. Los valores permitidos son: 2400, 9600, 19200, 38400, 57600, 115200, 250000.

Motherboard

 #define MOTHERBOARD BOARD_RAMPS_14_EFB 

Esta opción en la configuración es la más importante dentro del firmware, define la placa que estamos usando en la impresora y establece las configuraciones básicas a nivel microcontrolador para un óptimo desempeño.
Haciendo usdo del archivo board.h como referencia, reemplazar BOARD_RAMPS_14_EFB por el identificador de placa apropiado. Dentro de board.h están todas las placas soportadas por el firmware, y diferentes configuraciones para la RAMPS 1.4. Para más información consultar la Documentación Oficial

Machine UUID

 #define MACHINE_UUID "00000000-0000-0000-0000-000000000000" 

Esta opción establece un Identificador Unico Universal, esto es altamente recomendable a la hora de discriminar entre varias impresoras instaladas a una mismo sistema, para poder generar un identificador se puede entrar en este UUID Generator . Más sobre UUID .

Extrusores

 #define EXTRUDERS 1 

Este valor, que va de 1 a 4, establece cuantos extrusores tendrá la impresora. Por defecto Marlin asume que cada extrusor tiene una boquilla independiente y que se mueven todas juntas en un mismo carro. En caso de tener y querer configurar más de un extrusor, consultar la Documentación Oficial .

Power Supply

 #define POWER_SUPPLY 1 

Se usa esta opción para especificar que tipo de fuente se está utilizando. Marlin usa ésta opción para decidir como prender o apagar la fuente, las opciones son Nada (0), ATX (1) y X-Box 360 (2). Por ejemplo si se elige ATX (Que son las fuentes de computadora) el arduino puede usar un pin especial para poder encender la fuente. En este caso como se va a usar una fuente switching para tiras de LED elegimos la opción 0.


Opciones de Temperatura

Sensores de Temperatura

#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_BED 3  

Los sensores de temperatura son una parte escencial de las impresoras 3D, son los encargados de mantener la temperatura estable y que no se termine escalando descontroladamente hasta destruis por completo la impresora, como en el mercado existen infinidad de modelos y precisiones, se le debe especificar al firmware que tipo de sensor es utilizado. Para saber que sensor especificar consultar thermistornames.h.

Estabilidad de la temperatura

En caso de que la impresora se pare completamente y muestre el error Error:Thermal Runaway, system stopped! Heater_ID: bed o Error:Thermal Runaway, system stopped! Heater_ID: hotend , por lo general el primero es el más probable. Este error en el caso de la cama caliente es debido a que no calienta lo sificientemente rápido o esta muy en los límites de temperatura dentro del rango establecido, es por eso que a conciencia hay modificar lo siguiente:

#define TEMP_RESIDENCY_TIME 10  // (seconds)
#define TEMP_HYSTERESIS 3       // (degC) range of +/- temperatures considered "close" to the target one
#define TEMP_WINDOW 1           // (degC) Window around target to start the residency timer x degC early. 

o para el caso de la cama caliente

#define TEMP_BED_RESIDENCY_TIME 10  // (seconds)
#define TEMP_BED_HYSTERESIS 3       // (degC) range of +/- temperatures considered "close" to the target one
#define TEMP_BED_WINDOW 1           // (degC) Window around target to start the residency timer x degC early. 

Rangos de Temperaturas

#define HEATER_0_MINTEMP 5
#define HEATER_1_MINTEMP 5
#define HEATER_2_MINTEMP 5
#define HEATER_3_MINTEMP 5
#define BED_MINTEMP 5 

Estos parámetros ayudan a prevenir que la impresora se sobrecaliente o incluso se prenda fuego. Los sensores de temperatura cuando fallan o se desconectan, por lo general reportan valores absurdamente bajos. Por lo cual lo más conveniente es establecer estos valores a las temperaturas más bajas que pueda experimentar la impresora.
Por otro lado podemos establecer los valores máximos de temperatura que la impresora puede soportar.

#define HEATER_0_MAXTEMP 285
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define BED_MAXTEMP 130

Las opciones arriba expuestas establecen los valores máximos de temperatura, si el firmware detecta alguna temperatura por encima de estos valores, la impresora automáticamente se bloqueará y dejará de calentar para evitar daños al hardware.


Configuración de Movimientos

El firmware Marlin soporta cuatro tipos de arreglo de movimientos, estos son Cartesian, Core (H-Bot), Delta y SCARA. Por defecto el tipo de movimiento que está configurado es el Cartesian (y el que se va a usar en las impresoras que se esta armando aquí) y es el arreglo más fácil de los cuatro ya que se conecta un motor directamente por cada eje. De querer usar cualquiera de las otras configuraciones se debe descomentar los siguiente:

CoreXY

//#define COREXY
//#define COREXZ
//#define COREYZ
//#define COREYX
//#define COREZX
//#define COREZY

Delta

//#define DELTA

SCARA

//#define SCARA

Para mas información de como configurar estos tipos de arreglos consultar la Documentación Oficial

Fines de Carrera (Endstops)

En sistema de lazo abierto (sin realimentación), una forma de establecer la posición del carro en todos los ejes es a traves de los fines de carrera en el proceso denominado "homing" en el cual se determina el "0" de cada uno de los ejes desde los cuales cuenta los pasos para establecer el movimiento en todos los ejes.

Conectores de Fines de Carrera (Endstops Plugs)

#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG

Especifica todos los conectores de fines de carrera que tiene que usar, se puede usar los endstop MIN para el "homing", también se puede usar los MAX para determinar el recorrido máximo de cada uno de los ejes.

Endstop Pullups

#define ENDSTOPPULLUPS

#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

Inversión de Endstop

// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#define X_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING false // 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 endstop.

Dependiendo de como se encuentren cableados los endstop, será necesario invertir la acción de los mismo para un funcionamiento óptimo.

Movimientos

Velocidad de Homming

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

La velocidad de homming es utilizada para el auto-home y auto-nivelación de la cama. Los valores por defecto son los máximo que una impresora puede usar. En el caso que los motores del eje-z vibren sin moverse, habrá que procurar reducir la velocidad en este eje.

Pasos por mm

/**
 * Default Axis Steps Per Unit (steps/mm)
 * Override with M92
 *                                      X, Y, Z, E0 [, E1[, E2[, E3]]]
 */
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 4000, 500 }

Estas son las opciones más importantes para la impresora, ya que determina que tan preciso será el movimiento del carro sobre los ejes. Con estos datos le estamos diciendo al firmware cuando pasos debe dar el motor para que se mueva un milimetro.
Estos valores responden a una ecuación y se pueden calcular de la siguiente manera:

Pasos para los ejes "X" e "Y"

Pasos eje X/Y = ((NEMA17_PASOS * NEMA17_MICROPASOS) / (PASO_ENTRE_DIENTES_DE_POLEA * DIENTES_DE_POLEA))
  • NEMA17_PASOS = Son los pasos completos que puede dar el motor Paso a Paso, este valor ya viene en las especificaciones del mismo.
  • NEMA17_MICROPASOS = Son los micropasos que puede legar a realizar el motor, este es realizado a nivel driver y se debe configurar previamente con jumpers. Por lo general la cantidad de micropasos dependerá del driver utilizado.
  • PASO_ENTRE_DIENTES_DE_POLEA = Es el espacio de separacion que hay entre dientes que tiene la correa.
  • DIENTES_DE_POLEA = La cantidad de dientes que tiene la polea que transmite el movimiento a la correa.

Pasos para el eje "Z"

 ((NEMA17_PASOS * NEMA17_MICROPASOS) / Z_PASO_VARILLA ROSCADA) 
  • Z_PASO_VARILLA ROSCADA = Es la distancia entre dientes de la varilla roscada para el movimiento del eje Z.

Pasos para el Extrusor "E"

((NEMA17_PASOS * NEMA17_MICROPASOS) * (DIENTES_ENGRANAJE_EXTRUSOR / DIENTES_POLEA_EXTRUSOR) / (PI * HOBBED_BOLT_DIAMETRO))
  • DIENTES_ENGRANAJE_EXTRUSOR = La cantidad de dientes que tiene el engranaje grande del extrusor.
  • DIENTES_POLEA_EXTRUSOR = La cantidad de dientes que tiene la polea que se acopla directamente al motor del extrusor.
  • HOBBED_BOLT_DIAMETRO = Es el diametro efectivo del Hobbed Bolt, el diametro de la canaleta estriada que empuja al plástico hacia el hotend.

Aceleraciones

Aceleraciones máximas por defecto

/**
 * Default Max Acceleration (change/s) change = mm/s
 * (Maximum start speed for accelerated moves)
 * Override with M201
 *                                      X, Y, Z, E0 [, E1[, E2[, E3]]]
 */
#define DEFAULT_MAX_ACCELERATION      { 3000, 3000, 100, 10000 }

Cuando la velocidad de cada eje cambia, su aceleración (o desaceleración) en [mm/s^2] es limitada a los valores arriba descriptos.


Drivers de Motores Paso a Paso

Habilitación de los motores

#define X_ENABLE_ON 0
#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
#define E_ENABLE_ON 0 // For all extruders

Estas opciones establece en que estado de pin se habilita los drivers (hay drivers que el pin en 0 (LOW) se habilita, y otros que lo hace con el pin en 1 (HIGH)).

Dirección de los motores

#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
#define INVERT_E3_DIR false

Una vez cableada la impresora y conectado los motores, puede que el sentido de giro de los mismo no sea el correcto, es por eso que con estas opciones se puede invertir desde el sofstware.


Homming y límites de la zona de impresión

Altura de Homing para el eje z

//#define Z_HOMING_HEIGHT 4

Con este valor, cuando se manda el comando de homing, el firmware levanta el extrusor una cantidad de milimetros establecido por el parámetro arriba descripto, esto es útil ya que como en muchos casos el vidrio de la cama caliente esta sujetas con pinzas para papel por lo general. Con esta opción se evita que el hotend termine chocandose con cualquiera de estas pinzas.

Dirección de Homing

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

En el caso que la dirección donde esta haciendo homing no es el correcto, con estos parámetros se puede invertir el sentido en el cual se debe hacer el homing en cada uno de los ejes de la impresora.

Límites de movimiento

#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS 200
#define Y_MAX_POS 200
#define Z_MAX_POS 170

Como en la configuración básica de la impresora se usa los endstop para la posicion mínima, lo ideal sería poder establecer los límites máximos para el recorrido en los tres ejes, los valores que recibe son en [mm]