Maker.io main logo

Building a Voron Trident 300 3D Printer: Firmware and Calibration

2024-10-18 | By Ines Plückebaum

License: Attribution 3D Printer 3D Printing

Welcome back to my journey of building a Voron Trident 300. Previously I went over the mechanical ‎and electrical elements of the build in part one of this project. Now, with the printer assembled, it is ‎time to address the firmware.‎

Step 1: OS, Firmware, and Touchscreen

I began by installing Mainsail OS using the Raspberry Pi Imager. During setup, I made sure to enable ‎SSH in the settings and added my WiFi details. Since the Imager was in German—my native language—‎I proceeded with the installation without changing the language setting.‎

fig72_1

Figure 72: Official Voron guide‎

fig73_2

Figure 73: Choosing the right operating system‎

fig74_3

Figure 74: Activate SSH access‎

Following recommendations from the Voron website, I used a reliable microSD card.‎

Using SSH, I accessed the Raspberry Pi and installed Klipperscreen with default settings, achieving ‎immediate success with a responsive touchscreen.‎

fig75_4

Figure 75: SSH access to the Raspberry Pi‎

fig76_5

Figure 76: Klipperscreen website‎

fig77_6

Figure 77: Installing Klipperscreen‎

fig78_7

Figure 78: Still installing Klipperscreen‎

fig79_8

Figure 79: Working touchscreen, still upside down because I need access to the electronics‎

Before compiling the firmware for the Octopus board, I updated all components within Mainsail OS. ‎Once completed, I generated the firmware file directly on the Raspberry Pi.‎

fig80_9

Figure 80: Webinterface of Mainsail OS‎

fig81_10

Figure 81: Update software inside Mainsail OS‎

fig82_11

Figure 82: Updates in progress‎

fig83_12

Figure 83: Do not forget to enable extra low-level configuration options

fig84_13

Figure 84: Setting the firmware correctly‎

I opted to flash the board via USB, powering down the printer and preparing the board for DFU mode ‎using a jumper cable for ease of installation and removal.‎

fig85_14

Figure 85: I marked the spot where the jumper has to be set

fig86_15

Figure 86: Jumper set at the right position‎

After a quick printer reboot, the Octopus board initially didn't appear, prompting me to reset it until it ‎appeared in the list. With the ID now identified, I proceeded to flash the firmware.‎

fig87_16

Figure 87: Driver board shows up on second attempt‎

Despite encountering some error messages, the process completed successfully. I now had the serial ‎ID for the MCU, which I added to the printer.cfg file.‎

fig88_17

Figure 88: Flashing the firmware‎

fig89_18

Figure 89: Checking if firmware has been flashed correctly and having the device ID on hand for the configuration‎

‎Step 2: Printer.cfg

Next, I downloaded the corresponding printer.cfg file and uploaded it to my printer via the browser. ‎This raw configuration file required thorough customization.‎

fig90_19

Figure 90: Where to get the printer.cfg‎

fig91_20

Figure 91: Uploaded printer.cfg‎

The critical tasks included integrating the OS configuration and the MCU serial number. I carefully ‎assigned all sensors to their respective pins, ensuring correct placement for the hot end, heat bed, and ‎chamber thermistors. Additionally, I configured the build volume and specified the stepper driver ‎types.‎

fig92_21

Figure 92: List of checkpoints inside the printer.cfg and where to set the device ID for the driver board.‎

fig93_22

Figure 93: Added device ID‎

The initial checklist provided in the printer.cfg file served as a valuable guide. Although it seemed ‎straightforward initially, systematically reviewing and adjusting each configuration detail took longer ‎than anticipated.‎

Step 3: First Movements and Z-Endstop

With the printer.cfg configured, I eagerly initiated the motors for the first time. The buzz test ‎proceeded flawlessly, and I successfully homed the X and Y axes. Next, I calibrated the Z-endstop ‎coordinates for safe homing.‎

fig94_23

Figure 94: Official Voron documentation website‎

fig95_24

Figure 95: Finding the Z-endstop position

fig96_25

Figure 96: Nozzle pointing on Z-Endstop

However, I encountered challenges when testing the Z-probe—no matter what I attempted, it failed ‎to trigger. This prompted me to disassemble the tool head once again. I’m getting a lot of practice ‎there…‎

