Friday, October 5, 2018

MegaMax 3D Printer

This material is transferred from my web site and was written several years ago.  MegaMax was the first 3D printer I designed and built at the Milwaukee Makerspace.  It was later decommissioned and parts were used to make Son of MegaMax, my second, and much better printer.

Megamax, my first 3D printer.

After following developments in 3D printing for years, I finally got the opportunity to do something about it in 2012.  That is when I joined the Milwaukee Makerspace and suddenly gained access to expertise, tools, and equipment that was previously unavailable to me.  If you like to work on projects- ANY kind of project- I strongly urge you to find your local makerspace/hackerspace and pay them a visit.  I would not have been able to accomplish what I have without the makerspace.

The first thing to decide about 3D printing is what sort of material you want to print with and how big an object you want to be able to print.  A survey of the available options for printing at home quickly narrows to plastic -PLA and ABS are the two most popular (and therefore readily available) options.  New materials are constantly being experimented with and tested, so expect the choices to expand rapidly.  Printing in metal is possible on industrial machines, but VERY hard for a DIY rpoject.  OK, so plastic it is...

You can buy a ready made printer such as a Makerbot Replicator, or a kit such as a Printrbot, or you can build from scratch.  When I started my project I set a goal of printing full-size human skulls using models extracted from CT scan data sets.  I looked at the kits that were available and found none that could print objects more than about 150mm on a side, not nearly big enough to print a skull.  I decided that if I was going to print skulls, I was going to have to design and build the machine myself.  At the time I had no idea how to create printable model files from CT scans and had no knowledge of precision machine design.  I was literally starting from zero.  If I can do it, you can to.  All it takes is persistence, determination,a lot of time, and a little money.

MegaMax has a 12x12.5" print bed and can print objects up to about 11" high.  This meets my original goal of building something that can print a full-size human skull with plenty of margin.

MegaMax's (and my) first-ever print.  It didn't stick to the glass bed very well, but showed a lot of promise.

I estimate I've spent about $1000 on MegaMax, and have invested hundreds of hours in the design, construction, and debugging process.

A final note about buying 3D printers or kits.  Don't believe any of the hype that says you can just plug it in and hit the go button and it prints.  3D printers are NOT that reliable or user-friendly yet.  Plan a spending a LOT of time getting to know the machine, the software, and the materials.  Plan on a lot of failed prints.  That's just the way it is and the way it is going to be for a while.

3D printing- how it works

All 3D printers, no matter what material they use, build objects up in thin layers.  Most hobbyist type machines melt plastic filament then precisely lay it down on top of a previously deposited layer of plastic, usually building the final object from the bottom, up.  This process is called fused deposition modeling (FDM).  The part of the machine that melts and lays down the plastic is called an extruder.  The extruder is like a motorized hot melt glue gun- room temperature solid plastic filament goes in, hot, liquid plastic goes out.  The rest of the machine exists to position that extruder nozzle as precisely as possible.  Most machines use familiar cartesian coordinates (X,Y,Z) to prosition the extruder nozzle.  Other machines (delta printers) use a slightly different approach that uses spherical coordinates.

The printer mechanism has a controller that reads commands stored in GCODE files to tell the motors in the machine where to position the extruder nozzle and how much plastic to put down.  Cartesian coordinate machines require at least one motor per coordinate axis plus a motor for the extruder.  The GCODE file contains a series of "tool-paths" for each layer in the object to be printed.  A tool-path is the instructions that tell the machine how to draw each layer using plastic "ink".

GCODE files are produced by "slicing" software that uses a 3D CAD model file in STL format as its input.  The GCODE is always specific to the printer and filament being used to print, so you generally can't take a GCODE file that has been generated for one printer/filament and use it on another printer/filament, unless the other printer/filament is identical to those for which the GCODE was originally created.  The slicing process involves setting a lot of options that affect the final print quality- another reason the GCODE files are not very portable.  Popular slicing softwares are Slic3rKisslicer, and Cura, and new ones are made available all the time.

