Creality Ender 3 Pro Dual Extrusion Mod

Print two materials at once with the Ender 3 Pro

Similar projects worth following
I bought my first 3D printer recently, the Creality Ender 3 Pro. I was very impressed at what I got for the cost, but quickly realized I wanted to have dual extrusion capability. I couldn't find many online resources for making this mod, so decided to compile my own attempts for anyone else who might want to try it. This project pulls very heavily from this project ( on a dual extrusion upgrade for the Ender 4. There are some differences between the printers (different mounting scheme for extruder steppers, and different motherboard mount) which required a little design on my part. I also used the ender 3 motherboard enclosure from TeachingTech ( with slight edits to the STEP files for the MKS base mobo

Update 1 (9/25/20): Just came across this guide from Frank Seel that has a lot of good info for upgrading the ender 3 for dual extrusion:

Update 2 (9/29/20): Have been having issues with both nozzles clogging after the first few layers. After retightening the nozzles, checking the tubing length into the hotend, etc., I figured it's not because of any slop in the hotend assembly. I think it is a result of some of the standby settings Cura uses which retracts and cools the unused extruder while the other is in use. This seems to make a plug in the retracted filament that then won't extrude if the settings are non-optimal (similar to the issue in this thingiverse post: After raising the standby temp from 175°C to 205°C and drastically reducing the nozzle switch retraction distance from 16mm to 3mm the clogging issue has resolved, although the inactive nozzles ooze more now so it seems these settings need more tuning to optimize.

Update 3 (9/30/20): I was still getting some partial clogging and underextrusion, especially with a translucent blue PLA filament, while the black filament was printing fine, regardless of which nozzle was used for each filament.

Examples of translucent blue filament under-extruding:

I realized the spring in the extruder block is supposed to be installed in a different manner so that it could be compressed more by tightening one of the supporting screws. After making this change, and adding some additional force to the extruder bearing, the filament is being keyed a lot deeper. I also switched to some white filament, and haven't noticed the under-extrusion issue anymore, so it may have been something about the blue filament (It seemed like even by hand the blue filament was harder to extrude). I'll try the blue filament again with the tighter extruder block spring and see if I still have the under-extrusion issues.

Tightened extruder block springs:

Ooze shield doing it's job:


Update 4 10/4/20:

Still having issues with clogging/underextrusion, and just generally needing a lot of force to push filament through, especially after the nozzle has been heated for awhile or both nozzles are heated. I'm pretty sure the root issue is 'heat creep', where the heat breaks get too hot and filament partially melts too high up in throat where it deforms and gets clogged (if you google 'hot end heat creep' or 'heat creep chimera' you'll find a lot of info about why this happens and how to fix it). This is especially pronounced when I try to print PETG in one nozzle, requiring higher temperatures, and PLA in the other nozzle, and basically have to print the PETG at a snail's pace and I actually have to help the PLA extruder by pushing the filament by hand... I've tried getting a 30mm 24V fan that will mount directly on the heatsink (instead of ducting the 40mm fan) and that didn't make any noticeable difference. I then tried mounting a blower fan using a mount from matt448 on thingiverse ( and that definitely seemed to be doing a better job of cooling the heatsink but the nozzles still required an aggressive amount of force to extrude. (but obviously printing PLA out of a single nozzle is mostly fine, since I was able to print the new mount with only a few missed-steps from the extruder stepper)

Radial fan mounted on heatsink:

I've tried both the titanium and ptfe lined SS heat breaks that came with the kit and they both have the same issue. I'll probably try out the volcano heatblocks/nozzles that also came with the kit, since those have a larger melt zone and may help to reduce some of the extrusion pressure. I also just went ahead and ordered the legit chimera heatsink and heat breaks which will hopefully...

Read more »

dual stepper mounting bracket.STL

original bracket that had to be modified after printing

Standard Tesselated Geometry - 93.54 kB - 09/30/2020 at 21:21


dual stepper mounting bracket_rev2.gcode

updated bracket design, untested

gcode - 3.74 MB - 09/30/2020 at 21:21