fig97_26

Figure 97: Omron probe signal stays open‎

I meticulously checked the wiring from the tool head to the driver board and verified all connections. ‎Despite testing with a new probe, I encountered the same issue. Both probes indicated proper ‎functionality, including the trigger LED. Shortening the ground and signal pin on the tool head PCB ‎confirmed that it responded correctly to open and triggered states.‎

The issue seemed to arise specifically when connecting the 24V supply to the probe. My next step will ‎involve testing the tap mod electronics to see if I encounter the same error. If not, I plan to replace the ‎Omron probe with the tap mod. Alternatively, if the issue persists, I will install the Klicky probe since it ‎operates solely as a switch, and this appears to be functional.‎ ‎

Step 4: Probe Replacement and New Configuration

Today, I began by reworking three jumper wires, crimping a 3-position JST PH female connector to ‎create a test setup. Using the CNC version of the Voron Tap mod, I successfully tested the probe with ‎the query_probe command, which brought me a great deal of satisfaction.‎

fig98_27

Figure 98: Self-made adapter with CNC Tap modification

I then swapped the connector from JST XH to JST PH and proceeded to disassemble both the Tool ‎head and X carrier. After attaching the belts and mounting the probe to the linear rail, I realized I had ‎left out the button head screw at the lower right corner, reserved for later mounting of the X endstop ‎arm.‎

fig99_28

Figure 99: Changed connector of the Tap modification‎

fig100_29

Figure 100: Mounted Tap modification‎

Upon assembling the parts, I promptly noted my oversight and disassembled the tool head once more ‎to add the X endstop arm I had printed in the meantime.‎

fig101_30

Figure 101: Tool Head assembled again

fig102_31

Figure 102: X-endstop arm

With the X and Y endstop positions adjusted, and no longer needing the physical Z endstop, I ‎incorporated the Tap configuration into the printer.cfg file. Homing the printer proved seamless, ‎allowing me to verify the probe's accuracy. I'm pleased to report a standard deviation of 0.000415mm, ‎indicating everything was functioning well.‎

fig103_32

Figure 103: Printer turned on again‎

Finally, I conducted PID tuning for both the heat bed and hot end, concluding the day's work on a ‎productive note.‎

fig_104_33

Figure 104: PID tuning complete and stored in the printer.cfg‎

Step 5: E-Steps, Z-Offset, and Bed Mesh Calibration

Today I pre-heated the nozzle to printing temperature for PLA and loaded some leftover filament. I let ‎the extruder motor run for a bit to check if it’s going in the right direction. It worked right away, so I ‎could start the E-step calibration.‎

fig105_34

Figure 105: Nozzle heating up to 195°C‎

I measured 120mm from the tool head and marked it with a piece of tape. Now I let the extruder run ‎for 100mm. Then I checked the remaining length from the tool head to the tape. I had 20.62mm left ‎which told me the printer is slightly under extruding.‎

fig106_35

Figure 106: Setup for E-step calibration

fig107_36

Figure 107: remaining filament length‎

The formula for calculating the E-steps is inside the printer.cfg which made the adjustment very easy.‎

fig_108_37

Figure 108: Calculation‎

fig109_38

Figure 109: Changing the value of the rotation distance in the printer.cfg‎

I changed the extruder value according to my calculation and ran another test, which was spot on. I cleaned the nozzle and let the bed heat soak at 100°C for 15 minutes and run a Z calibration. ‎Fortunately, Mainsail OS brings a Z-offset option built-in which I used. And with one click at the save ‎button, all settings were saved inside the printer.cfg.‎

fig110_39

Figure 110: Z-offset calibration

Now the basics are set I could start printing theoretically. However, I wanted to integrate bed mesh ‎leveling and input shaping prior to my first print.‎

fig111_40

Figure 111: Official Voron documentation website‎

fig112_41

Figure 112: official GitHub website regarding resonance compensation also known as input shaping‎

I created a new file for all user macros and put the bed mesh configuration and a load and unload ‎macro for the filament which I like to have for changing the filament.‎

fig113_42

Figure 113: Creating the macros.cfg

fig114_43

Figure 114: adding bed_mesh and load/unload macro

