Aller au contenu

GO Print

[TUTO] Marlin : Comprendre et alléger son firmware


Schyzo

Messages recommandés

Petit tuto sans prétention pour qui veut comprendre quelques aspects de Marlin, et surtout comment trouver de la place pour ceux qui, comme moi, ont une carte mère limitée.
Les plus assidus du forum n'y apprendront rien ou presque, pour le reste, j'espère que ce post pourra être utile.

Je suppose dans ces lignes que le lecteur sait déjà comment flasher sa machine avec le logiciel Arduino, et modifier les fichiers configuration.h et configuration_adv.h

Je vais essayer de suivre l'ordre des fichiers de configuration, pour ne pas avoir à chercher trop longtemps les lignes correspondantes, mais il faut savoir que je ne détaillerai pas tout : Bien des lignes doivent rester telles quelles si l'on veut garder une imprimante fonctionnelle.
Pour info, je me base sur une version de Marlin 1.1.9.

Fausses idées toutes faites

Tout d'abord, je souhaitais tuer dans l’œuf les fausses croyances que j'ai déjà pu lire ici et ailleurs :

  • Il est inutile de supprimer les commentaires, cela ne vous fera que perdre votre temps
  • Les fonctions commentées (celles commençant par '//'), ne sont pas incluses à la compilation, il est tout aussi inutile des les supprimer
  • Fichiers de langues inutilisées : Dans language_fr.h par exemple, on voit que des tas de lignes concernant le détecteur de fin de filament, l'utilisation de l'UBL (Unified Bed Leveling), etc qui ne sont pas commentées.
    Même si vous n'utilisez pas ces fonctions, il est inutile de supprimer ou commenter ces variables de langue, elles ne seront pas incluses dans la compilation de Marlin.
    Lors de la compilation, Arduino va aller chercher et compiler uniquement les informations qui sont nécessaires, aucun superflu ne sera mis en mémoire.
  • Dans la même lignée, rien ne sert de supprimer les lignes vides.

Pour la bonne compréhension :
- Chaque ligne qui commence par '//' est un commentaire ou une fonction commentée. Cela veut dire qu'Arduino ne lira pas cette ligne, et passera à la suite.
- Chaque ligne qui commence par '#' est une instruction. Seules ces lignes seront lues, interprétées et compilées pour votre imprimante.

Configuration.h

Je ne détaillerai ici que le fichier configuration.h. J'espère avoir le temps dans les jours à venir de faire la même chose pour le fichier configuration_adv.h.

Jacky Tuning

On commence avec du superflu, l'écran de démarrage :

6bb4c17c56d17c6575eada80ef3499e6_preview

Ligne 80 du fichier :

#define STRING_CONFIG_H_AUTHOR "Schyzo, Anet E12 BLTouch" // Who made the changes.
#define SHOW_BOOTSCREEN
#define STRING_SPLASH_LINE1 "V1.1.9 for Anet E12" // will be shown during bootup in line 1
#define STRING_SPLASH_LINE2 "Adapted For Schyzo"   // will be shown during bootup in line 2

Ces 4 lignes ne font qu'afficher l'écran de démarrage ( Boot Screen). L'imprimante n'a pas besoin de ça, et moi non plus. Sans cet écran, l'imprimante sera lancée environ 5 secondes plus rapidement.

Commentez-donc ces 4 lignes (en ajoutant '//' devant chaque ligne) si vous voulez gagner plus de 1000 octets (1282 chez moi).

Toujours dans le look, ligne 97 :

#define SHOW_CUSTOM_BOOTSCREEN

Ceci ne sert qu'à afficher une image personnalisée définie dans le fichier Marlin/_Bootscreen.h au démarrage. Certains fournissent une image comme TH3D qui ne fait qu'alourdir le firmware. Vous pouvez commenter 🙂

maxresdefault.jpg

Puis, à la ligne 100 :

#define CUSTOM_STATUS_SCREEN_IMAGE

Même combat, une image personnalisée sur l'écran d'accueil, définie dans le fichier Marlin/_Statusscreen.h comme ici :
21_800x400.png

Vous pouvez commenter cette ligne pour gagner de précieux octets (voir plus).

PID

