Bed Leveling

En impression 3D, le Bed Leveling est la gestion du niveau du plateau d'impression.

Un niveau parfait (relativement à la machine) est requis pour une impression réussie. Une variation d'un dixième de millimètre peut compromettre l'impression, surtout sur des grandes pièces. Avec l'arrivée au Hackerspace de la Mingda et sa taille utile de 30x20x40cm j'avais envie de tester le bed leveling avec une sonde à induction.

Ce guide s'adresse à des personnes connaissant l'impression 3D mais qui sont totalement ignorantes en ce qui concerne le bed leveling.

Le Firmware utilisé est Marlin (Site, Github).

Il existe différentes méthodes pour gérer le niveau de l'imprimante.

1. La méthode Redneck

La méthode redneck est la méthode utilisée au Hackerspace (rien d'étonnant). Elle consiste à :

  • Placer le fin de course mécanique de l'axe Z le plus précisément possible
  • Déplacer manuellement la tête à un coin du plateau
  • Régler le niveau (le plateau est souvent monté sur ressorts) avec la technique de la feuille de papier
  • Recommencer pour chaque coin jusqu'à avoir un plateau plus ou moins à niveau
  • Après le début de l'impression, régler l'axe Z à la main en tournant la ou les tiges filetées MacGyver style
  • Prier

Cette technique pose quelques problèmes:

  • Il faut constamment recalibrer le plateau (en cas de déplacement de la machine ou simplement après quelques prints)
  • L'impression de grandes pièces est très hasardeuse
  • Il faut de l'expérience pour jouer avec l'axe Z au début du print. Même avec de l'expérience il arrive qu'on doive recommencer.
  • Difficile à appréhender pour les nouveaux

2. Le Leveling manuel (pas testé)

Il s'agit de faire une calibration du plateau avec un écran LCD et une roue d'encodage associée, sans avoir besoin d'une sonde. Chaque point est ajouté à un mesh qui peut être sauvegardé dans l'EEPROM.

Dans Configuration.h, il faut chercher PROBE_MANUALLY et LCD_BED_LEVELING.

3. Le Leveling automatique

En utilisant une sonde attachée à l'extrudeur, il est possible de sonder automatiquement plusieurs points sur le plateau afin de créer le mesh. On utilisera alors une commande G-code au début de chaque print pour une précision maximale et toujours à jour (pas besoin de sauvegarder le mesh dans l'EEPROM donc).

Dans Configuration.h, il faut chercher AUTO_BED_LEVELING_LINEAR.

C'est cette méthode qui sera expliquée ici.

4. Unified Bed Leveling

Depuis la v1.1.0, l'UBL a fait son apparition dans Marlin. L'idée est d'unifier le code de Bed Leveling au sein de Marlin et dans la configuration. Le projet est très nouveau mais assez ambitieux :

  • possibilité de finetune le mesh automatique avec un mesh manuel, le raisonnement étant que toutes les zones du plateau ne sont pas accessibles avec la sonde.
  • commande G26 pour imprimer des tests directement depuis Marlin (documentation Marlin)
  • commande G29 étendue avec plein de paramètres (documentation Marlin)

Si vous souhaitez tester ces fonctionnalités, pensez à bien mettre à jour Marlin (la version 1.1.4 publiée le 4/07/2017 apporte son lot de nouveauté).

Plus d'infos ici : http://marlinfw.org/docs/features/unified_bed_leveling.html

Les explications sont basées sur un Instructables. Malheureusement, le rythme de développement de Marlin fait que les paramètres cités dans le guide ne sont plus corrects pour les versions 1.1 RC et au delà.

La sonde utilisée est la sonde à induction LJ18A3-8-Z/BY achetée chez RepRapWorld (Fiche Produit).

La mingda a un plateau en aluminium, ce qui tombe plutôt bien. Si votre plateau est en verre il faudra placer des bouts de cuivres aux endroits où vous souhaitez sonder. De plus, il vous faut une sonde qui capte à ~8mm (celle de RepRapWorld ne conviendra sans doute pas).

Adaptateur

Un adaptateur est nécessaire pour accrocher la sonde à votre extrudeur. Si votre imprimante est connue, vous en trouverez peut-être un sur Thingiverse.

Le design de la pièce est important: un adaptateur bancal pourra bouger et donc fausser complètement le niveau, avec le risque d'erreur mais aussi (plus grave) de bed crashing.

Attention, certaines sondes déclenchent à ~8mm et d'autres à ~4mm. Pensez à bien vérifier avant d'imprimer votre adaptateur.

Branchement

Si votre sonde fonctionne avec un courant de 5v, vous pouvez la brancher directement. Sinon il est nécessaire de faire une modification au branchement (schéma RepRapWorld).

L'idée est de descendre le courant du signal à 5v, ce qui est le maximum supporté par les contrôleurs.

Une autre méthode consiste à utiliser une diode (1N4148) (ne me demandez pas pourquoi, je suis une bille en électronique. J'ai trouvé l'astuce dans les commentaires d'une vidéo de Thomas Sanladerer (ici, mais attention le guide est obsolète également)). Prenez le temps de tester au multimètre en alimentant votre sonde en 12v (ou 24v si votre contrôleur est alimenté en 24v).

Le schéma :

+ ———- 12V
S —–|←– uP
- ———- GND

Il s'agit donc simplement de souder la diode en série sur la câble de signal, cathode vers la sonde.

En branchant le + et le - de la sonde à votre alimentation (ou aux entrées 12v ou 24v de votre carte), il vous suffit de brancher le signal à la place de votre fin de course actuel. Une seule pin donc, celle marquée “S”.

Avant d'aller plus loin, testez la sonde manuellement en approchant un objet métallique (ces sondes ont une LED intégrée qui indique le déclenchement). Testez ensuite en amenant manuellement votre plateau à son fin de course et vérifiez que la sonde déclenche avant que votre tête d'impression ne touche le plateau.

Pas la peine d'essayer d'être ultra-précis maintenant, il sera possible de compenser la distance sonde - extrudeur dans la configuration de Marlin.

Configuration du firmware

Voici les changements que j'ai fait dans le fichier Configuration.h de Marlin.

Note: les commentaires dans le fichier aident beaucoup, n'hésitez pas à lire extensivement les sections Z Probe et Auto Bed Leveling.

Probe

  • vérifier Z_MIN_ENDSTOP_INVERTING. La sonde étant Normally Opened, il faudra inverser cette constante si votre fin de course était en Normally Closed.
  • placer la tête d'impression au milieu du plateau et vérifier qu'aucun fin de course n'est enclenché (trigerred) avec M119 (c'était mon cas pour les Max Endstops). Si c'est le cas, inverser la constante …_ENDSTOP_INVERTING correspondante.
  • décommenter FIX_MOUNTED_PROBE.
  • définir X_PROBE_OFFSET_FROM_EXTRUDER, Y_PROBE_OFFSET_FROM_EXTRUDER, Z_PROBE_OFFSET_FROM_EXTRUDER. Soyez précis, surtout pour le Z qui va décider de la distance entre la tête d'impression et le plateau (on pourra toujours modifier cette valeur dans l'EEPROM, plus d'infos ci-dessous).

Auto Bed Leveling

  • décommenter AUTO_BED_LEVELING_LINEAR
  • définir LEFT_PROBE_BED_POSITION, RIGHT_PROBE_BED_POSITION, FRONT_PROBE_BED_POSITION, BACK_PROBE_BED_POSITION. Attention, ces valeurs correspondent à la position de la sonde par rapport au plateau. Si votre sonde est à 3cm à droite de votre extrudeur sur l'axe X, la valeur de LEFT_PROBE_BED_POSITION devra donc être de 30.

Note: vous pouvez utiliser AUTO_BED_LEVELING_3POINT si vous êtes certain que votre plateau est plat. Dans ce cas il suffit de définir trois points sur le plateau. Référez vous aux commentaires du fichier.

Uploadez le firmware. Il n'y a plus qu'à tester !

Calibration

Dans un premier temps, testez un homing en Z. La sonde devrait déclencher le fin de course et éloigner le plateau de 10mm (constante Z_CLEARANCE_DEPLOY_PROBE).

Si tout s'est bien passé, faites un homing des trois axes puis lancez la commande G29 (Marlin refusera de l'exécuter s'il n'y a pas eu de homing). Vous devriez voir votre tête se déplacer à 9 points du plateau, puis afficher l'offset de chaque point (la matrice) dans la console série.

Dans votre logiciel de slice, modifiez votre G-code de démarrage (dans Slic3r: Printer Settings > Custom G-code > Start G-Code) et ajoutez la commande G29 juste après le homing :

G28 ; home all axes
G29 ; bed leveling

Modifier la distance du plateau

Après un homing Z, la tête s'éloigne du plateau de 10mm (Z_PROBE_OFFSET_FROM_EXTRUDER). Si vous souhaitez voir la distance de votre tête par rapport au plateau, lancez la commande G0 Z0.

Il y a de bonnes chances pour que la tête ne soit pas à la bonne distance du plateau. Pour régler ça, il existe la commande M851. Plusieurs méthodes sont disponibles pour régler cette distance.

Ma méthode est la suivante. Dans la console série :

  1. G28: homing des trois axes.
  2. G0 Z0: mettre l'axe Z à 0 (comme pour la première couche d'une impression)
  3. mesurer la distance entre la tête et le lit
  4. M851 Z-2 si la distance entre la tête et le lit est de 2mm
  5. M500: sauver la valeur de M851 dans l'EEPROM
  6. G28 Z0: homing Z
  7. G0 Z0: mettre l'axe Z à 0
  8. vérifier que la distance tête / plateau est ok (insérer une feuille de papier entre les deux; s'il y a une légère pression la distance est bonne)
  9. sinon, recommencer l'étape 4 jusqu'à ce que la distance soit bonne

Un autre guide est diponible ici : http://reprap.org/wiki/Offset/fr.

Note: l'auteur de l'Instructables conseille de définir G92 Z… dans votre G-code de démarrage pour modifier l'offset Z de votre sonde. Je préfère la solution de l'EEPROM car plus rapide (pour peu qu'on ait un logiciel qui permette de parler à Marlin), mais cette solution est également valable.

Test

Créez une pièce de test ou téléchargez-la.

Slicez votre pièce et lancez l'impression.

Après quelques tests (une couche carrée de 30x30mm, rien de transcendant), le résultat est très encourageant. L'impression de la première couche est extrêmement constante (avis aux adeptes du First Layer Porn !).

Je dois encore imprimer des tests de dimensions (quelques issues Github concernant une mauvaise hauteur des impressions m'ont fait un peu peur), j'essayerai de mettre ce guide à jour et surtout tester une très grande surface !

Je compte bien essayer de configurer l'Unified Bed Leveling (voir plus haut), principalement pour les fonctions de test qui ont l'air très prometteuses.