---
title: "Six ans de prints décevants : ce que ma delta FLSun QQ-S avait vraiment, et comment on l'a calibrée pour de bon"
subtitle: "Trois défauts d'origine jamais vus en 233 heures, un firmware qui laissait les moteurs sans force, six spirales, deux jours perdus sur une fausse piste — et la règle qui a tout réglé"
description: "Une imprimante delta FLSun QQ-S de 2020, « toujours un peu décevante » face à une Bambu Lab. Passage à Klipper, et enquête : un extrudeur qui sous-extrudait de 11,5 % depuis le premier jour, des angles de tours jamais calibrés, un courant moteur que la config Klipper officielle ne règle pas, une méthode de nivellement qui mentait. Récit, chiffres, outils et procédure complète pour reproduire — sans palpeur, au papier."
date: 2026-09-06
image: images/flsun/og-flsun.jpg
tags: [impression 3d, delta, flsun qq-s, klipper, calibration, bed mesh, pressure advance, mks robin mini, repetier, diy, ia]
slug: flsun-qqs-delta-klipper-calibration
lang: fr
---

# Six ans de prints décevants : ce que ma delta FLSun QQ-S avait vraiment, et comment on l'a calibrée pour de bon

## Trois défauts d'origine jamais vus en 233 heures, un firmware qui laissait les moteurs sans force, six spirales, deux jours perdus sur une fausse piste — et la règle qui a tout réglé

<div class="tldr" markdown="1">
**En deux minutes, si vous avez une delta qui « imprime moyen » sans qu'aucun réglage n'y change rien**

- **Le symptôme** : une FLSun QQ-S achetée en 2020, 233 heures et 970 m de filament, jamais vraiment satisfaisante. Des parois faibles, des cotes fausses de 2 %, une première couche impossible à régler partout à la fois. Comparée à une Bambu Lab, elle faisait pitié.
- **Ce qu'on a trouvé, dans l'ordre** : un extrudeur qui poussait **11,5 % de matière en moins** depuis le premier jour (une valeur fausse dans la mémoire du firmware) ; des **angles de tours jamais calibrés** (+1,02° et +0,45°, toutes les corrections à zéro dans l'EEPROM) ; et, en passant à Klipper, un **courant moteur que la carte règle par PWM** et que la config Klipper officielle de cette imprimante ne règle pas — moteurs sans couple, homing impossible.
- **Ce qui a marché** : tout recalibrer **à chaud**, dans l'état où la machine imprime, avec **une seule méthode de mesure** (la feuille de papier), dans l'ordre géométrie → zéro → grille du plateau → première couche. Trente-cinq minutes. Une spirale de contrôle uniforme d'un bord à l'autre, un cube à 20,00 mm en Z.
- **Ce qui n'a pas marché**, et qui a coûté deux jours : corriger la grille du plateau par-dessus une géométrie fausse, avec une méthode de mesure au micromètre qui se trompait précisément là où la buse était trop près. Le détail est dans [La fausse piste](#fausse-piste), parce que c'est le plus instructif.
- **Pour reproduire** : [la procédure complète](#pour-reproduire), les fichiers de configuration, les scripts et les pièces de test sont [en fin de billet](#references). Pas de palpeur, pas d'accéléromètre, une feuille de papier et un pied à coulisse.

*Ce billet se veut lisible sans rien connaître aux imprimantes delta : chaque terme est expliqué la première fois, et un glossaire récapitule à la fin. Les encarts « Pour aller au fond » se déplient pour ceux qui veulent la cinématique, les valeurs et les commandes.*
</div>

![Établi de calibration de la FLSun QQ-S : pied à coulisse, micromètre en pouces, cube de 20 mm, cadres de première couche et carrés d'épaisseur numérotés](../images/flsun/00-etabli.jpg)

*L'établi le troisième jour. Tout ce qui a servi de juge : le pied à coulisse, un vieux micromètre en pouces, le cube de 20 mm, les cadres de première couche, les carrés d'épaisseur numérotés au feutre, et derrière, la pièce à sept piliers de la calibration étendue.*

## Une machine « toujours un peu décevante »

J'ai une imprimante delta FLSun QQ-S, achetée en janvier 2020. Une **delta**, c'est cette imprimante en forme de tour triangulaire où la buse est suspendue à trois bras articulés qui montent et descendent le long de trois colonnes ; il n'y a pas d'axe X, Y et Z séparés comme sur une imprimante cartésienne, la position de la buse est le résultat d'un calcul à partir de la hauteur des trois chariots. C'est rapide, silencieux, élégant, et beaucoup plus sensible aux erreurs de géométrie qu'une machine à axes droits : un bras d'un millimètre trop long ou une colonne décalée d'un degré ne donnent pas une erreur simple, mais une déformation en creux, en dôme ou en trèfle qui varie sur tout le plateau.

Peu utilisée, cette machine a toujours été un peu décevante. Pas catastrophique : les pièces sortaient. Mais les parois manquaient de tenue, les cotes étaient fausses de quelques dixièmes, la première couche n'accrochait jamais partout, et surtout **aucun réglage n'avait d'effet net**. J'avais fini par imprimer avec une buse plus grosse « pour que ça aille plus vite », changé les courroies après en avoir détruit un jeu par sur-tension, et rangé la machine à côté d'une Bambu Lab qui, elle, imprime juste sans qu'on lui demande rien.

C'est cette comparaison qui a lancé l'enquête. Non pas « comment régler mon slicer », mais **qu'est-ce que cette machine a, exactement**, et qu'est-ce qui est rattrapable. Le billet raconte trois jours, du 4 au 6 septembre 2026, menés avec une IA (Claude) qui pilote l'imprimante, écrit les outils et lit les manuels, pendant que je tiens le pied à coulisse, la feuille de papier et l'appareil photo. Il raconte aussi une belle erreur de méthode, la sienne et la mienne, parce que c'est ce qui arrive quand on cherche pour de vrai.

## Le dispositif

Le firmware d'origine allait être remplacé par **Klipper**. Klipper est un firmware d'imprimante 3D en deux parties : un tout petit programme sur la carte de l'imprimante, qui ne fait que piloter les moteurs et les chauffes en temps réel, et un programme hôte, sur un ordinateur à côté, qui fait tout le reste — la cinématique, les calibrations, les macros. On perd l'écran tactile de l'imprimante (Klipper ne sait pas le piloter), on gagne des outils de calibration qui n'existent nulle part ailleurs, en particulier pour les deltas.

Ce que Klipper apporte, concrètement, par rapport au Repetier d'origine — ou à un Marlin :

- **Le calcul déporté.** Un firmware classique fait toute la cinématique delta sur le petit microcontrôleur de la carte, avec les approximations que ça impose ; Klipper la fait sur l'ordinateur hôte, en virgule flottante, et n'envoie à la carte que des instants de pas précalculés. Sur une delta, où chaque déplacement est une racine carrée par colonne, ça se voit dans la précision des mouvements et la vitesse possible.
- **Les outils de calibration** : `DELTA_CALIBRATE`, qui déduit la géométrie complète de sept points, avec ou sans palpeur ; la calibration étendue des bras ; la grille de plateau ; et `TUNING_TOWER`, qui fait varier un paramètre avec la hauteur pendant l'impression, pour régler en une pièce ce qui demanderait dix essais.
- **Le pressure advance et l'input shaper**, la compensation de la pression dans le bowden et celle des vibrations, que le firmware d'origine n'a pas, et qui font l'essentiel de l'écart de qualité avec une machine moderne.
- **Une configuration en fichier texte**, lisible, commentable, versionnable, où chaque valeur a sa provenance ; et une prise locale par laquelle on pilote tout depuis un script.

Ce qu'il n'apporte pas : il ne relève pas le plafond de débit du hotend, il ne remplace pas une mécanique fausse, et il demande un ordinateur à côté.

L'hôte, provisoirement, c'est mon ordinateur portable branché en USB ; un Raspberry Pi prendra le relais. Pas d'interface web pour l'instant : Klipper expose une prise locale sur laquelle on envoie des commandes, et l'IA a écrit en une heure ce qu'il fallait pour ne pas taper de G-code à la main : un client pour envoyer une commande et lire la réponse, un script de suivi d'impression, et surtout `calib.py`, un pilotage au clavier où une touche vaut un geste — `h` pour le homing, `s` pour lancer la calibration delta, `m` pour la grille du plateau, `d`/`u` pour descendre ou monter la buse de 0,1 mm, `[`/`]` pour ajuster la première couche pendant qu'elle s'imprime.

Le parti pris, dès le départ, est le même que sur la Bambu : **on mesure, on n'invente pas**. Chaque valeur inscrite dans la configuration vient d'une mesure sur la machine, et chaque correction est suivie d'une pièce de contrôle.

<details markdown="1">
<summary>Pour aller au fond : ce que fait un firmware delta, et ce que chaque réglage corrige</summary>

Sur une delta, la position de la buse est calculée à partir de sept nombres et demi : la **longueur des bras** (`arm_length`), le **rayon delta** (`delta_radius`, la distance horizontale entre l'axe d'une colonne et le pivot du bras sur le chariot, moins celle côté effecteur), l'**angle** de chaque colonne (nominalement 210°, 330° et 90°), et la **hauteur de butée** de chaque colonne (`position_endstop`, là où le chariot déclenche son interrupteur de fin de course). Quand l'un est faux, l'erreur sur le plateau a une forme reconnaissable :

| Réglage faux | Forme de l'erreur sur le plateau |
|---|---|
| hauteur d'une butée | un **plan incliné** vers la colonne concernée |
| rayon delta | un **creux** ou un **dôme** centré, symétrique |
| longueur des bras | un creux/dôme aussi, plus une **erreur d'échelle** en XY (les pièces trop grandes ou trop petites) |
| angle d'une colonne | une distorsion en **trèfle**, à trois lobes, et des pièces vrillées |

Klipper les mesure tous avec `DELTA_CALIBRATE` : on pose la buse sur sept points du plateau (avec un palpeur, ou au papier), et il ajuste les paramètres pour que ces sept points soient dans un plan. La version **étendue** (`DELTA_ANALYZE`) ajoute les mesures d'une pièce imprimée pour ajuster les bras un par un. Par-dessus cette géométrie, la **bed mesh** (grille du plateau) corrige ce qui reste — les défauts de planéité du verre lui-même — en interpolant entre des points mesurés. L'ordre compte : la grille ne peut corriger proprement que ce qui est *local* ; une erreur de géométrie n'est pas locale, et une grille qui essaie de la compenser n'y arrive jamais tout à fait. C'est le cœur de ce billet.
</details>

## D'abord la mécanique : les courroies

Avant de toucher au firmware, un audit rapide de ce qui bouge. Les courroies, sur cette machine, ont une histoire : un premier jeu détruit par sur-tension (« j'avais lu qu'il ne fallait jamais les tendre, et c'est ce qui m'est arrivé »), à l'époque où « aucun réglage n'avait d'effet ». Cette phrase-là, avec le recul, était la signature d'un problème mécanique et non de slicer, et c'est ce qui justifie de commencer par là.

L'IA a d'abord proposé la méthode qu'on lit partout : pincer la courroie, mesurer la note avec une application de guitare, viser une fréquence. Trois tours d'échanges plus tard, j'ai tranché : « *c'est pas une corde, si je tends assez pour que ça sonne ça cassera tout* ». Elle a vérifié, et j'avais raison : sur cette machine le brin libre fait 65 cm, la fréquence cible serait sous 30 Hz, là où les applications décrochent d'une octave (je lisais 70 Hz sans jamais retomber sur la même valeur). Surtout, un article de Hackaday rappelle que la qualité d'impression ne change quasiment pas avec des courroies franchement lâches, tant que l'axe ne prend pas de retard sur le moteur ; alors que trop tendre casse des arbres de moteur (un NEMA 17 accepte 28 N de charge radiale). Il n'y a pas de compromis à chercher : **aucun bénéfice à serrer, un risque à serrer.**

La méthode retenue est celle que j'utilise depuis des années : détendre franchement, puis retendre juste au seuil où la courroie se met à vibrer mollement au lieu de flotter. On approche par en dessous, donc la sur-tension est impossible ; le seuil est exactement la limite basse du sans-jeu ; le même geste sur les trois colonnes égalise par construction. Les six poulies tournaient librement. Audit clos. *On verra plus loin que cette retension, faite au mauvais moment, a quand même coûté cher.*

## Ce que la machine avait dans le ventre

Avant de flasher, il fallait lire la mémoire du firmware d'origine : les valeurs qu'il utilisait sont le point de départ de la configuration Klipper, et une fois flashé, on ne peut plus les lire. Première surprise, en branchant l'USB : **ce n'est pas Marlin**. Tout ce qu'on lit sur la QQ-S suppose Marlin, et l'IA avait préparé les commandes Marlin (`M503` pour lire la configuration, `M665`/`M666` pour la géométrie delta). Réponse de la machine : `Unknown command`. Le firmware s'annonce `FIRMWARE_NAME:Robin` et c'est **Repetier**, qui dumpe sa mémoire avec `M205`. Première leçon, pas la dernière : vérifier avant d'affirmer.

Le dump, 970 m de filament et 233 heures de machine, a livré deux choses.

D'abord les valeurs réelles : bras 278,6 mm (la config Klipper de référence dit 280), rayon delta **140,8** (la référence dit 130 — dix millimètres d'écart, de quoi faire un dôme monstrueux si on avait pris la référence), hauteur 376,03, pas de moteur 100 pas/mm sur les colonnes et **367 pas/mm sur l'extrudeur** (retenez ce chiffre).

Ensuite, un constat qui expliquait déjà beaucoup : **tous les termes de correction par colonne étaient à zéro**. Rayon delta A/B/C, correction de diagonale A/B/C, tout à zéro. Cette machine n'avait **jamais** été finement calibrée en delta — ou l'avait été en usine et l'avait perdu lors d'une mise à jour du firmware, qui réinitialise l'EEPROM : c'est mon hypothèse, et l'EEPROM ne garde pas d'historique pour la trancher. Dans les deux cas, ses erreurs de géométrie, quelles qu'elles soient, étaient intactes depuis des années, et les pas de l'extrudeur venaient probablement du même reset.

<details markdown="1">
<summary>Pour aller au fond : lire l'EEPROM d'un Repetier, et ce qu'on transpose vers Klipper</summary>

`M205` renvoie une ligne par valeur, au format `EPR:<type> <position> <valeur> <libellé>`. Le firmware répond `ok` **avant** la réponse, et non après : un script qui lit « jusqu'au ok » rate tout ; il faut lire jusqu'au silence. Ce qui se transpose vers Klipper : `Diagonal rod length` → `arm_length`, `Horizontal rod radius at 0,0` → `delta_radius`, `Z max length` → `position_endstop` des trois colonnes, `Max printable radius` → `print_radius`, et les pas/mm → `rotation_distance` (pour une courroie GT2 sur poulie de 16 dents, 32 mm par tour ; pour l'extrudeur, `rotation_distance = pas_par_tour / pas_par_mm`, soit 3200 / 367 = 8,719). Les PID ne se transposent pas (échelles différentes), on les refait. Les décalages de butée par colonne (X 0, Y 7, Z 83 pas dans l'EEPROM) n'ont pas été reportés : la convention de signe de Repetier n'est pas sûre, et `DELTA_CALIBRATE` les redérive de toute façon.

Le dump complet est dans les fichiers en fin de billet (`README-flsun.md` renvoie vers `eeprom-repetier.txt` du dépôt).
</details>

## Klipper, et des moteurs qui n'ont plus de force

Le flash lui-même est sans histoire : Klipper compilé pour le STM32F103 de la carte **MKS Robin Mini**, avec un bootloader de 28 Ko, un quartz de 8 MHz et le port série USART3 ; le binaire passé par le petit script `update_mks_robin.py` de Klipper qui le brouille au format que le bootloader MKS attend ; copié sur une carte SD de 4 Go en FAT32, imprimante éteinte à l'insertion. Un bip, « complete » en vert, et Klipper répond `Klipper state: Ready`.

Et puis le premier homing a échoué. `No trigger on stepper_b after full movement` : un chariot n'a pas atteint son interrupteur. Le deuxième homing aussi, sur une autre colonne. Les moteurs grognaient, montaient à 5 mm/s, décrochaient à 25, et redescendaient « mollement ».

La suite tient en une leçon plutôt qu'en un récit. L'IA a enchaîné les hypothèses — durée des impulsions de pas, mode de micro-pas, courroies, un potentiomètre de courant qui n'existe pas sur cette carte —, chacune testée, chacune écartée, et chaque test allongeait la conversation sans y ajouter d'information. C'est un comportement à connaître quand on travaille avec une IA : plus sa fenêtre de contexte se remplit d'essais ratés, plus elle glisse vers l'essai suivant au lieu de revenir aux faits. Ce qui l'a arrêtée tient en une phrase, une contrainte forte : « avant le flash, tout marchait parfaitement ». La veille, sous Repetier, la même mécanique fonctionnait ; le matériel était hors de cause par construction, et la seule question valable devenait : *qu'est-ce que l'ancien firmware faisait que le nouveau ne fait pas ?*

Elle a alors fait ce qu'elle aurait dû faire d'abord : lire le fichier de brochage de cette carte dans les sources de Marlin, `pins_MKS_ROBIN_MINI.h`, et y chercher **tout** ce que l'ancien firmware initialisait au démarrage. Et là :

```
MOTOR_CURRENT_PWM_XY_PIN  PA6
MOTOR_CURRENT_PWM_Z_PIN   PA7
MOTOR_CURRENT_PWM_E_PIN   PB0
MOTOR_CURRENT_PWM_RANGE   1500
DEFAULT_PWM_MOTOR_CURRENT { 800, 800, 800 }
```

Sur la Robin Mini, la tension de référence qui fixe le **courant des moteurs** n'est pas réglée par un potentiomètre : elle est **générée par le microcontrôleur**, par un signal PWM sur trois broches. Repetier les fixait au démarrage. Klipper les laissait flotter — référence quasi nulle, couple minuscule, dérive au fil des minutes (« ça bouge mieux qu'au début »). Et **la configuration Klipper officielle de cette imprimante, `printer-flsun-qqs-2020.cfg`, ne contient pas ces lignes** (au moment où j'écris). Quiconque suit cette config sur une Robin Mini a des moteurs sous-alimentés.

La correction tient en trois blocs de configuration : une sortie PWM matérielle par broche, 800 sur une échelle de 1500, à 1 kHz, la valeur par défaut de Marlin. Homing immédiat, trois colonnes déclenchées, vitesse normale. « *Déplacement parfait !* »

<details markdown="1">
<summary>Pour aller au fond : les trois blocs, et la leçon de méthode</summary>

```
[output_pin motor_current_ab]
pin: PA6
pwm: True
hardware_pwm: True
cycle_time: 0.001
scale: 1500
value: 800

[output_pin motor_current_c]
pin: PA7
# idem

[output_pin motor_current_e]
pin: PB0
# idem
```

800/1500 correspond à environ 1,28 V de référence, soit ~0,9 A efficaces sur les drivers TMC2208 de la carte. On peut ajuster par pas de 50, sans dépasser ~1000 sans refroidissement. Les trois broches sont sur le même timer (TIM3), `hardware_pwm` est accepté sans erreur.

La leçon dépasse cette carte : quand « ça marchait avant » sous un autre firmware, il faut inventorier **tout** ce que l'ancien firmware initialisait — courant, micro-pas, modes de driver, pas seulement STEP/DIR/ENABLE. L'erreur de l'IA n'a pas été de se tromper, mais de raisonner (« le courant vient d'un potentiomètre, donc il n'a pas changé ») au lieu de vérifier comment cette carte-là produit sa référence.
</details>

## Calibrer une delta sans palpeur

Le palpeur de la machine n'était pas là. Ce n'est pas grave : la documentation de Klipper recommande de toute façon la calibration **manuelle** sur une delta, parce qu'un palpeur monté à côté de la buse introduit sa propre erreur quand l'effecteur s'incline. La méthode, c'est la feuille de papier : `DELTA_CALIBRATE METHOD=manual` envoie la buse à 2 mm au-dessus de sept points du plateau, un au centre et six en cercle ; à chaque point on descend la buse par pas de 1 mm, puis 0,1, puis par bissection, jusqu'à ce qu'une feuille de papier de 0,1 mm frotte juste entre la buse et le verre ; on valide, la buse va au point suivant. Sept points, un quart d'heure. Klipper calcule ensuite les paramètres qui mettent ces sept points dans un plan.

![Pièce calibrate_size.stl de Klipper sur le plateau de la FLSun QQ-S : anneau, six rayons, sept piliers hexagonaux, lettres A, B, C vers les colonnes](../images/flsun/04-calibrate-size.jpg)

*La pièce `calibrate_size.stl` livrée avec Klipper, pour la calibration étendue des bras. Elle sera imprimée mais pas utilisée : on verra pourquoi.*

Le premier résultat, le 4 septembre après-midi : rayon delta 141,18 (l'EEPROM disait 140,8), et surtout **angle de la colonne A à 211,02° et de la colonne B à 330,45°**, au lieu des 210° et 330° nominaux. Un degré sur A. C'est énorme pour une delta, et c'était le défaut « qu'aucun réglage ne corrigeait » : un angle de colonne faux vrille les pièces et déforme le plateau en trèfle, et aucun réglage de slicer, aucune grille de plateau, ne rattrape ça.

Dans la foulée, la **bed mesh**, la grille du plateau : `BED_MESH_CALIBRATE METHOD=manual`, même geste au papier sur 13 points, pour corriger ce que le verre a de non plan. Étendue 0,51 mm, dominée par les deux bords de l'axe Y. Sauvegardé, chargé au début de chaque impression. Calibration à froid terminée.

*Notez ce détail : la grille a été mesurée à froid, et j'ai retendu les courroies entre la calibration delta et sa vérification. On y reviendra.*

## L'extrudeur mentait de 11,5 %

Le test le plus simple du monde, et je ne l'avais jamais fait en six ans : un trait au feutre sur le filament à 120 mm de l'entrée de l'extrudeur, on demande à la machine d'en avancer 100, on mesure ce qui reste. Attendu : 20 mm. Mesuré : **31,5 mm**. La machine avait poussé 88,5 mm pour 100 demandés.

Les 367 pas/mm de l'EEPROM, reportés fidèlement dans Klipper (`rotation_distance` 8,719), étaient faux de 11,5 %. Corrigé à 7,716, contre-vérifié sur un second test : 20,0 mm restants, « *parfait !* ».

Mesurez ce que ça veut dire : **chaque couche jamais posée par cette machine manquait d'un dixième de sa matière**. Parois faibles, jointures ouvertes, dessus irréguliers, mauvaise adhérence entre couches — tout ce que je mettais sur le compte de « la delta » ou « le PETG ». Et aucun réglage de slicer ne compense une erreur qu'on ignore : on peut monter le débit à 110 % au hasard, on ne sait pas pourquoi, et ça ne tient pas d'un filament à l'autre.

Avec les angles de colonnes et le courant moteur, ça fait **trois défauts d'origine** — d'origine ou d'une mise à jour de firmware qui a tout remis à zéro, la machine ne dira pas lequel — jamais vus.

## PID, PETG humide et le premier print

Les régulations de température (PID) se recalibrent en dix minutes, mais celle de la buse a fait sauter la protection thermique de Klipper : `heater extruder not heating at expected rate`. La courbe montrait une chauffe parfaitement saine (27 → 234 °C en 95 s), puis une inertie inhabituelle entre le bloc et sa thermistance qui fait croire à la protection que la chauffe s'arrête. Pas de désactivation : une fenêtre élargie dans `[verify_heater extruder]`, documentée dans la config.

Puis la première pièce, en PETG, celui qui vivait sur la machine depuis des lustres. Le cube est sorti… comme ça :

![Cube de 20 mm en PETG noir imprimé sur la FLSun QQ-S, parois mousseuses et irrégulières, filaments qui pendent : filament humide](../images/flsun/01-cube-petg-humide.jpg)

*Le premier cube, en PETG. Ça crépitait dans la buse pendant l'impression : la bobine était saturée d'eau. Les parois sont de la mousse.*

Ce n'est pas l'imprimante : c'est le filament. Le PETG est hygroscopique, et une bobine laissée à l'air pendant des années crépite dans la buse (l'eau se vaporise) et sort mousseux. Une bonne part de la « fiabilité décevante » de cette machine, c'était ça. Bobine de PLA neuve pour toute la calibration ; le PETG passera au sèche-filament.

En PLA, `square.stl` de Klipper (un cadre d'un millimètre de paroi, cinq millimètres de haut, six minutes) : paroi 1,00 mm, hauteur 5,00. Et le premier cube de contrôle : **Z 20,00 · X 20,40 · Y 20,45**. La hauteur est parfaite — les colonnes sont bonnes. L'excès de 2 % en XY, on le règlera à la fin.

![Test de première couche square.stl de Klipper : deux cadres imbriqués en PLA blanc sur le plateau noir de la delta](../images/flsun/03-square.jpg)

*`square.stl` : le test de première couche et de débit de Klipper. Paroi 1,00 mm pile.*

![Gros plan sur le pied d'un cadre : une fine lèvre déborde à la base de la paroi](../images/flsun/02-square-levre.jpg)

*Le pied d'un cadre, vu de très près : la petite lèvre qui déborde à la base dit que la première couche est un peu trop écrasée. C'est avec ce test qu'on règle le décalage de première couche, par pas de 0,05 mm, pendant l'impression.*

## Pressure advance

Dernier réglage avant de s'attaquer au plateau : le **pressure advance**. Sur une machine à bowden (le moteur d'extrudeur est sur le châssis, un long tube amène le filament à la buse), la pression dans le tube met du temps à monter et à retomber ; sans compensation, les coins gonflent et les fins de ligne bavent. Klipper compense en poussant un peu plus avant les accélérations et en retirant avant les décélérations, avec un seul paramètre. On le mesure avec une tour de test où le paramètre augmente avec la hauteur (`TUNING_TOWER`), et on cherche à l'œil la hauteur où les coins sont les plus nets.

![Coin de la tour de pressure advance square_tower de Klipper en PLA blanc, vue rasante : l'arête change d'aspect avec la hauteur](../images/flsun/05-pa-tower.jpg)

*La tour `square_tower.stl` : en bas, pas assez de compensation, les coins gonflent ; en haut, trop, ils se creusent. Le meilleur coin est à 19 mm.*

Meilleur coin à 19 mm, pas de 0,020 par millimètre : **pressure advance 0,38**, dans la plage attendue pour un bowden. Gravé.

## La spirale, ou comment voir sa première couche

Pour juger le nivellement, il me fallait mieux que la feuille de papier : je me souvenais d'un objet en spirale qu'on imprime pour voir la première couche d'un coup d'œil. Plutôt que de chercher un fichier tranché pour une autre machine, l'IA a généré le G-code directement : une seule ligne continue, en spirale d'Archimède, du centre jusqu'à 120 mm de rayon, une spire tous les 2,5 mm, une seule couche de 0,2. Douze minutes. Là où la buse est trop près, le cordon est écrasé, plat, translucide ; là où elle est trop loin, il est rond, étroit, mal collé. Sur un plateau rond, c'est le test le plus lisible qui soit.

![Spirale de nivellement sur le plateau rond de la FLSun QQ-S : trois secteurs brillants alternant avec trois secteurs sombres, en trèfle](../images/flsun/06-spirale-1-trefle.jpg)

*La première spirale. Trois lobes brillants à 120° l'un de l'autre : la signature d'une géométrie delta, pas d'un plateau gondolé.*

La première spirale montrait un **trèfle à trois lobes**. Un verre gondolé ne fait pas de trèfle ; une delta mal calibrée, si. Et pourtant la calibration venait d'être faite. La bonne conclusion aurait été : *la géométrie n'est pas encore juste, refaire la calibration*. On a pris l'autre chemin.

## La fausse piste : deux jours à corriger la grille {#fausse-piste}

Ma demande était raisonnable : « *une impression avec une épaisseur prédéterminée serait plus pertinente que le test de la feuille* ». L'IA a construit la méthode : imprimer un carré d'une couche sur chacun des 13 points de la grille, mesurer leur épaisseur, et corriger chaque point de la grille de l'écart à la moyenne. Un carré plus épais que les autres = la buse était plus haute là = le plateau y est plus bas que ce que la grille croit = on abaisse le point. Elle a écrit le script (`fix-mesh.py`) qui fait le homing, place la buse à 100 mm au-dessus de chaque carré pour l'identifier (« *comment déterminer qui est qui ?* » — le logo n'est pas une référence), enregistre les mesures, réécrit la grille. Mon micromètre étant gradué en pouces, on saisit en millièmes (`13t`).

![Treize carrés d'une couche en PLA imprimés sur les treize points de la bed mesh Klipper, plateau rond de la delta](../images/flsun/07-carres-13.jpg)

*Passe 1 : treize carrés de 20 mm, une couche, un par point de la grille.*

![Le fourreau d'un vieux micromètre : graduations 0 à 7, un trait tous les 25 millièmes de pouce](../images/flsun/09-micrometre-pouces.jpg)

*Le micromètre, gradué en pouces : un trait du fourreau vaut 25 millièmes, le tambour donne l'unité. 13 thou = 0,33 mm.*

![Un micromètre Lufkin Rule Co. de Saginaw, Michigan, modèle n° 1941, rouillé, sa broche serrée sur un fragment de première couche en PLA translucide](../images/flsun/09b-micrometre-lufkin.jpg)

*L'instrument lui-même : un Lufkin Rule Co. de Saginaw, Michigan, n° 1941. Il a plus d'années que moi et mesure toujours au millième de pouce. Entre ses touches, une couche de PLA.*

Ça marchait. Passe 1 : étendue des épaisseurs 0,30 mm. Passe 2 : **0,084 mm**. La spirale suivante était nettement meilleure, le trèfle s'estompait. Puis on est passés à une grille plus fine, 7×7 (29 points, pas de 40 mm au lieu de 55), parce que les défauts restants semblaient tomber *entre* les points. Passe 3, passe 4, gain réduit pour ne pas osciller. Et à chaque spirale, **les mêmes zones revenaient**, atténuées mais au même endroit.

![Spirale n°3 annotée : cinq zones cerclées en rouge et une en bleu au bord avant-droit](../images/flsun/10-spirale-3-annotee.jpg)

*Spirale n°3, annotée par moi : rouge = trop près (raclé), bleu = trop loin (pas collé). Cinq taches, plus de trèfle net.*

![Spirale n°4 annotée : deux zones rouges, une bleue au même bord](../images/flsun/11-spirale-4-annotee.jpg)

*Spirale n°4, après la grille 7×7 : deux zones rouges au lieu de cinq, le bleu toujours au même coin.*

![Vingt-neuf carrés d'une couche sur la grille bed mesh 7×7 de la FLSun QQ-S, deux carrés à gauche arrachés](../images/flsun/12-carres-29.jpg)

*Grille 7×7, 29 carrés de 10 mm. Deux carrés de gauche sont arrachés : trop près. Le micromètre, lui, les mesurait « épais ».*

C'est là que j'ai dit ce qu'il fallait dire : « *pour moi l'erreur est très répétable sur les trois dernières spirales. On a du manque aux mêmes zones et les corrections ont bien amélioré les choses mais ça ne corrige pas vraiment le fond du problème.* » Trois passes de correction auraient dû suffire. Quelque chose d'indépendant du réglage résistait.

![Spirale n°5 annotée : deux zones rouges, trois roses, une bleue](../images/flsun/13-spirale-5-annotee.jpg)

*Spirale n°5 : rouge, quasi absence de filament ; rose, léger manque ; bleu, pas collé. Les mêmes zones, encore.*

Deux macros ont tranché. Dans la zone bleue, le cordon est rond, étroit, posé sans être pressé, et la transition est progressive sur 25 mm vers le bord : la buse s'éloigne régulièrement en allant vers le bord. Dans la zone rouge, les cordons sont **larges, plats, translucides, écrasés jusqu'au film** — on voit les points du plateau à travers. Trop près, réellement.

![Macro de la zone bleue : cordons ronds et étroits, ondulants, avec de petits nœuds](../images/flsun/14-macro-trop-loin.jpg)

*Zone bleue : cordon rond, non pressé, qui ondule et fait des nœuds là où il a accroché. Trop loin.*

![Macro de la transition vers la zone rouge : cordons larges, plats et translucides, presque un film](../images/flsun/15-macro-trop-pres.jpg)

*Zone rouge : cordons écrasés, translucides, on voit le plateau à travers. Trop près, sans discussion.*

Et voilà la contradiction : dans ces zones rouges, les carrés mesuraient une épaisseur *normale*. Explication, une fois qu'on la voit : **un carré imprimé trop près se fait une lèvre relevée sur son pourtour**, et les touches du micromètre, six millimètres de diamètre, se posent sur cette lèvre. Il lit « épais » exactement là où c'est écrasé. La méthode des carrés était biaisée dans le sens précis qui empêchait de converger. Deux conclusions de l'IA bâties sur ces mesures (« la buse est à 0,4 mm du verre en moyenne », « il faut descendre le zéro global ») sont tombées avec.

Restait la question de fond : pourquoi des zones si répétables ? Ma piste était les courroies. L'IA a écrit un test de répétabilité (touche `R` : même point, cinq approches par des chemins différents, feuille de papier) : **répétable à 0,1 mm** quel que soit le chemin. Courroies et jeu hors de cause. Mais ce test a donné autre chose : à ces points, la feuille frottait à Z = +0,2 et **+0,6 mm** — la machine croyait le plateau un demi-millimètre plus bas qu'il n'est. Et la grille elle-même portait une pente de 0,65 mm d'avant en arrière, que rien ne justifie sur une delta calibrée.

La cause était dans le déroulé du premier jour. La calibration delta avait été faite **à froid** ; **entre** cette calibration et sa vérification, j'avais retendu les courroies ; la vérification avait montré un décalage, et l'IA avait appliqué **+0,4 mm uniforme** aux trois butées. Mais la retension avait déplacé les trois colonnes *inégalement*. Le résidu, une pente inclinée, était parti dans la grille, et une grille de delta ne rend jamais une pente plane : elle laisse des lobes, que quatre passes de carrés au micromètre ont poursuivis sans les attraper.

<details markdown="1">
<summary>Pour aller au fond : pourquoi une grille ne compense pas une erreur de géométrie</summary>

Une erreur de butée sur une colonne ne produit pas un plan incliné exact mais une surface légèrement courbe, parce que l'inclinaison de l'effecteur change avec sa position ; une erreur d'angle produit un trèfle. La grille échantillonne cette surface en 13 ou 29 points et interpole (ici en bicubique) entre eux : elle capture la tendance, pas la courbure fine, et laisse un résidu partout où la vraie surface s'écarte de l'interpolation. Plus l'erreur de géométrie est grande, plus le résidu l'est. C'est pour ça que Klipper demande la géométrie d'abord, la grille ensuite, et que « refaire la grille » ne remplace jamais « refaire la calibration delta ». Et c'est pour ça qu'il faut calibrer dans l'état où l'on imprime : un plateau à 60 °C n'est pas exactement à la même place qu'à 20 °C (ici, +0,36 mm au centre), et l'écart n'est pas nécessairement uniforme.
</details>

## L'arrivée : tout refaire à chaud, au papier

Plateau à 60 °C, buse froide, grille vidée. `DELTA_CALIBRATE` manuel, sept points au papier, quinze minutes. Le verdict est dans les butées :

| Colonne | Butée avant | Butée après | Écart |
|---|---|---|---|
| A | 376,252 | 376,075 | −0,18 |
| B | 376,533 | 375,970 | **−0,56** |
| C | 377,204 | 376,859 | −0,35 |

Les angles n'ont presque pas bougé (A 211,02 → 210,93, B 330,45 → 330,33), le rayon non plus (141,18 → 141,29). La géométrie tenait. Ce qui était faux, c'étaient **les butées, inégalement** : 0,38 mm d'écart entre A et B. Exactement la pente que la grille portait.

Sauvegarde, homing, puis la grille au papier sur les 29 points, une demi-heure. Centre plat à ±0,1 mm sur 80 mm de rayon ; le bord avant plonge de 0,6 mm à 120 mm du centre — c'est le verre lui-même, ou la delta en bout de course, et cette fois c'est mesuré directement et la grille le sait. Puis la spirale :

![Spirale de nivellement uniforme sur la FLSun QQ-S après recalibration delta à chaud sous Klipper : spires régulières d'un bord à l'autre](../images/flsun/16-spirale-6-uniforme.jpg)

*Spirale n°6, la première avec géométrie et grille cohérentes, toutes deux mesurées à chaud. Uniforme d'un bord à l'autre, bord avant compris.*

![Macro de la sixième spirale : cordons réguliers, de même largeur d'une spire à l'autre](../images/flsun/17-macro-spirale-6.jpg)

*Le cordon, à la loupe : régulier, même largeur d'une spire à l'autre, collé partout.*

Six spirales, et la bonne a été celle où l'on a arrêté de corriger et recalibré, en trente-cinq minutes, avec une seule méthode.

Restait un dernier piège, de la même famille : le décalage de première couche, +0,07 mm, avait été réglé le premier jour sur le zéro *froid*. Sur le nouveau zéro, à chaud, le cube de contrôle n'a pas collé. **Un nouveau zéro implique de re-régler l'offset de première couche, jamais de reporter l'ancien.** Cadre de test, ajustement en direct par pas de 0,05 : −0,10 colle à peine, −0,20 colle avec une lèvre de 0,3 mm au pied ; gravé à **−0,15**.

![Première couche d'un cube en PLA décollée du plateau : fragment recroquevillé avec des fils, offset de première couche trop haut](../images/flsun/18-cube-pas-colle.jpg)

*Le cube de contrôle relancé avec l'ancien décalage de première couche : il n'a pas collé. Le zéro avait changé, l'offset non.*

Et le cube, enfin : **20,3 × 20,4 × 20,00**, lèvre de 0,1 mm par côté. Le premier jour il faisait 20,40 × 20,45 × 20,00. L'excès en XY n'a pas bougé avec la géométrie, parce que ce n'est pas de la géométrie : la pièce à sept piliers, mesurée au pied à coulisse, donnait un entraxe de 65,0 ± 0,4 mm sur 65 nominaux, soit une échelle juste à 0,5 % près ; une erreur de bras aurait donné +1,3 mm là-bas. Ce qui reste est un **excès constant** de largeur de cordon, coins qui gonflent, paroi à 1,07 pour 1,00, et ça se règle dans le tranchage comme sur n'importe quelle machine : multiplicateur d'extrusion 0,95, compensation XY −0,1 mm, compensation de pied d'éléphant 0,1 mm, dans un profil de production séparé du profil brut de test. La calibration étendue des bras, longue et délicate, n'était pas nécessaire. Cube de contrôle avec ce profil : **20,0 × 20,1 × 20,0**.

## Ce que j'en retiens

**Calibrer dans l'état où l'on imprime.** À chaud. Une machine calibrée à froid décrit un plateau qui n'existe plus quand le PLA arrive.

**Une seule méthode de mesure, du début à la fin.** Le papier pour la géométrie, le papier pour la grille, le cadre de test pour la première couche. Chaque changement de méthode a introduit un biais que personne ne voyait.

**La géométrie d'abord, la grille ensuite, jamais l'inverse.** Une grille qui n'arrive pas à converger en deux passes ne manque pas de points : elle compense une erreur qui n'est pas la sienne. Et toute retension de courroie remet la géométrie en jeu — refaire `s` puis `m`, pas de raccourci.

**Quand deux mesures se contredisent, on va voir.** La loupe sur le cordon a tranché en une minute ce que quatre passes de micromètre n'avaient pas résolu. Une mesure n'est pas une vérité, c'est un instrument avec ses angles morts.

**L'IA sur-ingénie quand elle comprend mal.** Le script de correction de grille par carrés au micromètre était astucieux, bien fait, persistant, avec reprise et corrections — et il optimisait une mauvaise idée. C'est moi qui ai dit « c'est répétable, ce n'est pas le réglage », et c'est la macro qui a tranché. Elle a en revanche trouvé en une lecture ce que six ans de forums n'avaient pas : le courant moteur par PWM, l'extrudeur faux de 11,5 %, la calibration jamais faite.

**« Ça marchait avant » est une donnée.** Deux fois dans cette histoire, mon jugement sur ma machine valait mieux qu'une méthode lue ailleurs : sur la tension des courroies, sur le homing. Et deux fois, l'IA a fini par le vérifier et me donner raison, avec les sources. C'est la bonne répartition : elle lit vite, elle ne mesure pas à ma place.

## Où on en est

<div class="status" markdown="1">
**État au 6 septembre 2026 : calibration machine terminée.** Géométrie, zéro et grille mesurés à chaud au papier ; première couche à −0,15 ; extrudeur à 7,716 ; pressure advance 0,38 ; PID refaits ; courant moteur fixé. Spirale uniforme ; cube de contrôle à 20,0 × 20,1 × 20,0 avec le profil de production. Reste, par ordre d'intérêt : la compensation de résonance (input shaper) avec la tour de test de Klipper, un extrudeur à double entraînement en stock, et le Raspberry Pi comme hôte pour rendre l'imprimante autonome. Le PETG sèche.
</div>

## Pour reproduire {#pour-reproduire}

**Matériel** : une FLSun QQ-S de 2020 (carte MKS Robin Mini) — la démarche vaut pour toute delta, les broches non ; un ordinateur sous Linux avec un port USB ; une carte SD ≤ 8 Go en FAT32 ; une feuille de papier de 80 g ; un pied à coulisse ; une bobine de PLA **sèche**. Pas de palpeur, pas d'accéléromètre.

**Avant de flasher**, lire la mémoire du firmware d'origine (sur Repetier : `M205` ; sur Marlin : `M503`) et garder le dump. Noter en particulier la longueur des bras, le rayon delta, la hauteur, et les pas/mm de l'extrudeur.

**Firmware** : Klipper, `make menuconfig` → STM32F103, bootloader 28 KiB, quartz 8 MHz, USART3 (PB11/PB10), 250000 bauds ; puis `scripts/update_mks_robin.py out/klipper.bin Robin_mini.bin` ; le fichier à la racine de la carte SD, imprimante éteinte à l'insertion, allumer, attendre « complete ». Le bootloader renomme le fichier en `.CUR`. Le script [`build-firmware.sh`](../assets/flsun/build-firmware.sh) fait tout ça.

**Configuration** : [`printer.cfg`](../assets/flsun/printer.cfg), avec ses valeurs réelles et ses commentaires. Les trois blocs `[output_pin motor_current_*]` sont **indispensables** sur une Robin Mini. Le bloc `SAVE_CONFIG` en fin de fichier contient les résultats des calibrations ; pour repartir de zéro, le supprimer et remettre les valeurs de l'EEPROM en `[stepper_a/b/c]` et `[printer]`.

**Outils** : [`start-klipper.sh`](../assets/flsun/start-klipper.sh) (démarrer l'hôte), [`send-gcode.sh`](../assets/flsun/send-gcode.sh) et [`klippy-client.py`](../assets/flsun/klippy-client.py) (envoyer une commande), [`calib.py`](../assets/flsun/calib.py) (pilotage clavier des calibrations), [`watch-print.py`](../assets/flsun/watch-print.py) (suivi d'impression), [`make-spiral.py`](../assets/flsun/make-spiral.py) (la spirale). Les profils PrusaSlicer en ligne de commande sont dans [`slicer/`](../assets/flsun/slicer/) : `qqs-pla.ini` brut pour les tests, `qqs-pla-prod.ini` pour les pièces.

**Dans l'ordre, à chaud** (plateau à la température d'impression, buse froide pour le papier) :

| Étape | Commande / touche | Durée | Ce qu'on obtient |
|---|---|---|---|
| 1. Homing | `h` | 1 min | position connue |
| 2. Géométrie | `s` (DELTA_CALIBRATE manuel), 7 points au papier, puis `c c` | 15 min | rayon, angles, butées |
| 3. Vérification | `v` (7 points à Z = 0,1) | 5 min | ±0,05 attendu ; sinon refaire 2 |
| 4. Grille | `m` (BED_MESH_CALIBRATE manuel), puis `c c` | 20–30 min | profil `default`, chargé par START_PRINT |
| 5. Extrudeur | trait à 120 mm, `M83` `G1 E100 F60`, mesurer | 5 min | `rotation_distance` × extrudé/100 |
| 6. PID | `PID_CALIBRATE HEATER=extruder TARGET=210`, idem `heater_bed` | 15 min | gains, `SAVE_CONFIG` |
| 7. Première couche | `square.stl`, `[` `]` en direct, graver dans START_PRINT | 7 min | offset |
| 8. Pressure advance | `square_tower.stl` + `TUNING_TOWER … START=0 FACTOR=.020` | 50 min | hauteur du meilleur coin × 0,020 |
| 9. Contrôle | spirale, puis cube de 20 mm | 12 + 19 min | uniforme ; 20,00 en Z |

Trois règles, si vous vous y mettez : **à chaud**, **une seule méthode de mesure**, et **toute intervention mécanique (courroies, bras, plateau) renvoie à l'étape 2**. Si une grille ne converge pas en deux passes, ne pas ajouter de points : refaire la géométrie.

**Lire la spirale** : rouge = trop près (cordon plat, translucide, raclé), bleu = trop loin (cordon rond, mal collé). Un trèfle à trois lobes = géométrie ; des taches locales = plateau ou grille ; un bord qui plonge progressivement = le verre ou la delta en bout de course. En cas de doute, la loupe.

## Questions fréquentes

### Faut-il un palpeur pour calibrer une delta sous Klipper ?

Non. La documentation Klipper recommande la calibration manuelle au papier sur les deltas, parce qu'un palpeur décalé de la buse introduit sa propre erreur quand l'effecteur s'incline. Sept points pour la géométrie, treize à vingt-neuf pour la grille, une demi-heure en tout.

### Mes moteurs grognent et le homing échoue après le passage à Klipper sur une MKS Robin Mini. Pourquoi ?

Parce que le courant des moteurs est réglé par PWM depuis le microcontrôleur (broches PA6, PA7, PB0) et que la config Klipper officielle de la QQ-S ne le fait pas. Trois blocs `[output_pin]` en PWM matériel, valeur 800 sur 1500, règlent le problème. Voir [Klipper, et des moteurs qui n'ont plus de force](#klipper-et-des-moteurs-qui-nont-plus-de-force).

### Ma FLSun QQ-S est-elle sous Marlin ?

Pas la QQ-S de 2020 : elle est sous Repetier (`FIRMWARE_NAME:Robin`). `M503`, `M665`, `M666`, `M900` répondent `Unknown command` ; c'est `M205` qui lit la mémoire. Les tutoriels Marlin ne s'appliquent pas.

### Ma grille de plateau ne converge pas, même après plusieurs passes. Faut-il plus de points ?

Presque jamais. Une grille qui ne converge pas compense en général une erreur de géométrie (butées inégales, angle de colonne) ou une calibration faite à froid. Refaire `DELTA_CALIBRATE` à chaud, puis la grille, avec la même méthode de mesure.

### Comment savoir si mon extrudeur pousse la bonne quantité ?

Un trait sur le filament à 120 mm de l'entrée de l'extrudeur, `M83` puis `G1 E100 F60`, mesurer ce qui reste : 20 mm attendus. Ici il en restait 31,5 : 11,5 % de sous-extrusion depuis toujours. Nouveau `rotation_distance` = ancien × extrudé / 100.

### La méthode des carrés d'épaisseur au micromètre est-elle bonne ?

Elle est biaisée là où la buse est trop près : le carré écrasé fait une lèvre relevée sur son pourtour, et le micromètre la lit « épais ». Si vous y tenez, des carrés de 20 mm mesurés au centre, touches loin du bord. La spirale et le papier sont plus fiables.

### Faut-il tendre les courroies d'une delta à une fréquence précise ?

Non. La fréquence dépend de la longueur du brin, de la masse et de la composition de la courroie ; une même note ne signifie pas une même tension d'une machine à l'autre, et sur une QQ-S le brin est trop long pour être mesuré. Détendre, puis retendre au seuil où la courroie vibre mollement au lieu de flotter, sur les trois colonnes. Et refaire la calibration delta après.

### Le cube fait 20,3 au lieu de 20,00 en XY : dois-je calibrer les bras ?

Pas si l'excès est constant. Vérifiez sur une pièce plus grande (la pièce à sept piliers de Klipper, entraxe 65 mm) : si l'échelle est juste, l'excès vient de la largeur de cordon et se corrige dans le slicer (multiplicateur d'extrusion, compensation XY). La calibration des bras corrige une erreur d'échelle, pas un excès constant.

### Qu'a fait l'IA exactement, et qu'a fait l'humain ?

Claude a lu l'EEPROM et le fichier de brochage de la carte, compilé et préparé le firmware, écrit la configuration et tous les scripts, généré la spirale, conduit les calibrations et rédigé ce billet avec moi. Elle s'est trompée sur le firmware (Marlin), sur la cause du homing (plusieurs heures), sur la tension des courroies, et sur la méthode des carrés. J'ai tenu la feuille de papier, le pied à coulisse, le micromètre et l'appareil photo ; j'ai lu les spirales ; j'ai dit « ça marchait avant », « c'est pas une corde » et « c'est répétable, ce n'est pas le réglage ». Les trois fois, c'était la bonne piste.

## Petit glossaire

- **Delta** : imprimante où la buse est portée par trois bras articulés sur trois chariots verticaux ; la position est calculée, pas mesurée axe par axe.
- **Effecteur** : la pièce centrale qui porte la buse, au bout des bras.
- **Bras (`arm_length`)**, **rayon delta (`delta_radius`)**, **angle de colonne**, **butée (`position_endstop`)** : les paramètres de la géométrie ; voir l'encart « ce que chaque réglage corrige ».
- **Homing** : envoyer les chariots en haut jusqu'à leurs interrupteurs, pour connaître leur position.
- **Bed mesh (grille du plateau)** : carte des hauteurs du plateau, mesurée en quelques points, que le firmware interpole pour corriger la buse en continu.
- **Test du papier** : descendre la buse jusqu'à ce qu'une feuille de 0,1 mm frotte juste ; le Z = 0 est alors 0,1 mm au-dessus du verre.
- **Offset de première couche** : petit décalage en Z appliqué au début de chaque impression pour ajuster l'écrasement de la première couche.
- **Rotation distance** : sous Klipper, la distance parcourue (ou de filament poussée) par tour de moteur ; remplace les pas/mm.
- **Pressure advance** : compensation de la pression dans le tube bowden, qui nettoie les coins.
- **PID** : la régulation de température ; se recalibre par `PID_CALIBRATE`.
- **Bowden** : configuration où le moteur d'extrudeur est sur le châssis et pousse le filament dans un long tube jusqu'à la buse ; léger pour l'effecteur, mais élastique.
- **Thou** : millième de pouce, 0,0254 mm. Les micromètres anciens sont gradués ainsi.
- **Lèvre / pied d'éléphant** : bourrelet à la base d'une pièce, signe d'une première couche trop écrasée.
- **PWM** : signal carré dont on module la largeur ; sert ici à fabriquer une tension de référence pour le courant des moteurs.
- **EEPROM** : la mémoire du firmware d'origine où il garde ses réglages.

---

## Références et copies locales {#references}

Pour que ce billet reste utile quand les liens auront disparu, les fichiers du projet sont hébergés ici.

- **Klipper**, documentation : [Delta Calibrate](https://www.klipper3d.org/Delta_Calibrate.html) · [Bed Mesh](https://www.klipper3d.org/Bed_Mesh.html) · [Bed Level](https://www.klipper3d.org/Bed_Level.html) · [Manual Level](https://www.klipper3d.org/Manual_Level.html) · [Pressure Advance](https://www.klipper3d.org/Pressure_Advance.html) · [Resonance Compensation](https://www.klipper3d.org/Resonance_Compensation.html) · [Config Reference](https://www.klipper3d.org/Config_Reference.html). Les pièces de test (`square.stl`, `square_tower.stl`, `calibrate_size.stl`, `ringing_tower.stl`) sont dans [`docs/prints/`](https://github.com/Klipper3d/klipper/tree/master/docs/prints) du dépôt.
- **Config Klipper de référence** pour la QQ-S 2020 — [`printer-flsun-qqs-2020.cfg`](https://github.com/Klipper3d/klipper/blob/master/config/printer-flsun-qqs-2020.cfg) (sans les sorties de courant moteur, au 6 septembre 2026).
- **Brochage de la MKS Robin Mini** dans Marlin — [`pins_MKS_ROBIN_MINI.h`](https://github.com/MarlinFirmware/Marlin/blob/bugfix-2.1.x/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h) (source des broches PWM de courant).
- **Hackaday**, « Don't Tune Your 3D Printer To Middle 'C' After All » — sur la tension des courroies par fréquence ([recherche sur le site](https://hackaday.com/?s=belt+tension+middle+C)).
- **PrusaSlicer 2.8.1**, dernière version avec une AppImage Linux — [releases](https://github.com/prusa3d/PrusaSlicer/releases/tag/version_2.8.1). Lancé en ligne de commande sans affichage (`env -u DISPLAY`) ; il ajoute ses propres commandes de chauffe sauf s'il trouve de vrais `M104`/`M140` dans le G-code de départ.
- **Les fichiers du projet** : [`printer.cfg`](../assets/flsun/printer.cfg) · [`calib.py`](../assets/flsun/calib.py) · [`klippy-client.py`](../assets/flsun/klippy-client.py) · [`send-gcode.sh`](../assets/flsun/send-gcode.sh) · [`start-klipper.sh`](../assets/flsun/start-klipper.sh) · [`watch-print.py`](../assets/flsun/watch-print.py) · [`build-firmware.sh`](../assets/flsun/build-firmware.sh) · [`make-spiral.py`](../assets/flsun/make-spiral.py) · profils [`slicer/`](../assets/flsun/slicer/) · [`README-flsun.md`](../assets/flsun/README-flsun.md) (l'état de la machine et le mode d'emploi du dépôt).
- **Pour mémoire**, la fausse piste : [`fix-mesh.py`](../assets/flsun/pour-memoire/fix-mesh.py), [`mesh-to-7.py`](../assets/flsun/pour-memoire/mesh-to-7.py), [`first_layer_29.stl`](../assets/flsun/pour-memoire/first_layer_29.stl), et [`analyze-delta.py`](../assets/flsun/pour-memoire/analyze-delta.py) pour la calibration étendue des bras, si un jour elle devient nécessaire.

*Photos et mesures : les miennes. Firmware, configuration, scripts et rédaction : avec Claude. Ce billet est aussi disponible en [Markdown brut](flsun-qqs-delta-klipper-calibration.md).*
