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.
Figure 72: Official Voron guide
Figure 73: Choosing the right operating system
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.
Figure 75: SSH access to the Raspberry Pi
Figure 76: Klipperscreen website
Figure 77: Installing Klipperscreen
Figure 78: Still installing Klipperscreen
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.
Figure 80: Webinterface of Mainsail OS
Figure 81: Update software inside Mainsail OS
Figure 82: Updates in progress
Figure 83: Do not forget to enable extra low-level configuration options
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.
Figure 85: I marked the spot where the jumper has to be set
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.
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.
Figure 88: Flashing the firmware
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.
Figure 90: Where to get the printer.cfg
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.
Figure 92: List of checkpoints inside the printer.cfg and where to set the device ID for the driver board.
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.
Figure 94: Official Voron documentation website
Figure 95: Finding the Z-endstop position
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…
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.
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.
Figure 99: Changed connector of the Tap modification
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.
Figure 101: Tool Head assembled again
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.
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.
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.
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.
Figure 106: Setup for E-step calibration
Figure 107: remaining filament length
The formula for calculating the E-steps is inside the printer.cfg which made the adjustment very easy.
Figure 108: Calculation
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.
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.
Figure 111: Official Voron documentation website
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.
Figure 113: Creating the macros.cfg
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.
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.
Figure 116: Testing bed mesh macros
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.
Figure 118: Pre-heat bed and run Z-Tilt before probing the heat bed again
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.
Figure 120: Adding FFC cable to the Raspberry Pi
Figure 121: DigiKey logo glued to backplate of the printer
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.
Figure 123: All panels assembled
Figure 124: Installing softer to read the sensor
Figure 125: Changing the Raspberry Pi config
Figure 126: Adding the Raspberry Pi MCU to the printer.cfg
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.
Figure 128: Testing the sensor
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.
Figure 130: Resonance testing
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.
Figure 132: Adding the printer to the slicer software
Figure 133: Custom G-Code for Tap modification
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! 😊
Figure 135: It's printing
Figure 136: First Benchy from my Trident
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.
Visit TechForum