3D CAD model files of objects to print can be downloaded from on-line repositories such as ThingiverseYouMagine, many other sites around the web, or created using CAD software.  There are dozens of choices for CAD software- some professional packages cost many thousands of dollars, but there are a lot of free packages ( Sketchup,DesignSpark MechanicalFreeCADSolveSpaceOpenSCAD, etc.)  and on-line CAD programs that can run in "the cloud".  AutoDesk has several free products that can be used to design 3D printable objects, some of which run on your computer, others cloud based.  The CAD program you use must store files in STL format for 3D printing.

The whole process (workflow) of producing a 3D print goes like this: produce or obtain a CAD model of the object to be printed, run slicing software to cut that model into slices and produce tool-paths for the extruder and save it in a GCODE file.  Then you tell the printer controller to print using the GCODE file, load the filament, and wait for it to finish.  FDM is typically a slow process.  It can take anywhere from about 30 minutes to print a small object, or in my case, 24-48 hours to print a full-size skull.

How MegaMax was made:  Mechanical

Knowing nothing about designing or building a 3D printer, I started by looking at the designs of other machines for clues on where to begin.  After looking at a lot of them, I decided that the RepRap design looked like the easiest to scale up and put together because of its mechanical simplicity.  It had a large, active development community so help would be available if and when needed.  The control electronics was readily available off-the-shelf so I wouldn't have to spend a lot of time on that.

The few machines I had seen in person and on web pages that used laser cut plywood for the structural frame of the machine did not impress me.  I found that relatively light hand pressure was enough to cause the frames to flex.  Also, my experience with restoring wood cabinet table radios from the 1930s told me that time and heat are enemies of plywood.  It always warps and delaminates.  My thinking was that you need a rock solid structure to control movement of the extruder nozzle to get the best possible print quality.  That means metal to metal bolts or welds.

Thus began the search for hardware.  A couple guys at the makerspace had built a CNC router using 8020 aluminum extrusions and I found it met my criteria for sturdiness.  I learned from them that used 8020 was available from a local machine scrapper for about $2 per foot.  That was all I needed to hear.  I bought about 75 feet of the stuff in various lengths and started designing the frame of the machine. 

MegaMax's frame, made from 40x40 mm t-slot aluminum.

I quickly figured out that I would need stepper motors, belts, pulleys, guide rails, etc.  The Makerspace has always had a good sized "hack-rack" full of junk that members are encouraged to use in building their projects.  I spent some time digging and found two identical linear positioning assemblies that came out of some surplus junked machine.  As soon as I saw them I knew I had a difficult piece of my printer just waiting to be used.  I also found some motors, 1/2" guide rails and bushings, belts and pulleys, all of which would have cost several hundred dollars if I had to buy them new.

I started by designing the bottom part of the frame.  I cut some 8020 as square as I could then bolted it together.  Ugh!  My cuts were nowhere near square, so I had to learn how to square the ends of the cut pieces.  One of the machines available at the makerspace is a mill.  I learned the basics of how to use it and milled the ends of the cut pieces of 8020 square and tried again.  Perfect!  Once I had the base of the frame, I added supports for the Z-axis positioners.

An early version of MegaMax's frame, sitting on an AV cart from a school auction.

The next trick was to come up with a way to hold the guide rails parallel to each other.  After a couple false starts, I figured it out.  Once again, the milling machine saved the day.  I was able to drill holes precisely in some aluminum angle brackets then mounted them on an 8020 spine.  I used this method for the X and Y axes.

Guide rail mounts.

MegaMax at completion of the original frame design.

Z- Axis Design

In the RepRap type design, including MegaMax, the entire X axis is lifted in the Z axis.  One of the first useful things I found were two identical linear positioner assemblies on the hack rack. With a little modification I was able to use them for the Z-axis in MegaMax. 

These are the linear positioners I found on the hack-rack and modified for use in MegaMax's Z-axis.  I cut off the flanges and pins, and removed the motors and their mounts.

A lot of printers use two motors to drive the two Z-axis positioners.  Using two motors allows the possibility of the two getting out of sync if one turns and the other doesn't, which can happen in many ways.  Every time it happens, you have to realign the X-axis with the Y and Z axes.  I decided to use a single motor and relatively expensive gear belt to drive the Z axis to ensure that the two ends would always be in sync, and I have never regretted doing it that way.  

Left side of Megamax showing Z axis positioner, X -axis guide rails/support/idler.

Right side of MegaMax showing Z-axis positioner, X-axis motor, dive belt and guide rail support

