Firmware Marlin para 3D en ruso. Calibrando la mesa

He estado usando el firmware Marlin Kimbra (MagoKimbra / MK4duo) durante mucho tiempo (aproximadamente medio año).

este es un firmware Marlin revisado por la comunidad italiana RepRap. El firmware es interesante porque se puede ejecutar tanto en cerebros de 8 bits como en cerebros de 32 bits en la placa Arduino DUE junto con la RAMPS4Due de bajo presupuesto.

Puede descargar el firmware y familiarizarse con la lista de sus características en la dirección oficial del firmware en github.

También quiero decir que en comparación con el clásico Marlin, el firmware es mucho más fácil de configurar. Esto se debe al hecho de que todas las configuraciones están agrupadas en diferentes pestañas. No es necesario cavar una enorme tela de configuración. Muy cómodamente.

El firmware funciona en mi impresora, no hay problema. Actualizo periódicamente el firmware, generalmente junto con el lanzamiento de la próxima versión.

Si desea cambiar el firmware, pruébelo. Creo que te gustará.

Después de cambiar el firmware de Marlin a MagoKimbra, el primer paso es borrar la EEPROM por comando

M502 - Vuelva a la "configuración de fábrica" \u200b\u200bpredeterminada. Aún necesita almacenarlos en EEPROM después si lo desea.

M500 - Almacenar parámetros en EEPROM

En teoría, el sitio tiene un determinado configurador de firmware, pero nunca lo he usado. Lo intenté, pero es una especie de crustáceo. Como resultado, es más fácil configurar todo a mano.

Te diré brevemente cómo configurar el firmware usando el ejemplo de mi impresora, cerebros como un sándwich arduino mega + ramps y cinemática cartesiana (Prusa i3). Activo el número mínimo de funcionalidades necesarias para trabajar.

No hay nada particularmente complicado en la configuración del firmware, todo es intuitivo.

Tambien voy a prestar atencion CEREBROS Prusa i3 de flsun3d ... La impresora viene con una sola placa base RAMPS 1.4 Plus

Si derrama en él un firmware diferente al enviado por los chinos (Marlin 1.0.0), la pantalla dejará de funcionar automáticamente para la impresora y el extrusor de E0 se moverá a E1. Me encontré con ese problema, me senté toda la noche y encontré una solución. Al final del artículo, te diré cómo solucionarlo.

El firmware se construye sin problemas en el último entorno de Arduino (1.8.1).

Abra el archivo MK4duo.ino usando el entorno Arduino y comience a configurar.

Empezamos con una pestaña Configuration_Basic.h

Aquí configuraremos

* - Tipo de comunicaciones en serie

* - Tarjeta madre

* - Tipo de mecánica (cartesiana para Prusa I3)

* - Número de extrusoras

La derecha del palo

#define BAUDRATE 250000

Si busca en la terminal (o Pronterface), vea quién configuró el firmware

#define STRING_CONFIG_H_AUTHOR "(Mef73, configuración personalizada)"

O puedes dejarlo solo.

No hay nada más que hacer en esta pestaña, porque por defecto ya está habilitada

#define MOTHERBOARD BOARD_RAMPS_13_HFB

#define MECANISMO MECH_CARTESIAN

Y también instalé una extrusora y un controlador para la extrusora.

Ir a la pestaña Configuration_Cartesian.h

Empezaré por cambiar el nombre de la impresora, aunque esto no es necesario

#define CUSTOM_MACHINE_NAME "Prusa I3 flsun"

#define INVERT_E0_DIR verdadero

Es mi extrusora estándar de la impresora Prusa i3 de flsun3d que está invertida. Puedes voltear el conector del motor paso a paso (SM), pero yo no quiero. Para que cuando cambie mi cerebro a la impresora, no me caliente la cabeza a costa de girar el conector del motor.

Nuevamente, para mi impresora con drv8825 y microstep 32

#define DEFAULT_AXIS_STEPS_PER_UNIT (200, 200, 800, 310, 310, 310, 310) // drv8825

Para mi impresora con a4988 y microstep 16

#define DEFAULT_AXIS_STEPS_PER_UNIT (100, 100, 400, 155, 155, 155, 155) // a4988

Solo necesita escribir UNA línea. Para uno u otro controlador de motor paso a paso.

Por lo demás corrijo

#define DEFAULT_MAX_FEEDRATE (200, 200, 2, 100, 100, 100, 100)

#define DEFAULT_MAX_ACCELERATION (1500, 1500, 50, 1000, 1000, 1000, 1000)

#define DEFAULT_ACCELERATION 1500

#define DEFAULT_XJERK 30.0

#define DEFAULT_YJERK 30.0

#define DEFAULT_ZJERK 0.4

También puedes poner tus propios valores. En esto con una pestaña Configuration_Cartesian.h refinamiento.

Ir a la pestaña Configuration_Feature.h

Aquí configuramos todo tipo de funciones de firmware. Te diré qué y dónde lo enciendo. Quizás alguien en los comentarios te diga qué más usa. De hecho, utilizo un mínimo de funciones, solo las que necesito.

Entonces vamos ...

Eliminar // c

#define HOME_Y_BEFORE_X

Primero estacionamos el eje Y. Tengo un espejo con abrazaderas, si primero estaciono el eje X a una altura baja Z con una boquilla, demoleré las abrazaderas.

#define FORCE_HOME_XY_BEFORE_Z

eje Z estacionado último

Ahora bajamos a

// \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d AÑADIR CARACTERÍSTICAS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d

Descomentemos

#define EEPROM_SETTINGS

#define EEPROM_CHITCHAT

#define SDSUPPORT

#define SD_SETTINGS

activando EEPROM y soporte para tarjetas SD

Mi pantalla es personaje, 2004, controlador inteligente de descuento reprap

#define ULTRA_LCD

#define ENCODER_PULSES_PER_STEP 4

#define ENCODER_STEPS_PER_MENU_ITEM 1

#define REVERSE_ENCODER_DIRECTION

#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 40

#define LCD_FEEDBACK_FREQUENCY_HZ 2000

Con estos parámetros, ambos controladores inteligentes de descuento reprap chinos funcionan bien para mí.

