Blog

Featured

Multi colour printing without using wipe or prime towers

Most of the problems with multicolour printing revolve around the fact that when switching from one filament to another there is still some of the old filament in the system that needs to be purged before the new filament can be extruded cleanly. The usual approach is to use some sort of wipe or prime tower which is wasteful both in terms of print time and filament usage, so this is an alternative approach to the problem.

I’ve marked this as a feature post. If you are interested in this, check my blog for the latest updates.

As I have promised on a couple of forums, this post will explain in detail the method I am developing to enable 3D printing of multi colour objects without resorting to the use of wipe or prime towers.

For those of you who haven’t been following my endeavours on any forums, here is a link to the video I posted on YouTube which shows the technique in action.

Now before we get too far into the details, I need to explain few things about myself. I was born in 1953 and left school/started work in 1969 at age 16. I learnt my maths using log tables and a slide rule. I’m a mechanical engineer by training but currently (career number 5) I have a small business make designing and building garden decks. What I know about computers, 3D printers, electronics, writing code etc is all self taught through a lot of internet searches and reading a few books and online tutorials so I’m no expert.

I started setting up this blog/web site on 4th January 2017 so I’m still finding may way around. Apart from a brief introductory post, this is the first blog post I have ever made. Therefore, the layout of this blog site may well change (and please excuse any typos)

That’s the excuses out of the way, now down to business…..

The rest of this post assumes that the reader has the tools and techniques available to generate or otherwise obtain a .gcode file for a multicoloured object. I plan to do a separate write up on the method I use, which involves separate .stl files (which I generate using OpenScad) and slic3r but that will have to wait.

There are a number of issues which have to be addressed when printing multicoloured objects and most of them revolve around what happens when switching from one filament to another. My first forays into multicolour printing were with a tricolour Mendel variant which used 3 separate hot ends. I found that there were 4 major drawbacks to this approach. Firstly it was very difficult to get all 3 nozzles at exactly the same height (within less than 0.1mm) and for this setting to be maintained in such a way that inactive nozzles didn’t drag across the printed part. Secondly, it was very difficult to set and maintain  X and Y offsets get the output from all 3 nozzles perfectly aligned. Thirdly, it was necessary to set unused nozzles to a lower standby temperature in order to prevent filament from oozing out and dragging on the print but this was never completely successful. Also, the waiting time for one nozzle to heat up and another to cool down significantly increased the print duration. Lastly, there was the problem of filament oozing from one nozzle as it cooled down and before it reached it’s standby temperature, or another nozzle as it heated up before it reached it’s active temperature.

All of the above problems can by overcome by using a single nozzle – i.e. a mixing hot end. For the purpose of this post, I will define a mixing hot end as one which has multiple filament inputs but a single output (nozzle). I am currently using a Diamond hot end but I am aware that there are other designs.

However, this approach generates a new problem which is that when switching between filaments, there is still some of the old filament left in the nozzle and/or mixing chamber which has to be purged before the next filament comes through. If the colour change coincides with a layer change, this is rarely an issue. Unless the object being printed is really small, what happens is that the purge occurs during the inner perimeter(s) so by the time the outer perimeters are being laid down, the purge has already been completed. Effectively the change over period is hidden inside the object and isn’t visible.

The real problem is when the colour change occurs within the same layer, as in the union flag example that is in the YouTube video, because there is nowhere to hide and any defects will be visible. The usual approach is to move the print head away from the main object, and print some sort of sacrificial tower or use some sort of wiping mechanism to purge out the old filament, then move back to the object and resume printing. This is wasteful both in terms of filament and time, and can lead to a less than satisfactory print finish if filament retraction and recovery are not fully optimised.

The technique I’m developing and which I am about to share here, simply moves the filament change point to a position earlier in the gcode file. The new position equates to the amount of filament that needs to be extruded in order to purge out the old. The method isn’t perfect because in theory, there is still a “transition” period where what is being extruded is a mixture of the old colour and the new. In practice, by observation I’d estimate this transition to be about 10% of the total “purge amount” and I have found that with the Diamond hot end the optimum purge amount is about 2.0 to 2.5mm of filament so there is around 0.2 to 0.25mm of “transition” filament which is hardly noticeable. Other designs of hot end may have larger mixing chambers, in which it may still be necessary to use some sort of wipe or prime tower. However, my technique could still be applied to take account of much of the purging so any further priming could be achieved by using a very much smaller tower or priming mechanism. One of my planned improvements is to build a small priming tower or similar mechanism into the post processing script, although as I have said earlier, the transition between one colour and the next with the Diamond hot end is really small and hardly noticeable.

As mentioned earlier, the only coding I know how to do is what I have been able to teach myself from internet searches, on-line tutorials and the odd book (some have been very odd). I have used Python just because I found it less of a pain to learn than some other languages that I’ve tried. I am aware that this might not be the best tool and I am deeply aware of my own shortcomings so I think the best approach is for me to post my work flow and explanation of what the code attempts to do. Others with more skill than I have can then use it as basis to write something more efficient (and probably less dangerous). I’ll make the python script available for those want to try it but please don’t blame me if it crashes your PC or worse.

So here goes.

The approach I’m taking is to leave the original file untouched and generate a new file with the colour change commands moved forward in the file but otherwise it’s an exact copy. This enables me to run the script several times on the same file but with a different “purge” setting in order to test and fine tune. The change from one colour to another in the gcode file is accomplished by selecting a new tool. It could be done by having a single tool and changing the mixing ratio but that’s not how slc3r works. So for the rest of this post colour changes will be referred to as tool changes. Note that the code could be adapted to look for M563 commands (mixing ratio changes) instead or as well as “Tn” (tool change) commands.