Le PID (Proportional Integral Derivative) est un procédé de Marlin et autres firmwares qui permet une montée en température optimisée des éléments chauffants (buse et lit).
Lorsque le PID de ces éléments n'est pas activé, la montée en température est définie en 'bang-bang', comprendre en gros en binaire : "Si c'est trop froid, j'envoie du courant à fond, si c'est à bonne température, je coupe".
Aussi la température ne fait que monter et descendre, ce qui peut poser une dégradation de l'impression notamment avec la température de la buse.
A titre d'exemple, j'ai trouvé cette image sur le forum reprap.org :

95_800x400.png

Page en question : https://reprap.org/forum/read.php?262,782815

Exemple de courbe de température en bang-bang :

standard-temp.png?w=591&h=274

Avec utilisation du PID :

pid_temp.png?w=656

Bref, si j'en parle ici c'est que l'utilisation du PID pèse quand même quelques kilos dans la bataille du gain de mémoire.
Pour ma part, j'ai activé le PID de la buse et du lit, quitte à supprimer d'autres fonctions.

PID de la buse :

Pour l'activer, il faut se rendre à la ligne 362 :

#define PIDTEMP

Puis environ 20 lignes plus bas, il faut définir les valeurs Kp, Ki et Kd :

  #define  DEFAULT_Kp 28.94
  #define  DEFAULT_Ki 2.37
  #define  DEFAULT_Kd 88.30

 
Si ces lignes sont commentées, décommentez-les.
 
Ces valeurs que je n'expliquerai pas faute de compétence (et ce n'est pas le sujet), sont MES PROPRES valeurs. C'est elles qui définiront la montée en température de votre élément chauffant.
A chaque changement de buse ou matériel chauffant (cartouche chauffante par exemple), il faut redéfinir ces valeurs.
Pour cela, je vous renvoie vers un tuto du forum qui explique pas à pas la marche à suivre pour récupérer ces 3 paramètres selon votre machine :

A noter que l'utilisation du PID pour la hotend requiert environ 3300 octets.

PID autotune :

Marlin propose d'ajouter un menu dans l'imprimante afin de lancer un autotune, c'est à dire que vous pourrez lancer directement depuis l'écran de l'imprimante un autotune qui calculera et enregistera les meilleurs valeurs pour votre imprimante.
Cette fonction lancera une montée en température de la buse (température que vous définirez via l'écran de l'imprimante directement), jugera et enregistrera dans l'EEPROM des meilleurs valeurs obtenues.

Pour cela, décommentez la ligne 367 :

#define PID_AUTOTUNE_MENU

Lors de l'autotune, sélectionnez une température que vous employez le plus. Par exemple si vous n'imprimez que du PLA et PETG, prenez une moyenne haute à 230° par exemple.
Le PID autotune occupera 600 octets environ de plus.

PID du bed :

Pour le lit, l'utilisation du PID reste identique, à savoir une température constante.
En mode BED_LIMIT_SWITCHING en revanche, on retrouve la chauffe binaire : On chauffe à fond ou rien du tout.

Si vous souhaitez activer l'utilisation du PID pour le lit chauffant, décommentez la ligne 407 :

#define PIDTEMPBED

Et n'oubliez pas de commenter la ligne 409 afin de libérer un peu de place :

//#define BED_LIMIT_SWITCHING

Puis comme pour la buse, définissez les valeurs de Kp, Ki et Kd ligne 424 :

  #define  DEFAULT_bedKp 255.01
  #define  DEFAULT_bedKi 17.39
  #define  DEFAULT_bedKd 934.85

 
L'utilisation du PID pour le lit chauffant occupera environ 1400 octets de plus que le mode BED_LIMIT_SWITCHING.

A noter qu'il ne sera pas possible, même en ayant activé l'autotune, de lancer un test autotune pour le bed depuis l'écran LCD (vous ne devrez pas avoir à le changer régulièrement, je l'espère pour vous 😉 ).
Là encore, je vous renvoie vers le tuto de neoraptor pour récupérer les valeurs Kp, Ki et Kd pour votre lit :

 

Protection contre vous-même :

Si jamais vous avez confiance en vous, sachez qu'il est possible de désactiver la protection d'extrusion à froid, ligne 445 :

#define PREVENT_COLD_EXTRUSION // Permet de ne pas faire tourner l'extrudeur si la température de la buse n'est pas d'au moins 170° (EXTRUDE_MINTEMP)

et la protection d'une trop grande extrusion manuelle, ligne 452 :

#define PREVENT_LENGTHY_EXTRUDE // Protection pour ne pas extruder plus de 200mm (EXTRUDE_MAXLENGTH) en dehors d'une impression

