Summary: This hands-on guide documents a full-day upgrade of a TwoTrees SP-5 V3 to Klipper using a Radxa Zero 512MB host and an MKS Robin Nano V3.1 high-speed board. It covers the OS image, flashing, pin mapping, macros, input shaping, fan fixes, extruder calibration and final tuning for 350 mm/s operation. This is the exact process I used to reach stable high-speed prints using OrcaSlicer.
Why upgrade?
The stock SP-5 with Marlin is capable, but Klipper + a fast SBC unlocks high acceleration, input shaping, precise pressure advance, and far better motion control. Using a Radxa Zero keeps the host cheap and power-efficient while providing reliable USB gadget networking for a headless Mainsail install.
Overview of what you’ll need
- TwoTrees SP-5 V3 (printer chassis)
- MKS Robin Nano V3.1 high-speed board (drop-in replacement)
- Radxa Zero 512MB (SD card, power supply)
- Micro SD card for firmware flashing and SBC
- Mainsail / Klipper / Moonraker installed on the Radxa
- OrcaSlicer (recommended; I now use it permanently)
Part 1 — Preparing the Radxa Zero (512MB)
I tested multiple images; the Radxa Zero Debian Bullseye KDE B23 image booted reliably, allowed USB gadget mode and worked headless. Many Arch/Manjaro builds lacked WiFi or gadget support, so pick an image that is known to support gadget networking.
- Write the Bullseye image to the SD card and enable SSH before first boot (create an empty
sshfile or enable SSH via the image instructions). - Add WiFi credentials and set a hostname in
/etc/hostsif you need local router name resolution. - Boot the Radxa Zero, verify you can SSH from your laptop. If the network shows “Unknown” in your router, fix
/etc/hosts.
Part 2 — Installing Klipper, Moonraker and Mainsail
I used KIAUH to install Klipper, Moonraker and Mainsail. It automates dependencies and gives a nice control panel for builds.
curl -s https://raw.githubusercontent.com/th33xitus/kiauh/master/kiauh.sh | bashMake sure you build Klipper for the STM32F407 MCU with the 48KiB bootloader option and enable USB for communication (menuconfig).
Part 3 — Flashing the MKS Robin Nano V3.1
- Compile Klipper firmware with the Robin Nano board options.
- Copy
out/klipper.binto the SD card and rename toRobin_nano_v3.bin. - Power off the printer, insert the SD, power on — the Robin will flash automatically.
- Remove the SD after flashing and connect the Robin to the Radxa Zero via USB.
Part 4 — Building a correct & minimal printer.cfg
This is the time-consuming part — matching pinouts, enabling TMC UART, defining fans, and ensuring Klipper keys are compatible with the provided build (stock TwoTrees Klipper is strict about accepted keys).
Key lessons learned:
- Do not use keys unsupported by your Klipper build (some vendor images reject keys like
junction_deviation,max_accel_to_decelor per-axis damping ratios). - Define both part cooling fan and hotend heatsink fan in
printer.cfg. Missing the hotend fan causes heat creep and layer shrinkage toward the top of tall prints. - OrcaSlicer sends extruder temp first then bed temp — adapt your start macro to accept Orca’s param order.
Essential printer.cfg fragments I used (examples)
[printer]
kinematics: corexy
max_velocity: 350
max_accel: 3000
max_z_velocity: 50
max_z_accel: 350
square_corner_velocity: 10
[heater_fan hotend_fan]
pin: PB1
heater: extruder
heater_temp: 69
max_power: 1.0
[fan]
pin: PC14
max_power: 1.0
Validate all macros and ensure [gcode_macro] blocks start at column 0 (no leading spaces). Indentation errors lead the parser to treat them as unknown lines.
Part 5 — Motion tuning: input shaping & pressure advance
Input shaping was tuned using Klipper resonance tests. My final starting values were:
shaper_type_x: mzv,shaper_freq_x: 55shaper_type_y: mzv,shaper_freq_y: 50
Pressure advance starting point: pressure_advance: 0.10. Tune in increments of 0.02 while printing single-wall test objects until corners and retractions look clean.
Part 6 — Extruder calibration & volumetric checks
Calibrate extrusion with a 100 mm extrude test. Calculate new rotation_distance or steps/mm using the measured actual length. Verify volumetric limits with your nozzle and layer height.
Part 7 — OrcaSlicer profile & final results
I switched permanently to OrcaSlicer. Key advantages: modern Klipper-friendly gcode, better handling of acceleration/volumetric settings, and faster slicing. With the tuned printer.cfg and Orca profile I achieved:
- Reliable printing up to 350 mm/s top speed (profile-limited where necessary)
- Stable acceleration at 3000 mm/s²
- Clean walls after pressure advance tuning and input shaping
- No top-layer shrinkage once the hotend fan and shaper were correct
Troubleshooting summary
- Move out of range: caused by negative purge/wipe moves in some start G-code — add
position_min: -10to stepper X if you allow small negative moves, or disable the purge move in slicer. - Unknown command / macro parse errors: usually caused by indentation or malformed macro blocks. Macro headers must start on column 0.
- XY shrink/taper: normally heat creep (hotend fan missing), or incorrect motion limits/junction behavior — fix fans, set
square_corner_velocityand tune PA.
Final notes & recommended workflow
- Flash Robin firmware, connect Radxa Zero, install KIAUH and Klipper stack.
- Build a minimal validated
printer.cfgwith fans, TMC UART, and basic motion limits. - Define safe macros for start/end that match OrcaSlicer parameter order.
- Run PID_CALIBRATE for extruder and bed, then do extrusion calibration.
- Run resonance tests and tune input shaper, then tune pressure advance.
- Test with a 20 mm cube and a small Benchy; iterate motion limits slowly until stable.
If you want, I can provide the full annotated printer.cfg I ended up with, an OrcaSlicer profile export, and a downloadable PDF of this guide.
Posted on: 2025-11-15. If you found this guide useful, please share it on CraftConnectSA or PrintLabSA.
