Salut à tous, gros article aujourd'hui. La gestion des filaments sur Duet3D.

Pour ceux qui ne connaissent pas, Duet3D est une carte de contrôle pour imprimante 3D tournant sous RepRap avec une surcouche de gestion via interface web. Je ne vous présenterai pas la carte en particulier, les options et fonctionnalités étant nombreuses et décrites sur le site du fabricant : https://www.duet3d.com/

L'article d'aujourd'hui va se porter sur la gestion de filament. Pour beaucoup, la gestion de filament se fait dans votre Slicer de choix (Cura, Simplify3D, SuperSlicer, PrusaSlicer,...). La duet permet elle, de déplacer cette gestion a l'imprimante. Sur celle-ci les paramètres de température, flux, rétraction etc peuvent être configurés pour chaque filament. Ceci permet de slicer un objet 1 fois et de changer de filaments comme bon vous semble (avec certaines limites bien sûr).

Quels paramètres?

Commençons par discuter des paramètres que l'on peut déplacer sans se poser de questions.

Dans les paramètres liés au filament et que l'on peut déplacer sur l'imprimante nous avons:

  • La température d'extrusion
  • La température du plateau
  • Le flux
  • La rétractation (si on utilise les commandes G10 et G11)
  • Le pressure advance
  • L'extrusion non linéaire

Mais certains paramètres sont quand même liés au filament et ne sont pas directement modulables, tel que la vitesse et le refroidissement.
Pour la vitesse, une solution consisterai a utiliser le multiplicateur de vitesse de l'imprimante pour descendre par exemple a 1/3 de la vitesse pour du TPU. C'est une possibilité que je n'utilise pas (encore). La ventilation quand a elle, je n'ai pas encore trouvé de solution viable. Ca viendra surement :)

Duet3D et les filaments

Sur l'interface de contrôle Duet3D, il y a un onglet Filaments permettant de configurer différents filaments.

L'onglet Filaments de DuetWebControl

Ces configuration contiennent non seulement les paramètres pour le filament donnée, mais également 2 macros: une pour le chargement du filament, et l'autre pour le déchargement.

Les 3 macros de filament

Ceci permet d'automatiser le chargement et déchargement de chaque filament avec ses propriétés (vous trouverez une explication complète en anglais ici: https://duet3d.dozuki.com/Wiki/Filaments).

Des macros dans les macros

RepRap permet d'appeler des macros depuis un gcode (en réalité, les macros sont des gcode, et tout est gcode dans reprap). Ceci permet d'avoir certaines commandes communes a certaines tâches. Par exemple, mes commandes de chargement et de déchargement sont pratiquement identiques entres mes filaments, donc je peux utiliser une macro pour n'avoir qu'un code a maintenir si des changements sont nécessaires.

C'est donc ce que je vais utiliser pour les paramètres des filaments.

Du gcode, enfin!

Bon pour résumer, j'ai des commandes pour chaque filament mais celles-ci vont appeler une macro générale qui sera utilisée par tout les filaments. Ca fera donc: Paramètre filament -> Macro générale

Je vais maintenant vous expliquer en détail comment j'ai mis en place ces macros.

Chargement

Commençons par le début: le chargement du filament. Lorsque je demande a un filament d'être chargé, l'imprimante appelle le gcode load.g du filament. Ce gcode contient le code suivant:

; Filament loading file
; Author: Philipp
; Filament: Filamentum Vertigo Grey
; Type: PLA
; Options:
; E: Extrusion temperature (PLA: 215, PCTG: 250, ABS: 230)

M98 P"/macros/Filaments/general_load.g" E215

Les premières lignes ne sont que des commentaires pour l'utilisateur. Au final ce gcode ne contient qu'une ligne de code: M98 P"" E215. Ce code appelle en réalité un autre gcode (/macros/Filaments/general_load.g) qui s'occupera de charger le filament. Le seul paramètre que l'on donne a cette macro est E215 qui est la température d'extrusion pour ce filament.

Du coup, voyons ce que contient general_load.g:

; Author: Philipp
; General Filament Loading Macro
; Contains the bulk of the settings used on each filament
; Parameters to input:
; E: Extrusion Temperature

M291 P"Chauffage de la tête d''extrusion en cours" R"Chargement filament" S1

M568 P0 S{param.E}
M116 					; Wait for the temperatures to be reached

M291 P"Mettre filament dans l''extrudeuse" R"Chargement filament" S3
M291 P"Avancement du filament" R"Chargement filament" S1 ; Display new message

G1 E10 F600 			; Feed 10mm of filament at 600mm/min
G1 E700 F4000 			; Feed 470mm of filament at 3000mm/min
G1 E20 F300 			; Feed 20mm of filament at 300mm/min
G4 P1000 				; Wait one second
G1 E-10 F1800 			; Retract 10mm of filament at 1800mm/min
M400 					; Wait for moves to complete