So, I included the macros.cfg to the printer.cfg and added the command BED_MESH_CALIBRATE ‎BED_MESH_PROFILE Load=default to the PRINT_START macro. Now it will probe the bed for every ‎print to adjust the bed height while printing.‎

fig115_44

Figure 115: Adding bed mesh leveling to PRINT_START macro

To check if everything works correctly, I run a BED_MESH_CALIBRATE. Now I had a nice height map, ‎which wasn’t correct yet. The printer hadn’t run a Z-tilt before, and the bed was still at room ‎temperature.‎

fig116_45

Figure 116: Testing bed mesh macros‎

fig117_46

Figure 117: Bed mesh diagram at room temperature‎

The bed was heated up to 100°C and a Z-tilt was made before I ran the BED_MESH_CALIBRATE again.‎

fig118_47

Figure 118: Pre-heat bed and run Z-Tilt before probing the heat bed again

fig119_48

Figure 119: Bed mesh diagram at 100°C bed temperature‎

I saved this heightmap as default for later reference.‎

Step 6: Input-shaping and the First Print

Today marks the final calibration step before launching my first print on this machine. First, I ‎configured the Raspberry Pi MCU for Klipper and enabled SPI. In a previous step (Step 9), I had already ‎attached an ADXL345 evaluation board to the tool head, which uses SPI. Wiring was straightforward ‎thanks to the GPIO breakout board for power and SPI connections. I utilized an FFC cable for its ‎lightweight nature, minimizing resonance impact.‎

fig120_49

Figure 120: Adding FFC cable to the Raspberry Pi‎

fig121_50

Figure 121: DigiKey logo glued to backplate of the printer‎

fig122_51

Figure 122: FFC cable connected to the sensor‎

Next, I installed all acrylic panels and the Bowden tube, considering their potential influence on printer ‎resonance. To integrate the Raspberry Pi's MCU, I followed the guide on klipper3d.org and added both ‎the MCU and ADXL345 sensor to printer.cfg. Unfortunately, I encountered a familiar issue with my ‎previous Voron 2.4 printer—Klipper could not detect the "rpi mcu", resulting in an error.‎

digi_52

fig123_53

Figure 123: All panels assembled‎

fig124_54

Figure 124: Installing softer to read the sensor‎

fig125_55

Figure 125: Changing the Raspberry Pi config‎

fig126_56

Figure 126: Adding the Raspberry Pi MCU to the printer.cfg‎

fig127_57

Figure 127: Adding the sensor to the printer.cfg‎

Referencing a helpful Reddit post here, I followed mozebyc’s recommendations outlined in the ‎comments. This resolved the issue, and the "mcu rpi" appeared in the Machine tab of Mainsail OS. ‎Confirming functionality with the ACCELEROMETER_QUERY command, I received values from the ‎accelerometer.‎

fig128_58

Figure 128: Testing the sensor‎

fig129_59

Figure 129: The new MCU is visible in the Machine tab.‎

Following the instructions on klipper3d.org once more, I conducted resonance tests on the X and Y ‎axes, smoothly integrating the tuning results into printer.cfg. After shutting down the printer and ‎disconnecting the accelerometer cable, I proceeded to add the printer to my slicer.‎

fig130_60

Figure 130: Resonance testing‎

fig131_61

Figure 131: Adding the test results to the printer.cfg

Using Prusa Slicer, my preferred choice due to familiarity and reliable stock profiles, I added the printer ‎as "V1" since the Voron Trident and V1 share similar settings. Customizing the Trident profile due to ‎prior tap modifications, I adjusted G-Code commands in the slicer settings. Then I selected the iconic ‎‎3DBenchy for its thorough evaluation of the printer’s quality. I sliced the file, uploaded it to the printer, ‎and eagerly observed the Trident completing its first print job.‎

fig132_62

Figure 132: Adding the printer to the slicer software‎

fig133_63

Figure 133: Custom G-Code for Tap modification

fig134_64

Figure 134: Sliced Benchy‎

The Benchy turned out impressively well, with minor cooling adjustments needed for perfection. With ‎this milestone reached, I plan to request a serial number from the Voron Community. Looking ahead, ‎my next project involves integrating the ERCF V2 with the Trident, so stay tuned for updates! 😊

fig135_65

Figure 135: It's printing‎

fig136_66

Figure 136: First Benchy from my Trident

TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum