Voron Trident Initial Startup
Manta M8P V2.0 + EBB SB2209 RP2040 (CAN), Klipper + Mainsail

Follows the Voron Initial Startup guide (V1/Trident). Run commands in the Mainsail console. Tick boxes as you go (they reset on reload).

1. Pre-power checks

2. First boot & MCUs

ip -s link show can0
python3 ~/katapult/scripts/flashtool.py -i can0 -q   # with klipper stopped
ls /dev/serial/by-id/

The Manta is a USB-to-CAN bridge, so both MCUs use canbus_uuid:

[mcu]
canbus_uuid: <manta_uuid>

[mcu EBBCan]
canbus_uuid: <ebb_uuid>

printer.cfg pins: Manta M8P V2.0 (from BTT's V2.0 config)

DriverstepdirenableendstopTypical Trident use
M1PE6PE5!PC14PF4stepper_x (A)
M2PE2PE1!PE4PF3stepper_y (B)
M3PB8PB7!PE0PF2stepper_z
M4PB4PB3!PB6PF1stepper_z1
M5PG13PG12!PG15stepper_z2
M6–M8PG9/PD7/!PG11 · PD4/PD3/!PD6 · PC7/PC8/!PD2spare

Assign drivers to match your wiring: Voron's convention is stepper_x = A (back left), stepper_y = B (back right). Extruder is on the EBB: step_pin: EBBCan:gpio18, dir_pin: EBBCan:gpio19, enable_pin: !EBBCan:gpio17.

3. Thermistors & temps

If the wrong sensor rises, thermistor or heater connections are swapped.

4. Heater PID tuning

PID_CALIBRATE HEATER=extruder TARGET=245
PID_CALIBRATE HEATER=heater_bed TARGET=100
SAVE_CONFIG

5. Fans

SET_FAN_SPEED FAN=<fan_name> SPEED=0.5
M106 S255   ; part cooling fan
M107        ; off

6. Endstops

QUERY_ENDSTOPS

All should read open. Press each switch by hand and re-run: that one should read TRIGGERED. Invert with ! or pull-up with ^ on endstop_pin if needed.

QUERY_PROBE

7. Steppers: STEPPER_BUZZ

Each motor moves +1 mm and back, 10 times. Trident expectations (Voron docs):

CommandExpected
STEPPER_BUZZ STEPPER=stepper_xBack-left (A) motor rotates clockwise first, then back
STEPPER_BUZZ STEPPER=stepper_yBack-right (B) motor rotates clockwise first, then back
STEPPER_BUZZ STEPPER=stepper_zFront-left of the bed moves down, then up
STEPPER_BUZZ STEPPER=stepper_z1Back of the bed moves down, then up
STEPPER_BUZZ STEPPER=stepper_z2Front-right of the bed moves down, then up
STEPPER_BUZZ STEPPER=extruderExtruder moves (heat to 170 °C+ or set min_extrude_temp)

Backwards? Invert the direction pin: dir_pin: PE5 → dir_pin: !PE5 (remove the ! if already there). Wrong motor moves? Fix the cable or driver assignment.

8. CoreXY direction check (A/B)

⚠ Hand on the e-stop. Keep M112 typed in the console or use Mainsail's emergency stop; or be ready to cut power.

Run G28 X: bed drops slightly, toolhead should go right. If it goes anywhere else, e-stop, note the direction, FIRMWARE_RESTART, then test G28 Y: toolhead should go to the back.

G28 X movesG28 Y movesFix
Right ✅Back ✅Nothing, correct
LeftFrontInvert both stepper_x and stepper_y dir_pin
FrontLeftInvert stepper_x (A) dir_pin
BackRightInvert stepper_y (B) dir_pin
RightFrontSwap the A and B motor connectors (or swap pins between [stepper_x]/[stepper_y]), then re-test and use the rows above
LeftBack
BackLeft
FrontRight

9. Homing

G28 X
G28 Y
G28 Z

Emergency stop tips: M112 halts instantly (then FIRMWARE_RESTART). If Z doesn't stop, kill power. Test the probe triggers (QUERY_PROBE) before the first G28 Z.

10. Probe, Z offset & Z_TILT_ADJUST

G28
PROBE_ACCURACY

Range should be well under ~0.0125 mm (standard deviation tiny). Then set Z offset:

G28
PROBE_CALIBRATE        ; probe used as Z endstop (paper test, TESTZ Z=-0.1, ACCEPT)
# or, with a physical Z endstop:
Z_ENDSTOP_CALIBRATE
SAVE_CONFIG

Level the bed with the Trident's 3 independent Z motors:

G28
Z_TILT_ADJUST
G28 Z

11. Bed mesh

G28
Z_TILT_ADJUST
BED_MESH_CALIBRATE
SAVE_CONFIG

Check the mesh in Mainsail's Heightmap. Load it in the start macro with BED_MESH_PROFILE LOAD=default or mesh each print.

12. Extruder rotation_distance

  1. Heat to printing temp; mark filament 120 mm above the extruder entry.
  2. M83
    G1 E100 F60
  3. Measure what's left to the mark: actual = 120 − remaining.
  4. new = old_rotation_distance × actual / 100, update [extruder] rotation_distance, RESTART, and repeat until within ~1 mm.

13. Input shaper & pressure advance

The EBB SB2209 RP2040's onboard accelerometer is configured as [adxl345] in BTT's sample config:

[adxl345]
cs_pin: EBBCan:gpio1
spi_software_sclk_pin: EBBCan:gpio2
spi_software_mosi_pin: EBBCan:gpio0
spi_software_miso_pin: EBBCan:gpio3
axes_map: z,-y,x

[resonance_tester]
accel_chip: adxl345
probe_points: 150, 150, 20   # bed center for a 300 mm Trident
sudo apt install python3-numpy python3-matplotlib libatlas-base-dev libopenblas-dev
~/klippy-env/bin/pip install -v numpy
ACCELEROMETER_QUERY
G28
SHAPER_CALIBRATE
SAVE_CONFIG

Graphs (optional): ~/klipper/scripts/calibrate_shaper.py /tmp/calibration_data_x_*.csv -o /tmp/shaper_x.png

Pressure advance: print a PA tower/pattern (e.g. Ellis' or the Klipper tuning tower), then set [extruder] pressure_advance (typical 0.02–0.06 direct drive).

SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=1 ACCEL=500
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005

14. First print & slicer start macro

[gcode_macro PRINT_START]
gcode:
    {% set BED = params.BED|default(100)|float %}
    {% set EXTRUDER = params.EXTRUDER|default(245)|float %}
    M190 S{BED}
    G28
    Z_TILT_ADJUST
    G28 Z
    BED_MESH_CALIBRATE
    M109 S{EXTRUDER}
    G90

[gcode_macro PRINT_END]
gcode:
    M400
    G92 E0
    G1 E-5 F1800
    TURN_OFF_HEATERS
    G91
    G1 Z10 F3000
    G90
    G0 X150 Y290 F6000
    M107
    M84

Slicer start G-code (OrcaSlicer/PrusaSlicer/SuperSlicer):

PRINT_START BED=[first_layer_bed_temperature] EXTRUDER=[first_layer_temperature]

End G-code: PRINT_END