Cómo actualizar el firmware Marlin y no morir en el intento

Veremos la importancia de tener al día el firmware Marlin de nuestra impresora 3D


What is Marlin?

Marlin es un firmware de código abierto  gratuito    para la familia de impresoras 3d RepRap derivado de Sprinter y grbl  que  se convirtió en un proyecto de código abierto independiente el 12 de agosto de 2011 con su lanzamiento de Github bajo licencia  GPLv3 . Desde el principio Marlin fue construido por y para los entusiastas de RepRap para ser un controlador de impresora sencillo, confiable y adaptable que “simplemente funciona”. Como testimonio de su calidad, Marlin es utilizado por varias impresoras 3D comerciales respetadas  como  Ultimaker, Printrbot, AlephObjects (Lulzbot) y Prusa Research   etc . Ademas Marlin también es capaz de cotrolar las  famosas maquinas CNC ,asi como grabadores láser ,  pues en realidad  en vez extruir material de diferentes propiedades , como lo haría  una impresora 3d,  son variantes de estas al haberse sustituido el extrusor por un láser o una multiherramienta de fresado , corte,etc.

Una clave de la popularidad del fw  Marlin es que se ejecuta en microcontroladores Atmel AVR de 8 bits de bajo costo siendo en su version  2.x   compatible con  placas de 32 bits,  chips  que como sabemos  son el núcleo  de la popular plataforma de código abierto Arduino/Genuino (de  hecho la plataforma de referencia para Marlin es un Arduino Mega2560 con RAMPS 1.4 y Re-Arm con rampas 1.4).

Como producto comunitario, Marlin tiene como objetivo ser adaptable a tantas placas y configuraciones como sea posible, de modo  que sea  altamente  configurable, personalizable, extensible y económico tanto para aficionados como para proveedores de modo  que una implementación  de  Marlin puede ser muy escueta por ejemplo  para su uso en una impresora sin cabeza con un solo hardware modesto pero que  pueda  ampliarse sus características habilitando  según sea necesario para adaptar Marlin a los componentes añadidos.

Resumidamente estas son las principales características:

    • Código G completo con más de 150 comandos
    • Suite completa de movimiento de código G, que incluye líneas, arcos y curvas Bézier
    • Sistema de movimiento inteligente con movimiento de mirada anticipada, basado en interrupciones, aceleración lineal
    • Soporte para cinemática cartesiana, delta, SCARA y core/H-Bot
    • Control del calentador PID de bucle cerrado con ajuste automático, protección térmica, corte de seguridad
    • Soporte para hasta 5 extrusoras más un estampado calefactado
    • Interfaz de usuario del controlador LCD con más de 30 traducciones de idiomas
    • Impresión de tarjetas SD y basadas en host con inicio automático
    • Compensación de nivelación de cama: con o sin sonda de cama
    • Avance lineal para extrusión a presión
    • Soporte para extrusión volumétrica
    • Soporte para mezcla y multiextrusoras (Cíclope, Quimera, Diamante)
    • Soporte para sensores de ancho/de ejecución de filamentos
    • Temporizador de trabajo de impresión y contador de impresión

FDM

Marlin Firmware se ejecuta en la placa principal de la impresora 3D, gestionando todas las actividades en tiempo real de la máquina coordinando los calentadores, motores paso a paso, sensores, luces, pantalla LCD, botones y todo lo demás involucrado en el proceso de impresión 3D implementando  el famoso  proceso de fabricación aditiva llamado Fused Deposition Modeling (FDM), también conocido como Fused Filament Fabrication (FFF). En este proceso, un motor empuja el filamento de plástico a través de una boquilla caliente que funde y extruye el material mientras la boquilla se mueve bajo control informático. Después de varios minutos (o muchas horas) de colocar finas capas de plástico, el resultado es un objeto físico.REPORT THIS ADREPORT THIS AD

