octobre 21

Autolevelling avec BLtouch sur Ultimaker Original+

La capteur BLtouch permet de mesurer la distance entre lui et le plateaux afin ensuite d’ajuster la distance buse/plateaux automatiquement. Plus besoin de régler  le plateaux à la main, avec les vis.

BLtouch

Fixation à la tête d’impression

J’avais fais une 1er version avec le BLtouch à l’arrière de la tête mais du coup, il se trouvait un peu loin de la buse.
Cette solution permet d’avoir le BLtouch au plus près de la buse, donc plus de précision.

Le dessus du BLtouch doit être à 36.3 + 8.3 = 44.6 mm de la pointe de la buse.

Mesurer aussi les coordonnées (X et Y) de la tige du Bltouch par rapport à la buse d’impression.

mesures BLtouch 

Dans mon cas, le BLtouch se trouve à 20 sur l’axe X et 0 sur l’axe Y.

Le fichier stl du support est disponible sur Thinkiverse bien sur.

Connexion à la carte mère

Le Bltouch dispose de 5 fils : 2 pour la détection de position (et le fin de course de l’axe Z) et 3 pour son alimentation et la commade de la monter/descente de la tige. On déconnecte le connecteur de fin de course Z et on branche le BLtouch comme indiqué sur l’image.

bl-touch-pour-auto-leveling pin-j26

Configuration du firmware

Selon l’époque, et donc la version de Marlin, les indications indiqués içi peuvent varier. Mais l’esprit reste le même 😉

Cela passe par l’installation d’Arduino, logiciel qui permet de modifier et d’envoyer le firmware sur l’imprimante.
A noter que ce n’est pas destructif, Cura permet facilement d’envoyer le firmware par défaut, pas de crainte de se coté la donc.
On ouvre le dossier Marlin et on ouvre dans Arduino le fichier Marlin.ino.

Arduino doit être configuré comme ça au niveau « type de carte » et « processeur ».

config-arduino

Le fichier pins_ultimain_2.h est aussi à modifier. Juste rajouter :
//BL touch
#define SERVO0_PIN 13

Les différences entrent les 2 firmwares sont surlignés en jaune dans le fichier ci-joint : differences Marlin RC8 – configuration

Réglages du z-offset

La partie délicate est d’avoir la tige du BLtouch (en position home Z) au même niveaux que la buse.
Pour ça, je me suis fait un script en Gcode :
M117 Z-OFFSET…
G90 ; mode absolue
M107 ; pas de ventilation
M140 S60 ; plateau a 60
M190 S60 ; attendre que le plateaux soit a temperature
M104 ; buse a temperature
M109 S190 ; buse a 190 (en meme temps que la plateaux)
G28 ; home
M117 NETTOYAGE BUSE
G0 Z50 ; descendre de 5 cm
G4 P5000 ; attendre 5 sec
M117 BLTOUCH AU CENTRE
M211 S0 ; désactiver le Z-EndStop, pour pouvoir faire un Z négatif
G0 X85 Y105 F5000; BLtouch au centre de la zone d’impression
G0 Z0 ; plateau à 0
M851 ; afficher le Z-offset actuel
; ajuster le Z-offset (buse/papier/plateau) via préparer/déplacer un axe/Z/0.1 mm
; une valeur négative +grande rapproche le plateau de la buse
G4 P30000 ; attendre 30 sec
M211 S1 ; activer le Z-EndStop
M300 ; bip
M117 FIN Z-OFFSET
G0 Z10; descendre le plateau
M104 S0 ; plateaux off
M140 S0 ; buse off
M84 ; moteurs off

Une fois la valeur du Z-offset trouvé, l’indiquer dans le Marlin au paramètre : Z_PROBE_OFFSET_FROM_EXTRUDER

On peut ensuite modifier temporairement, pour des tests, la valeur de Z offset via le Ulticontroller ou via Gcode : M851 Z-2.8; (pour un offset de -2.8 par exemple).
Et ensuite les inscrire dans le firmware via M500
Ou, avec  Arduino /croquis/exporter les binaires compilées (création d’in fichier Marlin.ino.mega.hex) et l’importer dans l’Ultimaker via Repetier ou autre.

Note

En fait, avec le système autolevelling, le Z-offset correspond à la position (dans l’axe Z) du BLtouch par rapport à la buse et plus de la position de la buse par rapport au plateaux.
J’ai remarqué que si je fais un Z-offset après avoir fait un G29 (autolevelling), la distance buse/plateau n’est pas la même. Je pensais que l’autolevelling « modifiait » cette distance.

MAIS, j’ai fais un test en baissant de beaucoup le plateau  sur un angle (fais un G29) et d’amener la buse sur la partie abaissé, je pensais que l’autolevelling allait compenser la baisse et monter le plateau automatiquement. Il n’est n’est rien !

Je pense que l’autolevelling ne se met en route que lors d’un print et pas lors de déplacement en dehors d’un print.

Réglages du Marlin

Corrections que j’ai faites au Marlin 1.1.8 d’origine

//#define SHOW_BOOTSCREEN
  #define MOTHERBOARD BOARD_ULTIMAIN_2
//#define CUSTOM_MACHINE_NAME "UMO+"
#define DEFAULT_NOMINAL_FILAMENT_DIA 2.85 //3.0
  #define MIXING_VIRTUAL_TOOLS 16  // Use the Virtual Tool method with M163 and M164
#define POWER_SUPPLY 1
#define TEMP_SENSOR_0 20
#define TEMP_SENSOR_BED 20
#define BANG_MAX 255     // Limits current to nozzle while in bang-bang mode; 255=full current
#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
//#define PREVENT_COLD_EXTRUSION
//#define PREVENT_LENGTHY_EXTRUDE
//#define EXTRUDE_MAXLENGTH 200
#define X_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 78.7402,78.7402,200.0,760*1.1 }
#define DEFAULT_MAX_FEEDRATE          { 500, 500, 30, 25 }
#define DEFAULT_MAX_ACCELERATION      { 9000, 9000, 100, 10000 }
#define DEFAULT_ACCELERATION          4000    // X, Y, Z and E acceleration for printing moves
#define DEFAULT_XJERK                 20.0
#define DEFAULT_YJERK                 20.0
#define DEFAULT_ZJERK                  0.4
#define BLTOUCH
#define X_PROBE_OFFSET_FROM_EXTRUDER 20  // X offset: -left  +right  [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0  // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER -2.8  // Z offset: -below +above  [the nozzle]
 
// vitesse en X et Y lors du G29, pour éviter les vibrations qui peuvent perturber le BLtouch
#define XY_PROBE_SPEED 6000 //9000
// divise par * la vitesse de monté du plateau, pour éviter les vibrations qui peuvent perturber le BLtouch
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 4) //2
#define Z_CLEARANCE_DEPLOY_PROBE   6 // distance imposé pour déployer le BLtouch, sera ajouté au z-offset.
// Lors d'un z-offset (M851) on à une marge de + ou - ** mm de réglage
// Activer le test de précision du BLtouch (M48) on doit avoir : Standard Deviation: 0.0*
#define Z_MIN_PROBE_REPEATABILITY_TEST
#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true
// Taile de la zone maximum d'impression
#define X_BED_SIZE 210
#define Y_BED_SIZE 205 // a cause de l'agraphe qui tient le verre du plateau
#define Z_MIN_POS 0 // mettre une valeur négative pour monter le plateau "au dessus" de la buse
#define Z_MAX_POS 205
#define AUTO_BED_LEVELING_BILINEAR
#if ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR) // choisi celui la, sonde à : -12 et 44
  #define LEFT_PROBE_BED_POSITION 20
  #define RIGHT_PROBE_BED_POSITION 210
  #define FRONT_PROBE_BED_POSITION 0
  #define BACK_PROBE_BED_POSITION 200
  #define MIN_PROBE_EDGE 0
  #define ABL_PROBE_PT_1_X 110
  #define ABL_PROBE_PT_1_Y 200
  #define ABL_PROBE_PT_2_X 0
  #define ABL_PROBE_PT_2_Y 44
  #define ABL_PROBE_PT_3_X 198
  #define ABL_PROBE_PT_3_Y 44
  #define UBL_PROBE_PT_1_X 110       // Probing points for 3-Point leveling of the mesh
  #define UBL_PROBE_PT_1_Y 200
  #define UBL_PROBE_PT_2_X 44
  #define UBL_PROBE_PT_2_Y 44
  #define UBL_PROBE_PT_3_X 198
  #define UBL_PROBE_PT_3_Y 44
#define LEVEL_BED_CORNERS
#define EEPROM_SETTINGS // Enable for M500 and M501 commands
#define PREHEAT_1_TEMP_HOTEND 190
#define LCD_LANGUAGE fr_utf8 // il faut supprimer les accents dans le fichier language_fr_utf8.h
#define DISPLAY_CHARSET_HD44780 WESTERN //JAPANESE
#define ULTRA_LCD   // Character based
#define SDSUPPORT
#define SPEAKER
#define ULTIMAKERCONTROLLER
#define NUM_SERVOS 1 // Servo index starts with 0 for M280 command

Utilisation

Une fois fait, le BLtouch peut monter et descendre via la commande M280 P0 S10; et M280 P0 S90;

Le test de niveaux par le code G29 mais aussi via le Ulticontroller.

Il faut donc rajouter dans son sclicer préféré un G29 après le G28 mais jamais après,  pour avoir un test de niveaux avant chaque impression !
Perso, je l’ai mis une fois que le plateaux et chaud, histoire de prendre en compte ses éventuels déformations dus à la température.

 

Test du BLtouch

Dans le fichier configuration.h du firmware, on doit avoir :

// Enable Z Probe Repeatability test to see how accurate your probe is
#define Z_MIN_PROBE_REPEATABILITY_TEST

Lancer le gcode :

M48 P10 X100 Y100

Cela aura pour effet de faire 10 test su BLtouch à la position X/Y de 100. Et renvoie par exemple :

19:47:17.541: Mean: 0.482500 Min: 0.465 Max: 0.505 Range: 0.040
19:47:17.546: Standard Deviation: 0.015851
19:47:17.546: X:112.00 Y:57.00 Z:8.10 E:0.00 Count X:8819 Y:4488 Z:1620

La déviation standard, indiqué par le fabriquant du BLtouch, est de 0.01 mm, tant que c’est négligeable par rapport à une hauteur de couche et que c’est régulier, c’est OK !

Pour avoir une bonne précision, j’ai baissé la vitesse de monté du plateau (#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 4)) pour éviter les vibrations de ce dernier.
En bref, tout ce qui peut altérer la mesure est à vérifier (interférence électrique, vibrations…)

Le site http://lokspace.eu/3d-printer-auto-bed-leveling-mesh-visualizer/ permet d’afficher en image la planitude du plateau.
Dans mon cas, j’ai souvent des résultat différent entre les tests du BLtouch !?!

Usage du M48

Usage M48 P# X# Y# V# E L# S Where P, X, Y, V, E, S, and L are all optional
P = Number of sampled points (4-50, default 10)
X = Sample X position
Y = Sample Y position
V = Verbose level (0-4, default=1)
E = Engage Z probe for each reading
L = Number of legs of movement before probe
S = Star (with P points to the star)

 

 


Étiquettes : , ,
Copyright 2017. All rights reserved.

Ecrit 21 octobre 2016 par Pit dans la catégorie "Impression 3D

2 COMMENTS :

  1. By Pit (Auteur) on

    Exacte… j’ai corrigé l’image, merci de suivre 😉

  2. By JayB on

    Hello,
    Super tuto!

    J’ai noté une petite coquille mais du coup ça porte à confusion. Dans les modifications de firmware, vous indiquez ceci:

    #define X_PROBE_OFFSET_FROM_EXTRUDER 43
    #define Y_PROBE_OFFSET_FROM_EXTRUDER -12

    Hors le schéma des mesures indique ceci:

    X = -12
    Y = 43

    => Il y a là une inversion des axes X et Y entre ce qui est indiqué dans le schéma et ce qui est écrit dans le firmware.
    Du coup l’axe XY du schéma ne devrait-il tout simplement pas être inversé? (l’axe X serait l’axe Front/Back et l’axe Y serait l’axe Left/Right).

    Encore merci pour le tuto et merci d’avance pour la réponse à ce post 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

3 + douze =