#define LCD_INFO_MENU

#define REPRAP_DISCOUNT_SMART_CONTROLLER

Si tiene un Arduino DUE, preste atención aquí:

// \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d CARACTERÍSTICAS AVANZADAS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d

//===========================================================================

/****************************************************************************************

************************************ Cosas de búfer ********** * *************************

****************************************************************************************/

// El número de movimientos lineales que pueden estar en el plan en un momento dado.

// EL TAMAÑO DEL BLOQUEO DEBE SER UNA POTENCIA DE 2, p. Ej. 8,16,32 porque los turnos y ors se utilizan para hacer el búfer de anillo.

// Para Arduino DUE configurando BLOCK BUFFER SIZE en 32

#define BLOCK_BUFFER_SIZE 16

// El búfer ASCII para recibir de la serie:

#define MAX_CMD_SIZE 96

// Para el ajuste Arduino DUE en 8

#define BUFSIZE 4

En general, esta y todas las configuraciones que difieren en Mega y DUE, no encontré otras.

Ir a la pestaña Configuration_Temperature.h

#define TEMP_SENSOR_BED 1

La mesa se calienta y, por defecto, el termistor de calefacción está deshabilitado en el firmware.

Vaya a ********************** Configuración de PID - HOTEND ********************* ****

#define DEFAULT_Kp (14.17, 40, 40, 40) // Kp para H0, H1, H2, H3

#define DEFAULT_Ki (01.55, 07, 07, 07) // Ki para H0, H1, H2, H3

#define DEFAULT_Kd (32.29, 60, 60, 60) // Kd para H0, H1, H2, H3

Después de flashear, definitivamente recalibraré Kp Ki Kd cuando lo ordenen

M303 H0 C8 S240 U

Bajamos a *********************** Configuración de PID - BED ****************** *** *******

Mi mesa también está regulada por PID. Bang Bang es más simple, pero no tan preciso. Por lo tanto, descomentaremos

#define PIDTEMPBED

#define DEFAULT_bedKp 88.21

#define DEFAULT_bedKi 12.77

#define DEFAULT_bedKd 152.28

Estos son los ajustes que una vez obtuve experimentalmente para mi impresora.

Después de flashear, definitivamente recalibraré el Kp Ki Kd de la tabla por comando

M303 H-1 C8 S100 U

En Pronterface o sin ni siquiera molestar, en el terminal Octoprint. La tecla U aplicará el resultado de inmediato.

Si la calefacción cae por el temporizador y da un error, repito el comando.

Entonces necesitas ejecutar el comando

Para proteger el extremo caliente y la mesa del sobrecalentamiento, descomentaré

#define THERMAL_PROTECTION_HOTENDS

#define THERMAL_PROTECTION_BED

Eso es todo.

Tengo un Fan Extender casero instalado en mi placa, para 1 canal, y vive en el pin 11. Le conecté un ventilador para soplar una barrera térmica.

En la pestaña Configuration_Feature.h

Quitamos // de

#define HOTEND_AUTO_FAN

#define HOTEND_AUTO_FAN_TEMPERATURE 45

Puse la temperatura de respuesta a 45 grados

Para que la función funcione, en la pestaña Configuration_Pins.h

#if ENABLED (HOTEND_AUTO_FAN)

#define H0_AUTO_FAN_PIN 11

Señalo que el control del ventilador vive en el puerto 11.

Ahora te hablaré de una tabla maravillosa RAMPS 1.4 Plus... La placa se suministra con la impresora Prusa I3 Flsun3d.

Los pines de la placa no coinciden con el sándwich RAMPS 1.4 original. !!!

Busqué en el firmware de los chinos y encontré diferencias en los pines.

Lo ponemos en una carpeta

MK4duo-masterMK4duosrcboards

reemplazando el archivo original 99.h.

Y ahora en la pestaña Configuration_Basic.h

poner // delante de MOTHERBOARD BOARD_RAMPS_13_HFB

// # definir PLACA MADRE BOARD_RAMPS_13_HFB

#define PLACA MADRE BOARD_99

Nuestra placa RAMPS 1.4 Plus ahora es BOARD_99

Este es el número de placa reservado en el firmware, creo que solo para tal caso.

Después de eso, en RAMPS 1.4 Plus, la vida está mejorando. La pantalla comienza a funcionar y todo lo demás es como debería ser.

Por analogía con la configuración del archivo, puede configurar la placa en el clásico Marlin. Yo también lo hice.

Firmware MagoKimbra / MK4duo, configuración de firmware para Prusa i3 para RAMPS 1.4 Sandwich y para RAMPS 1.4 Plus Board

mencioné que instalar un driver en la extrusora que da un micropaso de 1/32 es algo bastante útil (aunque el beneficio lo revela un dispositivo que no tiene una marca en la verificación en el departamento de metrología, es decir, una uña !). Sin embargo, después de eso, es posible que desee reemplazar todos los controladores por otros similares. He leído en muchos foros que esto hace que el sonido de los motores sea más musical. Me gustaría decir: Todo va bien con moderación. No es que fuera del todo malo, pero permítanme describir los argumentos que aparecieron tras escarbar en las entrañas del firmware de Marlin, porque es ella quien se utiliza como base en muchas impresoras 3D.

¿Dónde empezar? Primero, hablaré de aceleración. Nos serán útiles, pero no se pueden insertar en el texto en ninguna parte, la narrativa se romperá en todas partes. De modo que esto sea como una introducción. Si mueve bruscamente la cabeza, habrá muchos problemas. Comenzando por los ruidos de impresión de baja frecuencia, que ya han puesto los dientes en el borde en artículos anteriores, y terminando con el hecho de que el motor puede saltar algunos pasos en un arranque brusco. Para evitar todo esto, la cabeza se acelera suavemente. Bueno, y se ralentizan, también, allí ya se necesita precisamente para reducir el ruido. El firmware Marlin funciona en un modo de gráfico de velocidad trapezoidal.