El lenguaje de control para Marlin es un derivado del código G donde los comandos de código G le dicen a una máquina que haga cosas simples como “establecer el calentador de 1 a 180o” o “mover a XY a la velocidad F.” Para imprimir un modelo con Marlin, debe convertirse en código G utilizando un programa llamado “slicer”. Dado que cada impresora es diferente, no encontrará archivos de código G para descargar; tendrá que cortarlo  este el propio usuario  obviamente con unsw de slicing 

A medida que Marlin recibe comandos de movimiento, los agrega a una cola de movimiento para ser ejecutados segun las ordenes recibidas. La “interrupción paso a paso” procesa la cola, convirtiendo los movimientos lineales en pulsos electrónicos con precisión en los motores paso a paso. Incluso a velocidades modestas Marlin necesita generar miles de pulsos paso a paso cada segundo. (p. ej., 80 pasos por mm * 50 mm/s a 4000 pasos por segundo!) Dado que la velocidad de la CPU limita la velocidad con la que la máquina puede moverse, ¡siempre estamos buscando nuevas formas de optimizar la interrupción paso a paso!

Los calentadores y sensores se gestionan en una segunda interrupción que se ejecuta a una velocidad mucho más lenta, mientras que el bucle principal controla el procesamiento de comandos, la actualización de la pantalla y los eventos del controlador. Por razones de seguridad, Marlin realmente se reiniciará si la CPU se sobrecarga demasiado para leer los sensores.

Modelado

Mientras Que Marlin solo imprime código G, la mayoría de las segmentaciones solo cortan archivos STL.

Sea lo que sea que utilice para su cadena de herramientas CAD, siempre y cuando pueda exportar un modelo sólido, una segmentación puede “cortar” en código G, y el firmware de Marlin hará todo lo posible para imprimir el resultado final.

Antes de que Marlin pueda soñar con imprimir, primero necesitará un modelo 3D. Puede descargar modelos o crear los suyos propios con uno de los muchos programas CAD gratuitos, como FreeCAD, OpenSCAD, Tinkercad, Autodesk Fusion 360, SketchUp,etc.

Se necesita un alto grado de conocimiento para modelar objetos complejos como un cráneo T-Rex,pero otros objetos pueden ser bastante simples de modelar. Para obtener ideas y probar cosas, explore sitios como Thingiverse y YouMagine e imprima cosas por diversión.

Rebanar o “slicing”

Las segmentaciones preparan un modelo 3D sólido dividiéndolo en rodajas finas (capas). En el proceso se genera el código G que indica a la impresora con minuciosidad cómo reproducir el modelo. Hay muchas segmentaciones de datos para elegir, incluyendo:

Impresión

Marlin se puede controlar por completo desde un host o en modo independiente desde una tarjeta SD. Incluso sin un controlador LCD, una impresión SD independiente todavía se puede iniciar desde un host, por lo que el equipo se puede quitar de la impresora.

 

 

Actualización de Marlin

Para la impresoras  del famoso  fabricante Geetech , esn este link ponen a nuestra disposicion  todo el fw Marlin disponible

 

 
 
Una vez descargado , lo descomprimiremos    y nos iremos a Marlin.ino para que nos lo cargue el interfaz  de Arduino  todos los archivos necesarios:  
 

 

Antes de compilarlo  elegiremos   como placa   “Arduino:1.8.10 (Windows 10)  y la  tarjeta:”Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)”

Intentaremos compilar el fw antes de subirlo a la impresora

 

Como  podemos ver puede que nos lance  el error exit status 1  using typedef-name ‘fpos_t’ after ‘struct’

 

Tendremos que cambiar el literal   fpost_t  por fpost    en los siguientes ficheros , pero al ser un fw  el ide de arduino nos va a dar problemas a la hora de editar los ficheros , así que  lo mejor es editar con nuestro editor de texto favorito los siguientes ficheros

 

  • SdBaseFile.h
  • Configuration.h
  • pins.h

 

 

Una vez hecho esto , cuando  intente compilar el código actualizado  desde el IDE de Arduino,  vera que  ya no encuentra problemas  y por fin  ya podrá actualizar el firmware  en su impresora 3d. 

 

 

exit status 1 using typedef-name ‘fpos_t’ after ‘struct’

Veremos como lograr qeu compile Marlin para su impresora 3d


