Disclaimer: This is an independent resource site.
Not affiliated with the Voron project or its development team.
<article class="guide-article">
<header>
<h1>Voron Klipper Sensorless Homing Guide</h1>
<p class="lead">Eliminate endstop switches using TMC driver stall detection on your Voron printer.</p>
</header>
<section>
<h2>What is Sensorless Homing?</h2>
<p>
Sensorless homing uses the TMC stepper driver's stall detection capability (StallGuard on TMC2209 / CoolStep on TMC5160) to detect when a carriage hits the mechanical hard stop. Instead of physical endstop switches, the driver itself reports back-EMF changes that indicate a physical blockage.
</p>
<p>
The primary benefits are fewer wires, fewer failure points, and no endstop switches to adjust. The trade-off is that sensorless homing requires careful tuning: too sensitive and you'll get false triggers from acceleration or belt friction; too insensitive and you'll crash the carriage into the frame repeatedly.
</p>
</section>
<section>
<h2>Hardware Requirements</h2>
<ul>
<li>TMC2209 drivers in UART mode (most Voron 2.4, Trident, Switchwire)</li>
<li>TMC5160 drivers (Voron 2.4 350mm+ builds sometimes use these)</li>
<li>Klipper firmware with TMC driver support</li>
<li>Free-moving carriages with minimal binding</li>
</ul>
<p>
Sensorless homing is not recommended on the Z axis due to the weight of the gantry — the risk of damaged belts or skipped steps is too high.
</p>
</section>
<section>
<h2>Klipper Configuration</h2>
<h3>Step 1: Enable UART Mode</h3>
<p>Ensure your TMC drivers are in UART mode by setting the following in your printer.cfg:</p>
<pre><code>[tmc2209 stepper_x]
uart_pin: PC4
run_current: 0.8
sense_resistor: 0.110
stealthchop_threshold: 999999
</code></pre>
<h3>Step 2: Configure Endstop to 'sensorless'</h3>
<pre><code>[stepper_x]
endstop_pin: tmc2209_stepper_x:virtual_endstop
homing_positive_dir: true
homing_retract_dist: 5
position_endstop: 0
position_max: 250
</code></pre>
<h3>Step 3: Set Driver StallGuard Threshold</h3>
<pre><code>[tmc2209 stepper_x]
diag_pin: PC2
driver_SGTHRS: 100
</code></pre>
<p>
The SGTHRS (StallGuard Threshold) value ranges from 0 to 255. Lower values mean higher sensitivity (easier to trigger). Start with 100 and adjust downward if the carriage fails to detect the endstop, or upward if you get false triggers during normal movement.
</p>
</section>
<section>
<h2>Tuning Procedure</h2>
<ol>
<li>
<strong>Start high:</strong> Set SGTHRS to 150. The carriage should slam into the endstop repeatedly without detecting. This confirms mechanical motion is free.
</li>
<li>
<strong>Lower gradually:</strong> Decrease SGTHRS by 5-10 units per test. After each change, run `FIRMWARE_RESTART` and try homing.
</li>
<li>
<strong>Find the sweet spot:</strong> The ideal value is where homing succeeds in 2-3 contact events and false triggers rarely or never occur during normal moves.
</li>
<li>
<strong>Test homing acceleration:</strong> A homing speed of 100-150 mm/s with acceleration of 800-1200 mm/s² works well on most Voron builds.
</li>
</ol>
</section>
<section>
<h2>Per-Axis Reference Values</h2>
<table>
<thead>
<tr><th>Axis</th><th>Typical SGTHRS</th><th>Homing Speed</th><th>Notes</th></tr>
</thead>
<tbody>
<tr><td>X</td><td>60-100</td><td>100-150 mm/s</td><td>Light toolhead, easy to tune</td></tr>
<tr><td>Y</td><td>70-110</td><td>100-150 mm/s</td><td>Bed mass adds inertia, may need higher value</td></tr>
<tr><td>Z</td><td>Not recommended</td><td>N/A</td><td>Gantry weight makes detection unreliable</td></tr>
</tbody>
</table>
</section>
<section>
<h2>Common Issues and Troubleshooting</h2>
<h3>False Triggers During Print Moves</h3>
<p>
If the printer falsely triggers sensorless homing during a print (e.g., at high acceleration), increase the SGTHRS value. You may also need to reduce your maximum acceleration or increase homing_retract_dist to prevent the carriage from re-contacting the endstop.
</p>
<h3>No Detection at All</h3>
<p>
If the carriage smashes into the endstop repeatedly: decrease SGTHRS. Also verify that `diag_pin` is correctly connected to your MCU. On the BTT Octopus, common diag_pin mappings are PC2 (X), PC3 (Y), PC4 (Z).
</p>
<h3>Carriage Stalls Before Hitting Endstop</h3>
<p>
If the carriage stops before reaching the physical endstop, your SGTHRS is too low (too sensitive). Increase the value. You may also have belt tension that varies across the travel — check for binding.
</p>
</section>
<section>
<h2>Advanced: Dual Carriage and IDEX</h2>
<p>
For Voron 2.4 with dual carriages or an IDEX build, each carriage needs its own SGTHRS tuning. The right carriage typically needs a slightly lower SGTHRS than the left because the gantry beam flexes differently. Test each axis independently.
</p>
</section>
<section class="summary">
<h2>Summary</h2>
<p>
Sensorless homing removes mechanical endstop switches from your Voron, simplifying wiring and improving reliability once tuned. Start with SGTHRS around 100-120, tune per-axis by decreasing until detection is reliable at 2-3 contact events, and always verify with multiple homing cycles before printing. False triggers during prints indicate the threshold is too low or acceleration is too aggressive.
</p>
</section>
</article>