Rebuilding an Ender 5 Plus: Manta M8P, HDMI touchscreen, and direct drive
TODO: Draft written from the build outline. Yellow boxes like this one mark spots for your own numbers, photos and stories. Delete each box once it's filled in.
The Creality Ender 5 Plus has a lot going for it: a rigid cube frame, a 350 × 350 × 400 mm build volume, and dual Z motors. The electronics, however, held it back. It shipped with a stock Creality board running Marlin, a small proprietary touchscreen, and a long Bowden tube between the extruder and the hotend. This project replaced all three.
##Goals
- Quieter, more capable motion: modern TMC drivers and a faster controller.
- Klipper firmware: configuration in a text file, input shaping, pressure advance, and no recompiling to change a setting.
- A real touchscreen: an HDMI display running KlipperScreen instead of the stock panel.
- Direct drive: better retraction, cleaner flexible filament, and less stringing.
##Parts list
| Part | Role | Notes |
|---|---|---|
| BigTreeTech Manta M8P | Mainboard (MCU) | 8 stepper slots, onboard socket for a compute module. TODO: board revision (v1.x / v2.0) |
| BTT CB1 or Raspberry Pi CM4 | Klipper host | Runs Linux, Klipper, Moonraker, Mainsail and KlipperScreen right on the M8P. TODO: which one |
| TMC2209 stepper drivers ×5 | X, Y, Z, Z1, E | UART mode, so current is set in config instead of with a screwdriver. TODO: confirm driver model and count |
| HDMI touchscreen | Local UI | TODO: model and size (e.g. BTT HDMI5 / HDMI7) |
| Micro Swiss Direct Drive Extruder (Ender 5 Plus) | Extruder | Mounts on the carriage and reuses the stock extruder stepper. |
| Wiring supplies | Connectors | JST-XH crimp kit, ferrules, labels, zip ties. |
##How the pieces fit together
# signal path after the upgrade
browser (Mainsail) ──Wi-Fi/LAN──┐
▼
HDMI touchscreen ◀─HDMI── [ CB1/CM4 : Linux ]
(KlipperScreen) klipper · moonraker
│ internal USB
▼
[ Manta M8P MCU ]
steppers · heaters · thermistors
endstops · BLTouch · fans
In Klipper, the Linux host handles the computation (kinematics, input shaping, motion planning) and streams precisely timed steps to the microcontroller. Because the M8P carries the compute module on the board itself, the whole printer runs from one board and one power supply. No separate Raspberry Pi is needed.
##1 · Document before you disconnect
Before unplugging anything, I photographed every connector on the stock board and labeled each cable with its function (X-MOT, Z-END, BED-TH…). The Ender 5 Plus has a lot of wiring running to the electronics bay, and several connectors look identical.
TODO: Note anything surprising about the stock wiring, such as connectors that didn't match the new board or wires you had to extend.
##2 · Mounting the Manta M8P
The M8P's footprint and hole pattern differ from the stock board's, so it needs an adapter.
TODO: Describe how you mounted it (printed adapter plate, standoffs, a link to the model you used) and how you handled cooling for the drivers and the compute module.
##3 · Wiring
I connected each motor and sensor to the M8P and recorded every port assignment in a table. That table later becomes the pin map in printer.cfg.
| Function | M8P port |
|---|---|
| X stepper | TODO |
| Y stepper | TODO |
| Z / Z1 steppers (dual Z) | TODO |
| Extruder stepper | TODO |
| X / Y endstops | TODO |
| BLTouch (probe + servo) | TODO |
| Hotend heater / thermistor | TODO |
| Bed heater / thermistor | TODO: note whether the bed is switched through an external MOSFET or SSR |
| Part / hotend fans | TODO |
| Filament runout sensor | TODO |
Two things are easy to get wrong here. First, the driver jumpers must be set for UART mode. Second, crimp quality matters: a loose heater or thermistor connection is a fire risk, not just a print defect. Klipper's verify_heater checks help protect against this, but they don't replace a good crimp.
##4 · Installing Klipper
Host (CB1 / CM4)
I flashed BigTreeTech's Linux image to the compute module, connected over SSH, and installed the software stack with KIAUH:
git clone https://github.com/dw-0/kiauh.git
./kiauh/kiauh.sh
# install: Klipper → Moonraker → Mainsail → KlipperScreen
MCU firmware (the M8P itself)
Klipper's firmware for the board's STM32 chip is built with make menuconfig. The processor model, bootloader offset, clock and communication settings depend on the board revision, so I copied them straight from BigTreeTech's Manta M8P documentation.
cd ~/klipper
make menuconfig # settings per BTT docs for your M8P revision
make clean && make
# then flash per BTT's instructions, and find the MCU's serial path:
ls /dev/serial/by-id/
TODO: Paste the menuconfig settings and flashing method you actually used.
##5 · printer.cfg
I started from the generic Manta M8P example in Klipper's config/ folder, which already has the board's pin names, and then added the Ender 5 Plus geometry. Here is a trimmed excerpt, with pins left as placeholders:
[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32..._XXXX-if00
[printer]
kinematics: cartesian
max_velocity: 300 # TODO: your tuned values
max_accel: 3000
max_z_velocity: 10
[stepper_x]
step_pin: PIN_FROM_SAMPLE
rotation_distance: 40 # GT2 belt, 20-tooth pulley
microsteps: 16
position_max: 350 # TODO: measure your real travel
[stepper_z] # + [stepper_z1] for the second Z motor
rotation_distance: 8 # TODO: confirm lead screw pitch
position_max: 400
[tmc2209 stepper_x]
uart_pin: PIN_FROM_SAMPLE
run_current: 0.8 # TODO
[bltouch]
sensor_pin: ^PIN_FROM_SAMPLE
control_pin: PIN_FROM_SAMPLE
x_offset: 0 # TODO: offsets for the Micro Swiss mount
y_offset: 0
[bed_mesh]
mesh_min: 30, 30
mesh_max: 320, 320
probe_count: 7, 7
The full, working config is linked at the end of this post.
TODO: Link your full printer.cfg (e.g. a GitHub repo or a file at
/projects/files/ender5plus-printer.cfg).
##6 · Micro Swiss direct drive
The Micro Swiss kit replaces the frame-mounted extruder and long Bowden tube with a short, direct filament path on the carriage. Moving to direct drive changes three settings:
- rotation_distance: the new drive gears push a different amount of filament per motor revolution, so I recalibrated. Mark the filament 120 mm above the extruder, command 100 mm of extrusion, and measure what's left.
new = old × (actual mm extruded ÷ 100) - Retraction: drops from several millimeters with Bowden to roughly 0.5–1 mm. I tuned it with a retraction tower.
- Pressure advance: much lower than with Bowden. I tuned it with Klipper's tower test (
TUNING_TOWER).
# extruder calibration, with the hotend at printing temp
G91
G1 E100 F60
# measure, update rotation_distance, then FIRMWARE_RESTART
The added weight on the carriage affects ringing, which makes input shaping more important after this upgrade than before.
TODO: Add your final rotation_distance, retraction and pressure_advance values. If you ran input shaper calibration (accelerometer or ringing tower), add those results too.
##7 · HDMI touchscreen + KlipperScreen
The stock touchscreen speaks a proprietary protocol to Marlin, so it can't be reused with Klipper. In its place, the HDMI display plugs into the compute module and runs KlipperScreen, which provides temperatures, a bed mesh view, file selection and macros. Touch input comes in over USB.
TODO: Describe how you mounted the screen (printed bracket? reused the stock location?) and any rotation or calibration settings you needed.
##Results
| Before (stock) | After | |
|---|---|---|
| Firmware | Marlin | Klipper |
| Extruder | Bowden | Micro Swiss direct drive |
| Interface | Stock touchscreen | HDMI + KlipperScreen, Mainsail on the network |
| Benchy print time | TODO | TODO |
| Noise | TODO | TODO |
##Lessons learned
TODO: Three or four honest bullet points: what broke, what took longest, and what you'd do differently. Hiring managers read this section most closely, because it shows how you troubleshoot.
Next up: how this site is self-hosted on a Synology DS920+ (DNS, port forwarding, firewall rules and a Let's Encrypt certificate).