dual stepper mounting bracket_rev2.STEP

updated bracket design file if you want to edit it

step - 100.09 kB - 09/30/2020 at 21:21



flipped direction of X, Y, Z, and E0 steppers

plain - 89.56 kB - 09/27/2020 at 17:11



enabled separate kinematic variables for extruder steppers

plain - 89.56 kB - 09/26/2020 at 17:57


View all 10 files

View all 17 components

  • 3rd Log - 9/28/20

    Preston09/29/2020 at 01:48 0 comments

    Washers/grease/longer screws arrived.

    Thermistors held in by washers now. Socks on the heater blocks. It took a bit of finagling to get the wires in comfortable positions, you can see below how I managed it by turning the left nozzle 90°, and routing the heater/thermistor/fan wires over the top of the x-rail. 

    The hardest part of installing the hotend was probably getting the two nozzles as level as possible. After greasing the throats and inserting them in the heat sink I just eyeballed their height's, and ended up with what I think is good enough.

    Finally was able to mount both steppers with their extruder frames. It might be worth getting a more powerful stepper for the z-axis eventually, as it has substantially more weight now. 

    Very poor cabling again, I just wrapped all the wires to the hot end with polyimide tape, and used a couple screws/t-nuts with a loop of tape around them to hold the cable out to the side so the y-stage wouldn't catch it.

    the full printer is shown belowYou'll need a custom printer profile in cura, I just copied the X/Y min/max settings from the Ender 3 Pro profile. There are nozzle offsets you can play with in the extruder tabs, but I haven't messed with those values yet.

    After manually leveling the bed, I fired up the first dual print to check the accuracy of the nozzle offsets in the firmware (which is just 18mm x-offset for nozzle 2). I was pretty surprised actually, but the offset in the firmware took care of aligning the nozzles during printing pretty well. The print isn't centered on the buildplate, but that should be a pretty easy fix either somewhere in the firmware or in the cura profile.

    I printed the first two layers with translucent blue PLA from nozzle 1 and the next 2 layers with black PLA from nozzle 2. 

    Top of print:

    Bottom of print:

    I'll have to do a bit more finessing to get the X/Y offset just right, it looks like there might be ~100µm or so misalignment, but the nozzle heights were level enough that they didn't damage each other's extrusions.

    So yea, not sure if I'll post any more updates, from here on out I think it'll just be pretty vanilla PID and stepper calibrations as well as tuning the nozzle offsets.

  • 2nd Log - 9/27/20

    Preston09/27/2020 at 18:13 0 comments

    still waiting on the longer machine screws/washers/thermal grease, so I can't finish up the hotend or mount the second extruder stepper yet.

    I found a slight issue with the motherboard enclosure, the USB port position causes the Y-axis rail to slightly conflict with any USB connector plugged to the board. Only using one screw to fix the enclosure to the printer allows the enclosure to rotate enough to take the strain off of the USB connector port. Revisions of the motherboard enclosure should probably use taller standoffs to move the USB port a bit further from the rail, but at this point I'm not going to worry about it.

    I got the crimp connecter kit which allowed me to interface the thermistors with the motherboard and start testing the hotend components. Was able to perform the hot tightening of both nozzles, they both briefly produced some smoke but I think that's normal on first heat-up. After that I wired up the heatsink fan (to the remaining 12/24V connector on the motherboard) and the part cooling fan (to the 'fan' screw connector terminal on the motherboard), and the bed heater and thermistor, and taped up all the cables going to the hot end. My cable management could use some work but it'll do for now. 

    Quick note on thermistor placement: A13 is for E0 (nozzle 1) thermistor, A14 is the bed thermistor, and A15 is E1 (nozzle 2) thermistor.

    Next I went ahead and wired up all the steppers to the board. For the endstops I had to cleave the original 2-pin connector mouldings (leaving the original crimp connectors on though) and refit them into 3-pin connectors to fit in the MKS Base. The MKS Base uses 5V pull-up resistors on the signal pin, so the wires going to the endstop switches needed to go to ground (-) and signal (s) with the 5v (+) pins left unused.

    After plugging in all of the steppers and endstops to the motherboard, I reassembled the printer and booted it to test the stepper drivers. Fortunately all of the drivers worked, but the X, Y, Z, and E0 (original stepper the came with the printer) directions were all reversed. E1 (the new stepper) was rotating the proper direction, but I wasn't too sure about the connector orientation of it because it wasn't keyed like the others so I may have reversed the windings on that one. But either way just a quick firmware edit to flip the directions of the X/Y/Z/E0 motors (see configuration-rev3.h), and everything was going the right way

    Big note: don't forget to adjust the z-endstop position, or you will run your hotend into the bed if it's already mounted to the x-carriage when you start homing.

    After repositioning the z-endstop, axes homing went well, jogging all axes and both extruder steppers works. Pretty happy with the motherboard at this point. I don't want to jinx anything but it seems like all the components are functional.

  • 1st Log - 9/25/20

    Preston09/25/2020 at 18:47 2 comments

    Hello, welcome to this project.

    At this point I've received all of the major components for this upgrade (motherboard, extra stepper, extruder frame blocks, hot end), and printed out all the needed mounting pieces.

    The only part I had to design from scratch was this mount for a second extruder stepper. I designed it to mount between the z-axis carriage and the first extruder stepper, with the mounting holes for the second stepper extending out to the side. 

    Based on the CAD model I thought I designed it with enough clearance for the lead-screw threaded piece, but that ended up being more obtrusive in reality, so I had to hack a big chunk of the mount off in that area:

    After that though it fits pretty nicely on the z-carriage:

    only other thing to note with that mounting scheme is that the screw holding the inner z-axis bearing protrudes out just enough to conflict with the first stepper after it's lowered an 1/8" relative to the rest of the carriage because of the thickness of the new mounting bracket. There was a washer on that side of the carriage though, which when moved to the other side reduced the amount that screw protrudes just enough for the stepper to fit. 

    I'm still waiting for some longer socket head screws to be able to mount the extruder frame block to the stepper through both the z-carriage and the second stepper mount.

    The hotend mount from krestoverson ( fit very snugly around the mounting holes on the x-carriage, so I don't think screws are needed for that:

    The original heatsink cooling fan needed the printed adapter ( to fit, but as krestoverson noted you can't use the 12V fan that comes with the hotend since the ender 3 supplies 24V power. The mounting slot for the part cooling fan didn't print properly, but I should be able to still hold the fan with a washer for extra support area.

    Assembling the heater blocks was kind of tough to figure out since I haven't done anything like it before but I think I'm on the right track. I'll definitely add washers to the screws that are holding in the thermistors (didn't come with the hot end kit). I also had to separately purchase the 24V heater cartridges, as the kit comes with 12V cartridges. The thermistors come already sealed in tubing and with heatshrink at the joint between them and the wires going to the control board, but the wires are bare ended so I'm waiting on the proper crimp connectors to interface the thermocouple with the control board. There were various online resources I followed to figure out how to put this part together, the most helpful was from the E3D wiki (, but I haven't heated it up yet because I'm waiting for the thermistor connectors so I'll wait to call that a success until I've actually heated/tightened the nozzles and get them level. Also waiting on the thermal grease which is recommended for getting good heat conduction from the throat to the heatsink.

    Finally the motherboard enclosure from TeachingTech for the MKS Gen L was simple enough to modify for the Base board. 

    It has the same Rs values for the stepper drivers and the same family of drivers (A498...) as the Creality3D V1.1.4 board that came with the printer, so I read off the stepper Vref voltages on the stock board and adjusted the ones on the MKS Base to match as close a possible. Knoopx had measured Vref values on his stock V1.1.2 board ( and the values I measured were more-or-less the same:


    For the stepper I ordered for the second extruder, which has a 2A current rating, setting the driver to 90% meant trimming the Vref to 1.44V.

    I've attached the current marlin firmware configuration I'm using (rev1 9/25/20).

    I had to compile it with platformIO, there...

    Read more »

View all 3 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates