Aller au contenu

GO Print

Anaximore

Membres
  • Compteur de contenus

    15
  • Inscrit(e) le

  • Dernière visite

Contact

Information

  • Genre
    Non renseigné
  • Lieu
    Besançon
  • Intérêts
    Devenir maître du monde et accessoirement vivre de ma passion du stream ;)
  • Imprimantes
    Ender3, Alfawise C10

Visiteurs récents du profil

Le bloc de visiteurs récents est désactivé et il n’est pas visible pour les autres utilisateurs.

Récompenses de Anaximore

Apprentice

Apprentice (3/14)

  • First Post
  • Collaborator
  • Conversation Starter
  • Week One Done
  • One Month Later

Badges récents

4

Réputation sur la communauté

Favoris

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

    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.


×
×
  • Créer...