Si está viendo  este página probablemente se deba que esta intentando actualizar el firmware Marlin  de su impresora 3d  desde el IDE de Arduino  y no lo logra.

Marlin es un firmware de código abierto para la familia RepRap de replicar prototipos rápidos, popularmente conocidos como “impresoras 3D”. Se deriva de Sprinter y grbl,y se convirtió en un proyecto de código abierto independiente el 12 de agosto de 2011 con su lanzamiento de Github. Marlin tiene licencia bajo la GPLv3 y es gratis para todas las aplicaciones.

Desde el principio Marlin fue construido por y para los entusiastas de RepRap para ser un controlador de impresora sencillo, confiable y adaptable que “simplemente funciona”. Como testimonio de su calidad, Marlin es utilizado por varias impresoras 3D comerciales respetadas. Ultimaker, Printrbot, AlephObjects (Lulzbot) y Prusa Research son solo algunos de los vendedores que envían una variante de Marlin. Marlin también es capaz de conducir CNC y grabadores láser.

Una clave de la popularidad de Marlin es que se ejecuta en microcontroladores Atmel AVR de 8 bits de bajo costo – Marlin 2.x ha añadido soporte para placas de 32 bits. Estos chips están en el centro de la popular plataforma de código abierto Arduino/Genuino. Las plataformas de referencia para Marlin es un Arduino Mega2560 con RAMPS 1.4 y Re-Arm con rampas 1.4.

Como producto comunitario, Marlin tiene como objetivo ser adaptable a tantas placas y configuraciones como sea posible  intentando ser configurable, personalizable, extensible y económico tanto para aficionados como para proveedores. Una construcción Marlin puede ser muy pequeña, para su uso en una impresora sin cabeza con solo hardware modesto. Las características se habilitan según sea necesario para adaptar Marlin a los componentes añadidos.

 

Marlin Firmware se ejecuta en la placa principal de la impresora 3D, gestionando todas las actividades en tiempo real de la máquina. Coordina los calentadores, pasos, sensores, luces, pantalla LCD, botones y todo lo demás involucrado en el proceso de impresión 3D.

Marlin implementa un proceso de fabricación aditiva llamado Fused Deposition Modeling (FDM), también conocido como Fused Filament Fabrication (FFF). En este proceso, un motor empuja el filamento de plástico a través de una boquilla caliente que funde y extruye el material mientras la boquilla se mueve bajo control informático. Después de varios minutos (o muchas horas) de colocar finas capas de plástico, el resultado es un objeto físico.

El lenguaje de control para Marlin es un derivado del código G. Los comandos de código G le dicen a una máquina que haga cosas simples como “establecer el calentador de 1 a 180o” o “mover a XY a la velocidad F.” Para imprimir un modelo con Marlin, debe convertirse en código G utilizando un programa llamado “slicer”. Dado que cada impresora es diferente, no encontrará archivos de código G para descargar; tendrás que cortarlos tú mismo.

A medida que Marlin recibe comandos de movimiento, los agrega a una cola de movimiento para ser ejecutados en la orden recibida. La “interrupción paso a paso” procesa la cola, convirtiendo los movimientos lineales en pulsos electrónicos con precisión en los motores paso a paso. Incluso a velocidades modestas Marlin necesita generar miles de pulsos paso a paso cada segundo. (p. ej., 80 pasos por mm * 50 mm/s a 4000 pasos por segundo!) Dado que la velocidad de la CPU limita la velocidad con la que la máquina puede moverse, ¡siempre estamos buscando nuevas formas de optimizar la interrupción paso a paso!

Los calentadores y sensores se gestionan en una segunda interrupción que se ejecuta a una velocidad mucho más lenta, mientras que el bucle principal controla el procesamiento de comandos, la actualización de la pantalla y los eventos del controlador. Por razones de seguridad, Marlin realmente se reiniciará si la CPU se sobrecarga demasiado para leer los sensores.

What is Marlin?

 

Instalación de Marlin en su impresora