Z-axis zero point limit switch and adjustment screw.  MegaMax printed those parts and many others that have been used and sometimes discarded.

Top of MegaMax showing Z-axis belt path, motor mount, and filament spool supports.

Y- Axis Design

The print bed moves back and forth in the Y-axis. My goal was to build a machine with a 1 cuft build envelope, so the bed had to move at least 24" .  I found some 1/2" round guide rails and brass bushings, motor, pulley, and belt on the hack rack and started designing around them.  I quickly figured out that I would have to do some precise drilling to keep the rails parallel and settled on a design using a couple pieces of aluminum angle stock.  By setting them up on the milling machine I could precisely locate and drill the holes.  It worked perfectly on first attempt.  The bushings proved to be very noisy when printing, so they were replaced with some linear ball bearings mounted in printed pillow blocks.  The undercarriage that holds the print bed went through several design changes over the last couple years.  I used a NEMA-23 size motor to move the bed because I figured the large mass of the bed would probably be too much for a NEMA-17 motor to push around.

Original undercarriage with brass bushings, all quickly replaced.  4 bushings- ugh!

Later undercarriage design, also quickly replaced.  Notice 3 point bed support and 3 bushings on the guide rails- I learned fast.

This is the undercarriage shown in the CAD drawing above.

Newer undercarriage using ball bushings spaced further apart to better control the motion.

Original Y axis belt tensioner, later greatly simplified.

More recent Y-axis belt tensioner.

More recent Y axis design showing undercarriage with PTFE blocks to support the print bed, terminal blocks for electrical connections to the bed heater and thermistor, limit switches, and linear bushings riding on the guide rails.

Print Bed Design 

Next came the print bed design.  The print bed would have to be heated if I were going to print with ABS.  I originally intended to use a 12" x 16" bed.  Then reality struck and I couldn't find a heater that size, but 12" square heaters were everywhere.  I decided to compromise and use a 12" square bed and heater.  The bed has to ride on some bearings and I didn't want the bearings getting heated up, so I made an aluminum undercarriage to attach the bearings and drive belt, with the print bed stood up off of it using ceramic spacers.  My initial print bed was a tempered glass plate with a silicone encapsulated heater stuck to its bottom side.  I figured the glass would put a nice, smooth finish on the bottom of the printed objects.  Mounting the glass was a little tricky.  I settled on gluing some magnets to the glass and their opposites to the tops of screws that would allow me to level the printbed.

Original glass print bed with silicone heater- yikes!  Don't do it like this!

Ceramic standoff with magnet sitting atop bed leveling screw.  This proved to be functional, but noisy, and was replaced.

Magnet epoxied to edge of glass print bed next to silicone heater.

Edge of glass print bed showing magnet and silicone foam that was used to reduce noise produced by glass bed bouncing on the magnet when the Y-axis reversed direction.

After using the glass bed for a while I realized its shortcomings- it wasn't very flat, and didn't conduct heat well so there were hot and cold spots.  The glass bed had to go!  For starters, I changed the bed material to cast aluminum tooling plate- it is milled flat and sold with a guaranteed flatness spec of +/- 0.01" over the entire surface, though it is typically much flatter than that.  I also got rid of the magnets.  I found that when the print bed motion reversed direction the momentum caused the bed to bounce on the magnets making a lot of unpleasant noise.  Finally, I replaced the silicone encapsulated heater with a much lower mass Kapton heater.  I also learned that ABS likes to stick to kapton tape, so I covered the new print bed with it.

Current print bed- 1/4" cast aluminum tooling plate covered with kapton tape. The three holes are for the bed leveling screws.

Underside of the print bed showing 24V 450W kapton heater and thermistor.

The frame of the machine is supposed to hold the X, Y, and Z axes orthogonal to each other.  If they are not orthogonal, a cube won't print as a cube and a sphere won't be spherical.  No printed object will be right if the axes are not orthogonal, so I took great pains to ensure they were.  Bed leveling is another matter.  Bed leveling cannot make up for nonorthogonal axes.  The sole purpose of leveling the print bed is to allow the first layer printed to stick to the bed.  The plastic has to be squished down onto the bed everywhere in the first layer.  If the bed isn't level, the plastic may not stick and your print may come off the bed before it's finished, wasting time and material.

Most printers have square or rectangular beds with adjustment screws at each corner to allow the bed to be leveled.  When I saw that it didn't make any sense- three points define a plane, so why use four to level the bed?  Furthermore, with four leveling screws in the corners, whenever you turn one screw you affect the bed level in two dimensions.  I figured out that if the bed is supported at the center of the axes instead of at corners, the bed could be leveled with just two adjustments which are mostly independent of each other.  My glass bed used that arrangement and it worked well, so the aluminum bed used a similar arrangement.  This time instead of using magnets to hold the bed down I used stainless steel screws.  The screws go into heat resistant PTFE blocks that are screwed to the undercarriage.  The bed is supported on springs trapped between the bed plate and the PTFE blocks.  Leveling the bed is very fast and easy and only requires two adjustments with a screwdriver.  The frame of the machine is so sturdy once I level the print bed I don't have to touch it again unless I take some critical parts off the machine and put them back. 

From the top: print bed with kapton tape, spring over bed leveling screw, PTFE block, undercarriage plate, Y axis drive belt.  Adjustment must be done from the top using a screw driver because I can't access the bottom side due to the drive belt.  New undercarriage design, not yet installed, will have a thumb screw adjusted from the bottom side of the undercarriage.

X-Axis Design

The X axis moves up in the Z-axis while printing.  The extruder carriage moves back and forth on the X-axis.  I used a smaller version of the Y axis design for the X-axis, namely a pair of guide rails spaced and held parallel by aluminum angle pieces bolted to an 8020 "spine".  I started with brass bushings but quickly replaced them with linear bearings as in the Y-axis.  I used a smaller NEMA-23 size motor for the X axis because it had much lower moving mass than the Y-axis.

Original X-axis motor mount, guide rail support and extruder carriage on brass bushings.  All the brass bushings in the printer were quickly replaced with linear ball bushings due to the noise produced by the brass bushings chattering on the guide rails.

Left end of the original X-axis showing idler pulley, guide rail support and extruder carriage on brass bushings.

More recent left end of X-axis showing idler pulley and guide rail support.  The green part is a "flag" that bumps the limit switch.

Thermal Enclosure Design

One of the problems with making large ABS prints is delamination.  Delamination occurs when prints try to pull themselves apart due to stresses caused by the printed plastic shrinking as it cools.  The larger the object you try to print, the bigger the delamination problem.  Stratasys, a company that makes industrial 3D printers, solves this problem by printing inside a low temperature oven.  I made an enclosure for MegaMax and found that I was able to print large objects without delamination.  The enclosure keeps the heat from the printbed inside the box without using an extra heater.  I let the box get to about 40-42C during printing and so far have had no delamination problems.  If I had been aware of this problem earlier, I would have designed MegaMax to go into a box from the beginning.  Live and learn!  The enclosure is made from sheets of PIR foam held together by printed clips.

Print showing delamination a few inches above the print bed.   This print is about 4" tall.

MegaMax inside thermal enclosure made from PIR foam insulation sheet held together with printed plastic clips.

MegaMax thermal enclosure with the door closed (before I installed the window).

Large blue object, about 6" tall, was printed inside the thermal enclosure at about 45C with no delamination.


I chose the same off-the-shelf electronics to control MegaMax that is used in other RepRap printers.  It consists of an Arduino Mega2560 board with a RAMPS v1.4 motor controller board and an LCD/encoder/SD card interface.  I also got a couple cheap switching power supplies via ebay, a 12V one for the electronics and a 24V one for the printbed heater.  One reason I added the LCD interface was to improve reliability of the printer.  I had some early prints fail because the laptop I was using to drive it would go to sleep or do some other silly thing part way through a print and mess it up.  Now I almost always print files stored on an SD memory card without connecting a computer to the printer.

I quickly ran into some problems with the firmware (a freely downloadable project called Marlin) because I had trouble getting the Arduino IDE to compile the Marlin configuration files.  That eventually got sorted out with the help of an expert at the Makerspace and I was able to get the machine up and running.   It seems that the latest version of the Arduino IDE has no problems compiling the Marlin code.

When I changed the printbed to aluminum tooling plate I got a more powerful heater and it quickly destroyed the 24V switching supply I started with (my fault for pushing it too hard).  Now I power the heater from a 24VAC transformer that is controlled by a solid state relay that is driven by the RAMPS board.  Eventually, the 12V supply failed and I replaced it with a high quality, (surplus) linear regulated supply.


The extruder has been a never-ending source of frustration.  I funded a Kickstarter project for an extruder and waited for it to eventually show up while I worked on other parts of the printer.  Once it arrived, I was only able to make it work by heavily modifying it right from the start.  It took a loooong time and a lot of messing around to get it to work reliably and I still don't quite trust it.

Original QUBD extruder after a LOT of modifications.  The bearing on the spring loaded lever pushes the filament against the drive gear on the motor shaft.  The metal parts were eventually replaced with printed plastic parts.

The original extruder used to jam a lot, and I never could figure out why, but I did manage to fix it.  All it took was adjusting the tension of the spring on the lever that pushes the filament against the drive gear on the motor shaft.  If the tension is too low, it doesn't push hard enough and the drive wheel chews a divot into the filament.  Once that happens, the thing loses its grip and can't push filament any more.  By tightening the spring the pinch wheel pushes so hard that it overcomes whatever resistance was preventing the filament from moving and it (mostly) never loses grip.

I have done a lot of experiments with different extruder designs, using parts from the original extruder.   I've made dual drive extruders with two motors pushing the filament, and most recently a design for a 3mm filament extruder that drives the filament into the hot-end using counter-rotating nuts.  I call it the SnakeBite extruder because the way it works reminds me of the things kids do to each others arms when the grab and twist their hands in opposite directions.  The SnakeBite extruder can produce a lot of down force and I am hoping it will eventually be jam-proof.  I have made some test prints but there's still a lot of work to be done on the design.  Click here to see the info and get the stl files for theSnakebite Extruder.  You can see it in action here: SnakeBite test,  SnakeBite printing.  I plan to return to SnakeBite extruder development in the near future.

One of my early dual drive extruder designs that used two motors to push the filament. 

Here is the dual drive extruder in action.

An updated dual drive design that used a single lever to allow easy loading and unloading of the filament.  Originally made in aluminum, then made using printed plastic parts.

Dual drive extruder from CAD drawing above.

Original SnakeBite extruder design using printed plastic motor mount.  Gears came from American Science and Surplus.  The two posts with the gears tended to flex under the torque from the motor, so I added a plastic bridge between them.

Newer and slightly smaller version of the Snakebite extruder bolted to a hot-end for print testing.

Smallest version of the SnakeBite extruder.

First print with the Snakebite extruder.  Note the blebs between the two parts signaling retraction problems.

Large print made using the SnakeBite extruder- overall quality is excellent, but strange loop blebs evident.

Close up of the loop blebs.  These are a symptom of retraction not working properly, a problem that remains to be solved.

Alternative Print Bed

Early in my 3D printing odyssey I noticed that a Stratasys 3D printer at the Makerspace printed on an unheated foam block.  The owner of the machine told me that it was some sort of polyurethane for which Stratasys charges about $70 per 10"x10"x1" piece.  In that machine there's no bed leveling to do- when it prints it just buries the extruder nozzle about 1mm into the foam and prints.  I liked the simplicity of it so I borrowed the foam and tried it on my machine and it worked well.  That started me looking for a substitute that would be cheap and readily available.  I found a foam that is used for roofing insulation in commercial buildings that is able to withstand the high temperature of the extruder nozzle (~240C) without melting or producing toxic vapors or smoke.  You can buy it at Home Depot and it's cheap!  It is called PIR (polyisocyanurate) foam.  You can get a 4'x8'x1" sheet for $15.  DON'T get the pink or blue stuff!  Those are polystyrene and will burn, smoke, and produce toxic vapors when the hot extruder nozzle touches them.

ABS bearing block printed on PIR foam.
I tried the PIR foam on my printer and it worked great!  Prints stick, you don't have to level the bed, and you don't need a bed heater or power supply.  You can print multiple times on a single piece of foam- you just set the Z offset in your slicing program to bury the nozzle in the surface of the foam and it will print fine.  At about 50 cents per 12"x12" piece, it is cheap enough not to matter.  In a printer like mine, with a large, moving printbed, using foam reduces the moving mass and allows you to print much faster.

What do you give up?  You don't get a shiny-smooth bottom surface on your printed objects, and you have to print on a raft.  Does that matter?  Most of the time, no.  No matter what surface you print on, the bottom surface of your print will never be the same as the sides or the top.  I am really wondering why I've gone to the trouble of setting up a heated print bed... 

Underside of the bearing block printed on PIR foam.

New Adventures

I recently rescued a screw drive assembly from a scrapped industrial machine and I've been working on building it into MegaMax to replace the belt drive Y-axis.  I got a couple used linear guide rails with bearing blocks via ebay and they are going into the Y axis as well.  Such linear guides provide for extremely well controlled motion.   I'll also be redesigning and building the X axis using a linear guide rail, too.

This XY table from a pick and place machine yielded two ball screw assemblies, guide rails and bearings, and 200W servo motors.

Screw drive soon to go into MegaMax's Y-axis.

CAD drawing of the screw drive Y-axis showing standoffs made of aluminum tubing. This was my first use of aluminum tubing in a mechanism, to be used again and again in future projects.

Another view showing the undercarriage plate that will ride on standoffs.

Update January 5th, 2015

In the last few weeks I replaced the Arduino/RAMPS controller with a SmoothieBoard, installed the screw drive Y-axis, a high torque motor to drive the screw, and a DSP-based driver and 32V power supply to drive the motor.

I had some problems with the SmoothieBoard at first- print layer registration kept shifting in the X-axis, not the Y-axis where I had expected problems due to the high moving mass and drag caused by the linear guides.  

X axis layer registration problem.

I tried every combination of speed, acceleration, junction deviation, motor current, microstepping, and even swapped driver channels on the SmoothieBoard to see if it was a hardware problem.  Nothing worked until one of the developers of the board suggested, via IRC, that I try a different uSD card (the SmoothieBoard comes with a uSD card containing the firmware, configuration file, and documentation).  I swapped the card, loaded fresh copies of the firmware and config files and booted the board.  All problems disappeared!

One of the first things I realized after I installed the screw in the Y-axis was that I could no longer just push on the print bed to move it for leveling or doing work on the undercarriage, etc.  The new motor has a flattened shaft that extends through the back of the motor so I designed and printed a crank handle for it so I can quickly and easily move the print bed manually.  The crank just press-fits onto the motor shaft.  It fits so tightly I have to use a screwdriver to pry it off.

Motor crank for moving the print bed without having to power up the printer and computer.

Front view of the printer with the screw installed.  The Y axis is a little longer than it used to be...

Rear view- you can see a rat's nest of wiring connecting to the SmoothieBoard in the lower left.  Don't worry, the mess will be straightened out once I get through with the rest of the planned modifications to the printer.

Power supply for the Y-axis motor.  Under load it delivers about 32VDC at 4A.  There isn't much to it, just a transformer, bridge rectifier and filter capacitor.  That's all you need for a stepper motor.  I built an identical power supply for the X-axis which will also be driven by a DSP driver.

Current state of the new X-axis showing printed belt tensioner and motor mount.

Rear view of the X-axis.  The large holes allow access to the nuts on the screws that hold the linear guide on the aluminum tube.

This is the printed idler pulley/belt tensioner.  

This is what the inside of the idler pulley/belt tensioner looks like.  The two screws on the right side are used to adjust belt tension and the pulley's axle tilt to prevent the belt from walking off the pulley as the extruder moves back and forth.

BullDog XL extruder with E3D V6 hot-end.

After a lot of research I decided to upgrade the extruder and hot-end to what I believe will be very reliable parts.  I got a BullDog XL extruder that has a gear box to increase torque and is capable of pushing 1.75 or 3mm filament either directly or as a Bowden type set-up.  I chose an E3D V6 all-metal hot-end because it is capable of printing with materials like polycarbonate that require very high temperatures.  

I still have to build the circuit boards that will connect to either end of the flex ribbon cable and then rewire the whole machine so the electronics can be kept outside the printer's thermal enclosure.  Then, I think I'll be ready to get back to development work on the SnakeBite extruder and a few other projects I have in mind.

No comments:

Post a Comment

Leave comments or a questions here and I'll try to post a response as soon as I can.