This repository contains files related to my Voron 3D printer build. This includes Klipper configurations, macros, and a range of helpful scripts and setup steps.
The easiest way to setup this configuration is using the moonraker.conf file to install and manage updates.
[update_manager voron-config]
type: git_repo
path: ~/voron-config
origin: https://github.com/SierraSoftworks/voron-config.git
primary_branch: main
managed_services: klipper
Once this is done, you'll end up with a voron-config directory in your printer root, from which you can then symlink
to the printer_data/config directory. This should ensure that you consistently have the most recent config available
for your printer.
git clone https://github.com/SierraSoftworks/voron-config /printing/voron-config
/printing/voron-config/scripts/install.shThis configuration assumes that your build reflects my own, including the following:
- Voron 2.4 R2 (350mm)
- Raspberry Pi 5 (4GB RAM)
- BigTreeTech TFT50 v2.1 running KlipperScreen
- BigTreeTech U2C v2.1
- BigTreeTech Octopus v1.1
- BigTreeTech EBB36 v1.2
- BigTreeTech Smart Filament Sensor v2.0
- TMC5160T drivers for A/B steppers (LDO 42STH48-2504AH SpeedyPower HT) at 1.4A
- PT1000 (2 wire) hotend thermistor
- Cartographer
- Galileo 2
- Nevermore Micro v6
- Klipper + Mainsail installed under
/printing. - Tailscale for secure remote access.
-
Powering the EBB36 using the bed heater port on the Octopus, allowing us to use the Octopus' built in relay to disable power remotely in an emergency.
NOTE: This requires that you compile the Octopus firmware with the
PB11GPIO pin configured to be on at controller startup. If you do not do this, Klipper will fail to start (waiting on the EBB36 to start) and will not enable the pin. Careful that you don't connect a heater there, as it will be on at all times! -
Using MOTOR_0 for the A stepper and MOTOR_1 for the B stepper to make the arrangement easier for me to remember logically.
-
Configuring the EBB2240 firmware to enable the
PA0GPIO pin at startup (FAN1/heater fan) so that restarts don't run the risk of overheating the hotend. -
FILTER (bed fans) connected to FAN5 on the Octopus.
-
Smart Filament Sensor connected to the
DIAG_7(motion) andDIAG_3(presence) ports on the Octopus. -
Chamber thermistor attached to
T0on the Octopus (replacing the original hotend thermistor port). -
LED chamber lighting connected to HE2 on the Octopus (24V supply at ~7-8W peak).
Running Raspbian 12 (Bookworm) on a Raspberry Pi 5 (4GB RAM) with a 32GB SD card. There are a range of changes made to the way that this is installed relative to the "default" configuration.
- Using Tailscale for remote access to the printer.
- Have a dedicated
printinguser for all printing related tasks, home directory at/printing. - Have a dedicated
printinggroup for all printing related tasks, management users are members of this group. - Installed Moonraker, Klipper, and Mainsail using Kiauh.
- Using Caddy 2.0 as a reverse proxy for Mainsail, with Tailscale issued certs.
- Using Tailservice to expose Spoolman on Tailnet.
- Configuring the
can0network interface to run at 1Mbit/s with a 1k TX queue length. - Manually installed and configured
ustreamersince Crowsnest doesn't (yet) support the RPi 5. - Installed and configured OpenTelemetry Collector to send realtime metrics and logs to Grafana.
To setup the Klipper firmware, you'll need to compile it for each of the boards in your system.
You do this by running make menuconfig and then selecting the following options (once saved,
you can run make to compile the firmware which will be placed in out/klipper.bin).
- Enable extra low-level configuration options
- Micro-processor architecture:
STM32 - Processor model:
STM32F446 - Bootloader offset:
32KiB - Clock Reference:
12 MHz crystal - Communication interface:
USB on PA11/PA12 - GPIO pins to set at micro-controller startup:
PB11for EBB2240 orPA1for EBB36.⚠️ PA1is the bed heater pins⚠️
Once the firmware is built, place it on the SD card with the filename firmware.bin and insert it into the Octopus.
A power cycle should then cause the Octopus to flash the firmware and reboot, at which point the firmware file will be
renamed to firmware.cur.
Alternatively, you can use make flash to flash the firmware directly to the board without using an SD card.
systemctl stop klipper
make flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32f446xx_380018000751313133353932-if00
systemctl start klipper- Enable extra low-level configuration options
- Micro-processor architecture:
STM32 - Processor model:
STM32G0B1 - Bootloader offset:
8KiB - Clock Reference:
8 MHz crystal - Communication interface:
CAN bus on PB0/PB1 - CAN bus speed:
1 Mbit/s(1000000) - GPIO pins to set at micro-controller startup:
PA0
Once the firmware is built, flash it using the CANboot tooling by running the following command:
cd /printing/canboot/scripts
python3 flash_can.py -i can0 -q # Get the CAN ID of the EBB2240
# Once you have the ID, run the following command to flash the firmware (with the ID replaced if needed)
python3 ./flash_can.py -i can0 -f /printing/klipper/out/klipper.bin -u 9cf9505f7c7c- Enable extra low-level configuration options
- Micro-processor architecture:
STM32 - Processor model:
STM32G0B1 - Bootloader offset:
8KiB - Clock Reference:
8 MHz crystal - Communication interface:
CAN bus on PB0/PB1 - CAN bus speed:
1 Mbit/s(1000000) - GPIO pins to set at micro-controller startup:
PA0
Once the firmware is built, flash it using the CANboot tooling by running the following command:
cd /printing/canboot/scripts
python3 flash_can.py -i can0 -q # Get the CAN ID of the EBB36
# Once you have the ID, run the following command to flash the firmware (with the ID replaced if needed)
python3 ./flash_can.py -i can0 -f /printing/klipper/out/klipper.bin -u a057f0d6cdddMy Klipper configuration draws on a number of sources and integrates these into
a series of [include] statements, using a _index.cfg file to manage includes
within a number of subdirectories.
controllerscontains configuration files for the various control boards in the system.displayscontains configuration files for the various displays/indicators in the system.effectorscontains configuration files for things that influence the environment (heaters, fans, motors etc).featurescontains configuration files for various Klipper features used by the system.macroscontains various custom macros used by the system.config.cfgcontains the_ConfigurationSoverrides used to configure the system's behaviour.printer.cfgcontains the[include]statements for the aforementioned configs, as well as auto-generated overrides.
BED_FANS SPEED=[0..1]turns on the bed fans at the requested speed (and resets any shutdown delay).BED_FANS_OFF_AFTER SECONDS=900turns off the bed fans after the requested number of seconds (using delayed gcode).
Once you've configured your printer, you'll need to tune the PID values for your hotend and bed. You can do this using the following commands:
G28 # Home the printer
G0 X175 Y175 # Move to the center of the bed
G0 Z10 # Move the nozzle to 10mm above the bed
# Tune the bed PID at 110C
PID_CALIBRATE HEATER=heater_bed TARGET=110
# Tune the hotend PID at 250C (make sure you have an appropriate filament loaded, like ABS/ASA)
PID_CALIBRATE HEATER=extruder TARGET=250
Ensure that the probe has been correctly calibrated and the corresponding z_offset has been set in the Klipper config. You can do this using the following commands:
G28 # Home the printer
G0 X175 Y175 # Move to the center of the bed
PROBE_CALIBRATE # Run the probe calibration routine
SAVE_CONFIG # Save the new z_offset value
Once you've configured