Mercury 1.1
Mercury 1.1 Build:
Main Features:
CoreXY Kinematics
350 mm Build Volume (Ender 5 Plus)
Dragon/Red Lizard High Flow Hotend
CHC Heater Block, Trimetal Heatbreak
ASA Printed Parts
BTT Octopus Pro V1.1 Mainboard
BTT Pi V1.2
2x TMC 5160, 4x TMC 2209 Drivers
Klicky Probe
RatRig Decoupler/MirageC Wobble X
Zero G Mercury 1.1 Official Website and Github
Mercury 1.1 Summary:
In essence, the Mercury 1.1 is an Ender 5 conversion that brings it from a standard Cartesian printer into a CoreXY 3D printer with many additional features. The complete build is up to the user to decide where is a good stopping point. It allows you to build a printer with all the options you could possibly want or just a simple upgrade that should improve general printing quality and speed. It's up to the user to choose all components aside from the kinematics and tune/setup the printer in the way that they want.
Background:
I saw the Mercury 1.1 a few years ago when I came across the video from ModBot. A few years later, I decided that I would embark on the Mercury 1.1 build after having wanted to build a faster and bigger machine while keeping costs down. I chose the Mercury 1.1 build because it was relatively cheap compared to current options on the market today. Although it would be nice to own a Bambu Lab X1 Carbon or Creality K1 Max, the price of these machines alone would be out of my budget for me as a college student. Building the Mercury 1.1 with tax included would be cheaper than the price of either of those machines (excluding filament cost when printing your own parts). Additionally, I wanted to build a printer and not just buy an off the shelf readily made machine. I wanted to learn more about Klipper and have a dedicated, relatively fast machine that I could use as a main printer. I also have the option of just doing the base 1.1 conversion with room for more upgrades and the Hydra bed conversion down the line. With my budget and wanting to build a printer in mind, the Mercury 1.1 was the perfect option for me.
Build Vision:
I decided to go for a black and white theme. I wanted to make a very clean and minimalist machine that would look beautiful and print fast and reliably. Since the Mercury 1.1 doesn't need many printed pieces, I decided to print all of the pieces myself with white Polymaker ASA. The most expensive portion of the build would be sourcing the hardware for the CoreXY kinematics conversion or finding a kit. As such, I went with the Fabreeko kit out of convenience. I calculated the cost for the kit without the Stainless Steel rails and found that it would be cheaper overall for me to just buy the Fabreeko kit with the rails instead of sourcing my own. Later down the line, I plan to upgrade the bed with the Hydra conversion with the WobbleX system from MirageC or a decoupler for better print quality and the elimination of Z banding.
Tensioning Tower
X Gantry Right Carriage
X Gantry Left Carriage
Stepper Motor Tower
ASA Printing Tips:
An enclosure is highly recommended - any draft can cause warping. Preheat Enclosure.
Don't have the enclosure fan on to avoid a draft or temperature gradient inside the enclosure.
Print with a brim to stop the piece from warping. Set Brim separation gap to 0.0 mm. Increase Brim Width to at least 8.
Print Settings: Nozzle Temp: 250 C, Bed Temp 110 C. Fan Speed: 20-30% if printing inside enclosure. 0% if printing with no enclosure.
Print at 60-70% speed to stop the part from pulling up off the build plate.
Wait for the bed to reach 30-35 C after the print has finished to avoid having the piece warp when being removed.
Top View of Parts
Main Components
Right Stepper Tower
Left Idler Tower
EVA Toolhead and Hotend:
After doing some research and looking through various high flow hotends, I decided to give the Red Lizard/Dragon High Flow Hotend. For this particular hotend, I found that the heatsink was the standard Red Lizard heatsink with the CHC Pro High Flow Heater block. Supposedly, this hotend is for the Creality K1 Max and I was curious about its performance so I wanted to give it a shot. The Red Lizard Heat Sink has a trimetal heat break and an annular ceramic heater that can reach 300 C. The hotend has a projected max flow rate of 45 mm3/s
Red Lizard CHC UHF Hotend
Removable Connector
45 mm3/s Max Flowrate
Trimetal Heatbreak
Octopus Board Setup and Wiring:
I found someone who had installed an Octopus board with a stock Ender 5 Plus and used his GitHub guide for reference. This was extremely helpful for me to figure out all the wiring. (<- guide on the left)
I used the general BTT Octopus Pro GitHub repository to find information on how to set up the board. (-> guide on the right)
Voron Wiring with BTT Octopus down below. This was very helpful for wiring as well.
Setting Up/Wiring the Mainboard:
Note: All of the board information can be found above in the BTT GitHub for the Octopus Pro. All of the wiring information can be found above in juldaani's guide.
I removed the jumper to power the Octopus Board with a PSU. (Make sure to reinstall the jumper when flashing firmware)
I removed the jumper to power the BTT Pi V1.2 with a PSU. (Make sure to reinstall the jumper when flashing firmware).
I have the BTT Pi (USB A out) connected to the Octopus Pro (USB C in). Reference image for this connection down below.
For now, I've placed all stepper motor driver jumpers in the 24V position.
I placed TMC5160T stepper motor drivers in Motor0 and Motor1 and TMC2209 stepper motor drivers in Motor 2, Motor 3, and Motor 4 driver slots. For Motor0 and Motor1 I left the jumpers in for SPI mode. For the TMC2209s, I removed all jumpers and placed 1 jumper in for UART mode. (TMC 2209s don't have SPI).
I found this wiring diagram by TeamFDM which pretty much matches mine on a Voron Klicky Probe Forum. For all the auxilliary items, I am using the same setup: X, Y, endstops, probe port, Raspberry Pi port, and Fan ports.
Here is how I wired my board.
Printer Firmware Complete Setup:
Setting up the firmware for everything to run properly is a little bit involved, but not too difficult. Most of the time I spent setting up the firmware was due to convoluted and confusing directions I was getting from watching YouTube videos and browsing through GitHub repositories. Hilariously, I made the mistake of installing Marlin on the Octopus Mainboard before realizing that I never needed to since I would be installing Klipper on it and controlling it with the BTT Pi via Mainsail. To avoid confusion, I'll keep it simple and easy so that anyone, including myself, can reference this section in the future.
Note: References, GitHub repositories, and guides for everything I talk about will be in the section below this one.
BTT Pi Setup:
What you need:
BTT Pi V1.2 + WiFi Antenna
Micro SD card (4Gb minimum, 16Gb recommended)
Following the BTT Pi V1.2 GitHub:
Grab the Klipper OS image from the GitHub page: https://github.com/bigtreetech/BTT-Pi. The BTT Pi V1.2 uses the same OS image as the CB1. Select the image named: CB1_Debian11_Klipper_kernel5.16_20240319.img.xz. You don't want the minimal version.
Using Raspberry Pi Imager or Balena Etcher, install the OS image on a micro SD card. Choose the Debian Klipper kernel you downloaded as the operating system and write it to the SD card.
Once the image has been written, you will find a new partition named BOOT in your File Explorer. Click into the partition and find the system.cfg file. Edit the system.config file with notepad or any other text editor: In the config file, change the WiFi SSID and password and save the file. (Scroll down for info on how to enable the display setting if you have a display at this point)
Insert the SD card into the BTT Pi and connect it to power (make sure the WiFi antenna is attached). The next step is to use PuTTY SSH to access the BTT Pi. To do this, login to your WiFi service provider and find the IP address of the BTT Pi that's connected to your WiFi.
Open PuTTY and SSH into your BTT Pi by typing in its IP address into the "Host Name" box. The BTT Pi terminal should open and you can now interact with the BTT Pi.
After dealing with some issues with the WiFi connectivity, I found that version 2.3.3 (CB1_Debian11_Klipper_kernel5.16_202300712.img.xz) works the best and I didn't perform any updates or upgrades.
Optional: Type in sudo apt-get update and sudo apt-get upgrade to update everything. Do at your own risk because this could mess up your WiFi connectivity. After lots of troubleshooting and many attempts at upgrading, updating and using the latest firmware (V2.3.4), I couldn't get it to work so I swapped back to previous firmware (V2.3.3).
Creating a Klipper.Bin File:
This is the most important step as it sets up the BTT Pi to talk with the MCU on your Mainboard. Your MCU is defined through setting up menuconfig.
What you need:
MCU Processor model, Micro-controller Architecture, Bootloader Offset, Clock Reference
Octopus Pro V1.0/1,1 GitHub: https://github.com/bigtreetech/BIGTREETECH-OCTOPUS-V1.0/blob/master/Firmware/Klipper/generic-bigtreetech-octopus-pro-v1.1.cfg
Klipper.Bin and MCU ID: (Octopus Pro V1.1)
Once the updates have completed, you can move forward with setting up the menuconfig. Run cd klipper -> make menuconfig.
Find the BTT GitHub repository with the Octopus Pro V1.1 Config to find all the settings you need for setting up Klipper: Micro-controller architecture, Processor model, Bootloader offset, and communication interface.
In the make menuconfig (use arrow keys to move through the menu and enter to select) select the parameters for your mainboard.
For my Octopus Pro V1.1 mainboard: enable low-level configuration options, Micro-controller Architecture -> STM32, Processor Model -> STM32H723, Bootloader -> 128KiB, and Clock Reference -> 25 MHz.
Press "q" to quit and "y" to save. Run the command: make. The process is done once you see the line "hex file out/klipper.bin".
Type in the commands: dir -> cd out -> dir and you can confirm that your Klipper.bin file has been created. Do not quit the SSH yet. The terminal is still needed to find the MCU ID.
Octopus Board Setup:
Important: USB A port on the BTT Pi to USB C port on the Octopus Pro. Both boards should be powered externally for an easy installation process. Reference image for BTT and Octopus connection down below.
Firmware Install:
Option 1: SD Card Firmware Install
What you need:
SD Card (formatted in FAT32)
BTT Pi (USB A out) connected to Octopus board (USB C in)
Before beginning the firmware install, make sure that: 1. BTT Pi is powered on and accessible through SSH. 2. Octopus Pro is off. 3. BTT Pi is connected to Octopus.
Use WinSCP and access the BTT Pi through its IP Address. Copy the Klipper.bin file to your computer. Rename the Klipper.bin file to firmware.bin.
Copy the firmware.bin file to your SD card and remove it from your computer. Make sure the Octopus Board is off before you insert the SD Card.
Turn the Octopus on. After a few seconds, the firmware should be flashed.
Keeping both the Octopus and BTT Pi on, in the SSH BTT Pi terminal type in the commands: cd klipper -> ls /dev/serial/by-id/*. Your MCU ID should be displayed.
My Octopus MCU ID is: usb-Klipper_stm32h723xx_05001D001251313236343430-if00
Important: Make sure to note your MCU ID
Option 2: DFU Firmware Install:
What you need:
BTT Pi (USB A out) connected to Octopus board (USB C in)
Before beginning the firmware install, make sure that: 1. BTT is powered and accessible through SSH. 2. BT Pi is connected to Octopus.
Power off the Octopus and install the BOOT0 jumper. (Reference image below.)
Connect the BTT Pi to the Octopus board and power on the Octopus.
In the BTT Pi SSH terminal, run cd klipper -> lsusb. Find your device, which should be named STM Device in DFU Mode. If you don't see your device, press the reset button next to the USB connector on your board.
Run make flash FLASH_DEVICE=put your MCU ID here. After a few seconds, power off the Octopus.
Remove the BOOT0 jumper and power the Octopus back on.
Keeping both the Octopus and BTT Pi on, in the SSH BTT Pi terminal type in the commands: cd klipper -> ls /dev/serial/by-id/*. Your MCU ID should be displayed.
My Octopus MCU ID is: /dev/serial/by-id/usb-Klipper_stm32h723xx_05001D001251313236343430-if00
Important: Make sure to note your MCU ID
Klipper Screen Setup:
Do this setup process before you flash the mainboard firmware. After you have installed the OS image on the BTT Pi, verify you have the BOOT partition.
What you need:
BTT Pi compatible screen (The BTT Pi is not compatible with DSI).
Once the image has been written, you will find a new partition named BOOT in your File Explorer. Click into the partition and find the BoardEnv.txt file. Edit the BoardEnv.txt file with notepad or any other text editor: In the file, change console=display to console=serial and save the file.
Optionally, you can uncomment overlays=spidev1_2 to enable ADXL accelerometer functionality.
Insert the SD Card into the BTT Pi and the screen should boot up. Initial boot up may take a little longer.
BTT 5" HDMI Screen
The BigTreeTech Screen was an easy install. Luckily, BigTreeTech makes the screen plug and play and very easily compatible with the BTT Pi and BTT Octopus motherboard. An HDMI to micro HDMI cable is used to display the output of the screen and enable the touchscreen functionality. An additional USB C cable is used to power the screen.
I found this Voron Octopus Klipper guide to be the most helpful when installing Klipper.
Reference 2: Raspberry Pi (USB A out) connected to Octopus (USB C in)
Octopus Pro V1.1 MCU Reference
menuconfig MCU settings for Octopus boards
Firmware Install: Option 2 Reference
Boot0 jumper location circled in red
Mercury ZeroG build by 3Docity:
Before beginning the Printer.cfg, I'd recommend looking through this link. While setting up the Printer.cfg, I found it very helpful to reference this Printer.cfg done by 3DoCity.
Printer.cfg Setup:
Note: It's always a good idea to have a backup printer.cfg file. I used the generitc BTT config file as a reference for building my printer.cfg file. In my case, I have the printer.cfg file, generic BTT config file, and a backup printer.cfg file.
Open up Mainsail, go into your printer.cfg and copy the MCU ID into the MCU section. Restart Firmware in Mainsail and your Octopus should now be able to receive instructions from your BTT Pi via Mainsail.
Find a Klipper config that is similar to your printer. In my case, I used the generic-bigtreetech-octopus-pro-v1.1.cfg provided by BTT: https://github.com/bigtreetech/BIGTREETECH-OCTOPUS-V1.0/blob/master/Firmware/Klipper/generic-bigtreetech-octopus-pro-v1.1.cfg
Setting Up Motors:
Motors: Motor0 was my X. Motor1 was my Y, Motor2_1 and Motor2_2 were my Z.
Important: Motor2_1 and Motor2_2 are driven in parallel. This means that the current is split between two stepper motors for a dual Z-axis setup. If you want individual control, you need to plug one stepper into Motor 2_1 and another stepper motor into Motor 3 or Motor 5 (assuming Motor 4 is your extruder)
Setting Up Drivers:
Drivers: Motor0: TMC5160_x. Motor1: TMC5160_y. I set both currents to 1.0 A. Motor 2_1: TMC 2209, Motor 2_2 TMC 2209. I set both currents to 1.0 A.
Probe Setup: (Reference 1 and Pin Diagram)
For the CRTouch, wiring is the same as the BLTouch. In my case, I had to switch the Brown and Red wires to avoid shorting out the probe. I then ran some console commands to move the pin up and down and trigger when touched.
Sensorless Homing:
In the printer.cfg file,
Useful Tips/Console Commands:
When homing, if any of the motors turn in the wrong direction, you can go into the printer.cfg file and put an exclamation mark in front of the direction pin.
query_probe: checks the status of the probe. Returns triggered or open.
query_endstops: checks the current status of every endstop and returns the triggered or open.
M84: disable motors
Stepper_buzz: moves the stepper motor in a positive direction and then back to the origin.
Reference 1: CRTouch Wiring
Pin Diagram
CR Touch/BL Touch Pin Diagram:
For some reason, on the stock Ender 5 Plus MCU, the GND and 5V are switched. I needed to switch around the Brown and Red wire in the Dupont connector of the CR Touch. Unfortunately, I originally thought the wiring was correct and plugged in the sensor without swapping the wires. At some point, I felt the wires for the CR Touch and they were very hot, realizing that I had probably shorted either the probe or the mainboard. When running some commands in the Mainsail Console, the CR Touch would extend and retract, but when I went to level the Z axis the sensor failed and wasn't detected.
I was using sensorless homing on the z, but this caused issues that I'll touch up on later.
Probe Port/Wiring Diagram:
The BTT Octopus Pro has a probe port available as well as programmable SPI IO Pins. I'm not quite sure what the SPI pins are for, but the manual has a picture of them.
The actual probe port is in the bottom right corner of the board. The image provided of the pins is correct and accurately tells you where the probe port is.
SuperPinda Probe:
I will be using an inductive PINDA probe. I bought one that should be the same as a PRUSA MK3S+ probe, but I don't know if the specs really line up. I'm not sure if the probe is actually a SuperPinda. However, the wiring should be the same. The PINDA V2 has 4 wires. The probe I bought has 3 wires like the SuperPinda.
SuperPinda Specs:
5V
M8 Thread Size
NPN, Normally Closed
4 mm sensing range (I'm not sure if this probe has this range either. Normal probes have a 2 mm sensing range)
Most importantly: As listed in the BTT Octopus Manual, an NPN probe output pulls to ground when its active. The jumper activates the 12K pull up resistor necessary for the probe.
Activating 12k pull up resistor for an NPN Probe
The jumper pins are located right next to the probe port on its right side.
Issues: BTT Pi 5v Jumper Connection
I forgot to unplug the 5V USB jumper on the BTT Pi and I sent a move command to the extruder. This made my BTT Pi stop connecting to WiFi and I was scared I fried something on the board, the stepper driver, or the BTT Pi.
Fixing the BTT Pi:
I reuploaded the BTT Pi OS image and set up the menuconfig again.
I then removed the jumper and thankfully everything worked. I was able to connect to the Pi and setup another printer.cfg.
Later on when I was trying to test the extruder again, I was no longer able to make the extruder stepper motor move. I think I may have shorted the board or the driver.
Initially I was having issues getting the extruder stepper motor to even spin. In troubleshooting this issue, I was able to intimately understand how the stepper motor drivers worked in relation to the motor ports. I was confused because there were only 8 stepper motor driver slots but 9 motor connector ports (Reference 3).
Originally, I had thought that the MOTOR2_1 and MOTOR2_2 connector ports were controlled by drivers 3 and 4 respectively. After sending commands through the extruder stepper motor, I found that MOTOR2_1 and MOTOR2_2 were actually connected in parallel and powered by only driver 3.
I then realized that I had plugged my extruder stepper motor into MOTOR3 when I was sending commands through MOTOR4.
Afterwards, to fix this, I ran some tests:
I used the same motor channel and tested with a different stepper driver.
I setup my printer.cfg properly: MOTOR4: extruder, Driver 4: TMC2209
Thankfully I got the extruder stepper motor spinning. Turns out I had fried the original TMC2209 driver that was in Driver 4 when I ran the extrude command with the Pi 5V USB jumper connected. I got the error "Unable to read tmc uart 'extruder' register IFCNT", which told me that something with the driver wasn't working. Thankfully, my Octopus Board was fine and came out unscathed. My BTT Pi board still worked, but took a very long time to boot up.
Reference 3: 8 Drivers, 9 Motor Connectors
Driver 3 powers Motor2_1 and Motor2_2 in parallel. This is useful for controlling the z-axis on one driver.
Octopus Pro Connector Diagram
This is V1.0 and not the V1.1. The difference can be found on the BTT Octopus page. You can tell the boards apart by the CAN port.
Calibration Checklist:
Tensioned belts to 120 Hz - Complete
XY Skew Compensation
Z Skew Compensation
E-Step Calibration - Complete
Stepper Current Tuning
PID Tuning
pid_calibrate heater=extruder target=210 - Complete
pid_calibrate heater=heater_bed target=60 - Complete
SAVE_CONFIG once both PID tuning procedures are done.
Jerk and Acceleration Tuning - Complete
Input Shaping
Tramming and Bed Leveling - Complete
Retraction Tuning - Complete
Temp Tower Test
Pressure Advance Tuning - Complete
Hydra Conversion:
As of now, I do plan to upgrade to the Hydra, but I will do this down the line. To keep costs down, I want to build the base Mercury 1.1 first and upgrade later. Sourcing the linear rails, MIC 5 heated bed, hardware and stepper motors would increase the cost significantly and I will do this eventually when I get my engineering job. As of right now, I'm perfectly content figuring out how to tune the printer and get it printing as perfectly and fast as possible.