I rigged my CNC router with a hot glue gun extruder in order to make a crude 3D printer. There are a few key things that I needed to do. The first was to make a Hot Glue Extruder. The instructions can be found on my Instructable Page:
The other thing that I needed to do was to have something to control the extruder and X/Y/Z axis of the CNC router. I could have used CNC controller software such as MACH3 or EMC2 however I chose to use a Arduino with Teacup 3D Printer software installed.
Here is a zip file containing the Teacup firmware:
I am not sure what exact version the base Teacup firmware is though. I downloaded it in 2011 sometime.
The most important files in the whole code base for our purposes are dda.c and config.h.
config.h This file contains your machine's configuration.
You will want to find the definitions for: STEPS_PER_M_X STEPS_PER_M_Y STEPS_PER_M_Z These are in Steps Per Meter... yes that is Per Meter. The math is pretty simple:
20 Turns Per Inch * 800 Steps Per Rev (200 Steps * 2 pulses per step) * 39.37 inches per meter
Of course you need to put in your Turns Per Inch (TPI). 1/4-20 All Thread has 20 TPI. I also have some 3/8-8 ACME threaded rod on my X and Y axis and I use 1/4 stepping on all axis. Each of my steppers is 1.8 degrees per step and as a result has 200 steps per revolution (1 TURN).
STEPS_PER_M_X = 200 Steps * 4 (for microstepping) * 8 TPI * 39.37 (inches per meter) = 125984
STEPS_PER_M_Y = 200 Steps * 4 (for microstepping) * 8 TPI * 39.37 (inches per meter) = 125984
STEPS_PER_M_Z = 200 Steps * 4 (for microstepping) * 20 TPI * 39.37 (inches per meter) = 314960
The next important configuration setting is STEPS_PER_M_E . This is the number of steps per meter of filament for your extruder. I calculated this experimentally. Basically I measured how much filament (glue stick) was used. I typically would step about 100 to 200 steps and measure how much was used by putting a mark on the glue stick/filament, stepping 100 steps and then measuring how far it moved with a dial-caliper. I then scaled that up to steps per meter. It takes a few tries to really dial this in and utltimately you can use Slic3r's settings to compensate for incorrect values here. In fact I used the default value and just corrected for it in Slic3r until I could figure out how to calibrate it... and then I still needed to fiddle with Slic3r values too.
The next values you will want to set (especially since a CNC mill does not move as fast as a real 3d printer ... more mass) are:
MAXIMUM_FEEDRATE_X MAXIMUM_FEEDRATE_Y MAXIMUM_FEEDRATE_Z MAXIMUM_FEEDRATE_E
All of these are in mm per minute (Pronterface and Slic3r work in mm per second which is 60 times less than mm per minute). I am used to working in inches per minute (IPM as most US CNC router configurations do) so I had to convert. My machine is capable of about 10 IPM maximum on the XYZ axis with all thread and around 80 IPM on the XY axis with ACME thread. Given 10 inches per minute and 25.4 mm per inch we get around 254 mm per minute or 4.23 mm per second (really really slow for a 3D printer). With 80 IPM we speed up to 2000 mm per minute or 33 mm per second (not bad). I set the the extruder to 100 mm per minute (1.6 mm per second) because squishing hot glue sticks into a hot glue gun isn't really possible to do really fast.
You may want to fiddle with ACCELERATION however I left it to the default value.
And Slic3r needs to know about the ABSOLUTE positioning flag... if it is set.
Now we turn our attention to dda.c where the extruder stepper driver code:
Geez it's late. I have been up late for the past week putting this together for my Birthday. I think I did it!
Here are some links for now:
More to follow.... maybe.