Voron Klipper Expander and Secondary MCU Guide
Electronics Klipper Guide
Modern Voron builds rarely use a single microcontroller. Between CANBus toolhead boards, chamber controllers, RGB LED drivers, and sensor expansion boards, most Vorons run 2-5 MCUs simultaneously. This guide covers the most popular expander and secondary MCU options for Voron printers: EBB CAN toolhead boards, the Pi's built-in GPIO expander, USB-to-CAN adapters, sensor breakouts, and how to configure them all in Klipper. Last updated: May 2025.
Why Secondary MCUs?
There are several compelling reasons to add secondary MCUs to your Voron:
- CANBus reduces toolhead wiring: Instead of running 10+ wires through the cable chain, run just 4 wires (24V, GND, CAN_H, CAN_L) to a toolhead board that handles all toolhead I/O locally.
- Additional sensors: Add a BME280 for chamber temperature/humidity monitoring, a MAX31865 for PT100 thermocouple reading, or a filament sensor.
- Chamber heater control: A dedicated MCU can run a PID loop for a chamber heater, keeping the enclosure at 50-65C for ABS/PC/Nylon printing.
- Enclosure fan control: Dedicated control for exhaust fans, Nevermore carbon filter fans, and intake fans — all independent of the toolhead.
- Nevermore control: Run a Nevermore activated carbon filter with timed or temperature-triggered cycles.
- RGB lighting: Dedicated MCU for Neopixel or WS2812 LED control without burdening the mainboard.
EBB CAN Toolhead Boards
EBB (EBB = ErCan Bridge Board) toolhead boards are the most popular secondary MCU for Voron printers. They mount directly on the toolhead and handle all local I/O.
EBB36 (CAN v1.1)
- MCU: STM32G0B1 (Cortex-M0+, 64MHz)
- Stepper drivers: Up to 5 (TMC2209 or similar, typically 1 extruder + 4 optional)
- CAN: Integrated CAN transceiver, CAN v1.1 spec
- Inputs: 2 thermistor inputs, 2 fan headers (4-pin), 1 probe input (3-pin), 2 endstop inputs
- Outputs: Neopixel/WS2812 header, servo/6-pin expansion header
- Dimensions: 36x36mm — fits standard Voron toolhead mounting pattern
- Best for: V2.4, Trident, Switchwire with standard SB toolhead
EBB42 (CAN v1.1)
- MCU: STM32G0B1 (same as EBB36)
- Stepper drivers: Up to 5
- CAN: Integrated CAN transceiver
- Inputs: 3 thermistor inputs, 3 fan headers, 2 probe inputs, 3 endstop inputs
- Outputs: Neopixel header, RGB header, 2 expansion ports
- Dimensions: 42x42mm — slightly larger than EBB36
- Best for: V0.2 (more space available on mini Stealthburner), builds needing extra I/O
SB2040 (Stealthburner CAN board)
- MCU: RP2040 (Dual-core Cortex-M0+, 133MHz)
- Stepper drivers: 1 (extruder only, designed for Stealthburner)
- CAN: Integrated CAN transceiver (SN65HVD230)
- Inputs: 1 thermistor, 1 fan header, 1 probe/endstop combo
- Design: Custom PCB that bolts directly onto the Stealthburner carriage
- Best for: Clean Stealthburner builds with minimal wiring
USB-to-CAN Adapters
To connect your CAN toolhead board to the Raspberry Pi (or other SBC), you need a USB-to-CAN adapter. These boards translate USB to CAN bus protocol.
BTT U2C (v1.0 / v2.0)
- The most popular USB-to-CAN adapter for Voron builds
- v2.0 updates: improved power handling, beefier USB-C connector, better termination resistor management
- Integrated 120 ohm termination resistor (selectable via jumper)
- 12-24V input, 5V regulator for CAN transceiver
- Status LEDs for CAN communication and power
- Comes with a case and mounting bracket
Fysetc UCAN
- Alternative to BTT U2C, identical functionality
- STM32-based CAN adapter
- Integrated termination resistor
- Reports as a USB-CAN adapter on the Pi
- Often cheaper than U2C, same performance
CANBus Wiring
Proper CANBus wiring is critical for reliable communication. Here are the essential rules:
Wiring Basics
- CAN_H and CAN_L: These are the two data wires. They must be a twisted pair to reject electromagnetic interference.
- Power: 24V and GND. 24V powers the toolhead board. The CAN transceiver uses 5V, typically regulated on-board.
- Cable: CAT5e or CAT6 Ethernet cable works perfectly. Use one twisted pair for CAN_H/CAN_L, another pair for 24V/GND. The remaining pairs can be spares.
Termination Resistors
CANBus requires a 120 ohm termination resistor at each end of the bus. In a typical Voron setup:
- End 1: U2C adapter has a built-in 120 ohm resistor (enable it via jumper)
- End 2: EBB board has a built-in 120 ohm resistor (enable it via jumper)
- No other resistors should be on the bus
Without proper termination, you'll get intermittent communication errors, retransmissions, and print failures. Check with a multimeter between CAN_H and CAN_L at the bus ends — you should read approximately 60 ohms (two 120 ohm resistors in parallel).
Klipper Config for Multiple MCUs
Klipper natively supports multiple MCUs. Each MCU gets its own section in printer.cfg:
Main MCU (controller board)
[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_12345-if00
restart_method: command
Secondary CAN MCU (toolhead board)
[mcu canbus_uuid]
canbus_uuid: 123abc456def
canbus_interface: can0
To find your toolhead board's UUID, use:
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
This returns a list of all CAN devices on the bus. The UUID is a hexadecimal string like 123abc456def.
Flashing CANBoot / Katapult on Secondary MCU
Katapult (formerly CANBoot) is a bootloader that enables firmware updates over CANBus — no USB cable needed once installed. Here's how to set it up:
Step 1: Build Katapult
cd ~/Katapult
make menuconfig
- Select your MCU (e.g., STM32G0B1 for EBB36/42, RP2040 for SB2040)
- Set CAN bus interface
- Set clock reference (e.g., 8MHz crystal for STM32G0)
make clean
make
Step 2: Flash Katapult via USB/ST-Link
make flash FLASH_DEVICE=/dev/serial/by-id/usb-Katapult_...
Step 3: Flash Klipper over CAN
python3 ~/klipper/scripts/flash_can.py -i can0 -f ~/klipper/out/klipper.bin -u 123abc456def
Once Katapult is installed, all future firmware updates can be done over CAN without touching the hardware.
Sensor Boards
MAX31865 for PT100
The MAX31865 is a PT100/PT1000 RTD-to-digital converter. It reads a resistance temperature detector (PT100) and communicates over SPI. Use it when your hotend has a PT100 thermocouple that the mainboard can't read directly. Wire it to spare pins on your secondary MCU and add this to Klipper:
[thermistor pt100]
sensor_type: MAX31865
sensor_pin: mcu:spi_cs0
spi_speed: 4000000
BME280 for Chamber Temp/Humidity
The BME280 is a temperature, humidity, and barometric pressure sensor. It connects over I2C. Mount it inside your Voron enclosure to monitor chamber conditions. Klipper config:
[temperature_sensor chamber]
sensor_type: BME280
i2c_address: 118
i2c_mcu: mcu
The BME280 appears in Mainsail/Fluidd as a chamber temperature reading alongside your other temperatures.
Daisy-Chaining EBB Boards
You can connect multiple CAN boards on the same bus. Each board has a unique UUID and Klipper communicates with each independently. A typical chain:
[Pi USB] → [U2C CAN adapter] → [EBB36 toolhead] → [EBB42 chamber controller]
Each board needs its own [mcu canbus_uuid] section in printer.cfg with its unique UUID. The termination resistor should only be enabled on the first and last devices on the bus.
Troubleshooting CAN Communication
| Symptom | Likely Cause | Fix |
|---|---|---|
| "No CAN devices found" | CAN interface not up, or no termination | Run ip link set can0 up type can bitrate 500000. Check termination resistors with multimeter. |
| Intermittent disconnects | Bad wiring, loose connector, or missing termination | Verify CAN_H/CAN_L are twisted pair. Check all crimps. Measure 60 ohms between CAN_H and CAN_L. |
| "MCU 'canbus_uuid' shutdown" | Power issue or communication timeout | Check 24V supply to toolhead. Add a capacitor near the EBB board if voltage dips during acceleration. |
| USB-CAN adapter not detected | Missing udev rules or kernel module | Run sudo modprobe gs_usb. Verify with lsusb and dmesg | grep can. |
| High bus error rate | CAN bus speed mismatch or noise | Verify all devices use 500kbps. Shorten cable runs. Use shielded twisted pair. |
CANBus may seem intimidating at first, but once it's working, it's rock-solid. The reduced wiring complexity is transformative for Voron builds — especially on toolheads where every gram of wire drag matters for print quality at high speeds.