Ces 2 fonctions commentées vous feront gagner presque 1000 octets, à vous de jauger votre confiance en vous 🙂

Je ne détaillerai pas la désactivation des protections thermiques du bed et de la hotend, qui sont à mes yeux essentielles et donc non négociables.
 

Bed leveling

Si certains ont déjà du mener la bataille des octets avec Arduino, ceux-ci savent combien l'utilisation d'un palpeur est lourd.
Pour avoir fait quelques tests pour ce tuto, j'estime à 18ko le poids de l'utilisation d'un BLTouch par rapport à un simple endstop.
Mais saviez-vous que vous pouviez tout de même espérer libérer un peu de place ?

Chaque mode de leveling pèse plus ou moins lourd, et est plus ou moins complet forcément.

Bi-linéaire

Ligne 982 :

#define AUTO_BED_LEVELING_BILINEAR

Le mode certainement le plus utilisé et adapté à la plupart des plateaux. Grâce à un palpeur/sonde (BLTouch ou autre), il fait 3 palpages (points) ou plus dans chaque axe (X Y) et en détermine grossièrement ou finement selon le nombre de points déterminés les défauts du plateau, qu'il corrigera pendant l'impression.
Nécessite 11 ko sur la carte.

3 points

Ligne 980 :

#define AUTO_BED_LEVELING_3POINT

Avec un palpeur, sonde 3 points déterminés et détermine le nivellage du plateau. Plus léger (6 ko), à n'utiliser que si vous êtes sûrs que votre plateau est bien plat.

Linéaire

Ligne 981 :

#define AUTO_BED_LEVELING_LINEAR

Semblable au mode bi-linéaire, corrige un défaut de lit qui ne serait pas correctement incliné. Ce mode ne corrige pas les défauts d'un lit déformé (creux au centre par exemple).
Nécessite 11 ko sur la carte, je cherche l'intérêt de ce mode.

Unified Bed Leveling (UBL)

Ligne 983 :

#define AUTO_BED_LEVELING_UBL

Ce mode est trop gros pour ma carte, aussi je n'ai pas pu le tester.
Quoi qu'il en soit, celui-ci permet de créer une matrice très précise de votre lit et d'en enregistrer les relevés dans l'EEPROM. Puis à chaque impression, palpe 3 points pour déterminer l'inclinaison et les défauts du lit puis s'appuie sur les valeurs précédemment enregistrées pour corriger très précisément l'impression en fonction des défauts de votre lit.
Pèse approximativement 48 ko.

Mesh Leveling

Ligne 984 :

#define MESH_BED_LEVELING

Un mode que j'ai découvert il n'y a pas longtemps.
Celui-ci permet de corriger une déformation du lit, sans nécessiter de palpeur. Vous faites le sondage à la main (aidé par Marlin bien sûr) avec votre feuille de papier, vous jouez avec le Z depuis l'écran LCD et celui-ci corrige les défauts du lit pendant l'impression, comme si vous aviez un BLTouch.
9.7 ko nécessaires pour ce mode.

Hauteur lissée (fade height)