Es decir, la velocidad aumenta y disminuye linealmente en un área determinada. El ángulo al que se inclina el gráfico de velocidad durante la aceleración y desaceleración se establece con precisión mediante el parámetro "Aceleración". Así es como se ve la caída en la frecuencia de paso en el osciloscopio (las ráfagas rojas son los pasos del motor a lo largo del eje X, las amarillas: el motor de la extrusora, guardé este oscilograma cuando, al luchar contra el timbre de RF, estaba convencido de que el El extrusor realmente pasa dos veces más a menudo que antes:

Ahora hablemos de lo rápido que camina nuestro motor. Preguntemos a la propia impresora a través del panel de comunicación. Trabajo en Simplify3D, pero hay un panel de este tipo en otros programas:


Simplemente apague los molestos mensajes de temperatura. Eliminamos esta casilla de verificación:



Regresamos a la pestaña Comunicación, ahora las inscripciones no parpadean (las antiguas, sin embargo, se quedaron en su lugar, pero no importa). Hablamos con la impresora M503 y pulsamos ENVIAR



La impresora sacó muchas cosas y en lenguaje humano. Estamos interesados \u200b\u200ben esta línea:

RECIBIDO: eco: Pasos por unidad:

Pasos por unidad:

RECIBIDO: echo: M92 X100.00 Y100.00 Z1600.00 E100.00

M92 X100.00 Y100.00 Z1600.00 E100.00

Resulta que mis ejes X e Y tienen 100 pasos por milímetro. Bueno, más precisamente, micropasos.

Maravilloso. Qué significa eso? Esto significa que para mover la cabeza 1 milímetro, los motores X e Y deben dar 100 pasos. En general, se publicó mucha más información allí, léelo, esto es algo muy divertido. Los parámetros se pueden cambiar y guardar en la EEPROM, pero más sobre eso en otro momento.

Deje que la cabeza se mueva a una velocidad de 100 mm / s. Entonces debería dar 100 * 100 \u003d 10,000 pasos por segundo. Es decir, el motor funciona a 10 kilohercios. 150 mm / s - 15 kilohercios, etc. Los números pueden ser ligeramente diferentes, dependen de qué ruedas dentadas estén en los motores.

Por el texto del firmware, aprendí que, en teoría, hay impresoras MZ3D-256A y MZ3D-256B, tienen un número diferente de pasos. Pero consideremos, como otro ejemplo, no A y B hipotéticos, sino una impresora MakerGear M2 real, tiene 88,8 pasos por milímetro, luego 100 mm / s serán 8,88 kilohercios, 150 mm / s, aproximadamente 13 kilohercios. En general, pregunte a su impresor, él le responderá qué parámetros tiene él personalmente.

En realidad, si aumento el micropaso del motor de 16 a 32 pasos, entonces las frecuencias de mi impresora aumentarán a 20 y 30 kilohercios, y para la M2 (de sus 88,8) a 17 y 26 kilohercios, respectivamente. ¿Es mucho o poco? Pasemos al firmware.

¿Qué vemos en el firmware de Marlin? Y vemos que los motores son servidos por el temporizador 1. Un tic del temporizador - un paso. Luego, el procesador deja de trabajar con los motores hasta el siguiente tic. ¡Pero Marlin es un firmware muy complicado! Ella configura el temporizador para que el siguiente tic se produzca exactamente a tiempo. Para esto, la función se llama

calc_timer corto sin firmar (step_rate corto sin firmar) (

Como puede ver, la frecuencia del motor se le transmite. ¿Y qué vemos en la entrada? ¡Oooo! Primero nos encontramos con los inofensivos

if (step_rate\u003e MAX_STEP_FREQUENCY) step_rate \u003d MAX_STEP_FREQUENCY;

Bueno, aquí se comprueba que la frecuencia no sea superior a 40 KHz (para mi impresora en su versión nativa es 400 mm / s, pero si hago un micropaso de 1/32, entonces solo 200 mm / s). Es más

si (step_rate\u003e 20000 ) (// Si la velocidad de paso\u003e 20 kHz \u003e\u003e paso 4 veces

Step_rate \u003d (step_rate \u003e\u003e 2)

Step_loops \u003d 4;

De lo contrario, si (step_rate\u003e 10000 ) (// Si la velocidad de paso\u003e 10 kHz \u003e\u003e paso 2 veces

Step_rate \u003d (step_rate \u003e\u003e 1)

Step_loops \u003d 2;

Demás (

Step_loops \u003d 1;

Traduciendo al ruso: El rendimiento del procesador AtMega no es suficiente para atender la interrupción del temporizador a una frecuencia superior a 10 KHz. Por lo tanto, si el motor funciona a una velocidad de hasta 10 KHz, habrá un paso por interrupción. De 10 a 20 GKts: habrá dos pasos por interrupción. Y de 20 a 40 kHz, cuatro pasos.

En realidad, la conclusión del artículo es precisamente que todo lo que esté por debajo de 10 KHz (100 mm / s para mi impresora) en el firmware Marlin que se ejecuta en el controlador AtMega (en el Arduino) se procesará de manera uniforme. Arriba: los escalones serán desiguales. Dos pasos, una pausa, dos pasos de nuevo, una pausa de nuevo. O incluso cuatro pasos, una pausa, otros cuatro pasos, otra pausa.

Para (int8_t i \u003d 0; i< step_loops; i++) { // Take multiple steps per interrupt (For high speed moves)

Si (contador_x\u003e 0) (

#ifdef DUAL_X_CARRIAGE

Si (extruder_duplication_enabled) (

Demás (

Si (bloque_actual-\u003e extrusor_activo! \u003d 0)

ESCRIBIR (X2_STEP_PIN,! INVERT_X_STEP_PIN);

Demás

ESCRIBIR (X_STEP_PIN,! INVERT_X_STEP_PIN);

#demás

ESCRIBIR (X_STEP_PIN,! INVERT_X_STEP_PIN);

#terminara si

Counter_x - \u003d current_block-\u003e step_event_count;

Count_position + \u003d count_direction;

delayMicroseconds (2);

// Lo mismo para Y, Z y Extruder

En general, en el micropaso 1/32, los motores se vuelven más musicales, pero claramente entrecortados.

¿Se puede hacer uniformidad? En Arduino, no estoy seguro. Puede arrastrarlo todo a ARM, donde el procesador en sí es más rápido y la multiplicación / división se realiza en hardware, por lo tanto, funciona más rápido (y en el camino, puede descartar las inserciones del ensamblador y parte de los cálculos de la tabla, esto es en AVR sin ellos, ARM ya tiene un compilador que convierte el código C en comandos de ensamblaje aceptables sin nuestra ayuda). Y algunos Cortexes también admiten aritmética flotante en hardware (el firmware simplemente abunda en tales cálculos). Personalmente, me las arreglé para hacerlo aproximadamente en exactamente una semana, así que todo es real (limpio, todavía aserrando y aserrando, por supuesto). ¡No crea que ahora volveremos a hacer estas comparaciones y todo funcionará! ¡Decir ah! Allí, revise, revise y revise las unidades. Digamos que aquí está el final de esa función calc_timer:

si (temporizador< 100) { timer = 100; MYSERIAL.print(MSG_STEPPER_TOO_HIGH); MYSERIAL.println(step_rate); }//(20kHz this should never happen)

Temporizador de retorno;

Es decir, si la frecuencia de tic del temporizador es superior a 20 KHz, se reducirá aquí. En general, puede ser necesario verificar los lugares donde se encuentran estas o aquellas restricciones. Aquí, por ejemplo, está la función para calcular el movimiento de la cabeza, teniendo en cuenta la aceleración (fue por eso que cité la teoría de las velocidades trapezoidales)

void calculate_trapezoid_for_block (block_t * block, float entry_factor, float exit_factor) (

Sin signo long initial_rate \u003d ceil (block-\u003e nominal_rate * entry_factor); // (paso / min)

Unsigned long final_rate \u003d ceil (block-\u003e nominal_rate * exit_factor); // (paso / min)

// Limita la velocidad de paso mínima (de lo contrario, el temporizador se desbordará).

Si (tasa_inicial<120) {

Tasa_inicial \u003d 120;

Si (tasa_final< 120) {

Tasa_final \u003d 120;

Es cierto que aquí se utiliza la velocidad mínima para que el temporizador de 16 bits no se desborde. Sin embargo, esto muestra que los cheques se pueden ocultar en cualquier parte del código. ¡No es fácil mantener los motores musicales! Sin embargo, en principio, todo es real. Pero no es que compramos nuevos drivers, corregimos un par de constantes y ya está. Esa musicalidad es hermosa pero engañosa.

Conclusión

El artículo muestra que no es un hecho que tenga sentido reemplazar los controladores de los motores de desplazamiento X e Y con el microstep 1/32 de soporte. Cuando se usa un Arduino (con un controlador basado en AVR), la cadencia puede no ser del todo justa si supera los 10 kHz. Verificar la honestidad de los pasos para el procesador ARM aún está en la fase activa, pero ya se sabe con certeza que al menos tendrás que eliminar o cambiar las restricciones en el firmware.

Antes de comenzar a trabajar con una impresora 3D no profesional o semiprofesional, así como con un Kit-set para autoensamblaje, a menudo es necesario "llenar" y configurar el firmware. El firmware es un código de programa cuyas principales tareas son: leer y reproducir el código G, controlar la impresora a través de varias interfaces, mostrar información sobre el proceso de impresión. En otras palabras, el firmware es necesario para que el hardware y el conjunto de componentes electrónicos "cobren vida" y puedan controlarse. El firmware se carga en la placa de control. Las diferentes impresoras 3D tienen diferentes tableros de control, respectivamente, el firmware también es diferente.

Nuestras impresoras 3D Prusa i3 Steel utilizan un paquete de placas Arduino Mega 2560 y Ramps 1.4, por lo que en este artículo veremos más de cerca y analizaremos la configuración del firmware adecuado para ellas, Marlin.

Si aún no ha recolectado productos electrónicos, consulte el artículo:

Este firmware es uno de los más populares, también porque los desarrolladores le agregan regularmente nuevas funciones: ajuste automático del espacio, sensor de extremo de barra y mucho más. Además, este firmware es absolutamente gratuito y se puede descargar desde el sitio web oficial.

¿Dónde conseguir?

La última versión del firmware Marlin está disponible en el sitio web oficial del desarrollador https://github.com/MarlinFirmware/Marlin. Puede descargar una versión de firmware anterior desde el enlace. También hay muchas versiones diferentes en el sitio, pero recomendamos descargar la última versión marcada como Última versión. En el momento de escribir este artículo, esta versión es 1.0.2-2

En Descargas, haga clic en Código fuente (zip) y descargue el archivo de firmware en su computadora. A continuación, extraiga el contenido del archivo en una carpeta.

Instalación de Arduino IDE

Después de haber descargado el firmware, debe editarlo y luego escribirlo en el microcontrolador de la placa de control (Arduino mega 2560). Para estos fines, necesita el programa Arduino IDE, que se puede descargar de forma gratuita desde el sitio web oficial de Arduino.

¡Nota! Este programa Arduino IDE se actualiza regularmente y es posible que al cargar el firmware en la placa, surjan problemas con las nuevas versiones del Arduino IDE, es decir, aparecerán errores y no podrá escribir el firmware en el microcontrolador. Por lo tanto, si surgen problemas, intente descargar una versión anterior del programa, por ejemplo, la versión 1.6.0)

Para mayor confiabilidad, puede descargar inmediatamente la versión probada 1.6.0


Haga clic en Windows Installer y será redirigido a otra página, donde debe hacer clic en el botón SOLO DESCARGAR, luego comenzará la descarga del archivo. Instale el programa y continúe con el siguiente paso.

Edición del firmware de Marlin

Has descargado directamente el propio firmware Marlin y el programa Arduino IDE con el que puedes editar. Abra la carpeta de firmware "Marlin", busque el archivo "Marlin" con la extensión .ino


Abra este archivo, se abrirá el IDE de Arduino


En la parte superior de la ventana del programa hay muchas pestañas, cada una de las cuales contiene fragmentos de código, de los que depende el funcionamiento de la impresora 3D. Solo necesitas algunas pestañas principales. La primera y principal pestaña es "Configuración.h"


Este es un archivo de configuración que contiene configuraciones básicas. Es en esta pestaña donde debe realizar los cambios principales.

¡Nota! Realice todos los cambios en el firmware en orden de arriba hacia abajo. Estos cambios afectarán las secciones principales del código y son necesarios para el lanzamiento inicial de su impresora 3D.

Establecer la velocidad en baudios requerida

Lo primero que debe cambiar es la velocidad en baudios. Por defecto, la velocidad es 250.000 (47 líneas de código)

// Esto determina la velocidad de comunicación de la impresora #define BAUDRATE 250000


// Esto determina la velocidad de comunicación de la impresora #define BAUDRATE 115200

Si está utilizando una tabla, la velocidad debería ser 250.000.

Elegir un tablero de control

Después de configurar la velocidad en baudios, debe especificar la placa de control utilizada (55 líneas de código).

#ifndef MOTHERBOARD #define MOTHERBOARD BOARD_ULTIMAKER #endif


De forma predeterminada, la placa de la impresora Ultimaker 3D es BOARD_ULTIMAKER, por lo que debe cambiar la placa. La lista completa de tableros se encuentra en la pestaña "BOARDS_H"


Se proporciona una gran lista de tableros diferentes, pero solo necesita lo siguiente:

#define BOARD_RAMPS_13_EFB 33 // RAMPS 1.3 / 1.4 (salidas de potencia: extrusora, ventilador, cama)

#define BOARD_RAMPS_13_EEB 34 // RAMPS 1.3 / 1.4 (Salidas de potencia: Extruder0, Extruder1, Bed)

#define BOARD_RAMPS_13_EFF 35 // RAMPS 1.3 / 1.4 (salidas de potencia: extrusora, ventilador, ventilador)

#define BOARD_RAMPS_13_EEF 36 // RAMPS 1.3 / 1.4 (Salidas de potencia: Extruder0, Extruder1, Fan)

Estas placas son para Arduino mega 2560 y Ramps 1.4. Dependiendo de la modificación de su impresora 3D, debe seleccionar la placa adecuada. Por ejemplo, un paquete estándar de 1 extrusora + soplado del área de trabajo + mesa de calentamiento corresponde al tablero BOARD_RAMPS_13_EFB

El nombre de la placa debe ser copiado y reemplazado en la pestaña "Configuración.h", cambie las siguientes líneas:


Cambiar el nombre de la impresora 3D

Al configurar, asegúrese de encontrar un nombre para su impresora 3D e indicarlo en el firmware. ¿Para qué? El nombre de la impresora se muestra en su pantalla LCD, tal posibilidad se proporciona precisamente en dicha pantalla.

Encontrar puntadas: (59 líneas)

// #define CUSTOM_MENDEL_NAME "Este Mendel"

#Define está precedido por "//" - esto significa que estas líneas no se usan en el código, pero sirven como explicaciones. Para activar esta línea, debe descomentar la línea, eliminar // delante de la línea.

Cambie el nombre predeterminado "This Mendel" por el nombre de su impresora 3D, por ejemplo, "P3Steel". Obtenemos lo siguiente:

Elegir un sensor de temperatura para la mesa y la extrusora

Arriba estaban las configuraciones de firmware para 1 extrusora y una mesa de calentamiento, es decir, hay dos elementos de calentamiento en la impresora 3D, cuyas temperaturas deben regularse. El control de temperatura se lleva a cabo mediante sensores de temperatura - termistores.

Hay una gran cantidad de termistores diferentes con diferentes características, por lo que debes especificar en el firmware qué termistor tienes. Esto es necesario para que la impresora muestre la temperatura correcta en el futuro. Busque la lista de termistores compatibles en el firmware:

//// Configuración del sensor de temperatura: // -2 es termopar con MAX6675 (solo para sensor 0) // -1 es termopar con AD595 // 0 no se usa // 1 es termistor de 100k - la mejor opción para EPCOS 100k (4.7 k pullup) // 2 es un termistor de 200k - ATC Semitec 204GT-2 (4.7k pullup) // 3 es un termistor Mendel-parts (4.7k pullup) // 4 es un termistor de 10k !! no lo use para un hotend. Da mala resolución a alta temperatura. !! // 5 es termistor de 100K - ATC Semitec 104GT-2 (usado en ParCan y J-Head) (4.7k pullup) // 6 es 100k EPCOS - No es tan preciso como la tabla 1 (creado usando un termopar fluke) (4.7k pullup ) // 7 es un termistor Honeywell de 100k 135-104LAG-J01 (pullup de 4.7k) // 71 es un termistor Honeywell de 100k 135-104LAF-J01 (pullup de 4.7k) // 8 es un termistor de 100k 0603 SMD Vishay NTCS0603E3104FXT (pullup de 4.7k) / / 9 es 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) // 10 es 100k RS termistor 198-961 (4.7k pullup) // 11 es 100k beta 3950 1% termistor (4.7k pullup) / / 12 es 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrado para cama caliente Makibox) // 13 es 100k Hisens 3950 1% hasta 300 ° C para hotend "Simple ONE" y "Hotend" All In ONE "// 20 es el circuito PT100 que se encuentra en la Ultimainboard V2.x // 60 es 100k Maker "s Tool Works Kapton Bed Thermistor beta \u003d 3950 // // Tablas de extracción de 1k ohmios - Esto no es normal, tendría que haber cambiado su 4.7k por 1k // (pero da mayor precisión y PID más estable) // 51 es Termistor de 100k - EPCOS (1k pullup) // 52 es un termistor de 200k - ATC Semitec 204GT-2 (1k pullup) // 55 es un termistor de 100k - ATC Semitec 104GT-2 (Usado en ParCan y J-Head) (1k pullup) / / // 1047 es Pt1000 con 4k7 pullup // 1010 es Pt1000 con 1k pullup (no estándar) // 147 es Pt100 con 4k7 pullup // 110 es Pt100 con 1k pullup (no estándar)

Encuentra el tuyo en la lista, recuerda el número de la izquierda. Como regla general, muchas personas usan un termistor chino de 100 kΩ, el termistor número "1" es adecuado para él.

// 1 es termistor de 100k: la mejor opción para EPCOS 100k (pullup de 4,7k)

Realice los cambios donde desee (líneas 115-118)

#define TEMP_SENSOR_0 -1 #define TEMP_SENSOR_1 -1 #define TEMP_SENSOR_2 0 #define TEMP_SENSOR_BED 0

Por defecto, los dos primeros termistores están activados en el firmware:

TEMP_SENSOR_0 - responsable del termistor del primer extrusor

TEMP_SENSOR_1 - responsable del termistor del segundo extrusor

TEMP_SENSOR_BED - responsable del termistor de la mesa

Cambie las líneas y obtenga lo siguiente:


TEMP_SENSOR_1 y TEMP_SENSOR_2 no se utilizan, por lo que ponemos "0" ceros delante de ellos.

Limitación de temperatura máxima

Para limitar la temperatura máxima, se requieren las siguientes líneas (140-143)

#define HEATER_0_MAXTEMP 275 #define HEATER_1_MAXTEMP 275 #define HEATER_2_MAXTEMP 275 #define BED_MAXTEMP 150

Los números de la derecha, a saber, 275 y 150, son las temperaturas máximas de la extrusora y la mesa de calentamiento, respectivamente.

Cuando la temperatura exceda la temperatura máxima, su calentador se apagará. Esta función está ahí para proteger su extrusora de un sobrecalentamiento accidental. Si usa un hot-end con teflón en el interior, le recomendamos limitar la temperatura a 260 grados.

Limitación de temperatura mínima

También en el firmware, el valor predeterminado es limitar la temperatura mínima del extrusor a 170 grados. Esto significa que si la temperatura de la extrusora es inferior a 170 grados, el motor de la extrusora no girará y el plástico no se alimentará. Protección contra empuje a través de plástico sin calentar (línea 230).

#define EXTRUDE_MINTEMP 170

Si desea desactivar esta función, coloque "//" delante de la línea

Ajuste de los finales de carrera

Configurar la lógica de los finales de carrera

En primer lugar, a lo que debe prestar atención es a los interruptores de límite que utiliza y cuál es su principio de funcionamiento. En el firmware, es necesario indicar correctamente la lógica de los finales de carrera. Encuentre las siguientes líneas (301-306)

Const bool X_MIN_ENDSTOP_INVERTING \u003d verdadero; // establecer en verdadero para invertir la lógica del tope final. const bool Y_MIN_ENDSTOP_INVERTING \u003d verdadero; // establecer en verdadero para invertir la lógica del tope final. const bool Z_MIN_ENDSTOP_INVERTING \u003d verdadero; // establecer en verdadero para invertir la lógica del tope final. const bool X_MAX_ENDSTOP_INVERTING \u003d verdadero; // establecer en verdadero para invertir la lógica del tope final. const bool Y_MAX_ENDSTOP_INVERTING \u003d verdadero; // establecer en verdadero para invertir la lógica del tope final. const bool Z_MAX_ENDSTOP_INVERTING \u003d verdadero; // establecer en verdadero para invertir la lógica del tope final.

Si tiene interruptores de límite mecánicos, cuando se activa, el circuito se cierra, establezca los valores "verdadero" delante de cada línea del eje correspondiente. Si utiliza interruptores de límite ópticos, cuando se activa, el circuito se abre, frente a cada línea del eje correspondiente, establezca los valores en "falso".

De forma predeterminada, el firmware opuesto a cada interruptor de límite se establece en "verdadero", que corresponde a los interruptores de límite mecánicos.

Después de configurar el funcionamiento de los finales de carrera, puede verificar el comando M119 en la consola.
El texto debería ser la respuesta:
x_min: open - el tráiler no funcionó;
x_min: TRIGGERED - tráiler activado.

Configuración de la posición "INICIO": inicio

El firmware admite 3 pares de finales de carrera: para cada eje X, Y y Z, dos finales de carrera mínimo y máximo. Como regla general, los interruptores de límite se instalan solo para la posición mínima de cada eje, y el máximo se establece en el firmware.

La posición de inicio (posición inicial) estará en las posiciones mínimas de los finales de carrera y esta se configura en el firmware: (líneas 337-339)

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

Cambio del sentido de giro de los motores

Al montar una impresora 3D, es decir, al conectar motores paso a paso a la placa, es posible la siguiente situación: cuando ha configurado y conectado todo, cuando pulsa "inicio", el carro de uno de los ejes va en la otra dirección (no al interruptor de límite), entonces es necesario girar el conector del motor paso a paso 180 grados o cambiar los valores en el firmware:

#define INVERT_X_DIR true // para Mendel configurado como falso, para Orca configurado como verdadero #define INVERT_Y_DIR falso // para Mendel configurado como verdadero, para Orca configurado como falso #define INVERT_Z_DIR true // para Mendel configurado como falso, para Orca configurado como true #define INVERT_E0_DIR false // para el extrusor de accionamiento directo v9 establecido en verdadero, para el extrusor de engranajes configurado en falso #define INVERT_E1_DIR falso // para el extrusor de accionamiento directo v9 configurado en verdadero, para el extrusor de engranajes configurado en falso #define INVERT_E2_DIR falso // para Extrusora de accionamiento directo v9 establecida en verdadero, para extrusora con engranajes establecida en falso

Por ejemplo, si tiene un carro del eje Y en la otra dirección, entonces necesita encontrar la línea

#define INVERT_Y_DIR false // para Mendel establecido en verdadero, para Orca establecido en falso

y cambie "falso" por "verdadero". Y así con cada eje y extrusora.

Establecer las dimensiones del movimiento

Para que la impresora 3D determine el área de trabajo, debe especificar sus dimensiones en el firmware: (líneas 345-350)

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

Frente a cada línea, especifique las dimensiones adecuadas; de forma predeterminada, el área de trabajo está configurada en 205x205x200 mm

Establecer los pasos de movimiento a lo largo de los ejes

La especificación del número de pasos de los motores paso a paso es una de las principales configuraciones del firmware (línea 490):

#define DEFAULT_AXIS_STEPS_PER_UNIT (78.7402,78.7402,200.0 * 8 / 3,760 * 1.1) // pasos predeterminados por unidad para Ultimaker

Entre paréntesis, separados por comas para cada eje, se indica el número de pasos que debe dar el motor paso a paso para que el carro avance 1 mm. ¿Dónde conseguir estos valores? Puede calcular o tomar los ya conocidos.

Cálculo de los ejes X e Y (correas)

Todos los ejes tienen motores paso a paso de 200 pasos por revolución, 16 micropasos por paso (esto se establece con puentes en la placa).

A lo largo de los ejes X e Y hay una correa GT2 de paso de 2 mm y poleas de 20 dientes.

Resulta:

(200*16)/(2.0*20)=80

El motor paso a paso tiene que dar tantos pasos para que los ejes X e Y se desplace exactamente 1 mm.

Si tiene una polea dentada Gt2 con un paso de 2 mm y con 20 dientes, entonces la fórmula es:

(200*16)/(2.0*16)=100

Cálculo del eje Z (husillo)

El eje Z puede ser:

  • Espárrago M8 con un paso de rosca de 1,25 mm, luego la fórmula: 200 * 16 / 1,25 \u003d 2560
  • Espárrago M5 con un paso de 0,8 mm, luego la fórmula: 200 * 16 / 0,8 \u003d 4000
  • Tornillo trapezoidal con un diámetro de 8 mm con un paso de 1 mm y un paso de 1, luego la fórmula: 200 * 16/1 \u003d 3200
  • Tornillo trapezoidal con un diámetro de 8 mm con un paso de 2 mm y un paso de 1, luego la fórmula: 200 * 16/2 \u003d 1600
  • Tornillo trapezoidal con un diámetro de 8 mm con un paso de 2 mm y un paso de 4, luego la fórmula: 200 * 16/2 * 4 \u003d 400

Pruse i3 Steel usa pernos M5, luego el número es 4000.

Cálculo de extrusora

El ajuste de la alimentación de la extrusora depende de la relación de reducción y el diámetro del engranaje de alimentación. El número de pasos que debe realizar el motor paso a paso de la extrusora para empujar el plástico 1 mm se selecciona experimentalmente después del primer llenado del firmware en la impresora 3D.

Desenrosque la boquilla y reduzca el límite mínimo de temperatura de la boquilla a 5 grados:

#define EXTRUDE_MINTEMP 5

La extrusora ahora funcionará con una boquilla fría. Sin cambiar la configuración de la extrusora, presione para conducir el plástico 100 mm. Mida la longitud de la barra que pasó a través del extrusor con una regla o un calibre vernier.

Al elegir una configuración de extrusora, consiga una cifra precisa para una longitud de barra razonable, por ejemplo, 200 mm. Después de la configuración, restablezca los límites de temperatura mínima:

#define EXTRUDE_MINTEMP 170

Limitar la velocidad máxima de movimiento a lo largo de los ejes.

#define DEFAULT_MAX_FEEDRATE (500, 500, 5, 25) // (mm / seg)

Por defecto, las velocidades son 500,500.5, 25 mm / s en los ejes X, Y, Z y la extrusora, respectivamente. Recomendamos reducir la velocidad de 500 a 200.

Establecer la aceleración de los movimientos a lo largo de los ejes

Otra configuración importante es la configuración de aceleraciones para diferentes ejes, ya que debido a la configuración incorrecta de este momento, a menudo hay problemas durante la impresión, es decir, el desplazamiento de capas debido a saltos de pasos del motor. Si establece la aceleración demasiado alta, habrá espacios. De forma predeterminada, el firmware contiene los siguientes valores:

#define DEFAULT_MAX_ACCELERATION (9000,9000,100,10000) // X, Y, Z, E velocidad máxima de inicio para movimientos acelerados. Los valores predeterminados de E son buenos para Skeinforge 40+, para versiones anteriores los elevan mucho. #define DEFAULT_ACCELERATION 3000 // X, Y, Z y E aceleración máxima en mm / s ^ 2 para movimientos de impresión #define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z y E aceleración máxima en mm / s ^ 2 para retracciones

Para los ejes X e Y, las aceleraciones son 9000 mm / s ^ 2, esto es mucho.

Para la configuración inicial, establezca no más de 1000 y para DEFAULT_ACCELERATION establezca 1500 en lugar de 3000.

Activación de pantalla

Lo último que queda por hacer es activar la pantalla que desee. Una de las pantallas más populares es. Busque y descomente las siguientes líneas:

#define ULTRA_LCD #define SDSUPPORT #define ULTIPANEL #define REPRAP_DISCOUNT_SMART_CONTROLLER

Estas líneas no deben ir precedidas de "//". Debería obtener lo siguiente:


Llenar firmware

Después de todos los cambios importantes en el firmware, puede cargarlo. En el IDE de Arduino, vaya a la pestaña "Herramientas" -\u003e "Tablero" y seleccione "Arduino / Genuino Mega o Mega 2560"


Y allí debe configurar el puerto COM correcto de su impresora 3D. Para llenar el firmware, haga clic en el círculo con una flecha.


El progreso de la carga del firmware se indica mediante un indicador y, una vez que se haya completado correctamente, aparecerá un mensaje de confirmación en la pantalla.

¡Hola principiantes y profesionales!

Acabo de llegar al mundo de la impresión 3D y tengo muy poca experiencia en este negocio. Pero me gustaría decirte algo. A saber, la idea de calibrar la mesa de la impresora.

El método no lleva mucho tiempo, no requiere una herramienta de medición poco común, es bastante preciso y simple.

La idea de tal calibración surgió después de esta imagen:

Como puede ver en las imágenes, la parte superior del borde está bien impresa, pegada (0,2 mm de grosor) y la parte inferior no está pegada (0,3 mm de grosor).

Para calibrar la mesa necesitas:

Un juego de llaves / destornilladores para ajustar la mesa, quién regula qué;

Calibre Vernier (idealmente con un vernier (escala) 0.05);

Modelo para la prueba - http: // site / 3d-models / detali-dlya-3d-printerov / raznoe / test_gorizont /

En mi caso, la mesa se ajusta con tres tornillos, por lo que el modelo se ve así. Cada círculo está cerca de su propio tornillo. L - Izquierda, R - Derecha, Z - Atrás, C - centro (para determinar la curvatura de la superficie). Espesor de capa 0,2 mm con borde. En tu caso, puedes hacerlo a tu manera.

Elemento de modelo (centro):

Entonces empecemos.

Precalibración:

Tomamos una hoja A4 y configuramos la mesa como se describe en muchos artículos y videos en Internet.

Este método se puede utilizar para ajustar la tabla, ¡pero! No podrá detectar una fuerza de sujeción del papel suficiente o insuficiente al tocarla. El deslizamiento fácil puede ser diferente para todos.

En general, lo hemos ajustado aproximadamente.

Calibración final:

Imprimimos el modelo. Como puede ver en la captura de pantalla, se tarda 2 minutos en imprimir, teniendo en cuenta las desviaciones y el calentamiento: 5 minutos.

Estamos esperando que el modelo se enfríe para despegarlo. No esperé, simplemente lo fingí con un cuchillo de oficina, ABS lo hace posible.

Despega los círculos, toma un calibre y mide el grosor. En mi caso, debería ser de 0,2 mm.

Según las desviaciones de tamaño, usted determina en qué dirección debe girar o destornillar la mesa. Asegúrese de que todos los círculos tengan el mismo grosor deseado.

Si la presión es claramente insuficiente, cuando los hilos no se pegan, ajusto durante la impresión, hasta que los hilos comienzan a tocarse. Luego mido y hago una impresión de control del modelo con medidas.

El centro se puede usar una vez para definir la convexidad o concavidad de la mesa. Pero a veces no está de más tener el control.

¡Buena suerte y una mesa calibrada para todos!

Las críticas y sugerencias son bienvenidas.

Como sabe, para una impresión de alta calidad en una impresora 3D, es necesario alinear cuidadosamente la superficie de la mesa. Desafortunadamente, esto no siempre es posible. Muy a menudo, la mesa es una superficie curva e incluso el uso de vidrio no resuelve completamente este problema. Afortunadamente, el último firmware de Marlin se centra cada vez más en la capacidad de calibrar la superficie de la mesa. La calibración completamente automática requiere el uso de sensores adicionales, lo que no siempre está disponible, pero además, existe la posibilidad de calibrar la mesa en modo manual. Esto es lo que quiero contarte.

Adición de soporte de calibración automática al firmware

Habilitar el soporte de calibración manual

Configurar opciones de cuadrícula

¡Atención! No utilice más de 7 puntos por eje. Esta es una limitación del firmware.

Agregar elementos al menú de la impresora

Script de poscalibración. Aquí, de forma predeterminada, algunos movimientos corporales por parte del extrusor, no el hecho de que sean necesarios. No estoy seguro de eso.

// #define Z_PROBE_END_SCRIPT "G1 Z10 F12000 \\ nG1 X15 Y330 \\ nG1 Z0.5 \\ nG1 Z10"

Después de eso, complete el firmware actualizado.

Calibrar la mesa

Para la calibración manual se utiliza la denominada Nivelación de lecho de malla (MBL). Aquellos. método de calibración por una matriz de puntos. En consecuencia, la superficie de la mesa se divide en una cuadrícula y las coordenadas Z se miden en los nodos de la cuadrícula moviendo manualmente el eje Z. En realidad, solo se necesitan una hoja de papel y brazos rectos para la medición.

En cada punto debajo de la boquilla de la extrusora colocamos una hoja de papel y movemos el eje Z (ya sea enviando un comando especial G a través del software desde la computadora, o mediante el menú de la impresora) logramos tal estado cuando la hoja debajo la extrusora todavía se puede mover libremente, y disminuir la posición de la extrusora en un paso ya interfiere para mover la hoja. Después de eso, se registra el punto actual y continuamos desde el siguiente y así hasta el final.

Al final del proceso, cuando se miden todos los puntos, escribimos los resultados en la memoria no volátil de la impresora y esto es suficiente. En el futuro, no es necesario ajustar la superficie antes de cada uso; se usarán los valores guardados.

De forma predeterminada, se utiliza una cuadrícula de 3 × 3 para la calibración, es decir, 9 puntos, pero si lo desea, puede establecer un número diferente en el firmware (no más de 7 por eje, es decir, no más de 49 en total).

Para aumentar aún más la precisión de la calibración, puede calentar la mesa y la extrusora a las temperaturas de funcionamiento antes de realizarla. Esto tendrá en cuenta y compensará la expansión térmica.

A través de un programa externo

Hay un comando especial G29 para la calibración de la mesa

  1. G29 S0 lee los valores de los puntos actuales en la memoria de la impresora.
  2. G29 S1 Mueve la impresora al primer punto para iniciar el proceso de configuración. De hecho, la impresora se estaciona primero en la posición inicial y luego se dirige al primer punto.
  3. G29 S2 escribe el punto actual y pasa al siguiente
  4. Repetimos el proceso para todos los puntos
  5. Usamos el comando M500 para escribir los valores medidos en la memoria de la impresora.

A través del menú de la impresora

Seleccione los siguientes elementos en el menú Ajustes preestablecidos


Luego vemos la siguiente inscripción en la pantalla y observamos cómo se estaciona la impresora en su posición de inicio


Entonces la impresora nos invita a hacer clic en el codificador.


Después de un clic, la extrusora va al primer punto


Y vemos el ajuste del eje Z.



Haga clic en el codificador para guardar el valor y pasar al siguiente punto. Repetimos la calibración de cada punto (hay 9 de ellos en total). Pasado el último punto, la impresora se estacionará y nos mostrará lo siguiente:



Total

En mi caso, incluso esta calibración manual ha mejorado significativamente la calidad de impresión. Además, se nota a simple vista. Una ventaja adicional fue que dejé de untar el vidrio con pegamento para una mejor adherencia, debido al hecho de que después de la calibración, la impresora tiene en cuenta las irregularidades de la mesa, la primera capa ahora se ajusta de manera absolutamente uniforme y se adhiere bien. Una vez más, esto es evidente de inmediato. Anteriormente, debido a irregularidades, una parte se adhirió peor y, como resultado, el modelo se cayó sin recubrimiento de pegamento.