Normalmente todas las impresoras 3d ya llevan el firmware instalado ( incluso las que vienen en kit )   pero   conviene estar al tanto de las actualizaciones   de  este   ( en cuyo caso habar  que seguir el procedimiento siguiente)  o puede que sea  necesario cambiarlo para añadir alguna funcionalidad extra como por ejemplo la autonivelación o el cambio de idioma

En todos estos casos normalmente estos son los pasos que se siguen:  

1. Instale Arduino en su PC.
Si su impresora es A10/A10M/A20/A20M, utilice Arduino 1.8.5 para finalizar la  carga; Si es Prusa I3 Pro B/W/X/C, por favor vaya por Arduino 1.0.1!! De lo contrario, es posible que reciba algunos errores durante la verificación.

Descargue Arduino 1.0.1 o Arduino 1.8.5  aquí: https://www.arduino.cc/en/Main/OldSoftw … s-anterior

Arduino 1.0.1.jpg
Arduino 1.8.5.jpg
Arduino 1.8.5.jpg (27.86 KiB) Visto 60177 veces


2. Conecte la impresora al PC con el cable USB.
3. Descomprima el  firmware.  Aquí  tomaremos el firmware para el extrusor dual I3 pro C, por  ejemplo el proceso para la serie A10/A20 es bastante similar, excepto el Arduino en una versión diferente.   Puede descargar el de su impresora aquí:
http://www.geeetech.com/forum/viewtopic … 10&t-17046

02.jpg


4. Haga doble clic en el Marlin.ino, luego abrirá todo el firmware en el arduino.

03.jpg
04.jpg

5. Seleccione el puerto Com adecuado.

06.jpg
06.jpg (205.84 KiB) Viewed 189584 times


6. En Herramientas, en Board, seleccione Mega 2560 .

05.jpg


7. Finalmente haga clic en la flecha para compilar y cargar el firmware en su impresora.

07.jpg

 

Bien   es cierto que debería de compilar el sw  y nuestra impresora ya si estaría actualizada, pero lamentablemente  no siempre es así,  y desgraciadamente puede que  nos lance un error de que no se puede compilar  .

 

 

Por ejemplo en el caso de una Geetech Prusa i 3 W este es el mensaje que lanza el IDE de Arduino al intentar verificar el firmware: 

 

Arduino:1.8.10 (Windows 10), Tarjeta:”Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

In file included from sketch\Marlin.h:23:0, from sketch\ConfigurationStore.cpp:1:

sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1   sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN 28  In file included from sketch\Marlin.h:23:0,  from sketch\BlinkM.cpp:5:

sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0, from sketch\thermistortables.h:4, from sketch\Configuration.h:792, from f:\Users\Carlos\Documents\Arduino\I3 ProW GT2560A+ with 3dtouch (1)\Marlin\Marlin.ino:33:sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined #define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0,  from sketch\Marlin_main.cpp:30: sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0, from sketch\MarlinSerial.cpp:23:sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0, from sketch\Sd2Card.cpp:20:

sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 sketch\Marlin_main.cpp:2667:36: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] LCD_MESSAGEPGM(MACHINE_NAME” “MSG_OFF”.”); ^In file included from sketch\Marlin.h:23:0,  from sketch\SdBaseFile.cpp:21:sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\SdFile.h:27:0, from sketch\cardreader.h:8, from sketch\Marlin_main.cpp:44:SdBaseFile.h:38:8: error: using typedef-name ‘fpos_t’ after ‘struct’ struct fpos_t { ^~~~~~  In file included from sketch\Marlin.h:10:0,  from sketch\Marlin_main.cpp:30:c:\program files (x86)\arduino\hardware\tools\avr\avr\include\stdio.h:950:33: note: ‘fpos_t’ has a previous declaration here extension typedef long long fpos_t; ^~~~~~ sketch\Marlin_main.cpp: In function ‘void set_bed_level_equation_lsq(double*)’:

sketch\Marlin_main.cpp:998:36: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]  planeNormal.debug(“planeNormal”); ^