La première ligne de code, permet d'afficher un message a l'écran indiquant que la tête d'extrusion va être chauffée a la température nécessaire pour insérer le filament. La seconde ligne chauffe la tête d'extrusion a la température donnée par le paramètre E que l'on a passé a la macro depuis load.g.
La suite est simplement l'avance du filament dans le bowden avec une pré-purge.

En résumé, le gcode load.g appelle general_load.g avec la température requise pour ce filament, et general_load.g chauffe la tête, et fait avancer le filament jusqu'à la buse.

Déchargement

Pour le code unload.g la structure est très proche.  Ce fichier ne contient que la ligne M98 P"/macros/Filaments/general_unload.g" E215 qui, comme pour le chargement appelle une macro générale. Vous trouverez la macro a la fin de l'article, au final c'est le même mais avec le filament qui va dans l'autre sens :p.

Paramètres

Passons aux choses sérieuses: Les paramètres de filament! Ceux-ci sont contenus dans le fichier config.g qui est très long:

; Filament config file
; Author: Philipp
; Filament: Filamentum Vertigo Grey
; Type: PLA
; Options:
; S: Flow (0.98), E: Extrusion temperature (PLA: 215, PCTG: 250, ABS: 230), B: Bed temp,
; R: Retraction distance (Hard plastic: 3.0), P: Pressure advance (0.3)

M98 P"/macros/Filaments/general_settings.g" S98 E215 B0 R3.0 P0.3

Ah bah ça alors! Encore une macro! Mais cette fois-ci avec quelques paramètres en plus. Mais on ne va pas s'attarder dessus, voyons directement la macro générale:

; Flow parameters
M221 S{param.S}					; Flow defined by [S]

; Non linear extrusion
;M592 D0 A0.01 B0.0005 			; https://duet3d.dozuki.com/Wiki/M592

;Set Temperatures
M140 S{param.B}					; Set Bed Temperature, defined by [B]
G10 P0 R0 S{param.E}			; Set Nozzle Active (defined by [T]) and Standby Temperature (0 because I don't use Standby temps)
;M568 P0 R0 S{param.E}

; Set PID's for give extruder temp
if {param.E} > 240 ; If greater than 240°C then load new PID's
	M307 H1 R0.929 C276.324:276.324 D9.46 S1.00 V12.6 B0 I0
else ; PID's for 215 °C
	M307 H1 R0.929 C276.324:276.324 D9.46 S1.00 V12.6 B0 I0
; Set PID's for given bed temp
if {param.B} > 90
	M307 H0 R0.160 C412.400:412.400 D10.40 S1.00 V12.7 B0 I0
else
	M307 H0 R0.160 C412.400:412.400 D10.40 S1.00 V12.7 B0 I0
	
; retraction parameters:
M207 S{param.R} R0.0 F6000 Z1.0 ; Set retraction of [R] with 0mm added at unretract (R) speed at 6000mm/m (100mm/s) and Zhop of 1mm

; Pressure advance
M572 D0 S{param.P} 				; D(rive) 0

Le premier paramètre configuré avec M221 est le flux de filament. Ce paramètre est fourni via  {param.S} (S dans le fichier settings.g). Ensuite, pas encore utilisé, j'ai les paramètres d'extrusion non linéaire, et ensuite, les paramètres de température. Ceci permet d'optimiser pour chaque filament la température idéale d'extrusion.
Ensuite, en fonction de la température d'extrusion, je charge des valeurs de PID différents pour le plateau et la tête d'extrusion. Ceci permet une meilleure régulation autour de la température donnée.
Pour finir je met en place 2 paramètres importants: M207 pour la distance de rétraction des commandes G10 et G11, ainsi que M572 pour le pressure advance de chaque filament. Ceci permet de contrer les effet d'augmentation de pression dans la buse lorsque l'on utilise un bowden.

Et voilà. Le fait d'utiliser des macros générales permet de simplifier fortement le code des macros de filament et permet aussi de changer le comportement facilement sans devoir modifier tout les fichiers de configuration, tout en gardant la possibilité de paramètrer chaque filament de manière différente.

Et le slicer?

Le fait de déplacer toute les paramètres de filament dans l'imprimante demande aussi d'adapter les paramètres du slicer pour fonctionner. On va donc voir les quelques paramètres a changer pour que tout marche.

Premièrement, on configure toutes les températures a 0°, et le multiplicateur d'extrusion a 1, afin de ne pas appliquer de correction a ce niveau.

Et vu que je gère aussi la retraction via l'imprimante, je change le paramètre suivant:

Et c'est tout. J'ai maintenant toute la gestion des filaments faits via l'imprimante. Il ne me reste plus qu'à pauffiner les paramètres de chaque filament.

J'espère que cet article vous sera utile. D'autres articles sur Duet3D viendront avec le temps. A bientôt :)