I haven’t yet figured out how to cut and paste the python text while retaining the font colours so I’ll change them manually – hopefully I won’t miss any. Comments are in red and start with a hash (#) String values are in green. My other comments are in blue to denote the fact that are not part of the script.

These first lines should be changed to suit the user. Hopefully the comments make them self explanatory.

sourceFile = “D:\RepRap\G Code Files Diamond hot end\Python test file.gcode” # The full path and file name of the file to be worked on
destinationFile=“D:\RepRap\G Code Files Diamond hot end\Python output.gcode” # the full path and file name of the destination (output) file
temporaryFile =“D:\RepRap\G Code Files Diamond hot end\Python temp.gcode” # A temporary file used to hold smallish sections of the original and which gets read into memory.
purgeAmount =2.5 # This is the amount of filament to be purged when a tool change is needed

The next thing I struggled with was how to detect the start of a print proper. Slic3r inserts all sorts of comments both before and after the actual print and I use quite a complex start gcode in my slic3r setting. In the end I decided to use flags in my start and end gcodes. So the last line of my start gcode is a comment “;begin” and the first line of my end gcode is the comment “;end”. The main reason for doing this is that the script simply looks for the text “T” to detect a tool change and as “T” can be found in comments and both pre and post print sections, I need to restrict the search.  

beginText=“begin” #string to look for to detect start of gcodes proper. This should be the last line of slicer start gcode
endText=“end” #string to look for to detect end of gcodes proper. This should be the first line of slicer start gcode
searchToolText=“T” # String to look for to detect a tool command (which is why we need to restrict the search to between “begin” and “end”
# Tool number could be anything after the “T” so we can’t can’t search for “Tnn” explicitly

Here are all the other variables that I have used. I know that I probably shouldn’t have declared them as global variables but at least they are all in this section so easy to find what they do. I also know that I’ve probably used a lot of unnecessary flags and that they could be boolean rather than integers etc etc.

beginFlag=0 # flag to detect if the word “begin” is present
endFlag=0 # flag to detect if the word “end” is present
#There is nothing to check that begin is indeed before end – maybe do this check too.
toolFlag=0 # flag to detect that tool changes are present
toolChanges=0 # number of tool changes in the file
currentTool=“T0” #default this to “T0”
lineText=“” # text read in from file
startLineNo=0 # the line number in the file immediately after the word “begin”
toolChangeLineNo=0 # the line number in the file where a tool change occurs

newToolPos=0 # the position where the tool command will be inserted
lastLine = 0 # the position of the last line in the temp file
lineToRead=0 # pointer to which line to read in the temp file
estart=0 # position in the line after the letter “E” which denotes the position of the start of digits for extrusion
estring=“” # the string of 7 digits following the letter E
EAmount=0.0 # estring converted to a number
totEAmount=0.0 # the sum of all EAmounts
EAmountNeeded=0 # the purge amount less the totEAmount
notEnoughFlag=0 # flag to set if the the totEAmount is less than needed for a full purge between tool changes

xStartPrev=0 # the position in the previous line where X is
xPrevString=“” # read the 7 characters after “X”
xPrevNum=0.00 # convert to number – First X value

xStartHere=0 # the position in this line where X is
xHereString=“” # read the 7 characters after “X”
xHereNum=0.0 # convert to number – Second X value

xMove=0 #xHereNum-xPrevNum

yStartPrev=0 # the position in the previous line where Y is
yPrevString=“” # read the 7 characters after “Y”
yPrevNum=0.0 # convert to number – First Y value

yStartHere=0 # the position in this line where Y is
yHereString=“” # read the 7 characters after “Y”
yHereNum=0.0 # convert to number – Second Y value

yMove=0 # yHereNum-yPrevNum

E1 = 0 # EAmount-EAmountNeeded
E2 = 0 # EAmountNeeded

X2 =0 # xHereNum
X1 =0 # PrevNum +(xMove/eAmount*E2)
Y2 =0 # yHereNum
Y1 =0 # yPrevNum +(yMove/eAmount*E2)

E1string=“” # used to build insertString1 – 1st E amount
E2string=“” # used to build insertString2 – 2nd E amount
X1string=“” # as above but X values
X2string=“”
Y1string=“” # as above but Y values
Y2string=“”

insertCheck=0 # used in loop to check lines are valid for inserting text
firstInsert=0 # modified from newToolPos if that position contains something other than a normal XYE move
secondInsert=0# as above

insertString1=“” # 1st (new) move string prior to tool change i.e. “G1 Xnnn.nnn Ynnn.nnn En.nnnnn”
insertString2=“” # then the tool change
insertString3=“” # then the second move string

changesDone=0 #number of tool changes done

So now we start the script proper. This section should all be self explanatory. I don’t know how to indent individual lines within a paragraph using this WordPress thingy so I’m having to do it by starting a new paragraph wherever the text needs to be indented.  Therefore there are what look like a lot of blank lines in what follows but Python relies on indentation for the code to work so it’s important that I show it.

# Start by reading through the file to check that “;begin” and “;end” are present
startfile=open(sourceFile,‘r’) # Open file as read only
numLines=sum(1 for line in (startfile))

startfile.seek(0)# set to start of file (just in case)
print (“Checking File…”)
for x in range (0,numLines):

lineText=(startfile.readline())
if endText in lineText:

endFlag=x
break # exit loop on first instance of “end”

for x in range (0,numLines):

lineText=(startfile.readline())
if beginText in lineText:

beginFlag=x
break # exit loop on first instance of “begin”

print (“Number of lines =”,numLines) # Just for info
if beginFlag>0:

print (“\”;begin\” text is present at line “,beginFlag) # Just for info – print a message to say that the search string was present.

else:

print (“There is no \”begin\” statement in the file”) # If not print a different message to say that the string wasn’t found…….
print (“Add \”begin\” to the end of the start gcode in Slicer”) # ….and tell the user what to do about it.
print (“And/Or edit the file and start again”)
startfile.close()
exit() pr# if there is no “begin” text string in the source file then end the script after printing the message and closing the file.

if endFlag>0:

print (“\”;end\” text is present at line “,endFlag) # comments as above
print(“”)

else:

print (“There is no \”end\” statement in the file”)
print (“Add \”end\” to the end of the start gcode in Slicer”)
print (“And/Or edit the file and start again”)
startfile.close()
exit()# if there is no “end” text string in the source file then end the script after printing the message and closing the file.

startfile.close() # I always like to close a file when an operation on it has finished – just in case.

This next bit is just for information really although the number of tool changes is used further on in the code and if there aren’t any tool changes found, it will print a message and exit. 

#so now read through and count the number of tool changes between begin and end
startfile=open(sourceFile,‘r’)
startfile.seek(0)

print (“Checking for tool changes…”)
for x in range (beginFlag,endFlag):

lineText=(startfile.readline())
if searchToolText in lineText:

toolFlag=toolFlag+1

toolChanges=toolFlag-1 # the first occurrence will be the first tool, so take 1 off to get the number of tool changes.
if toolChanges>0:

print (“There are “,toolChanges-1,“tool changes in the file”)
print(“”)
startfile.close()

else:

print (“There are no tool changes in this file”)
print (“So no changes will be made.”)
startfile.close()
exit()

startfile.close()

Now I read through the file and copy everything up to the first tool change into the output file

# Now read through the file and copy everything up to the first tool change
startfile=open(sourceFile,‘r’) # open source file again for reading
startfile.seek(0) # make sure we start at the beginning
endfile = open(destinationFile,‘w’)# open the destination file for writing
print (“Reading file and writing lines up to first tool change”)
print(“”)
#start by copying everything up to the begin statement
for x in range (0,numLines):

lineText=(startfile.readline())#read line from input file
# uncomment the following line with caution – it really slows things down.
#print (lineText)
endfile.write(lineText) # copy line to output file

if beginText in lineText: #is there a tool string present in this line?

startLineNo=x # if so, set the variable StartLineNo to x which will be the text file line number

break #end the loop when the first tool line number has been reached

# end of for loop

endfile.close()

# So now check for first instance of a tool (check gcode file for a “T”)
# also, append all the lines up to this point to the end file
# Start by opening the end file again in append mode

endfile = open (destinationFile, ‘a’) # open again in append mode

for x in range (startLineNo,numLines): # miss out the first lines from 0 to StartLine No

lineText=(startfile.readline())#read line from input file
# uncomment the following line with caution – it really slows things down.
#print (lineText)
endfile.write(lineText) # copy line to output file but this time we are amending it to the end of the file
if searchToolText in lineText: #is the string present in this line?
currentTool=lineText # if so, set the variable CurrentToolText to whatever this line holds (string value)
toolChangeLineNo=x
endfile.close()
break #exit loopif

endfile.close()

# *********** Now it gets tricky************

What I do next is copy chunks of the source file between tool changes into a temporary file. The reason for doing so is that I wanted to read this file into a list so that I can work on it. Maybe I could read the entire file into memory but potentially it could be a huge file and gobble up all the PCs resources. David Crocker (DC42 of Duet fame) has said that if he were doing this in firmware, he would have two streams – the original and the output with the a kind of buffer that would hold just the number of commands that make up the purge amount, rather than this approach which holds all the commands between one tool change and the next before they are written to the output file. Thinking about it, that would be a far better approach but the following is how it is now. So, to continue…

(Oh by the way, there are quite a few commented out print statements in what follows which were only used for debugging)

# Read lines from latest tool to next tool and stick them in a temporary file

for changesDone in range (1,toolChanges):# repeat the rest of this until we reach the end of the file

print (“Doing tool change “,changesDone)
totEAmount=0 # reset to zero
newToolPos=0 # reset to zero

tempfile = open(temporaryFile, ‘w’) # This will create a file if it doesn’t exist and/or overwrite.
print (“Writing to temporary file……”)
for x in range (toolChangeLineNo,numLines): # miss out the first lines from 0 to StartLine No

#print (“Tool change line number = “,toolChangeLineNo)
lineText=(startfile.readline())#read line from input file

# uncomment the following line with caution – it really slows things down.
#print (LineText)
tempfile.write(lineText) # copy line to temporary output file
if searchToolText in lineText: #is the string present in this line?

currentTool=lineText # if so, set the variable CurrentTool (Text) to whatever this line holds (string value)
toolChangeLineNo=x # so update the pointer to the current line number…
break #… and exit loop

if x==numLines: # if we reach the end of the file (we should never get here)
print (“No more tool changes”) # print message, close files and quit

tempfile.close()
endfile.close()
startfile.close()
quit()

#end of x loop – still in changesDone loop

tempfile.close()# Close the file for writing to

#now read the whole tempfile into a list so we can work on it
f=open(temporaryFile,“r”)
templines =f.readlines()
f.close()
lastLine =(len(templines)-1) # Len is the number of lines in the file but the last line will be 1 less because the first line is indexed as 0.
#print (templines[lastline]) # just for debugging
print(“Calculating new tool position”)
#Start at the end of the file and work backwards
# read the 7 characters after the “E” in a line
notEnoughFlag=0 # Reset flag (start at zero)
for j in range(1,lastLine): # set range to the number of lines in the file so that it can’t go back beyond that

lineToRead=lastLine-j # read the line
#print (templines[lineToRead]) # for debugging only – comment out later
if “E” in templines[lineToRead]: # check that the line does actually have an E value

estart=templines[lineToRead].find(“E”) # find the position in the line where E is
estring=templines[lineToRead][estart+1:estart+8] # read the 7 string characters after the E
#print(estring) # just for debugging – comment out later
EAmount=float(estring)# convert the string to a number
#print (EAmount) # just for debugging – comment out later
totEAmount=totEAmount+EAmount # add this amount to the previous amount to get a total
#print (totEAmount) # just for dbugging – comment out later
if totEAmount > purgeAmount:

newToolPos=lineToRead #Set the new tool position to lastline -j (the point in the line where the sum of all the extruder commands excedes the purge amount).
#print(“new tool position “,j)
break #exit the loop

if j==lastLine: # if we go all the way back

newToolPos=lineToRead # then there aren’t enough moves to purge fully so set new tool pos to the earliest position
print (“WARNING Not enough extrusion between tool changes to fully purge”)
notEnoughFlag=1

j=j+1

# so now we have the position for the tool where adding the Eamount from the line after excedes the amount needed to purge
# but it’s counting backwards from the end
print(“Splitting Gcode line at insert point”)
# so I want to use only the amount needed, therefore I have to split the line
#the amount needed will be the ToteAmount minus the purgeAmount
EAmountNeeded = totEAmount-purgeAmount
#get the x an y totals for the line that needs to be split

# ************Trap for the line not being a normal XYE move **************
# ************If it isn’t go back and keep going back until we find one **************

insertCheck=0
secondInsert=newToolPos
if notEnoughFlag==1: # skip the next bit if flag set

insertCheck=0

while insertCheck ==0:

if “G1 X” in templines[secondInsert]:

insertCheck=1
break

else:
secondInsert=secondInsert-1
insertCheck=0

# Now get the x value from this line

xStartHere=templines[secondInsert].find(“X”) # the position in this line where X is
xHereString=templines[secondInsert][xStartHere+1:xStartHere+8] # read the 7 characters after “X”
xHereNum=float(xHereString) # convert to number – Second X value

# and do the same for the y value
yStartHere=templines[secondInsert].find(“Y”) # the position in this line where Y is
yHereString=templines[secondInsert][yStartHere+1:yStartHere+8] # read the 7 characters after “Y”
yHereNum=float(yHereString) # convert to number – Second Y value

#Now do it all again for the previous line

insertCheck=0
firstInsert=newToolPos-1 #take 1 away to get the previous line
if notEnoughFlag==1: # skip the next bit if flag set

insertCheck=0

while insertCheck ==0:

if “G1 X” in templines[firstInsert]:

insertCheck=1
break

else:
firstInsert=firstInsert-1
insertCheck=0

xStartPrev=templines[firstInsert].find(“X”) # the position in the previous line where X is
xPrevString=templines[firstInsert][xStartPrev+1:xStartPrev+8] # read the 7 characters after “X”
xPrevNum=float(xPrevString) # convert to number – First X value

yStartPrev=templines[firstInsert].find(“Y”) # the position in the previous line where Y is
yPrevString=templines[firstInsert][yStartPrev+1:yStartPrev+8] # read the 7 characters after “Y”
yPrevNum=float(yPrevString) # convert to number – First Y value

#Now take one from the other
xMove=xHereNum-xPrevNum
yMove=yHereNum-yPrevNum

# Now split the values

E1 = EAmount-EAmountNeeded
E2 = EAmountNeeded

X2 = xHereNum
X1 = xPrevNum +(xMove/EAmount*E2)
Y2 = yHereNum
Y1 = yPrevNum +(yMove/EAmount*E2)

# Now convert the values back to strings

E1string=“{:.5f}”.format(E1)# 5 decimal places
#print (E1string)
E2string=“{:.5f}”.format(E2)
#print (E2string)
X1string=“{:.3f}”.format(X1)#3 decimal places
#print (X1string)
X2string=“{:.3f}”.format(X2)
#print (X2string)
Y1string=“{:.3f}”.format(Y1)
#print (Y1string)
Y2string=“{:.3f}”.format(Y2)
#print (Y2string)

#build strings to insert
insertString1=“G1 X”+X1string+” Y”+Y1string+” E”+E1string+”\n” # 1st (new) move prior to tool change
insertString2=currentTool # then the tool change
insertString3=“G1 X”+X2string+” Y”+Y2string+” E”+E2string+”\n” # then the second (new) move

#print (insertString1)
#print (insertString2)
#print (insertString3)

#determine the point where the lines need to be inserted
insertPoint=lastLine-j
print (“Appending lines to output file”)
#now open the end file and append this lot to it.
endfile = open(destinationFile,’a’)
for x in range (0,insertPoint):

endfile.write(templines[x])

endfile.write(insertString1)
endfile.write(insertString2)
endfile.write(insertString3)
for x in range (insertPoint+1,lastLine):

endfile.write(templines[x])

endfile.close()
print (“Tool change “,changesDone,“done”)
print(“”)
changesDone=changesDone+1 # so go back and do it all again for the next tool change

# End of changes Done loop

print(changesDone-1,“Tool changes moved”)
print(“”)
if notEnoughFlag==1: # skip the next bit if flag set
print(“WARNING there was insufficient filament extruded to fully purge between at least one of the tool changes”)
endfile.close

# So now all that remains is to append the rest of the source file to the output file

print (“Copying remaining lines to output file…”)
print(“”)
endfile = open(destinationFile,’a’)
for x in range (toolChangeLineNo,numLines):

lineText=(startfile.readline())#read line from input file
endfile.write(lineText)

startfile.close()
endfile.close()
print (“Done..”)

And that my friends is it!!

I don’t suppose anyone will want to copy and paste all the above code so I’ve uploaded the file to my Google drive.

Edit. 24th Jan 2017. I have removed the link to the Python script because there were a number of bugs – see later posts.

Duet pressure advance experiments

This is a follow up to my post about exploring melt rates and printing at high speeds with a Diamond hot end. https://somei3deas.wordpress.com/2017/06/22/exploration-of-print-speeds-with-a-diamond-hot-end/

During those tests I noticed that the beginning and end of the moves were rough and raised. I also noticed that during a long corner to corner non-print move, the filament was oozing and being deposited in blobs. Both of these issues got worse as the print speed was increased. It seemed to me that pressure was building up between the extruder and hot end which was what was causing both of these issues and “normal” retraction settings were not enough to compensate. It was also apparent that using retraction alone, I would need to set it higher and higher as I pushed the speed up. So I decided to experiment with using the pressure advance setting that is in Duet firmware.

It should be noted that I had tried playing around with this setting some time ago. The wiki states that a value of 0.1 to 0.2 would likely be appropriate for Bowden tube setups. As my Bowden tubes are only 165 mm long, I thought that a low setting would be needed so I tried from  between 0.01 to 0.2, none of which made any unnoticeable difference, but then I didn’t really have a problem with print quality to start with. I thought at the time that maybe there was something about a mixing hot end that negated the effect of using pressure advance. It was only when I started playing around with higher speeds that I noticed an issue.

I started with everything as before – same filament still loaded. Print setting unchanged. Same gcode file (sliced at 100mm/sec). After laying down a few layers at slow speed to get a good foundation, I pushed the speed straight up to 150mm/sec which from my previous tests, was close to the maximum melt rate that I could extrude at (with a single filament), and more or less the worse case speed for showing up the rough ends of the moves and the non-print move blobs.

I started with a pressure advance setting of 0.2. That is to say, while the print was running I used M572 D0 S0.2 then did the same for the other extruders (D1 and D2). Even though they were only contributing 1% each and doing was doing 98% of the work, I thought it best to set them all the same. There did seem to be a slight improvement but not much.

So I went up to 0.3 and there was a marked improvement but the short front to back “Y” moves slowed noticeably. DJDemon on the Duet forum had reported this and DC42 (the writer of the firmware) said it was due to having a high pressure advance value combined with a low extruder jerk setting. So at this point I doubled the jerk setting from 600 to 1200 which resulted in an instant increase in speed. Note that only the short “Y” moves are noticeably affected as pressure advance only applies to the acceleration and deceleration phases of the extruder(s). The long “X” moves were still largely unaffected as the acceleration and deceleration phases are short relative to the constant speed portion.

Further improvements were noticed at 0.4 and 0.5 “S” values but going up to 0.6 made no further difference. That is to say that I couldn’t visually see any difference in print quality between using 0.5 and 0.6 so elected to use the lower value.

As before, I took some video footage and put together a short video which compares with and without pressure advance.

This one is much shorter – less than 8 minutes in total. When you look at what the extruders are doing, it looks and sounds absolutely crazy but prints beautifully.

 

As you can see, the roughness is almost gone and the non-print move blobs are history.

What is interesting is that the same pressure advance setting works for all speeds and both single extruder and three extruder configurations.

I will have to re-visit my retraction settings as it is highly likely that I’ll need to use far less.

As for why I need a much higher value than expected. I have a theory that maybe the Bowden tubes play less of a part than expected. Personally, I don’t buy into the theory that the filament itself can be compressed like a coil spring, but it could buckle somewhat inside the Bowden tube, but a 1.75 mm filament inside a 2mm tube isn’t going to buckle much. What I think happens is that it’s a more a function of the volume inside the hot end. We’ve seen that the Diamond has a large melt chamber (if we include the long 2mm diameter section). Also, it has three chambers which are connected together. So pushing filament into a high volume space, the pressure will build up more slowly (than a smaller volume space) but when we stop pushing the filament, the higher volume will mean that it will take longer for the pressure to normalise than it would with a smaller volume.

It’s just a theory and until we can get a pressure transducer inside a hot end, we’ll never know.

As ever, watch this space…………..

 

 

 

 

Exploration of print speeds with a Diamond hot end

Disclaimer

Note that in the following blog I make comments about the Diamond hot end, E3D’s Titan extruders, and Duet electronics and maybe some other organisations. I wish to make it clear that I have no affiliation with any of these companies. All the items mentioned were bought by me as a paying customer and any comments I make are my own personal observations. None of what follows should be construed as any sort of recommendation or otherwise.

Introduction

For a while now, I’ve been wondering what the maximum print speed of a Diamond hot end might be. My rationale has been that effectively it has three melt zones (one for each filament) which in theory, if all three were used at the same time, should result in a higher filament melt rate and thus higher possible print speeds.

Also, looking at a drawing of the hot end, shows that many of the internal dimensions are very similar to E3D’s Volcano nozzle. Here is a drawing of the Volcano, reproduced here with kind permission from E3D.

Volcano-Nozzle

Here is a picture of the Diamond hot end, reproduced here with kind permission of RepRap.me.

diamond_nozzle_d

As you can see, the internal dimensions for the filament path are very similar, so possibly the melt rate might be similar too – and of course, there are three of them in a Diamond hot end.

Test Methodology

I guess one way to test the melt rate might be simply to heat the nozzle and extrude filament into air at higher and higher speeds and measure the actual amount of extruded filament each time. However, I wanted to know how that translates to actual attainable print speeds, so I decided to adopt a different strategy and actually print something.

My first consideration was that I needed to know that whatever speed I chose to print at would actually be attained and not limited by acceleration. Also, I wanted to have long continuous moves so that the extrusion wasn’t too affected by stopping and starting. Finally, I wanted to be sure that the first few layers were laid down nicely so that the quality of subsequent layers wasn’t affected by the quality of the underlying layers (this didn’t quite work as planned but more on this later).  So this meant that I would have to start slow and gradually increase the speed. With that in mind, I didn’t want something that was big in both X and Y directions as the first few layers would take a long time to lay down.

As readers of this blog will know, my gantry assemblies are heavy. In the X direction it’s about 1,670gms and in Y  about 3,048gms. So my accelerations are correspondingly low but X is higher than Y (obviously). (The acceleration figures were derived from calculations of the masses involved and the stepper motor characteristics and verified by testing to ensure that they are attainable without any missed steps).

So, I elected to have an object that was  long in X but narrow in Y which would be fairly quick to print the first few layers. I created a simple cuboid 300mm in X, 30mm in Y and 30mm in Z which I sliced using 100% infill at 90 degrees (i.e,. the infill is parallel to the sides).  I would simply ignore the short Y moves and concentrate my findings on the longer and faster X moves.

The theoretical speeds are as follows.

X length is 300mm. Acceleration is set to 1200 mm/sec^2. With the initial velocity being zero the formula for maximum speed is sqrt(2*acceleration*length/2) = 600mm/sec (should be adequate)

Y length is 30mm. Acceleration is set to 660 mm/sec^2. Using the same formula, the maximum attainable in speed in Y is 140.7 mm/sec. So regardless of what speed is demanded, that’s as fast as moves in Y will go, and they will ramp up to that speed, then ramp down to zero.

The object was initially sliced at 100mm/sec. I used my “normal” PLA settings which are 195 deg C hot end, 50deg C bed, and with an extrusion multiplier of 95%. I bought three identical reels of PLA from the same vendor and loaded one into each of the extruders. The object was then printed, starting at 50% speed (so 50mm/sec), for the fist few layers. Then the speeds was increased on layer change and the surface finish visually checked for obvious under extrusion or other signs of distress.

A total of four test were carried out.  The first was with a (more or less) standard 0.5mm nozzle and single filament input, at 0.3mm layer height. Note that the standard Diamond nozzle is 0.4mm but I always drill mine out to 0.5mm for reasons that I won’t go into here. Note also that I always use the hot end as a mixing hot end. That is to say that I always keep the filament moving in the “unused” inputs. So when printing with a single filament, I load some into the other two inputs and use a mixing ratio of 0.98:0.1:0.1. This means that the “single input” tests were actually using 98% of one input and 1% of each of the other two.

Test number 2 was with the same 0.5mm nozzle and 0.3mm layer height but using all three inputs in more or less equal proportions (actually 34%, 33% and 33%).

Test number 3 was with a 0.9mm nozzle (RepRap.Me will supply one if you ask them), 0.6mm layer height and single input.

Test number 4 was with the 0.9mm nozzle, 0.6mm layer height and all three inputs.

Note that the model was re-sliced at slower speeds for tests 3 and 4.

I recorded a video clip of each step and put it all together, with comments. Note that even though I shortened the video by cutting out many of the intermediate steps, it’s still around 27 minutes in length. Watch it if you can – you’ll be surprised by some of what you see.

 

Notes and conclusions. 

Firstly, it soon became obvious that at higher speeds there was an issue at the end of each move. This was much more obvious on the short 30mm “Y” moves but also noticeable at the end of the longer “X” moves. My theory (which will do until I can think of a better one) is that (at high speeds) pressure builds up between the extruder and the nozzle tip. Then as the carriage approaches the end of it’s travel, it starts to slow down but because of the pressure that has built up, and although the extruder starts to slow down, the filament is still being forced out at the same speed, resulting in over extrusion of filament relative to axis movement. This leads to the raised ridges which are visible in the video at the ends of each move. Duet firmware does have a pressure advance setting but I’ve never experimented with it all that much – perhaps it’s time that I did – watch this space……………..

Secondly, in a similar vein, as the speed was increased, blobs started to appear on the print. Despite my setting seams to “nearest”, Slic3r decided to move the print head diagonally from one corner to the other on layer changes at the end of the “Y” direction infill. This was a long non-print move and the blobs got bigger as the print speed was increased. Again, my theory that it was due to pressure build up would explain it. So, again using pressure advance in the firmware might help.

Thirdly, I had expected to reach a point where the demanded extrusion speed exceeded the melt rate for the filament and that it would be obvious when that speed had been reached. I reality, it wasn’t as clear cut. In general terms the extruded filament just got “thinner” for want of a better word and was less able to cover defects from the previous layer. It seems that the Titan extruders do too good a job of pushing the filament through. No clicking (apart from the last test), no skipped steps, no grinding of filament – nothing! In some of the tests, there is clear evidence that the maximum speed at which filament can be laid down has been exceeded but it is fair to say that some under extrusion probably started at some speed before this.

Fourthly, my somewhat arbitrary observations of maximum melt rates are as follows:-

With a 0.5mm nozzle and 0.3mm layer height, the maximum print speed before severe signs of under extrusion occurred was 160mm/sec. To calculate the maximum melt rate I used nozzle area (0.0558125mm^2) x the layer height (0.3mm) x the speed (160mm/sec) x the extrusion multiplier (0.95) giving me 8.955 mm^3/sec.

With a 0.5mm nozzle, 0.3mm layer height and using all three filament inputs, the maximum print speed before severe under extrusion was observed was 260mm/sec (honestly! ……. watch the video if you don’t believe me) giving a calculated melt rate of 14.551 mm^3/sec.

With a 0.9mm nozzle, 0.6mm layer height and single filament feed, the maximum print speed was 62 mm/sec. Using the same formula for melt rate calculation, nozzle area is 0.381753 mm^2 x layer height (0.6mm) x speed (62) = 22.485 mm^3/sec.

The final test using a 0.9mm nozzle, 0.6mm layer height and all three inputs was much harder to estimate the point where severe under extrusion occurred. In the end I decided on 90mm/sec (180% of 50mm/sec) based solely on the fact that at higher speeds, “clicking” from the extruders was clearly audible. This gives a calculate melt rate of 32.640 mm^3/sec.

Whether my somewhat arbitrary choice of maximum speeds or whether some lower speed would be more realistic, I leave up to each reader to come to their own conclusions. Personally, I think that the Diamond hot end is capable of some fairly substantial melt rates, possibly comparable to an E3D Volcano (at least when being fed by three extruders), but as I’ve never used a Volcano, I cannot say for sure.

What is fairly convincing is that using all three inputs results in higher melt rates and thus higher speeds. Also, a 0.9 mm diameter Diamond hot end can maintain a larger volume flow rate than a 0.5mm nozzle, even when the smaller nozzle is being fed with all three inputs.

I hope readers will have found something of interest in the above. (Does anyone have a use for several 300mm x 30mm x various thickness plastic sticks?)

Ian

PS. The featured image is a still from the video. Did it really reach 300mm/sec? Time to reach 300mm/sec at 1200 mm/sec^2 (Vf-Vi/a) = 300/1200 = 0.25 secs. Distance to get up to 300mm/sec (s=1/2at^2) = 37.5mm. So yes, it was accelerating for 37.5mm, and decelerating at the end for 37.5mm so for the 225mm in the middle it really was doing 300mm/sec.

PPS – Some more calculations (as of 23rd June).

Looking again at the drawing of the Diamond, we see that there is a tube about 21mm long and 2mm diameter. Given that the filament is 1.75mm diameter it’s difficult to estimate the filament to metal contact area, so difficult to estimate what contribution this section will make to the overall melt rate. However, taking the shorter 0.4mm “tubes” there is a 3mm long part and then another 2mm long part giving a total area of about 6.3mm^2 for a single filament – using three inputs we have 3 x 3mm plus 2mm giving a total area of 13.8 mm^2. If we open those holes up to 0.9 mm, the area for a single filament becomes 14.1 mm^2 and for all three, 31.1mm^2.

 

 

Making an Insulating “Sock” for the Diamond Hot End.

I’ve been intrigued by the silicone “sock” that E3D make for their hot ends. I’ve recently been using their “Edge” filament which has a great affinity for sticking to the nozzle and E3D claim that using a silicone sock helps to keep the nozzle clean. The other potential advantage that I see is for situations where the print cooling fan blows air across the nozzle which can drop the temperature. This may in itself not be enough to affect the print but in recent versions of Duet firmware, it can trigger a heater fault. For safety reasons, if the firmware sees a sudden drop in temperature, it will turn turn the hot end heater off because it could well be caused by the heater cartridge coming out of the hot end.

In my particular case, the fan ducts are arranged so as to deflect the print cooling air down and away from the nozzle. However, it is practically impossible to prevent cooling air being deflected back up to the nozzle off of the bed or the printed part. As a quick test, I heated the nozzle to 195 deg C then, with the bed 100 mm below the nozzle, turned the fans on at 100%. There was no discernable drop in temperature. I then repeated the test but with the bed only 1 mm below the nozzle and noted a 2.1 deg C drop in temperature. Not bad but not desirable.

Searching the internet I couldn’t find any “off the shelf” insulating “socks” for the Diamond hot end so decided to have a go at making my own. The result was quite successful. Here is how I went about it :-

Firstly I designed the mould. I’ll put the stl and OpenScad files on Thingiverse and add a link at the end of this post.  Here is picture of the OpenScad design.

DiamondMould

There are 4 parts to it. The cone shaped part is the same size as the Diamond hot end with a small locating pin added to the tip. This cone has a hole in it which takes the “clover shaped” part. This is to make clearance around the heat sinks but leave a lip for the sock that will go over the top of the brass nozzle. I’m still refining this “inner top” part so by the time I get to put it on Thingiverse, it may look a bit different.  The two parts together form the inner section. I had to do it this way so that it could be printed. The other two parts go together and form the outer part of the mould. This outer part makes the shape of the Diamond but 2mm bigger all round.

Here are the printed parts.

pic1MouldParts

As I said, the “inner top” is still evolving. Here is the inner section assembled. They don’t need glueing together – in fact it’s probably best not to.

pic3MouldInnerAssy

I didn’t do anything special about smoothing the parts. I printed them using a 0.5mm nozzle with 0.3mm layer height and just gave them a bit of a rub over with some fine abrasive paper. I guess a smaller layer height and better finish would make it easier to get the sock out of the mould but it wasn’t a huge problem with the release agent I used (see below).

What is important is that the parts fit together well. I just stuck the two outer parts together with sticky tape but an elastic band would work too. Once the two out parts are (temporarily) held together, the inner cone shaped part should be tested for fit. The top of the inner should be flush with the top of the outer. If it’s higher, check that the locating  “pin” on the bottom of the cone is going fully into the recess in the outer mould.

I know absolutely nothing about all the various mould making materials. I did a bit of research and settled on using this stuff.

pic6HighTempRubber

It’s called “High Temperature Moulding Rubber” or “RTV High Temperature Resistance Mould Making Rubber” by DWR Plastics. I bought it off Ebay but you can buy direct  https://www.dwrplastics.com/product-information/5389e00cc0a0e/RTV-High-Temperature-Resistance-Mould-Making-Rubber-250g-Kit.

It’s claimed to be good for up to 330 deg C. There are many other brands of this stuff around, any of which will probably work. The reason I chose this particular one was that it seemed east to mix – simply use the same volume of each part A and part B.

The next step was to coat the mould parts in release agent to prevent the RTV from sticking to it. I’ve seen a couple of YouTube videos where people use hot Vaseline and other such things but I decided to buy the release agent from the same source (DWR plastics).

pic5Release Agent

Shake well and cover all of the inner parts, including the top. Then cover the inside and top of the out parts. Allow to dry and give apply a second coat. I actually applied a third coat as well.

Next I assembled the inner part into the outer parts, filled a syringe with water, then filled the mould. It takes around 5ml. So that’s how much rubber you’ll need to mix. Actually, it’s difficult to get it all out of whatever container you mix it in, so mix a little more – say 6 or 7 ml.

I happen to have a few 10 ml syringes laying around (no I’m not a junky but I do use e-cigs and mix my own “juice”).  So I used two of these and managed to “suck” 3ml of each of the two compounds and squirt them into a small glass container. This stuff is really thick and “gloopy” so you need a large hole in the syringe – i.e. don’t fit any sort of needle to it.

Then mix thoroughly – a cocktail stick works well.

pic7Mixed

The next step is to pour the stuff into the mould

pic8Poured

Then insert the inner part which will push the rubber up the sides. Make sure the inner part goes in all the way so that the top is flush with the mould. Then centre it by eye.

pic9InnerAdded

Scrape off any excess or top up as necessary then leave it to set. The cure time is stated as being 1 to 2 hours at 25 deg C. I left mine a little longer – just to be sure.

Once it has cured, use a sharp modelling knife to clean up the top.

pic10CleanedUp

Then, carefully cut around the “clover leaf” top, down 2mm to the top of the cone proper. I did the same around the outer edge. Then remove the adhesive tape and pull the out mould apart.

pic11HalfOpen

It might feel a bit stiff but I found going around the joint with the modelling knife helped but be careful not to cut into the rubber boot. Once a small gap has appeared, insert a small flat blade screwdriver and twist. Keep working around the edge and it’ll come apart.

Once one half of the mould is off, it’s quite easy to pull the rest out of the second half.

pic12FullyOpen

The next step is to remove the inner. This is surprising easy. Simply roll it down like this …..

pic13RollingBack

…. and you’ll end up with this……….

insideOut

…………which is inside out so turn it the right way out and you get this………

 

pic14FullyOut

Here it is fitted to a nozzle. It is important that moulded rubber is pushed up onto the brass nozzle as far as it will go. Keep going around the nozzle using your thumb to push it up.

pic15Fitted

So what remains is to carefully cut around the base of the mould to expose the tip of the nozzle, like this.

pic16TipCut

Now in reality, I found fitting it to be a pain because of the 3 layers of heat break insulation around the heat sinks so I had to cut chunks away and even then, disassemble the heat sinks. Here is what I had to do (on the left)

cut away

So, I said at the outset that the inner top part was still evolving and that is why. I have modified the design so hopefully it will be possible to fit the sock without any cutting and hopefully without having to disassemble the heat sinks. The parts are designed, I just have to print them and make another casting.

Here is a picture of it installed on my machine

fittedLightOff

 

I’ve done very limited testing so haven’t all that much to say at the moment but here is what I have so far.

Without the sock, the time taken to reach 195deg C from a starting temperature of about 29 deg C was about 225 seconds. With the sock fitted, the time is about 200 seconds. I haven’t measure the cool down time as it’s unimportant to me, but it seems to take much much longer.

Without the sock and with the print bed at 1mm from the nozzle tip, putting the print cooling fans on at 100 % gave a 2.1 degree drop in hot end temperature before it recovered. With the sock fitted, there is no discernable change in temperature with respect to the operation of the print cooling fans.

There is no gain in maximum attainable print speed. That is to say, the filament melt rate is unchanged which is as I would expect, because there will be no increase in temperature in the melt zone of the hot end. Proof of this and some other stuff related to print speeds will be the subject of my next post.

Link to Thingiverse files here https://www.thingiverse.com/thing:2386473

Ian

 

 

 

 

 

 

Printer upgrade

Just a quick post to say that I’ve updated the page which details the latest iteration of my CoreXY build. New features recently added are a complete redesign of the XY gantry arrangement where I’ve reverted back to dual rails. I also have another method of using the hot end nozzle to act as a bed probe, this time with bronze bushes and steel dowels, instead of the moving plastic dovetail joint. Finally, a complete redesign of the extruder mounting arrangement which now has it’s own passively driven XY gantry (and even shorter Bowden  tubes).

Here is a link to the page

My CoreXY Printer build

Ian

How I assemble Diamond Hot Ends

A few people have asked me how I stop leaks around heat sinks and I’ve also read quite a few posts on various forums by people who have had problems, either with leaks or blockages. I’ve never had any problem with leaks and only on rare occasions, partial blockages. The latter were in my early days of using the Diamond and were mostly caused by my turning off the printer and hence the cooling fan, before the hot end had cooled sufficiently, resulting in “heat creep”.

I’m not sure if I’ve just been lucky but I thought it might be useful if I shared my method of assembling the Diamond hot end, as it is a little different from the official “RepRap.me” method. This is a hot end that I had to re-build as it had been fitted with the original woven thermal blankets, which had basically fallen apart and needed replacing.

Having disassembled the hot end, the first thing I needed to do was clean out the bore of the heat sinks. If you are starting with new heat sinks, it shouldn’t be necessary but it might be worth just running a 4mm diameter drill bit down the holes to be sure that the ptfe Bowden tube will slide in nicely.

reamingTheHole

RepRap.me say to assemble the heat sinks into the brass cone first, then fit the Bowden tubes. The trouble with that is that you can never be quite sure that the tube has gone all the way into the heat sink and/or it requires some very careful measuring. So I like to fit the tubes first like this, leaving them just protruding.

tubeInserted

Then, using a craft knife, I trim the end flush like this. Keeping the side of the knife against the end of the heat sink ensures a clean straight cut. Make sure you use a very sharp knife as you don’t want ragged bits of ptfe inside the tube. tubeEndTrimmed

Then I pull back the tab on the Tube holder and fit Bowden clips (plenty of designs on thingiverse). This part is as per RepRap.me instructions.

tubeClip

If you know how long your Bowden tubes need to be, you can cut them to length now. If not, leave them over long. Once they are cut to the right length, I like to form a funnel inside the extruder end. To do this, I use 2.5mm drill bit and drill down a few mm while working the bit from side to side and up and down. I use Titan extruders which have filament guides built in but even so, I’ve had problems when loading filament with it getting stuck against the very end of the tube, instead of sliding straight in. Forming a “funnel shape” in the end of the tube alleviates this problem.

formingTheBowdenTube

It’s easier to do this now if you can, because you can now take an off cut of filament and feed it right through the Bowden tube from the heat sink end back towards the extruder end. This will clear out any small bits of ptfe swarf.

The next thing I do is wrap ptfe tape, (also known as thread tape) around the thread. applyingPTFE

Note how I hold the reel of tape so that it is always kept taught. Note also that it is important to wind the tape onto the thread the same way that you would screw on a nut. Then when you screw the heat sink into the threaded hole, it will have a tendency to wind the tape onto the thread and keep it in place. If you wind the tape in the other direction, the tendency is for it to unwind as you screw it into the hole.

Do the same for the other heat sinks.

heatSinksPrepared

Now I like to prepare the thermal blankets. Thankfully, RepRap.me have gone away from the awful woven stuff that simply fell apart. This is how they look now.

thermalBlanket

I’m not sure what they are made of but it’s more fibrous than woven and doesn’t seem like it’ll fray. However, it might so I like to wrap it in Kapton tape like this.

blanketWithKapton

I use 50m wide tape and start with a length of about 100mm or so, laid sticky side up. Then I place the thermal blankets on top (ensuring that all the holes line up) and fold the Kapton tape over. Then press it down around the edges so that it sticks to itself and trim around with a pair of scissors. Lastly, I pierce the tape on both sides by cutting a cross over each of the holes with a very sharp knife.

Then I fit the 3 heat sinks and the cartridge heater to the prepared thermal blanket. I use a standard 20 mm heater which actually stand proud of the hole by 5mm. That’s not ideal I know but it has never caused me any problem.

 

heatSinksAndCartridge

 

Double check to make sure there are no bits of tape or other no debris anywhere near the ends of the tubes. I don’t fit the temperature sensor at this stage. If you use thermal paste, now is the time to apply it. Personally I use this stuff but only on the heater.

copperSlip

When I was in the automotive industry many years ago, we used to call it “copper slip” and used it on spark pug threads and the like. Some little while ago, I did some back to back testing with this stuff and there was a marked improvement in heat up time due to the high copper content which improved thermal transfer. The carrier grease does burn off at high temperatures (somewhere around 350 degC IIRC) but the copper gets left behind and improves the thermal transfer. I’m a bit dubious about using the thermal paste that RepRap.me supply as I’m not sure if it is designed to withstand hot end temperatures. Maybe it’s OK – just not sure.

The next thing to do is fit the heat sinks and tighten them up. RepRap.me say not to do them too tight and allude to the fact that they will be fully tightened later. However, that later tightening doesn’t get mentioned (or it didn’t that last time I read those instructions) and in any case, once the hot end is fitted to the fan shroud, it’s almost impossible to tighten the heat sinks further. So I tighten them fully at this stage. I use a pair of pipe grips which prevent me from doing them up so tight that they would likely snap the heat sinks. All I can say is do them up tight but take care.

tightenHeatSinks

The next thing to do (which I always forget) is to fit the screws into the mount that will retain the 40mm fan. These need to have small heads to clear the top of the heat sinks, so cap head screws are a no no. There is no way to fit two of the screws once the hot end is clipped into the fan shroud. I’ve found that making the holes in the mount slightly undersized helps to keep the screws in place.

fitFanScrews

So the last ting to do is to fit it all together. I start by partly fitting the heat sinks to the mount but not fully.  This is when I fit the temperature sensor (a 4 wire pt100 in my case). Note that the RepRap.me instructions seem to indicate that the temperature sensor wires should go inside the fan shroud, along with the heater cartridge wire. I find that part of the shroud gets in the way and presses on the wire, so I prefer to run the temperature sensor wire outside the shroud but still hold it in place with the same cable that holds the heater wires to the inside of the shroud.

fitThermistor

Then, clip it all together and fit the cable ties and finally, mount the fan.fitCableTies

Do please excuse the state of the plastic mount. I printed that with the awful eSun PETG that I wrote about in an earlier post.

I like to use nylok nuts on the fan screws. If a nut fell off and went into the fan, it could fly out and do some damage to an eye or something.

Hope some of the above may be of use. As I said in my opening remarks, I’ve never really suffered with any of the problems that some people have so maybe, this assembly method may help.

eSun PETG and E3D Edge

I need to make some parts for my printer upgrade which will need to be strong so I thought it was about time that I tried some of the newer PETG filaments. As ever, these are just my personal experiences and I have no links with either eSun or E3D other than being a paying customer. Neither do I have any “axe to grind” or grudge against any company. What follows are just my own findings, on my machine and should not ne taken as any recommendation or otherwise.

I have for a long time wanted to try E3D’s Edge filament but the price has always put me off so I bought a couple of reels of eSun PETG from eBay. It cost me £51.48 for two 1kG reels, including postage and packing. This is quite a bit more than I normally pay for PLA but considerable less that E3Ds Edge. I was hopeful that the extra cost would be justified by the parts being stronger.

The reels arrived very well packed and each reel was inside a strong vacuum bag.

Before I go any further, I should remind readers that I use a Diamond hot end which has 3 inputs but a single nozzle. It is very important that all 3 inputs are loaded with filament at all times, otherwise the extruder pressure will simply force filament out of any unused inputs. However, buying 3 rolls of filament gets expensive when I only want to print a single colour, so what I do is pull off  a couple of 5 or 10 metre lengths of filament. Then I load the main reel into one input (tool 0) and load the short lengths into each of the other inputs. For single colour printing, I still use the hot end as a mixing hot end but I define the tool (in this case tool 0) to use 98% of extruder 0 and 1% of extruders 1 and 2. This ensures there is always filament loaded into all the inputs, even though only one is mainly used. The 1% mixing ensures that the filament in the other two inputs is always kept moving (albeit very slowly) so that the extruder doesn’t keep grinding away at the same pat every time it retracts, and also the filament doesn’t get cooked by being heated for a long time without moving.

So, I loaded the filament as detailed above, (having first removed the previous PLA) then I selected tool 3 which uses all three inputs in the proportions 33:33:34 and extruded a further 300mm to ensure that it was completely purged through.

The first thing I like to do with any filament is print a simple tower about 20mm square by 100mm or so high. Then I vary the temperature every 10mm or so and observe the finish and how well it prints, looking out for any signs of under extrusion at lower temperatures.

eSun recommend using a temperature of between 230 and 250 degC so I started at 235 and went up from there. The first thing I noticed was that the filament started to ooze out of the nozzle at around 170 degrees C. Anyway, this is the result starting at 235 deg C on the left and increasing to 250 just before the break on the right.

230to250

It was pretty awful as the picture shows. So I dropped the temperature down to 210 and carried on lowering the temperature down to 190 which significantly improved the finish. The next picture is the second half of the tower from 210 on the left to 190 on the right.

210to190

As well as the very poor finish, inter layer adhesion was appalling. That’s why the tower broke when I gently tried to remove it from the bed. In fact it broke in two places, the first was about 5mm up from the bed and not shown in the pictures.

So, I tried again this time starting at 180 and increasing to 210, then back to 190. This is the result.

190to210pic2

I was very surprised to find that it printed at all at 180, but I think I could hear the odd skipped step from the extruder and there were signs of under extrusion. At 200 and above, the finish deteriorated remarkably and the inter layer adhesion was still appallingly bad at all temperatures.

So it seemed that for whatever reason, the optimum temperature to print this stuff, on my machine was around 190deg C. This is nothing like the 230 to 250 that I was expecting and in fact is the same temperature that I print PLA. So I started to wonder if I had a batch that had been wrongly labelled and contacted the seller.

Meanwhile, having settle on a temperature of 190deg C, I decided to try and print something useful. This is the result

eSunPart

Sadly, although the surface finish was reasonable, there was just no strength to the part. It simply snapped very easily, far easier than I have ever experienced with cheap PLA.

At this point, the seller came back to me and asked that I supply a photograph of the labels so that he could contact the factory. Here is one of them.

Reel2

The seller later came back to say that the factories’ response was that “it is the right product” but also that it must be kept dry. I pointed out that I had removed it from it’s packaging, loaded it into my printer and started to use it within minutes so there had been no time for it to absorb moisture.

This is such a shame as I really hoped it would be a viable alternative to the more expensive “Edge” filament. The reality is that I can’t use it for anything due to the very poor inter layer adhesion and I’ll simply throw it all the bin.

In fairness to the seller, he did offer to refund my money which I accepted. I was however, a bit disappointed in the response he said that he has received from eSun. I was (and still am) willing to return it for analysis.

So, after that little episode, I still needed to find a strong filament so I “bit the bullet” and purchased some “Edge” filament from E3D online.  I opted for the 2.3 kg which worked out a bit cheaper at £70. That doesn’t sound too bad but then there was £4.26 deliver and then VAT at 20% on top of everything at £14.85 making the total £89.11 (for 2.3kg). Which works out at about £38.74 per kg. Not cheap……

When it arrived, I was a little disappointed to find that it wasn’t in the strong vacuum bags that I have become used to. It was OK and there was some silica gel in the packaging but just a tad disappointing. What was lot disappoint was the reel that it was on. Look at it……

spool

That’s it on the left, next to a “standard” 1kg reel. The inner hole is about 50mm diameter, then there are those huge webs taking it to 210mm before any filament gets wound onto it!  The outer diameter is about 300mm. A “standard” 1kg reel would fit inside the wasted space so the whole thing could have been half the size. It’s not the waste of packaging that irks me, it’s how the hell do I fit that monster on my machine? In the end, I had to wind it from the monstrous great spool onto an empty “normal” size spool. Now 1kg of 1.75mm filament is about 300 metres and believe me, winding that from one spool onto another is a real PITA. The moral of the story? Don’t buy the 2.3 kg option – pay the extra and buy 3 normal (0,75kg) size reels instead (that’s assuming they come on sensible size spools).

OK, winge over. So I loaded up as before and again, I started with tower 20mm x 20mm x 100mm varying the temperature every 10mm. I started at 235 deg C, increased it to 250 then went down to 190. Observing the print quality all the time. Here result.

235to245to195

The camera doesn’t show the differences which are very subtle. Basically, I found this stuff printed well at just about any temperature. I did notice skipped steps and signs of under extrusion from 200 and below but anything above that, it was hard to see any visible difference in this test cube piece. What I did notice is that it started to ooze at about 180 as the nozzle was heating up.

The part is really strong too. It’s only 20% infill but I can’t break it with my hands – I’d need a vice and hammer.

As this stuff is expensive (to me anyway), I decided not to bother doing any more test pieces to refine retraction or any other parameters but went straight on to print some parts using the (every day) settings I use for PLA. My rationale being that I might end up with something that would be functional but not necessarily pretty and I can refine the parameters “on the fly”. So here is the first printed part

firstPrint

Two things I noticed. The first was that it was a bit stringy and I’d need more retraction. The second was that the filament has quite an affinity for sticking to the nozzle. What tended to happen was that I’d get a  bit of a build up around the nozzle, especially when doing small detailed moves, which would later fall off and leave a stringy blob. I believe a silicone sock might help but as no one sells one to suit a Diamond hot end, I’ll have to look at making my own.

What was impressive was the hollow fan ducts (the two raised parts in the picture). I printed these without any support just for the hell of it. Here is a close up.

31mmBridge

That’s an unsupported span of 31mm from left to right. That kind of bridging capability opens up a whole new world of possibilities for me.

During the first print, I did play around with temperature and retraction settings. I found that I need about 50% more retraction than I’m used to with PLA. I have shortish Bowden tubes (about 250mm) and use firmware retraction because I need to retract all three filaments simultaneously and was using 2mm but with Edge I need about 3mm. Also, a faster retraction speed seemed to help too. An added benefit of using firmware retraction is that one can change the parameters “on the fly”. Also, I found that lowering the temperature seemed to help with the build up around the nozzle and blobs as did lowering the extrusion multiplier to 0.95 from 1.00

Anyway, this was the second print with a bit more retraction and the temperature lowered to 210 deg C. I know this is 10 degrees less that E3D recommend but it seems to work well for me on my machine.

thirdPrint

Close inspection shows it’s a bit “hairy” here and there and the top layer surface finish could be improved but the results are very promising. The holes, both horizontal and vertical are nice and circular.  The parts are also very strong, which was the original criteria that I hoped PETG would meet. I’ll keep playing around with settings to get this “dialled in” properly but so far, the results are very encouraging.

So, I’ll happily use E3D edge but only for parts that need to be robust due to the high cost. Sadly, I’ll not be using eSun PETG for anything due to the very poor inter layer adhesion that I encountered.

 

 

 

 

When all else fails, check your nozzle

All of sudden, I started having all sorts of problems with first layer adhesion. Since I’ve been using 3DLac on my glass build plate, this has never before been an issue. Try as I might, I just couldn’t get beyond the first layer which was a horrible stringy mess and refused to stick to the build plate. I won’t go into details of what I checked as it would be a long and boring read, but finally I decided to take a look at the nozzle itself. This is Diamond hot end, so it’s one great lump of brass. This is what I found.

nozzle1

That used to be a nice, round 0.4mm diameter hole. Here is another picture

nozzle2

That is a 0.8mm diameter drill bit inserted into what was once a 0.4mm diameter hole.

The nozzle has done many hundred of hours of printing but never with any abrasive filaments. Mostly just PLA. Of course, not every print has gone perfectly and there have been occasions when the nozzle has scraped across the previous layer.

I don’t really know what caused it, just general wear and tear I guess but the issues I had with printing were not a gradual process. One day all was well and the next day all was far from well.

I had a spare which I have fitted and now everything is back to normal. So I guess, if things go awry and you’ve checked all the obvious, take a look at your nozzle……….