Le guide malin de Marlin (en français)

Dans ce guide, nous allons aborder la personnalisation du firmware Marlin (1.1.8) pour les imprimantes CR-10 et CR-10S et comprendre les options importantes.

Les commandes sont classées par catégories :

Configuration.h

  • Paramètres généraux
  • Paramètres de température
  • Paramètres PID
  • Paramètres mécaniques et de mouvement
  • Paramètres additionnels

Configuration_adv.h

  • Paramètres de température
  • Paramètres additionnels

Ce guide ne traite pas de la configuration des capteurs ou sondes utilisées pour corriger ou vérifier la planéité du plateau (BLtouch, 3dTouch, EZABL, etc.).

Reportez vous à leurs tutos respectifs pour cela.

Le « Mesh Bed Levelling » fait lui aussi l’objet d’un tutoriel à part que vous pourrez trouver ici.


 Prérequis :

  • Arduino IDE (programme permettant l’édition et le téléversement du firmware Marlin).
  • Librairie U8glib (bibliothèque utile pour l’ecran LCD de la CR-10(s) ).
    • Activez la librairire dans Arduino IDE en allant dans : Croquis > Inclure une bibliothèque >  Ajouter la bibliothèque .ZIP

Comment éditer dans Arduino IDE

Dans les onglets de configuration, vous trouverez certaines lignes ou paragraphes commençant par /**.

Cela indique des lignes de commentaires, d’explications ou d’informations.

Les phrases commencant par //# sont des options que l’on peut activer ou pas. Si vous laissez les // devant la commande, celle-ci n’est pas active. Pour l’activer, il suffit de supprimer les //.

Il est possible d’activer les numéros de ligne pour faciliter la recherche des lignes de commande. Attention toutefois, les numéros de ligne peuvent varier d’une version de firmware à une autre.

Pour les activer, allez dans: Fichier > Préférences et cochez « Afficher les numéros de ligne ».

Les numéros de lignes présentées dans ce tuto s’appliquent à Marlin 1.1.8, disponible ici

Une fois téléchargé, dézippez le dossier et lancez Marlin.ino qui se trouve dans le dossier: Marlin-1.1.x > Marlin.

Voici à quoi ressemble le firmware Marlin:

On retrouve donc une série d’onglets et la fenêtre principale dans laquelle nous allons travailler.

La majorité des modifications effectuées se feront dans l’onglet Configuration.h, mais d’autres modifications sont à prévoir dans d’autres onglets. Nous l’indiquerons dans le tuto.


Notice d’utilisation du tuto:

  • Attention, certains paramètres du firmware sont différents entre la CR-10 et la CR-10S.
  • Dans ce tuto, vous trouverez les lignes de commandes du firmware Marlin par défaut, puis juste en dessous leur description et les valeurs à changer en fonction de votre imprimante.
    • Les valeurs en rouge sont les valeurs de base du firmware Marlin.
    • Les valeurs en vert sont les valeurs modifiées suivant votre type d’imprimante (CR-10, CR-10S) ou les différentes modifications matérielles (tête, bltouch, etc.).
  • Parfois il n’est pas utile de changer la valeur par défaut, cela sera indiqué.
  • Pour activer une commande supprimez les //
  • Pour désactiver une commande, laissez ou ajoutez //
    • Exemple:
      • //#define Bla_bla_bla : Commande désactivée
      • #define Bla_bla_bla: Commande activée

 Configuration.h

Paramètres généraux:

77 | #define STRING_CONFIG_H_AUTHOR « (none, default config) » // Who made the changes.

S’affiche dans le message de démarrage de Marlin. Il suffit d’ajouter votre texte à la place de: (none, default config).

Par exemple:

77 | #define STRING_CONFIG_H_AUTHOR « CR10.fr for ever » // Who made the changes.

78 |#define SHOW_BOOTSCREEN

Permet d’afficher une image lors du démarrage. Il est possible de personnaliser l’image qui s’affiche, cela fera l’objet d’un autre tuto.

79 |#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during bootup in line 1

Affiche la version actuelle du firmware.

80 |#define STRING_SPLASH_LINE2 WEBSITE_URL         // will be shown during bootup in line 2

Affiche l’adresse du site internet http://marlinfw.org

Toutes ces lignes peuvent être désactivées, même s’il est toujours intéressant de connaitre sa version de firmware en cours, ou sympa d’afficher un message personnalisé voir un logo.


114 |#define BAUDRATE 250000

Ici on détermine la vitesse de communication de l’imprimante en USB. Nos CR-10 fonctionnent avec un baudrate de 115200. Cette valeur est donc à changer car par défaut, elle est à 250000.

Toutefois, les CR-10S équipées d’un écran tactile (optionnel) devront utiliser un baudrate de 250000. Dans ce cas, ne changez pas cette valeur.


122 | #define MOTHERBOARD BOARD_RAMPS_14_EFB

Permet d’indiquer quelle est la carte qui équipe votre imprimante. Vous retrouverez la liste des cartes ainsi que la valeur à rentrer pour chacune dans l’onglet boards.h. Les valeurs ci-dessous sont valables pour les cartes de base des deux versions de CR10.

  • Pour la CR10 : #define MOTHERBOARD BOARD_MELZI_CREALITY
  • Pour la CR10S : #define MOTHERBOARD BOARD_RAMPS_14_EFB

127 | #define CUSTOM_MACHINE_NAME « 3D Printer »

Personnalise la ligne en bas à gauche de l’écran lorsque l’imprimante est démarrée. Essayez par exemple:

127 | #define CUSTOM_MACHINE_NAME « Ma cr-10 cherie »


140 | #define DEFAULT_NOMINAL_FILAMENT_DIA 3.0

Le diamètre du filament par défaut dans Marlin est spécifié à 3.0 mm. Nos CR-10(S) sont elles prêtes pour du filament de diamètre 1.75mm. Il faut donc changer cette valeur en :

140 | #define DEFAULT_NOMINAL_FILAMENT_DIA 1.75


Paramètres de température:

289 | #define TEMP_SENSOR_0 1

Cette ligne indique quelle thermistance est utilisée sur votre tête d’extrusion. Pour la tête d’origine, cette valeur ne change pas. Si vous avez installé une autre tête, reportez vous à la notice du constructeur. 

Pour une E3d-V6 par exemple, il faudra changer la valeur comme suit:

289 | #define TEMP_SENSOR_0 5

La liste complète des thermistances prisent en charge par Marlin est indiquée en commentaire dans les lignes 246 à 285.


294 | #define TEMP_SENSOR_BED 0

Comme pour la tête chauffante, ici nous pouvons changer la valeur pour le capteur du plateau chauffant.

Pour les CR-10(S), cette valeur doit être changée:

294 | #define TEMP_SENSOR_BED 5


328 | #define HEATER_0_MAXTEMP 275

Température maximale de votre tête. Au delà, la chauffe s’arrête automatiquement afin de protéger d’un éventuel accident de surchauffe.

Cette valeur ne change pas pour la tête d’origine mais doit être adaptée si vous en changez. 

Par exemple pour une E3d- v6:

328 | #define HEATER_0_MAXTEMP 300


333 | #define BED_MAXTEMP 150

Température maximale du plateau chauffant avant que celui-ci ne se mette en sécurité. Vous pouvez laisser cette valeur (de toute façon difficile à atteindre) ou la changer pour plus de sécurité par:

333 | #define BED_MAXTEMP 120


Paramètres PID

346 | //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD « Temperature » menu to run M303 and apply the result.

En activant cette option, vous pourrez lancer un PID autotune directement depuis votre écran LCD, menu « Température ».

346 | #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD « Temperature » menu to run M303 and apply the result.

357 | // Ultimaker
358 | #define DEFAULT_Kp 22.2
359 | #define DEFAULT_Ki 1.08
360 | #define DEFAULT_Kd 114

362 | // MakerGear
363 | //#define DEFAULT_Kp 7.0
364 | //#define DEFAULT_Ki 0.1
365 | //#define DEFAULT_Kd 12

366 | // Mendel Parts V9 on 12V
367 | //#define DEFAULT_Kp 63.0
368 | //#define DEFAULT_Ki 2.25
369 | //#define DEFAULT_Kd 440

Ces lignes proposent des exemples de valeurs PID pour certaines configuration. Aucune ne nous intéresse pour nos CR-10(S).

Vous pouvez donc supprimer ces lignes et les remplacer par :

// Stock CR-10 Hotend fan 100%
#define DEFAULT_Kp 17.42
#define DEFAULT_Ki 1.27
#define DEFAULT_Kd 59.9

Pensez à changer les valeurs de KP, Ki ou KD par les valeurs trouvées en faisant un réglage PID comme expliqué dans la FAQ ou ici. Les valeurs notées ici sont toutefois utilisables sur les CR10(S) de base. 


386 | //#define PIDTEMPBED

Activez cette option afin de pouvoir lancer un PID pour le lit chauffant grâce à la commande M303 E-1 C8 S50 (pour lancer un PID pendant 8 cycles à 50°c, valeurs à personnaliser).

Si vous avez un message d’erreur au moment de lancer la commande, vérifier dans Configuration_adv.h que la valeur de WATCH_BED_TEMP Period n’est pas supérieur à 127.

386 | #define PIDTEMPBED

400 | //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
401 | //from FOPDT model – kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
402 | #define DEFAULT_bedKp 10.00
403 | #define DEFAULT_bedKi .023
404 | #define DEFAULT_bedKd 305.4

406 | //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
407 | //from pidautotune
408 | //#define DEFAULT_bedKp 97.1
409 | //#define DEFAULT_bedKi 1.41
410 | //#define DEFAULT_bedKd 1675.16

Ces lignes proposent des exemples de valeurs PID pour certaines configuration. Aucune ne nous intéresse pour nos CR-10(S).

Vous pouvez donc supprimer ces lignes et les remplacer par :

//Stock Bed Tuned for 50C
#define DEFAULT_bedKp 690.34
#define DEFAULT_bedKi 111.47
#define DEFAULT_bedKd 1068.83

Pensez à changer les valeurs de KP, Ki ou KD par les valeurs trouvées en faisant un réglage PID plateau comme expliqué plus haut. Les valeurs notées ici sont toutefois utilisables sur le plateau chauffant de base des CR-10(S).


Paramètres mécaniques et de mouvement

532 | #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 500 }

Un des paramètre les plus important pour votre imprimante puisqu’il définit la précision avec laquelle l’imprimante va déplacer les différents axe. Les valeurs correspondent respectivement à X, Y, Z et E. 

Dépend de nombreux paramètres comme le nombre de dents des courroies, des poulies, de la tige filetée, de l’extrudeur.  

Vous pouvez affiner les valeurs notamment grâce à la calibration de l’extrudeur (tuto ici), mais pour les CR10(S) de base, les valeurs suivantes sont acceptables : 

532 | #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 95 }


539 | #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }

Exprimées en mm/s, indique les vitesses maximales dans les directions X, Y, Z et E.

Vous pouvez augmenter ces valeurs, mais sans monter trop haut. On utilise en général pour les CR10(S) les valeurs suivantes :

539 | #define DEFAULT_MAX_FEEDRATE { 500, 500, 15, 25 }


547 | #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }

557 | #define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves
558 | #define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
559 | #define DEFAULT_TRAVEL_ACCELERATION 3000

569 | #define DEFAULT_XJERK 10.0
570 | #define DEFAULT_YJERK 10.0
571 | #define DEFAULT_ZJERK 0.3
572 | #define DEFAULT_EJERK 5.0

Ici je rassemble les paramètres d’accélération et de Jerk car ces deux paramètres sont fortement liés.

Lorsque la tête change de direction, elle doit accélérer puis décélérer. La valeur indiquée sera la vitesse maximum que l’imprimante peut atteindre lors de ce déplacement. 

L’ autre paramètre rentrant en compte lors du changement de direction, c’est le « Jerk ». Le Jerk indique la vitesse immédiate que peut atteindre la tête avant de continuer à accélérer. 

Pour comprendre, prenons pour exemple, une accélération maximum de 50 mm/s avec un jerk de 20 mm/s :

  • Lors d’un changement de direction, la tête va aller instantanément à 20 mm/s puis ensuite accélérer jusqu’à atteindre 50mm/s

Ces valeurs sont importantes car trop rapide, vous risquez de créer des vibrations trop importantes, du bruit et de rater des pas, à contrario, trop lent, un risque de « ringing » risque d’apparaître sur vos pièces (effet d’écho).

Pour les CR-10(S), les valeurs suivantes sont une bonne moyenne, mais ces paramètres peuvent être affinés. Cela demande en revanche beaucoup de patience et de tests avant de trouver les valeurs idéales !

547 | #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 5000}

557 | #define DEFAULT_ACCELERATION 500// X, Y, Z and E acceleration for printing moves
558 | #define DEFAULT_RETRACT_ACCELERATION 1000// E acceleration for retracts
559 | #define DEFAULT_TRAVEL_ACCELERATION 500

569 | #define DEFAULT_XJERK 10.0
570 | #define DEFAULT_YJERK 10.0
571 | #define DEFAULT_ZJERK 0.4
572 | #define DEFAULT_EJERK 5.0


751 | #define INVERT_X_DIR false
752 | #define INVERT_Y_DIR true
753 | #define INVERT_Z_DIR false

Ces 3 lignes sont liées aux moteurs des 3 axes X, Y et Z. Elles définissent le sens dans lequel les axes vont se déplacer. Si vous constatez que vos axes sont à l’envers, il suffit d’inverser les valeurs « true » (vrai) ou « false » (faux).

Pour la CR-10, modifiez les valeurs en :

751 | #define INVERT_X_DIR true
752 | #define INVERT_Y_DIR true
753 | #define INVERT_Z_DIR false

Pour la CR-10S :

751 | #define INVERT_X_DIR false
752 | #define INVERT_Y_DIR false
753 | #define INVERT_Z_DIR true


761 | #define INVERT_E0_DIR false

Indique le sens du moteur de l’extrudeur (feeder).

  • Pour la CR-10 : #define INVERT_E0_DIR true
  • Pour la CR-10S : #define INVERT_E0_DIR false

783 | #define X_BED_SIZE 200
784 | #define Y_BED_SIZE 200

Ici, il faut définir la taille du plateau de no CR-10(S). Il suffit donc de changer la valeur par la taille en mm. Pour les 300, il faudra donc inscrire :

783 | #define X_BED_SIZE 300
784 | #define Y_BED_SIZE 300

787 | #define X_MIN_POS 0
788 | #define Y_MIN_POS 0
789 | #define Z_MIN_POS 0
790 | #define X_MAX_POS X_BED_SIZE
791 | #define Y_MAX_POS Y_BED_SIZE
792 | #define Z_MAX_POS 200

Ces valeurs donnent les limites depuis la position « home » qui est spécifiée à 0. La taille du plateau étant indiquée dans les lignes précédentes, elles sont reprises automatiquement ici. Seule la valeur de la hauteur est à changer. Pour une CR-10(S) de 300×300, il faut alors changer la ligne 792 :

792 | #define Z_MAX_POS 400


827 | //#define FILAMENT_RUNOUT_SENSOR

Si vous avez installé un détecteur de fin filament, vous devez activer cette option pour qu’il soit fonctionnel. SI vous n’en possédez pas, ne prenez pas en compte cette option.

827 | #define FILAMENT_RUNOUT_SENSOR 

Pour le détecteur de filament d’origine, vous devez également changer la valeur à la ligne :

829 | #define FIL_RUNOUT_INVERTING false

en

829 | #define FIL_RUNOUT_INVERTING true


Paramètres additionnels

1116 | //#define EEPROM_SETTINGS // Enable for M500 and M501 commands

En activant cette commande, vous pourrez sauvegarder vos changement dans l’EEPROM. Ainsi, vos paramètres sont sauvegardés même si vous redémarrez l’imprimante.

1116 | #define EEPROM_SETTINGS // Enable for M500 and M501 commands

1117 | //#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release!

Cette option vous permet d’afficher, à partir d’un logiciel comme RepetierHost par exemple, les paramètres du firmware injecté (pas ceux sauvegardés dans l’EEprom) à partir d’un logiciel comme RepetierHost par exemple. Mais c’est une option qui utilise beaucoup de mémoire. Si vous souhaitez, vous pouvez désactiver ce paramètre afin de libérer cette mémoire pour un autre paramètre.

1117 | #define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release!


1148 | #define PREHEAT_1_TEMP_HOTEND 180
1149 | #define PREHEAT_1_TEMP_BED 70
1150 | #define PREHEAT_1_FAN_SPEED // Value from 0 to 255

1152 | #define PREHEAT_2_TEMP_HOTEND 240
1153 | #define PREHEAT_2_TEMP_BED 110
1154 | #define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255

Vous pouvez personnaliser les températures de préchauffage disponibles dans le menu du boitier de contrôle. le Preheat 1 correspond au PLA, le Preheat 2 à l’ABS par défaut. Il suffit de changer les valeurs de la tête et du plateau par vos valeurs d’impression par exemple.

1148 | #define PREHEAT_1_TEMP_HOTEND 200
1149 | #define PREHEAT_1_TEMP_BED 60
1150 | #define PREHEAT_1_FAN_SPEED // Value from 0 to 255

1152 | #define PREHEAT_2_TEMP_HOTEND 240
1153 | #define PREHEAT_2_TEMP_BED 90
1154 | #define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255


1286 | #define LCD_LANGUAGE en

Vous pouvez changer la langue des menus du boitier de controle. Attention toutefois, certains caractères peuvent ne pas s’afficher correctement. Pour le français, changez la valeur en :

1286 | #define LCD_LANGUAGE fr

ou

1286 | #define LCD_LANGUAGE fr_utf8 (pour la prise en charge des caractères spéciaux comme les accents)


1332 | //#define SDSUPPORT

Pour pouvoir imprimer depuis une carte SD, vous devez absolument activer cette option.

1332 | #define SDSUPPORT


1357 | //#define ENCODER_PULSES_PER_STEP 1

1363 | //#define ENCODER_STEPS_PER_MENU_ITEM 5

Ces 2 options influent sur la vitesse à laquelle vous vous déplacez au sein et entre les différents menus du boitier de contrôle lorsque vous tournez le bouton. Activez ces options et, suivant la sensibilité du bouton, augmentez ces valeurs (si trop lent) ou diminuez les (si trop rapide) :

1357 | #define ENCODER_PULSES_PER_STEP 1

1363 | #define ENCODER_STEPS_PER_MENU_ITEM 5


1403 | //#define SPEAKER

Cette option vous permet d’activer le son de l’imprimante, lorsque vous vous déplacez dans el menu ou que l’impression est terminée par exemple. A vous de décider si vous l’activez, ou pas !


1612| //#define CR10_STOCKDISPLAY 

Les lignes 1401 à 1627 concernent les écrans de contrôle équipant nos imprimantes. Les CR-10 sont équipées par défaut d’un écran identifié à la ligne 1612. Activez cette option :

1612| #define CR10_STOCKDISPLAY 

Pour les CR-10s, activez la ligne:

| #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

(A noter que cette ligne fonctionne également pour les CR-10)

Si vous possédez un autre écran, reportez vous à la documentation pour choisir la ligne à activer.


Configuration_adv.h

Paramètres de température

96 |#define WATCH_BED_TEMP_PERIOD 60 // Seconds
97 |#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius

Ces paramètres, que l’on retrouve également pour la tête d’impression aux lignes 82 et 83, surveillent la montée en température du plateau chauffant. On peut les traduire comme ceci: si la température du plateau ne monte pas de 2°c toutes les 60 secondes, l’imprimante se met en sécurité.

Cela peut être gênant si le plateau est mal isolé et que l’on souhaite monter la température à plus de 70°c. La montée à partir de cette température est très lente et peux provoquer la mise en sécurité.

Il est donc possible de changer le temps d’attente par 120 secondes ou 180. Toutefois, veuillez noter qu’au delà de 127 secondes, vous ne pourrez pas effectuer de PID du plateau.

Ces informations sont également disponibles dans le tuto Augmentation du temps de surveillance du plateau.

96 |#define WATCH_BED_TEMP_PERIOD 120// Seconds
97 |#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius


Paramètres additionnels

474 | //#define LCD_INFO_MENU

Quand elle est activée, cette option permet d’ajouter un menu d’information dans le menu de l’écran (type de firmware, type d’écran, nom du créateur du firmware, etc.). 


658 | //#define BABYSTEPPING

Fonction très utile car elle permet d’ajuster encours de print (en général lors de la première couche) la hauteur de la buse en temps réel. Parfait pour rattraper un bed leveling maladroit !

658 | #define BABYSTEPPING

662 | #define BABYSTEP_MULTIPLICATOR 1 

Ici on ajuste la vitesse du mouvement effectué par la tête (vers le haut ou le bas) lorsque l’on tourne le bouton du boitier de contrôle. 5 ou 10 sont les valeurs les plus fréquemment recommandées, à ajuster selon vos envies (diminuer ce chiffre pour un déplacement moins rapide de la buse en Z ou augmentez le pour accélérer).

662 | #define BABYSTEP_MULTIPLICATOR 10

664 | //#define DOUBLECLICK_FOR_Z_BABYSTEPPING

Grâce à cette option, vous pouvez accéder au Babystepping en cours d’impression, simplement en effectuant un double clic sur le bouton du boitier de contrôle, plutôt que de passer par le menu. A activer si vous le désirez.


733 |#define ARC_SUPPORT

Cette option peut être désactivée afin de vous faire gagner de la mémoire pour d’autres paramètres. En effet, ici il est question de l’ interpolation circulaire. Or, un fichier STL à la base est une succession de lignes droites, donc il n’est pas nécessaire d’implémenter des arcs s’il n’y en a pas. Pour certains qui s’amusent avec un stylo ou feutre monté sur leur support de tête, cela peut être utile de le conserver. Pour les autres, cela ne changera rien à vos impressions.

733 |//#define ARC_SUPPORT


879 |//#define ADVANCED_PAUSE_FEATURE

Option à n’activer que si vous êtes en possession d’un détecteur de fin de filament.

Cela permet de mettre en pause l’imprimante, ranger la tête sur le côté, arrêter la chauffe si le filament n’est pas remplacer dans un laps de temps donné, faciliter le retrait du filament dans le tube PTFE en effectuant une rétractation.

Toujours pour les possesseurs d’un détecteur de fin de filament, pensez à changer la ligne

255 | #define FIL_RUNOUT_PIN 4

qui se trouve dans l’onglet pins_RAMPS.h en :

255 | #define FIL_RUNOUT_PIN 2


Conclusion

Nous voici au bout de ce guide.

Après avoir personnalisé votre firmware, il ne vous reste plus qu’à le téléverser dans l’imprimante et essayer toutes ces fonctionnalités.

Rappelez vous que la configuration parfaite est celle que vous aurez testé sur votre imprimante. Ce n’est pas parce qu’un firmware fonctionne parfaitement chez un utilisateur, qu’il fonctionnera parfaitement pour vous. De nombreux paramètres rentrent en ligne de compte.

Néanmoins, dans ce guide, vous trouverez une bonne base solide pour vous aider à trouver votre Graal ! (C’est pas faux…)