The RepRapPro Ormerod is sold as a single-extruder 3D printer kit. Although RepRapPro is promising to produce a multi-extruder conversion kit for it, they have not yet provided a date when this will be available. So here is my recipe for converting the Ormerod to a 2-nozzle dual extruder printer.
Before you go dual-nozzle
1. Get your printer working really well with a single nozzle first. There is no point in trying to print with 2 nozzles if you are not getting good prints with 1 nozzle already. You will almost certainly want to reinforce the MDF bed support or replace it with something better. [UPDATE: the bed support has been improved in the Ormerod 2 kit.] I recommend the aluminium bed support supplied by DaveK0974, available here. I also recommend my own differential LED Z-height sensor/illumination/fan control/indicator board (see here) – but I would say that, wouldn’t I!
2. Consider upgrading the power supply. The second extruder and heater will increase the load on the ATX power supply provided with the Ormerod 1 kit and the one supplied with the original kit may struggle. One option is to use a better ATX power supply such as the Corsair CX430M. Another is to buy a 12V 300W DC power supply from one of several eBay suppliers selling them; but only do this if you are comfortable with doing mains wiring. You will need to cover the exposed terminals on the power supply. My solution was to print the box here. It accepts a snap-in IEC mains connector, indicator neon, and 20A output connector – all available from Maplin Electronics.
3. Consider replacing the acrylic X-arm and X-plate with an aluminium one (also from DaveK0974) if you haven’t already done so. You will be hanging an extra extruder from the X-plate, so any tendency of the acrylic part to flex will be increased. Flexing of the X-plate causes the nozzle height to vary as the head travels along the X axis.
4. Update your firmware and web interface to versions with multi-extruder support. At the time of writing this, I recommend my 0.78r-dc42 firmware here (follow the link and press the Raw button to download it), and web interface 1.03 available at here. Test your printer with the new firmware and web interface.
Getting the parts
1. Order a dual nozzle heatsink block from DaveK0974. This is the design I recommend. Type B is the dual nozzle block. Type A is a single nozzle block which you can use in your existing single-nozzle head to allow the same nozzle mount to be used with both heads. The large holes are M5 tapped, the small ones are M3 tapped.
2. Order the following parts from RepRapPro. Some of these are listed at https://reprappro.com/shop/. For the others, phone or email Sally at RepRapPro for a price.
- Two Ormerod hot end hardware kits. These contain a few more components than you need, but cost less than buying one kit plus the extra parts you need individually. You could try negotiating a discount for having the kits supplied without the two heatsink blocks and also with just one fan and heatsink instead of two. I am assuming that you will want to keep your existing single-nozzle head intact.
- One Ormerod hot end loom. Alternatively you could make this up yourself, in which case you need only include 6 wires (2 yellow, 2 brown, 1 green and 1 blue).
- One NEMA17 stepper motor with standard loom for the extruder [but see updated next item].
- One Ormerod extruder drive fixings kit (hobbed insert, screws, nyloc nut, bearings etc.). Or you could get just the hobbed insert from RepRapPro and source the fixings and bearings from eBay. See the two parts lists in the instructions page here for what you need. [UPDATE: As at 2014-08-26, RepRapPro is selling a complete Ormerod extruder kit including the stepper motor and loom for £25, see here.]
- One DueX4 expansion board. RepRapPro doesn’t currently list this, but you can get it from http://www.think3dprint3d.com/Electronics.
3. If you are using one of my differential LED hot end boards, then ideally you will get another one for your dual-nozzle head. If you don’t want to buy another one for your new hot end, then in order to swap the board between two hot ends you will need three 2-way shells and associated crimp receptacles. You can order these from me, or from Farnell, Rapid, RS, Maplin or another component supplier. The 2-way shells are Molex part # 22-23-2021. [UPDATE: I am now offering a version of the differential LED hot end board that supports two nozzles.]
4. You need some short self-tapping screws to attach the Duet and DueX4 boards to the new enclosure. The ones for the Duet are about 4mm diameter at their widest point, and the ones for the DueX4 are about 3mm. They should be about 6mm long excluding the head.
5. I recommend using some high temperature sleeving to protect the thermistor connecting wires from the heater blocks. I used woven sleeving obtained from B&Q, which is made from silicone-impregnated glass fibre.
6. If you like to feed the filament into the first extruder via a PTFE tube that loops from the back of the extruder to one of the notches on the X plate above the X motor, and you want to do the same for the second extruder, then you will need a length of PTFE tubing for this.
7. The loom that RepRapPro supplies with the extruder stepper motor is of adequate length but is unsleeved. [UPDATE: if you buy the complete Ormerod extruder kit from RepRapPro, then from the picture it looks as though you get a sleeved loom.] If you want to sleeve it like the other Ormerod looms, you will need a metre or so of 3, 4 or 5mm black braided polyester sleeving. Farnell part # 1297224 and Rapid part # 03-1458 both look suitable. Similarly, if you make your own hot end loom then you may wish to sleeve it.
While you are waiting for the parts to come
Print the following pieces:
- Enclosure to hold the Duet + DueX4. I use an enclosure similar to the original Duet enclosure but with extra depth and a little extra height to accommodate both boards. This makes the DueX4 difficult to get at, so you need to attach the wires to it before installing it in the box. However, it is compact compared to other solutions that place the boards next to each other. You can find the design file here and the STL file here. Thanks to bobtidey for the original design that I based this on.
- New nozzle mount, pictured here with the single and dual nozzle heatsink blocks. See here for the design file and here for the STL file.
- Heatsink duct and fan duct for the hot end. If you are using one of my hot end boards, you need a modified heatsink duct that spaces the board a little further away from the nozzles. To go with this there is also an insulating plate with shorter pillars. The heatsink duct is here and and the insulator is here.
- Extruder drive parts. You may wish to use the spring loaded extruder design here along with iamburny’s double helical gears which I have slightly modified and put here.
Assemble the second extruder drive exactly as you assembled the original one (see here).
Use the two hot end kits and the dual nozzle heatsink block to build one dual-nozzle hot end. Here’s how:
- Start by screwing the two brass Bowden ends into the heatsink block as far as they will go, and use pliers to tighten them.
- Screw one of the nozzles (with the PTFE liner already in it) into the other side of the block as far as possible, up against the brass Bowden end, and again use pliers to tighten.
- Screw the heater block and tapered brass nut on to the end of the nozzle and tighten.
- Fit the thermistor in its PTFE heatshrink into the heater block. Bend the wire on the side between the two nozzles to go underneath the heater block and come out at the side, next to the other thermistor wire.
- I fitted the second heater block upside down so that both heater blocks protrude towards the middle (see photo). Before fitting it, fit the second thermistor into the block and again bend one of the wires to go around the back of the block.
- To fit the second nozzle and heatsink block, screw the nozzle (with PTFE sleeve in place) through the heater block until the amount of thread behind the heatsink block matches the amount visible on the other nozzle to within half a turn. Then screw the nozzle into the heatsink block as far as it will go. Add the tapered brass nut and check that it lines up approximately with the cone of the nozzle. Also check that the two nozzle tips are at the same height relative to the heatsink block. Then tighten everything up.
- Attach the fan, fan duct, heatsink and heatsink duct to the heatsink block. I drilled two extra holes in the heatsink first so that I can secure the fan to the heatsink with four screws instead of just two.
- Finish the thermistor wiring. If you need to make a joint to a thermistor wire close to a heater block, put heat-resistant sleeving over the joint and the wire.
- Add the heater cartridges, finish the wiring and use cable ties to hold everything in place. If you are using one of my hot end boards, then the wiring for the nozzle closest to the board can go to the connectors on the board just as for a single-nozzle hot end. For the second nozzle, if you use one of my dual-nozzle hot end boards then it has additional connectors for the second heater cartridge and thermistor. Originally, I hacked one of my prototype hot end PCBs so as to provide connectors for the thermistor, heater and second hot end loom, and an LED to show when the second heater is powered. A simpler solution is just to use the 6-pin connector supplied with the hot end kit and hot end loom. The 12V connections for the fan in the second hot end loom are not used.
- Cut the two MDF spacers from the hot end kits so that one fits over each brass Bowden end and the mounting screw holes are clear. Alternatively, cut and drill a single piece of 3mm MDF to serve as the spacer for the 2-nozzle head. The MDF tends to break if you drill holes in it close to the edges, so I found it easier to drill the holes in an oversized piece of MDF and then cut off the excess using a junior hacksaw.
- Replace the original nozzle mount with the new wider one. Then attach the new hot end.
You will have one fan, one heatsink and two single-nozzle heatsink blocks left over from the two hot end kits.
Modifying the Duet and DueX4 (optional)
Update: there is now another way of getting good readings from the second hot end thermistor. This is to swap the inputs for the second hot end thermistor and the bed thermistor, so that the bed thermistor is connected to the DueX4, and the second hot end thermistor is connected to the bed thermistor input on the Duet. If you want to go down this route, then the only modification you need to make is to solder a small terminal block or a pair of header pins to the BED_TEMP pads at the top left of the Duet – if you have an Ormerod 2 then this should have been done already. Then ignore the rest of this section, and see the end of this blog entry for details of the wiring change.
Update 2: The newer DueX4 version 0.2a board has a design change so that it does not need this modification. However, you need to add a wire between the DueX4 and a Duet 0.6 board (but not if you are using a Duet 0.85 board). See the instructions from T3P3.
If you have experience with electronics and don’t mind invalidating the warranties on the Duet and DueX4 boards, there is a modification you can make to obtain stable temperature readings on the second heater. Otherwise, the reading from the second thermistor will continually jump around by several degrees, which is disconcerting although it doesn’t seem to affect printing much if at all. It’s probably best to test the system without modifying the DueX4 first, just in case you need to send it back.
First, add an extra header strip on the Duet board, right below the existing pins for the extruder 0 thermistor. I suggest you add a 4-pin strip, then you can connect not only the second thermistor to it instead of to the DueX4, but also the Z-probe. File a triangular notch in the PCB edge for each pin. Use a small two-row ribbon cable connector to hold the new header strip in place next to the existing header strip while you wire it up and then epoxy it in place. For the extra thermistor, connect one header pin to the adjacent Gnd pin of the E0 thermistor connector, and connect the other header pin to AD7 on the back of the expansion connector. For the Z probe, connect the other two header pins to AD12 and AD14 on the expansion connector.
Remove capacitor C34 from the DueX4 board. This is unfortunately one of the few components on the DueX4 that does not have its identifier printed on the board. It is a fairly large ceramic chip capacitor, identical in appearance to C35, C36 and C37, and in close proximity to R32.
Re-install this or a replacement capacitor on the Duet across the header pins you added for the second thermistor. C34 is a 10uF ceramic chip capacitor, however a 1uF capacitor would probably be adequate.
In the Duet board in the photo, I had already added a 3-way header for the Z-probe, so I added a separate 2-way header for the thermistor.
The effect of this modification is that the second thermistor and its smoothing capacitor are connected to the processor analog ground instead of to the noisy shared ground.
Wiring for everything except the second extruder and second hot end loom is as before, apart from one detail. Previously, the Z probe blue wire (and white wire if you were using one of my hot end boards) were connected to the Duet expansion connector. But the expansion connector will be used to connect the DueX4 to the Duet, so this is no longer possible. If you modified the Duet as described in the previous section, you can connect the Z probe blue and white wires to the 2 new header pins provided for them. If not, then you will need to connect the blue and white Z probe wires to the 26-pin Expansion1 connector on the DueX4. The blue wire goes to the pin labelled AD12 and the white wire (if you have one) to AD14.
The loom from the additional extruder goes to the E1 Motor terminals as shown in this photo (the red, blue, green and black wires on the left). The brown and yellow heater wires from the second hot end loom go to the E1 Vin and E1 -ve terminals (two wires of the same colour to each terminal). If you modified the Duet, then the blue and green thermistor wires go to the header you added; otherwise they go to the E1 Thermistor and E1 Thermistor ground terminals on the DueX4 as shown in this photo. The red and black wires in the second hot end loom should be tucked out of the way and not connected.
Very important! You must have good +12V (Vin) and -12V (Gnd) and ground connections between the power supply and the incoming power terminal blocks on both the Duet and the DueX4. If one of the -12V connections is loose or missing, then either the Duet or the DueX4 will try to draw power through the signal ground connection in the ribbon cable connecting them, which is likely to burn out one or both boards. I connect the incoming 12V power to a 2-way terminal block just outside the Duet + DueX4 enclosure, and run solid core copper wires (from 30A ring main cable) from that to each of the two boards. The Duet + DueX4 enclosure design I linked to earlier has a couple of holes in the front face, to allow you to reach the DueX4 incoming power terminal block screws so that you can easily check them for tightness.
If you use my Duet + DueX4 enclosure design, then the DueX4 goes face-down in the enclosure and is fixed to the inner pillars using the smaller self-tapping screws. You need to attach the wires to the DueX4 first, because the terminals on the DuetX4 will be inaccessible after the board is fitted. The DueX4 comes with a 50-way ribbon cable for connecting it to the Duet, but I found this too long for my enclosure design. So I unplugged the ribbon cable connector from the DueX4 and plugged it in the other way round, then folded the cable back over the connector. Likewise, I folded the cable back on itself before connecting it to the Duet expansion connector.
If you use one of my single-nozzle hot end boards, then remember that it is only monitoring the temperature of the nozzle 1 heater block to decide when to turn the fan on. You have a few options. One is to be careful not to heat up nozzle 2 without also heating nozzle 1 at least to standby temperature. Another is to fit a wire link or 0 ohm resistor at position R22 on the hot end board, which will cause the fan to run continually. The third is to purchase one of my dual nozzle hot end boards. However, for the fan control to work properly (i.e. turn the fan off when both thermistors are connected but cold), you may have to modify the Duet and DueX4 to reduce noise on the second thermistor as already described.
1. As with the original Ormerod, you should do initial commissioning using USB power only. Check that the bed thermistor and both heater thermistors are working. You can warm up the second thermistor with a hair dryer or with your fingers and check you get an increased reading. Also test the Z probe.
2. Double-check that you have wired 12V power and ground wires to both the Duet and the DueX4. Then apply 12V power.
3. Test both heaters and both extruder drives. Unless you modified the Duet and DueX4 as described earlier, expect the head 2 temperature reading to fluctuate continually by a few degrees C.
4. Adjust the hot end mounting screws to get both nozzles at the same height above the bed. I recommend rolling the shank of a drill (I use a 3mm one) between the nozzles and the bed to do this. To raise one nozzle relative to the other, tighten the nozzle mounting screw next to that nozzle and/or slacken the other one. If that isn’t sufficient then remove the hot end from the nozzle mount, slacken the screws holding the nozzle mount to the x-carriage, rotate the nozzle mount a little in the required direction, and re-tighten the screws.
5. Feed filament through both extruders and prime both nozzles.
6. Do a small test print with the first nozzle to check it is working properly. During the print, the second nozzle should have its standby temperature set to about 150C. Do this by sending command G10 P2 R150, either manually or in the slic3r custom start gcode. Or you can set the standby temperatures directly if you are using version 0.99 or later of my version of the web interface.
7. Do a small test print with the second nozzle. You just need to replace the T1 command in the gcode by T2, and set nozzle 1 standby temperature to 150C using G10 P1 R150.
Setting up the tool change files
For dual-nozzle printing, you must set up the tpre1.g, tpost1.g and tfree1.g files in the /sys folder on the SD card, along with the corresponding files for nozzle 2. When you change the active tool (i.e. nozzle), first the tfree file for the outgoing nozzle is run; then the tpre file for the new nozzle is run; then the nozzle is activated; and finally the tpost file for the new tool is run. This is what I have in my tfree1.g file:
; Put G/M Codes in here to run when Tool 1 is freed
G1 X1 Y205 F6000
This code moves the head away from the print at the start of a tool change. I use the same code in tfree2.g. You could also add code to retract the filament, but I don’t because slic3r handles that.
In my tpost1.g file I have this:
; Put G/M Codes in here to run after Tool 1 is selected
This causes the Due to wait until heater 1 has reached printing temperature. If you use my 0.78 series fork of the Duet firmware, then it does not also wait for heater 2 to to cool right down to standby temperature because of the P1 parameter. This speeds up tool changing, because the heaters take longer to cool down than they do to heat up. In tpost2.g I use M116 P2 instead.
I don’t have any commands in tpre1.g or tpre2.g.
[Update 2014-09-24: now that my firmware fork supports nozzle offsets in the G10 command, it is probably better to put the G1 commands in the tpre files instead, and leave the tfree files empty.]
To print in two colours, you need two non-overlapping STL files, one for each colour. You can find ready-made examples on Thingyverse, such as the traffic cone at http://www.thingiverse.com/thing:21773 (I use files Traffic_Cone_Rings_Orange.stl and Traffic_Cone_Rings_White.stl).
Next you need to combine them into a single .amf file. You can do this in slic3r (I use version 1.1.7). From the File menu select Combine multi material STL files. At the file prompt, select the STL file for nozzle 1. When prompted again, select the STL file for nozzle 2. When prompted again, click Cancel. Slic3r will then suggest a name for the output file, which you can accept or change, and it will generate the .amf file.
Now you need to set up slic3r for dual extrusion. Go to Printer Settings, and in the General section set the number of extruders to 2. Also add commands to set the standby temperatures to the custom start gcode. I use G10 P1 R150 and G10 P2 R150. In the Extruder 1 and the newly-appeared Extruder 2 sections, set the nozzle offsets. If you are using my heatsink block design then set extruder 1 to have an X offset of -11mm and extruder 2 to have an X offset of +11mm. Leave the retraction when the tool is disabled set to 10mm and the extra length on restart to zero. Save the settings under a new configuration name such as Ormerod-0.5-dual.
Now you can add the .amf file you created earlier to the platter, and slice it.
Update: slic3r 1.2.0 and later provide a different mechanism for generating gcode files for multi-media printing from two or more STL files.
Fixing up the sliced file
Update: you can ignore this section, because RepRapPro has now changed the standard tool numbering so as to start form 0 instead of 1.
Unfortunately, the current stable version of slic3r (1.1.7) assumes that the two tools are numbered T0 and T1, whereas the Duet firmware uses T1 and T2. There are a couple of ways of getting round this.
The easy way is to install my 0.78e-dc42 (or later) fork of the Duet firmware and add the command M563 S1 to your slic3r custom start gcode. You can find this firmware here (follow the link to the version you want and click the Raw button to download it). The M563 S1 command causes the tool numbers to be dynamically adjusted for the remainder of the current file, by adding 1 to all tool numbers found in the file. This firmware also supports the T parameter which slic3r includes in the M109 commands it generates. You can skip the remainder of this section if you are using my firmware.
If you don’t want to use my firmware fork, then the alternative is to post-process the file. I have written a Windows batch file and SED script to do this. First you need to install SED on your computer. Download and install the Setup package from http://gnuwin32.sourceforge.net/packages/sed.htm.
Here are the contents of the batch file (fix2nozzle.bat) that I used to post-process the generated gcode:
rem Batch file to fix slic3r 2-nozzle output for Ormerod
rem DC42, 2014-07-16
if %1.==. goto :nofile
if not exist %1 goto notfound
"C:\Program Files (x86)\GnuWin32\bin\sed.exe" -i -f "C:/bin/fix2nozzle.sed" %1
if errorlevel 1 goto error
echo Processed file '%1' successfully
echo No filename given
echo File '%1' not found in folder '%CD%'
echo Error processing file '%1'
You will need to edit the paths in lines 4 and 7 to address the directory in which you generate gcodes, the directory in which sed.exe is installed, and the place where you put file fix2nozzle.sed. This is what you need in fix2nozzle.sed:
# Sed script to fix slic3r 2-nozzle output for Ormerod
# DC42, 2014-07-16
s/M104 S\([0-9]\+\) T0/G10 P1 S\1 R140/
s/M104 S\([0-9]\+\) T1/G10 P2 S\1 R140/
s/M109 S\([0-9]\+\) T0/G10 P1 S\1 R140\nM116/
s/M109 S\([0-9]\+\) T1/G10 P2 S\1 R140\nM116/
Execute the batch file, passing the name of your gcode file as the only parameter. Don’t run it more than once on the same file or you will end up printing everything on nozzle 2.
Now at last you are ready to print! Here are some tips:
- If one nozzle pulls parts of the first layer printed by the other nozzle off the bed, check that both nozzles are at the same height above the bed. Also check that the non-printing nozzle is at standby temperature, not cold. If the problem persists, reduce the speed when printing the first layer, so that it has time to solidify and adhere before the second nozzle passes over it. Recent versions of slic3r tend to print the skirt quite fast, so I usually slow down the first layer speed using the slider in the web interface until the skirt is complete.
- The non-printing nozzle may cause small indentations and bumps to appear in surfaces printed by the other nozzle. To reduce these, you need to provide sufficient time for newly-printed plastic to cool down before the non-printing nozzle passes over it. So try reducing print speed, or reducing extruder temperature (the active temperature, not the standby temperature), or improving print cooling.
- You may find that the two printed colours are offset slightly from each other in the y-direction. The traffic cone print shows this up well. If so, you can correct for it in the slic3r printer settings by adding a suitable y-offset to one of the extruders.
- Have fun and persevere!
Addendum: swapping the E1 thermistor and bed thermistor inputs
If you didn’t make the modifications to the Duet and DueX4 boards described earlier, and you have the DueX4 0.2 board instead of the newer 0.2a board, then you will notice that the second hot end temperature reading jumps around a lot. It may also read several degrees too high at low temperatures. A workaround is to swap the E1 thermistor and bed thermistor inputs over, because the bed thermistor reading is much less affected by noise.
If you have an Ormerod 2 then connecting the bed thermistor cable to the E1 thermistor pins on the DueX4 should be easy. However, on the Ormerod 1 the bed thermistor uses the two middle wires of the ribbon cable. There are two possibilities:
1. Disconnect the ribbon cable from the bed thermistor under the heat bed, and run a separate 2-core cable from the bed thermistor to the DueX4.
2. Carefully cut the middle two conductors in the ribbon cable close to the connector that plugs into the Duet. Peel back these two conductors, and connect them to the E1 thermistor pins on the DueX4. The conductors are thin and fragile, so you may want to solder thicker wires to them to go into the terminal block on the DueX4, and strengthen
the joint with heatshrink or silicone rubber. Check with a meter that you have the correct 2 conductors, otherwise you will end up putting 12V into the DueX4 thermistor input, which will wreck the Duet.
Connect the wires for the E1 thermistor in the second hot end loom to the terminal block or header pins marked BED_TEMP on the Duet.
Having swapped the thermistor connections over, you need to tell the firmware about it by adding commands M305 P0 X2 and M305 P2 X0 to config.g. If you already have M305 P0 and M305 P2 commands, you can just add the X2 and X0 parameters to them respectively. Recent versions of my fork of RepRapFirmware and zombiepantlol’s fork implement the X parameter.
As with initial commissioning, test the system with USB power only and check for correct readings from both thermistors, before you apply 12V power.