Calibration¶
Happy Hare ships with sensible defaults for every supported MMU, but a handful of dimensions are physical to your build - how far your gear stepper actually turns per millimetre of filament, exactly where your selector needs to park, how long your particular bowden tube is. No default can know these in advance; that's what calibration is for.
This page explains which of the steps below actually apply to your MMU, which are worth doing versus safe to skip for now, and the order to do them in. Each step then has its own page with the full command reference and worked examples.
Which steps apply to your MMU¶
Whether a step applies at all is determined by your MMU's selector mechanism - see What Is an MMU? for the full Type-A/Type-B/Type-C breakdown and the vendor table. In short:
- Type-A (shared gear stepper, moving selector - ERCF, Tradrack, BTT ViViD, 3D Chameleon, HTLF, Low Rider, MMX, MMX6, Pico MMU) needs selector calibration; the gear stepper is shared across gates so there's normally only one rotation distance to set.
- Type-B (gear-per-gate, no moving selector - Box Turtle, 3MS, Angry Beaver, EMU, KMS, Night Owl, QuattroBox) has nothing to calibrate for a selector, but each gate's own gear stepper can need its own rotation distance.
- Type-C (gear-per-gate and a moving selector - no vendor default yet, custom builds only) needs both: selector calibration from the Type-A list below, plus per-gate gear calibration from the Type-B list.
| Step | Command(s) | Applies to | Necessity |
|---|---|---|---|
| Selector position | MMU_CALIBRATE_SELECTOR, MMU_SERVO, MMU_CALIBRATE_SERVO_SELECTOR, MMU_CALIBRATE_ROTARY_SELECTOR, MMU_CALIBRATE_SELECTOR_INDEXES |
Type-A/Type-C only - not applicable to Type-B | Mandatory where it applies - no default position exists |
| Gear rotation distance | MMU_CALIBRATE_GEAR, MMU_CALIBRATE_GATE |
Every MMU | Recommended, but skippable everywhere by default - see Autotuning below |
| Encoder resolution | MMU_CALIBRATE_ENCODER |
Only if an encoder is fitted (standard on ERCF; optional/vendor-dependent elsewhere) | Nagged-for-by-default on ERCF only; skippable everywhere else |
| Bowden length | MMU_CALIBRATE_BOWDEN |
Every MMU | Required unless auto-calibrated - no MMU type ships a default |
| Toolhead dimensions | MMU_CALIBRATE_TOOLHEAD |
Every MMU | Optional if a known toolhead/extruder was picked during install; otherwise needs a toolhead sensor |
| Sync-feedback sensor | MMU_CALIBRATE_PSENSOR |
Only with a sync-feedback buffer's analog (proportional) sensor fitted | Optional - a feature-specific calibration, covered on its own Feature page |
Autotuning and auto-calibration¶
Two related but distinct ideas, both controlled by mmu_parameters.cfg
settings exposed in menuconfig's Calibration and Autotuning screen:
- Auto calibration runs a measurement automatically, once, the first time it's needed - after that it behaves exactly as if you'd run the calibration command yourself.
- Autotuning keeps adjusting a value continuously during normal operation, refining it a little on every load/unload rather than settling on one number.
| Setting | What it does | Default |
|---|---|---|
autocal_bowden_length |
Auto-calibrate bowden length the first time it's needed, instead of requiring MMU_CALIBRATE_BOWDEN up front |
On for Box Turtle, EMU, KMS, and BTT ViViD (their stock builds ship an extruder-entry sensor or a sync-feedback buffer with compression/proportional sensing); off elsewhere, but fitting an extruder-entry sensor unlocks it on any MMU |
autotune_bowden_length |
Continuously refine the bowden length over time | Off for every MMU type - fully opt-in |
skip_cal_rotation_distance |
Skip MMU_CALIBRATE_GEAR, relying on the installed default rotation distance |
On (skippable) for every MMU type, no exceptions |
autotune_rotation_distance |
Continuously refine each gate's rotation distance from sync-feedback or encoder telemetry | Off for every MMU type - fully opt-in |
skip_cal_encoder |
Skip MMU_CALIBRATE_ENCODER, relying on the installed default encoder resolution |
On (skippable) for every type except ERCF (off) |
A skip_cal_* setting doesn't stop the MMU from working either way - it
only changes whether Happy Hare nags at boot ("not calibrated") until you
run the command (0), or quietly accepts the vendor default forever
(1, the default nearly everywhere). Note that skip_cal_encoder's
exception is ERCF specifically, not "any encoder-equipped design" - KMS
and QuattroBox both ship with an encoder and still default to skippable.
Recommended order¶
If you're calibrating for the first time, do it in this order - later steps depend on earlier ones being right, and re-running an earlier step invalidates everything after it:
graph LR
A[Selector
if Type-A/C] --> B[Gear
rotation distance]
B --> C[Encoder
if fitted]
C --> D[Bowden
length]
D --> E[Per-gate gear
if variable]
F[Toolhead
independent, anytime] --- B
Concretely: if you re-run MMU_CALIBRATE_GEAR, you must also re-run
encoder, bowden, and possibly per-gate calibration afterward - all three
depend on the gear's rotation distance being settled first. Selector
calibration and toolhead calibration can both be safely redone at any
time; neither one cascades into the others.
Every calibration command supports SAVE=0, which runs the full
measurement and reports the result without persisting it - useful for
checking a step is working before committing to it.
Where results are stored¶
Every calibration command persists its result into mmu_vars.cfg via
Klipper's [save_variables]:
| Variable | Set by |
|---|---|
mmu_selector_offsets |
MMU_CALIBRATE_SELECTOR |
mmu_selector_bypass |
MMU_CALIBRATE_SELECTOR BYPASS=1 |
mmu_servo_angles |
MMU_SERVO / MMU_CALIBRATE_SERVO_SELECTOR |
mmu_gear_rotation_distances |
MMU_CALIBRATE_GEAR / MMU_CALIBRATE_GATE |
mmu_encoder_resolution |
MMU_CALIBRATE_ENCODER |
mmu_calibration_bowden_lengths |
MMU_CALIBRATE_BOWDEN |
mmu_calibration_clog_length |
MMU_CALIBRATE_BOWDEN (when an encoder is fitted) |
None of these need hand-editing - each one is written by its own
calibration command, and RESET=1 on that same command clears it back to
the installed default.
See also¶
- What Is an MMU? - the Type-A/B/C taxonomy this page builds on
- Config Parameters - every setting mentioned above, in full
- Command Reference - every
MMU_CALIBRATE_*command's full parameter list