In file included from sketch\SdBaseFile.cpp:24:0:SdBaseFile.h:38:8: error: using typedef-name ‘fpos_t’ after ‘struct’ struct fpos_t {  ^~~~~~

In file included from sketch\Marlin.h:10:0,  from sketch\SdBaseFile.cpp:21:c:\program files (x86)\arduino\hardware\tools\avr\avr\include\stdio.h:950:33: note: ‘fpos_t’ has a previous declaration here extension typedef long long fpos_t; ^~~~~~

sketch\SdBaseFile.cpp: In member function ‘void SdBaseFile::getpos(fpos_t*)’:SdBaseFile.cpp:298:8: error: request for member ‘position’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’ pos->position = curPosition_; ^~~~~~~~

SdBaseFile.cpp:299:8: error: request for member ‘cluster’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’ pos->cluster = curCluster_; ^~~~~~~

sketch\SdBaseFile.cpp: In member function ‘void SdBaseFile::setpos(fpos_t*)‘:

SdBaseFile.cpp:1496:23: error: request for member ‘position’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’  curPosition_ = pos->position; ^~~~~~~~

SdBaseFile.cpp:1497:22: error: request for member ‘cluster’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’ curCluster_ = pos->cluster; ^~~~~~~

In file included from sketch\Marlin.h:23:0, from sketch\SdFatUtil.cpp:20:

sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 Se encontraron varias bibliotecas para “LiquidCrystal.h”


Usado: C:\Program
exit status 1
using typedef-name ‘fpos_t’ after ‘struct’

Este informe podría contener más información con “Mostrar salida detallada durante la compilación” opción habilitada en Archivo -> Preferencias.

Bueno   , este error nos impide  actualizar el firmarware Marlin de nuestra impresora, pero  en las siguientes líneas veremos que lograr que compile el sw Marlin para nuestra impresora en particular puede ser un juego de niños

 

 

Tip1 : todo lo que necesita hacer es cambiar   todas las ocurrencias fpos_t a filepos_t

 

Para solucionar el problema  de  compilación, anterior sólo tiene que abrir ide Arduino con el firmware y hacer una búsqueda global y reemplazar.

Esto se hace haciendo Ctrl-F y selecciona la casilla de búsqueda de todas las pestañas. A continuación, buscar y reemplazar  fpos_t  por  filepos_t. Volver a compilar y estará todo listo. 

Se trata de un cambio en las nuevas versiones del software de Arduino IDE que está haciendo esto. Las versiones más recientes del firmware del Marlin tienen que la estructura  filepos_t   se llama así ,lo  que  no tendrá ningún efecto negativo en el firmware

sí que la raíz del problema con las nuevas versiones de Arduino es que ya definen un objeto denominado fpos_t en uno de los archivos globales instaladas con Arduino llamado stdio.h. Destacar en el el fichero stdio.h  ha sido un problema con muchos usuarios en línea de cambiar al nuevo Arduino y la compilación de los firmwares más antiguas basadas Marlin. Es por ello que las nuevas versiones de Marlin han pasado a utilizar filepos_t para el nombre de estructura en su lugar. Si se realiza  ese cambio a sus versiones de firmware publicadas, a continuación nadie más tendría los problemas que tenía con cargar el firmware original pero bueno sabiéndolo podemos poner el remedio.  

 

 

 

Tip 2

Si la solución  anterior  no le fue suficiente   alguien informó recientemente el mismo problema con Marlin y así  ha  solucionado el  problema

  • Herramientas > Tablero > Administrador de placas… > Arduino AVR Boards(haga clic en él) > seleccione 1.6.11 en el menú “Seleccionar versión” > Instalar
  • Una vez completada la instalación, haga clic en el botón “Cerrar”



El problema es causado por la nueva versión del compilador incluida con Arduino AVR Boards 1.6.12 y más tarde, es más exigente con el código malo que alguien escribió. Tendrá sin necesidad de actualizar a cualquier versión de Arduino AVR Boards por encima de 1.6.11 hasta que alguien solucione el problema en el código Marlin.
¿Está utilizando la última versión del firmware real de Marlin o es alguna versión anterior o una versión modificada no  estándar?

A %d blogueros les gusta esto: