Klipper (imprimantes 3D)

De Wiki Clubelek

Qu'est ce que c'est, et pourquoi c'est bien ?

Klipper est un firmware d'imprimante 3D moderne, c'est à dire un programme qui permet de commander une imprimante 3D. Il ne faut pas le confondre avec Mainsail, qui est l'interface graphique. La spécificité et donc les avantages de Klipper résident dans la séparation de l'Application Processing (AP) du Printer Control (PC) : un ordinateur va s'occuper de faire tous les calculs, tandis qu'un microprocesseur s'occupe de les exécuter. Cela permet pas mal de choses très intéressantes :

  • Une vitesse énorme : l'ordinateur peut faire les calculs de steps (des pas de moteurs pas à pas) de manière extrêmement rapide, et les envoie sous format compressé au microcontrôleur. On peut atteindre 175 000 pas par secondes sur des vieux microcontrôleurs, et plusieurs millions sur les plus récents. (c'est gigantesque !)
  • Des calculs avancés : grâce à la puissance de l'ordinateur, Klipper peut se permettre d'utiliser des algorithmes complexes pour résoudre les mouvements de l'imprimante, le pressure advance et autres input shaping.
  • Config simple : un fichier .cfg permet de configurer le comportement complet de l'imprimante
  • Documentation extensive : la communauté Klipper est une des plus présentes dans le milieu des imprimantes 3D (même pas forcément custom, de plus en plus d'imprimantes commerciales utilisent Klipper, par ex. Sovol)
  • Compatibilité sans pareil : globalement, Klipper est compatible avec absolument tout. Genre tout. Que ce soit thermistances, microcontrôleurs, drivers de pas à pas, accéléromètres, LEDs, ventilateurs, n'importe quoi est compatible. Tant que le microcontrôleur a un port série, c'est good.

Le setup Prusa MK3

La Prusa MK3 a été la première candidate à une upgrade sous Klipper, principalement après avoir trouvé des fichiers de configuration pour rien avoir à faire. Crédits à charminULTRA pour ses fichiers de config : https://github.com/charminULTRA/Klipper-Input-Shaping-MK3S-Upgrade.

La première étape a été de setup MainsailOS et Klipper sur un Raspberry Pi 3B+ qui traînait au club. Pour ce faire rien de plus simple, toutes les étapes sont décrites ici : https://docs-os.mainsail.xyz/getting-started/raspberry-pi-os-based

Il a fallu ensuite flasher la carte de commande de la Prusa (aka Einsy RAMBO), via le port USB Type B. Tout est expliqué dans le repo de charmingULTRA et ici : https://www.klipper3d.org/Installation.html#building-and-flashing-the-micro-controller. Le microcontrôleur de la Prusa est un AVR atmega2560.

Après avoir ajouté les fichiers de config à MainsailOS, on est théoriquement parti. Il faudra juste faire toutes les calibrations nécessaires et on pourra imprimer.

Niveau hardware, c'est une alim 5V 2A fixée au niveau de l'alim standard, située avant le bouton d'alimentation pour pouvoir couper uniquement l'imprimante. Le Rapsberry Pi est attaché au dessus de la mainboard, et est connecté avec un câble USB B

Le setup Makerbot Replicator 2X

<translate> Warning</translate> <translate> Warning:</translate>

La Makerbot était un peu plus tricky : le problème principal étant que nous n'avions plus de toolhead. Le plan a donc été de changer la tête pour quelque chose de standard, pour simplifier la maintenance.

Nous en avons profité pour faire de nombreuses upgrades : nouvelle mainboard (MKS Robin Nano V3), nouvel écran (MKS TS35 V2.0), ajout d'un plateau (Smooth PEI), nouvelle hotend (E3D V6), nouvel extrudeur (BMG + nouveau pas à pas plus compact que j'ai trouvé dans un tiroir), ajout d'un ventilateur pour refroidir les pièces, nouveaux rails linéaires, nouveaux drivers de pas à pas (TMC2209), ajout d'une sonde inductive, et ajout du sensorless homing.

Objectivement, on aurait pu garder l'ancienne mainboard, mais à la base nous ne comptions pas mettre Klipper dessus, et donc l'écran n'aurait pas été compatible.

Il y a deux fabricants de mainboard de qualité sur le marché pour l'instant : BigTreeTech et MKS.

Le choix de la toolhead a été grandement restreint par les deux rails linéaires parallèles horizontalement : la plupart des toolheads sont faites pour avoir le devant dégagé. Un choix a été fait de ne pas refaire tous les kinematics, mais de prendre une toolhead custom. C'est donc celle-ci qui a été choisie : https://www.thingiverse.com/thing:1525288/files. Elle a dû être modifiée un peu pour accueillir l'extrudeur BMG, car faite pour l'extrudeur d'origine. Quelques trous ont étés percés dedans pour accommoder la sonde (ayant été trouvée dans un tiroir random). Une pièce pour supporter le moteur pas à pas a étée ajoutée, mais il faudrait réimprimer complètement la pièce en 100% d'infill avec plus de renforts : en accélérations max, elle bouge beaucoup.

Erreur lors de la création de la vignette : Impossible d’enregistrer la vignette sur la destination
Pinout de la mainboard

Une fois les moteurs pas à pas cossés à nouveau (certains n'avaient pas le bon pinout, principalement le Z) et le microcontrôleur flashé (attention, il faut passer par une carte SD avec le .bin dessus), on peut passer aux choses sérieuses : la config Klipper.

La config Klipper contient pas mal de choses : la correspondance pins <-> actions, les capacités de l'imprimante (dimensions, vitesse), et les caractéristiques des différents trucs branchés sur la carte mère. On peut très bien déclarer les pins des endstops comme ceux des LEDs, c'est d'ailleurs ce qui va être fait. Le fichier de config de base (generic-mks-robin-nano-v3.cfg) est pris depuis le repo officiel de MKS. On y trouve aussi le pinout du PCB d'ailleurs.

Les fichiers de config Klipper sont composés par des sections entre crochets (ex. [stepper_x]), contenant plusieurs variables (ex. microsteps: 16). L'unique fichier lu est le printer.cfg, mais on peut utiliser [include ___.cfg] pour ajouter d'autres fichiers. A savoir qu'il est lu dans l'ordre, donc on peut override des variables en les déclarant à nouveau.

J'ai ensuite suivi les indications de Klipper pour générer la suite du fichier de zéro. Tout est expliqué, je vais simplement préciser certaines galères qui sont apparues :

  • Les drivers ne voulaient pas se connecter en UART : il fallait mettre un jumper entre deux pins situés sous les drivers
  • Le stepper Z faisait n'importe quoi et vibrait beaucoup : il était branché en 1A 2A 1B 2B et non pas 1A 1B 2A 2B
  • Le ventilateur ne tournait pas : Il était cassé
  • Le stepper Z allait à l'envers : il fallait mettre "!" devant le dir_pin (il permet d'inverser le pi

Certaines configurations sont optionnelles, mais je les ai utilisées : le bed_mesh permet de mesurer le plateau entier et de compenser les déformations, le screw_tilt_adjustment permet de donner les directions dans lesquelles tourner les vis pour mettre le lit à niveau, et surtout le sensorless homing permet de home les axes X et Y sans endstops, juste en détectant le back EMF des moteurs pas à pas, indiquants qu'il sont en bout de course.

Il faut ensuite calibrer l'imprimante.