Réglage manuel du Z-offset

Posted on Fri 04 June 2021 in 3Dprinting

Récemment propriétaire d’une imprimante 3D Dagoma DiscoUltimate, il ne m’a pas fallu longtemps pour pimper un petit peu la bête. À commencer par l’ajout d’un plateau chauffant, et forcément, le changement de firmware qui va avec.

Chez Dagoma, pour faire le réglage du Z-offset, ils donnent leur procédure en passant par leur application Dagom'app. L’application est pas trop mal foutu et le réglage est assez intuitif.

Sauf que je n’ai jamais réussi à le lancer sur mon Archlinux… Voici donc ma façon de faire le réglage du Z-offset, lorsqu’on a un firmware Marlin custom et qu’on accède à son imprimante via Octoprint.

Repérage dans le firmware

Position de la sonde

Il est important de repérer dans le fichier Configuration.h du firmware utilisé la valeur de NOZZLE_TO_PROBE_OFFSET. Dans mon cas, cette valeur indique :

#define NOZZLE_TO_PROBE_OFFSET { 0, 21, -1.5 }

Ceci indique que mon capteur de position en Z est situé dans l’axe X de la buse (le premier 0), 21 mm en arrière de la buse, sur l’axe Y (la deuxième valeur 21) et 1.5 mm au dessus de la buse sur l’axe Z (la dernière valeur -1.5). C’est surtout le -1.5 qui nous intéresse.

Activation du Babystepping

Là il s’agit de vérifier que le Babystepping est activé dans le firmware. Pour ça, il faut vérifier dans le fichier Configuration_adv.h que le flag BABYSTEPPING est définie, grâce à la ligne suivante :

#define BABYSTEPPING

Manipulation

Une fois que ces valeurs sont connus, passons à la pratique. Sur Octoprint, il faut aller sur l’onglet terminal.

octoprint_terminal

Je vous conseille de cocher toutes les cases Suppress en bas de la page pour ne pas être polluer par le dialogue assez verbeux qui existe entre Octoprint et l’imprimante.

Ensuite, dans la console, taper les commandes suivantes :

M851 Z-10
G28
M114

La première fixe le Z-offset à -10 histoire d’être assez loin du plateau pour ne pas le rayer, mais pas trop loin non plus pour éviter de perdre trop de temps à l’étape d’après.

La seconde commande demande à l’imprimante de faire le Homing, de repérer les butés des axes et de se mettre en position d’attente au milieu du plateau à la hauteur de la première couche.

Enfin la dernière demande à l’imprimante la position de la buse. Elle retourne une ligne de cette forme :

Send: M114
Recv: X:102.00 Y:81.00 Z:12.00 E:0.00 Count X:16320 Y:12960 Z:19200
Recv: ok P15 B3

Ici, ma buse est à la position Z = 12.00. Je garde la valeur sous le coude.

Ensuite, il faut venir placer la cible Dagoma (ou n’importe quelle carte de visite) sous la base, et venir la pincer – mais juste pincé – entre la buse et le plateau avec les commandes de mouvement, soit en utilisant le panneau de contrôle d’Octoprint, soit avec les commandes gcode suivantes :

G1 Z-1 F200   (pour baisser la buse de 1 mm)

octoprint_controle

Une fois que la carte est pincée, il faut alors rééxécuter la commande

M114

Et noter la nouvelle position de la buse.

Send: M114
Recv: X:102.00 Y:81.00 Z:9.10 E:1103.64 Count X:16320 Y:12960 Z:5472
Recv: ok P15 B3

Ensuite, il suffit de calculer le nouvel offset à l’aide de la formule suivante :

Zoff = Z - Zorig - Znozzle

Z est la dernière valeur récupérée, Zorig la valeur prise juste avant de pincer la carte de visite et enfin Znozzle la valeur récupérer dans le fichier Configuration.h.

Avec mes valeurs, ça devient donc :

Zoff = (9.10) - (12.00) - (-1.50)
     = -1.40

Ma nouvelle valeur de Z-offset est donc -1.40, pour la sauvegarder dans la mémoire de l’imprimante, il faut alors taper les commandes suivantes :

M851 Z-1.40
M500

La première enregistre une nouvelle valeur d’offset, ici -1.40, et la deuxième enregistre la configuration dans la mémoire persistante de l’imprimante.

Affinage

Pour ceux qui ont bien suivi depuis le début, ils vont me demander : « mais alors, tout à l’heure, tu nous a parler du babystepping et tu l’as complètement oublié depuis ? »

Je vous répondrais donc, j’y viens !

Pour pouvoir affiner correctement le réglage, il faut avoir du filament et un modèle à imprimer, de préférence un modèle conçu pour le bed-levelling, comme par exemple celui-ci : Bed Leveling/Calibration Test Pads

Dans votre slicer préféré, paramétrez votre impression comme d’habitude puis lancer l’impression.

Pendant l’impression, vous pouvez encore ajuster la valeur de l’offset grâce aux commandes de babystepping suivante :

M290 Z0.02
M290 Z0.01
M290 Z-0.01
M290 Z-0.02

Jusqu’à obtenir une première couche parfaite.

Bonus 1

En petit bonus, histoire que le babystepping soit plus simple, il est possible d’ajouter des boutons dédiés au panneau de contrôle dans Octoprint. Pour ce faire, ouvrez le fichier de configuration d’octoprint (~/.octoprint/config.yaml) et ajoutez à la fin du fichier :

controls:
- children:
  - children:
    - command: M290 Z0.02
      confirm: null
      name: Babystep Up
    - command: M290 Z-0.02
      confirm: null
      name: Babystep Down
    - command: M290 Z0.01
      confirm: null
      name: Microstep Up
    - command: M290 Z-0.01
      confirm: null
      name: Microstep Down
    layout: horizontal
  layout: vertical
  name: Live-Z Probe Offset

Le babystepping est maintenant tout simple à faire à n’importe quelle impression, directement depuis le panneau de contrôle d’Octoprint

octoprint_babystepping

Bonus 2

Ça n’a pas forcément grand chose à voir avec le réglage du Z-offset, mais je le note ici, principalement pour m’en souvenir.

Comme je l’ai dit plus haut, l’application Dagom'app ne se lance pas. Or, en plus de faire le réglage du Z-offset, elle permet aussi de flasher un nouveau firmware sur l’imprimante.

Voici donc mon petit script qui permet de flasher le firmware en ligne de commande :

#!/usr/bin/env bash

if [ -z "$1" ]; then
    echo "No firmware specified"
    exit 1
fi

avrdude -v -p atmega2560 -C /etc/avrdude.conf -c wiring -b 115200 -P /dev/ttyUSB0 -D -U "flash:w:${1}:i"

J’attire votre attention sur le fait que ce script fonctionne chez moi, sur une Dagoma DiscoUltimate, basé sur une carte F5. Il sera peut être nécessaire de modifier atmega2560 en fonction du micro contrôleur de votre carte, ou de modifier /dev/ttyUSB0 en fonction du port série attribué à votre imprimante.