Avec certains bed leveling activés (Bi-linéaire, Mesh leveling ou UBL), vous avez la possibilité de définir une hauteur lissée, c'est à dire que pendant l'impression, Marlin va au fur et à mesure corriger la pièce pour que le défaut du lit ne soit plus visible à partir de X mm (définie via l'écran LCD ou par la commande M420 Z(hauteur).
En exagérant, si votre lit est creux au centre, on peut imaginer imprimer une boite ainsi :

fadeheight.png.a4c4018547bb74a845b3655f281ef4a7.png

En rouge en haut le résultat sans la hauteur lissée, en vert ce que donnera l'impression avec la hauteur lissée. Nécessite 1600 octets.

Bed leveling via le LCD

Ligne 1106 :
 

#define LCD_BED_LEVELING

Permet de faire le leveling si vous avez un des modes cités au dessus activé.
Si vous avez activé le Mesh Leveling (manuel), Marlin vous guidera étape par étape via l'écan LCD pour faire le leveling.
Requiert environ 1 ko.

Déplacement de la tête automatique

Ligne 1114 :
 

#define LEVEL_BED_CORNERS

Depuis l'écran LCD, permet de faire bouger la buse automatiquement pour faire le réglage aux 9 points du plateau en leveling mauel.
Nécessite 1200 octets.

Fonctions additionnelles

Préchauffage

J'ai lu encore récemment qu'on pouvait gagner de la place en commentant les fonctions de préchauffage de PLA et ABS. Bien que je les trouve utile, voilà comment gagner 40 octets. Oui, pas un de plus, 40...
Commentez les lignes 1262 à 1268 :

#define PREHEAT_1_TEMP_HOTEND 210
#define PREHEAT_1_TEMP_BED     60
#define PREHEAT_1_FAN_SPEED     0 // Value from 0 to 255

#define PREHEAT_2_TEMP_HOTEND 235
#define PREHEAT_2_TEMP_BED    80
#define PREHEAT_2_FAN_SPEED     0 // Value from 0 to 255

Il vous faudra également commenter ces lignes dans le fichier configuration_store.cpp, à la ligne 1820 :

  #if ENABLED(ULTIPANEL)
    lcd_preheat_hotend_temp[0] = PREHEAT_1_TEMP_HOTEND;
    lcd_preheat_hotend_temp[1] = PREHEAT_2_TEMP_HOTEND;
    lcd_preheat_bed_temp[0] = PREHEAT_1_TEMP_BED;
    lcd_preheat_bed_temp[1] = PREHEAT_2_TEMP_BED;
    lcd_preheat_fan_speed[0] = PREHEAT_1_FAN_SPEED;
    lcd_preheat_fan_speed[1] = PREHEAT_2_FAN_SPEED;
  #endif


 
Notez que mes valeurs ne sont plus celles par défaut. Plutôt que de les virer, j'ai renommé 'ABS' en 'PETG' dans les fichiers de langue, bien plus utile que de tout supprimer pour gagner une misère.
Je ne recommande absolument pas de toucher aux fichiers cpp, à vos risques et périls.

Modifier les valeurs de l'EEPROM

Ligne 1230 :
 

#define EEPROM_SETTINGS

Permet depuis votre PC relié à l'imprimante ou l'écran LCD de modifier la vitesse max, accélérations, jerk, steps/mm, offset Z etc etc
Si vous êtes certains de ne plus toucher à ces réglages ou de flasher à chaque fois votre imprimante pour les modifier, vous pouvez commenter cette ligne afin de libérer 5.7 ko

Récupérer les valeurs de l'EEPROM

Ligne 1231 :
 

#define DISABLE_M503

Pour gagner 2800 octets, il faut ACTIVER (ne pas commenter) cette ligne. Permet depuis un terminal de récupérer les paramètres de l'EEPROM (accélération, vitesses, steps/mm, ...).

Nettoyage de la buse

Il existe une fonction permettant avant chaque print de nettoyer la buse en l'envoyant à un point spécifique de votre plateau (ou légèrement en dehors).
Voilà par exemple la réalisation de notre ami @Jean-Claude Garnier qui envoie sa buse se faire polisher sur une brosse à dent :

scratcher.jpg

Pour l'activer, ligne 1328 :
 

#define NOZZLE_CLEAN_FEATURE

Nécessite 1.7 ko

Carte SD

Pour ceux qui n'impriment que via PC ou Raspberry, sachez qu'il est possible de désactiver le support de la carte SD.
Commentez la ligne 1433 :
 

//#define SDSUPPORT

Cela vous libérera presque 17 ko dans la carte de l'imprimante, mais impossible d'utiliser la carte SD..

Pour les extrêmes

Encore une fois, si vous n'imprimez que depuis le port USB de votre imprimante, il se peut que vous n'ayez même pas besoin de l'écran.
Par exemple, en désactivant l'écran LCD de mon Anet, ligne 1757 :
 

//#define ANET_FULL_GRAPHICS_LCD

Cela me fait économiser 39 ko de mémoire que je peux réutiliser ailleurs. Mais je n'ai plus d'écran, tout se fait depuis le PC ou le Raspberry.

 

Voilà pour le fichier de configuration.h, j'essayerai de faire configuration_adv.h dans les jours à venir.
N'hésitez pas d'y aller de vos retours si des passages sont à améliorer, réctifier ou clarifier.

Modifié (le) par Schyzo
  • J'aime 9
  • Merci ! 7
Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, Schyzo a dit :

.. /.. J'espère ne pas brusquer les modérateurs par tant de pratiques démoniaques 

T'inquiètes, il ont le cuir épais.....

  • Haha 1
Lien vers le commentaire
Partager sur d’autres sites

super tuto, qui m'a permis de découvrir la fonction leveling sans palpeur n'y bltouch... je vais testé tout cela ce week end..

Tu pourrais mettre le lien vers la méthode de notre ami @Jean-Claude Garnier pour le nettoyage de la buse via brosse a dent.

hâte de voir pour le second fichier

Modifié (le) par palouf34
Lien vers le commentaire
Partager sur d’autres sites

Désolé pas le temps en ce moment, entre le boulot qui s'accélère et mon 3DTouch qui devient aléatoire.. 

Il y a 2 heures, palouf34 a dit :

super tuto, qui m'a permis de découvrir la fonction leveling sans palpeur n'y bltouch... je vais testé tout cela ce week end..

Tu pourrais mettre le lien vers la méthode de notre ami @Jean-Claude Garnier pour le nettoyage de la buse via brosse a dent.

hâte de voir pour le second fichier

Y'a t-il moyen des pouvoir éditer les 2 premiers messages de ce post svp?  Ça serait utile pour ajouter 2 3 trucs. Merci. 

Lien vers le commentaire
Partager sur d’autres sites

il y a 38 minutes, Schyzo a dit :

Y'a t-il moyen des pouvoir éditer les 2 premiers messages de ce post svp? 

En demandant gentiment au grand chef: @Motard Geek. Lui seul le peut 😄 .

Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

Merci beaucoup pour ce tuto très instructif. Ayant un plateau très (trop ?) tordu sur mon Anet A8, je voulais activer le bed leveling UBL mais en effet la mémoire est trop limitée...

Grâce à ce tuto, j'ai fouillé un plus mais n'ayant pas d'écran graphique, je n'arrivai pas à gagner assez de place.

Il y a une solution !

Décommenter //#define NO_LCD_MENUS qui implique de commenter #define ZONESTAR_LCD (sinon bonjour les erreurs de compil)

Et là c'est magique avec l'UBL activé et deux trois autres fioritures on a seulement 82% de la mémoire occupée !

En revanche l'écran n'affiche plus rien (ce qui est normal vu qu'on l'a désactivé) mais ça peut surprendre.

Si ça peut aider...

Lien vers le commentaire
Partager sur d’autres sites

  • 3 months later...

Bonjour,

 

 Quelqu'un saurais ou trouver un tuto des commandes de Marlin sur lcd12864 car étant novice je ne voudrais pas faire de bug quand j'imprime car hier je me suis aperçu qu'en imprimant pas tous était automatisé mon fan cool ne démarrait pas et la vitesse d'impression était au ralenti..

 Et pouvez me dire si c'est normal que mon impression est presque parfaite disons même superbe avec Marlin...

 

 Cdlt à tous

Lien vers le commentaire
Partager sur d’autres sites

  • 3 months later...

Bonjour et merci pour les infos mais je suis toujours coincé avec cette histoire de vérifier compiler j'ai regarder pas mal de vidéo et suivi à la lettre mais j'ai plein de message d'erreur du coup impossible de transférer les donnée :( . Je possède un tevo tornado gold 2018 avec une carte MKS GEN L 1.0 plus BLTOUCH avec des stepper TMC2208_STANDALONE en XZE et Le Y c'est un LV8729 mais j'ai du mal à remettre un firmware correct help :( . Si y à quelqu'un qui possède la même config qui peut m'aider sa serait cool merci

Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

Salut tout le monde,

Je suis en train de dépoussiérer une CR-10 modée en CR-10S (double Z) et je me fais insulter par Octoprint car elle comporte toujours son firmware d'origine.
Je voulais donc me lancer dans l'installation de Marlin, mais en gros noob dans ce domaine, je suis confronté à un doute quant au choix du fichier de config.

Je me dis que c'est Configurations/config/examples/Creality/CR-10S/CrealityV1/ mais je préfère m'en remettre aux connaisseurs avant de faire des bêtises.
Et pour le choix de Marlin, je peux passer directement en 2.1 ?

Ci-joint la carte mais en version 2.0.

CM V2.jpg

Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

Rien à faire je n'arrive pas à alléger la version 2.1.2.1, as tu eu le temps de faire de même pour le fichier configuration_adv.h?

Si quelqu'un a une idée de ce que je pourrais enlever en plus je suis preneur je dépasse de 6730 bytes, ce qui me parait énorme.

merci,

Christophe

Modifié (le) par old-school
Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...