User Tools

Site Tools


— > Up to lots more cool printer hacks < —

Dual X-carriage Bukobot Printer

bukodualx-01.jpg bukodualx-10.jpg

Thingiverse link: (with lots more pictures)


Marlin Firmware Changes: (for now)

Build Instructions

Materials Required:

Major Stuff
  • Bukobot Duo (original version)
  • 1 X-axis stepper motor
  • 1 stepper motor driver
  • 1 Synchromesh cable with crimped eyelet at one end. 1.25m
  • 1 Syncromesh pulley
  • [You can buy these from Deezmaker]
Vitamins and Hardware:
  • 3 608z bearings for idlers
  • 2 LM8UU linear bearings
  • 1 endstop switch
  • 20 M3 10mm screws
  • 7 M2.5 16mm screws
  • 8 M2.5 30mm screws
  • 13 M2.5 nuts
  • 5 M2.5/M3 washers
  • 2 M8 50mm screws
  • 8 M8 washers
  • Split tubing to hold cables
  • wire to extend thermistor, hot-end power, second extruder stepper, new X-axis stepper motors, new endstop.
  • cable ties
  • 2 strips of spring metal (I cut them from a cheap hand-beater bought from a $2 variety shop)
  • Pipe cleaner wire.
Components to build stepper motor driver board:
  • Small piece of Veraboard
  • 1 strip of female header pins (.1” spacing)
  • PCB screw terminals and/or male header pins for connection to power, data and motors
  • Small 10K resistor

[All easily available from an electronic shop.]

Printed Parts:

Other Stuff (Endstops)

  • 2 (or 3) Hall-effect precision endstops + trigger magnets

This dual-x carriage design requires that the distance between the two endstops is properly calibrated to ensure that the printing from the two extruders is aligned. I found that that the variability in triggering of the mechanical microswitches led to inconsistent alignment of the two materials (the X and Y endstops in a normal printer don't need to be very precise). I solved this by replacing the microswitch endstops with Hall-effect endstops ( Search ebay for “Hall Endstops” - they are around $10 each. I used bigger trigger magnets than the ones supplied simply for easy of positioning.

I also replaced the Z-axis endstop which is completely unrelated to dual x-carriage support but gives a nice improvement in first layer height consistency. [ I'm sure I could design a better Z-axis endstop holder but some Polymorph/Plastimake/Polycaprolactone(great stuff) and a cable tie is working fine for the moment. ] The endstop already includes a trimpot for fine adjustment of the trigger point.

Pictures of new endstops at bottom.


  1. Print all parts
  2. Build stepper controller board. This can be done on a single piece of Veroboard. All parts should be readily available at your local electronics store. The circuit is constructed by using 2 x 8 pin header strips to seat the stepper driver. Then the stepper ENABLE, STEP, DIR pins are connected to a spare set of digital expansion header pins on the controller. The ENABLE pin should also have a 10K pullup resistor connected to VDD. SLEEP is connected to RESET. VDD, MS1, MS2, MS3 should all be connected to +5 volts (assuming you want the maximum level of microstepping). 1A/1B/2A/2B are connected to the motor header or terminals. VMOT is connected to +12V and the two GND pins are connected to Ground. Insulate the bottom of the board to avoid shorts [See stepper pinout here: ] If you can't get the SD82A/B, then get an SD8825 use it for your Y-axis stepper and then use your existing SD82A for the 2nd X-axis controller so that they are still a matched pair. Remember that the SD8825 uses different microstepping so you will need to change the jumpers for 16x microstepping or changes the steps per mm for 32x. Don't forget to check the stepper reference voltage trimpot has been calibrated (Vref should be 0.4V on SD82A). See photos of board at the bottom of the page.
  3. Remove synchromesh cable from the old x-carriage.
  4. Disconnect wiring from the terminal block of each extruder. Undo extruder wiring, X-axis motor and endstop wiring so that the X-ends can be removed.
  5. Remove terminal block and cut in half
  6. Remove linking plate between extruders
  7. Remove X-ends and add two additional linear bearings onto the front steel rod (4 on the front, 2 on the back)
  8. Fit idler pulleys onto 608z bearings (rubber mallet useful).
  9. Fit two idler bearings onto an M8 screw with a couple of washers between the two bearings. Screw M8 into X-end idler hole using another washer between the bearing and the X-end.
  10. Reassemble X-axis rods with new X-ends.
  11. Fit synchromesh pulley to the new X-axis motor. Note that the synchromesh pulley on the new motor is reversed so that the sleeve (with screw) is towards the motor with the pulley on the outside.
  12. Mount motors and end-stops (so there's now one endstop on each X-end)
  13. Fit X-carriages to linear bearings (this uses the 2 x M5 10mm screws and slim nuts removed from linking plate for the two new linear bearings)
  14. On each cable box, insert a M2.5 16mm screw into one of the two holes near the edge of the elevated section (tip pointing up). Hold the screw in place by fitting an M2.5 nut on the top side of the cable platform.
  15. Attach cable box and terminal block to the extruder plate by using 2 x M2.5 30mm screws through the terminal block and the outer holes of the cable box and then through the two diagonal/angled slots at the rear-end of the X-carriage plate (with a nut securing it underneath the extruder plate). The cable box with the cut-out corner on one side goes on the right extruder.
  16. The eyelet end of each synchromesh cable is attached to the cable riser blocks which is inserted into the extruder plate slit on the center-side (i.e., away from the frame). This is secured using a M2.5 16mm screw and washer + nut on the underside.
  17. The X-tensioner is attached to the slit on the outer-side of each extruder plate. Note that the orientation of the X-tensioner on the right extruder side is reversed to the left so that the off-center M3 10mm screw which locks tensioner is towards the front of the extruder plate. The center screw is a 16mm M2.5 or M3 screw. As this makes the X-tensioner fairly close to the edge of the extruder plate you may wish to use a washer on the underside of the plate to better spread the load.
  18. Rewire extruders. [You can insert an extra length of wire into the middle of the two stepper motor cables to give the required length.]
  19. Tension synchromesh cables.
  20. Reconnect all cables to the controller board & additional stepper driver board.
  21. Z-Height Tuning: In the original Duo solution, the linking plate kept the two extruders quite close in their Z-height. However, as each extruder is now separated the relative Z-height of the two extruders is likely to need slight adjustment (i.e., the two extruders need to be aligned in the Z direction). The height of the hotend from a surface can be easily changed by simply inserting a rectangle of plastic with a 5.5mm hole through the center between the rear linear bearing holder and the extruder plate. This is much simpler than trying to insert shims under the hot-end itself (and the temperature is not a concern near the rear bearing). A cut up piece of takeaway container or packaging plastic is a good start. The cable box even includes a screw hole to make the adjustment of the rear bearing screw easy.
  22. Fit lid on each cable box and fix in place with another M2.5 nut.
  23. Fit extruder nozzle cap arms. These will likely require that the 4 screw holes on the top side of each cap need to be drilled out to 3mm, the screw holes in the bottom need to be widened to a 2.5mm hole so that they still grip an M3.
  24. Cut two strips of springy metal for the extruder cap. I used the blades of a $2 store cheap hand beater. Wrap some Kapton tape around one end (this is overkill from a thermal point of view as very little heat travels along the metal but helps keep the metal in place). Clamp in place between the top and bottom extruder cap pieces. I also wrapped short pieces of pipe-cleaner wire around the end to wipe the extruder as it passes. I'm sure there are plenty of other thing you could use but these are easily changeable. See photos at the bottom of the page.
  25. Download the dual x-carriage Marlin firmware (see link at top). Merge in any Bukobot Configuration.h changes. Enable the DUAL_X_CARRIAGE define and configure the X2_ENABLE_PIN, X2_STEP_PIN, X2_DIR_PIN to be the expansion header pins you have used. I set X2_MIN_POS to 80 (this prevents the second extruder colliding with the first) and X2_MAX_POS to ~350 (this is the distance between nozzles when both extruders are homed). I also set X_MAX_POS to 270 (which prevents the first extruder colliding with the second). With the nozzle caps you also want to disable EXTRUDER_RUNOUT_PREVENT. Upload firmware to controller.
  26. Start printer with motors near center but not touching.
  27. Try homing the x axis. Test that the end-stop switches work by manually triggering them before they reach. Be ready on the reset button in case motors move in wrong direction or either endstop doesn't work.

Calibration of endstop distance.

Unlike the normal Duo where you need to calibrate the fixed distance between the extruders, with the dual x-carriage design you instead need to calibrate the distance between the two endstops (as measured between the extruder nozzles). This distance is set as X2_MAX_POS initially but can be overridden with “M218 T1 X???” without reflashing the firmware (M218 then requires that the x-axis is rehomed to update the extruder position). The calibration can be done in stages:

  1. A rough estimate is obtained by simply measuring the distance between the nozzles when they are both parked.
  2. Refine this by moving the first extruder to a known location (e.g, send “T0” then “G1 X200”) and then using a pen to mark that location on the bed. Change to second extruder and move to the same position (“T1” then “G1 X200”). Look at whether extruder is at same position. Adjust the separation using M218 until both extruders move to more-or-less the same spot.
  3. Fine tuning is done with Rich's awesome Duo calibration script: (set the X offset to 0 always). I found for this that I needed to raise the Z height of the printer to 0.2mm before running the script (the script does not change the Z height). If the matching pair of lines is on the right side, then you add that number to the M218 X offset; if its on the left then subtract it.

Don't forget to calibrate the Y offset between the two extruders as well if you haven't already.

Slicer Configuration

Set the offset between the extruders to 0. If you are using the nozzle caps then you can also reduce the retraction on tool changes as well as remove the extra extrusion after a tool change (in Printer Settings under Extruder).

That's it.

Additional Pictures

The stainless steel strips were obtained from a $2 store hand beater. I then bent the strip to my liking as you can see in the final photo.

bukodualx-12.jpg bukodualx-13.jpg bukodualx-03.jpg

Here are some close-up pictures of the stepper controller board (for convenience my board also routes the end-stop connector and the temperature controlled fans I have on the second extruder):

bukodualx-14.jpg bukodualx-15.jpg

This shows a picture of the cable box with the lid removed:

bukodualx-11.jpg bukodualx-06.jpg

These are the new hall-effect endstops (on the x-axis they fit into the existing holders). The magnets were attached with a hot-glue gun.

bukodualx_endstop1.jpg bukodualx_endstop2.jpg

creating-a-dual-x-carriage-bukobot.txt · Last modified: 2013/07/30 21:05 by buildrob