3D Printer

July 9, 2017

As an avid maker of mechanical devices, I often had a need for a 3D printer. Unfortunately when I first started wanting a printer, even the “amateur” grade 3D printers such as the Maker Bot or the ‘RepRap’ were still too expensive for my needs. I had thought quite a bit about embarking on the (not uncommon) task of building a so-called ‘RepStrap.‘ A RepStrap is a home-made printer cobbled together just well enough to be able to print a more professional printer! Its name is fairly appropriate in that it ‘pulls itself up by its bootstraps.’ In the end I (thankfully) decided not to compromise on the design of my own printer. It turned out to be more capable and reliable than any desktop printer available.

Below you can see a compilation of short clips that show the progress I was making on the firmware.

This project is one of the more involved projects I've ever undertaken. It took over a year to design, working a bit here and there, and an additional six months to order parts and assemble it. Below is a very preliminary concept design (done in Rhinoceros) for my RepStrap. The design changed many times prior to when I actually started ordering parts. As you can imagine, the design of my projects is heavily influenced by the tools I have available to me. The final design required a mill and lathe, tools which have helped tremendously in later projects.

Although in theory a 3D printer is not a complex device, in practice there are many variables that must all come together and work flawlessly to produce quality parts. Stepper motors are used to precisely control the 3 axes of motion and the extrusion of the plastic filament. The filament must be melted, of course, to be extruded; however to produce quality prints, the temperature must be monitored precisely by parts that can withstand 300ºC or more. And controlling all of these motors and a high power nozzle-heater, requires a set of electronics smart enough to monitor all of these variables at once while at the same time reading and processing the G-Code, and outputting motor steps at thousands of Hz. As you can see it is no small task to build a machine to a really small-enough margin of error.

My design is entirely 30 mm aluminum extrusion based. From my past experiences with 3D printers, the rigidity of the printer's frame is the dominant factor in good quality and repeatable prints. I even shortened the length of the Z axis to increase its stiffness. This limits the flex of the vertical linear bearing rods, and reduces ringing due to X axis acceleration, an effect that often shows up in less sturdy printers such as the Prusa Mk3. The X and Y axes are driven by kevlar reinforced GT2 timing belts. The Z axis uses 8 mm acme leadscrews. All of this allows for rapid acceleration which in turn results in shorter print times, and high Z accuracy for layer thicknesses down to 100 microns. As with any printer, it took quite a bit of tuning the slicer settings to get the prints to turn out just right. On the left you can see one of the better Benchys that I was able to print.

In vase mode, I have been able to push this printer to almost 300 mm/s with no loss in print quality. This is far beyond what any sub $2000 printer can achieve, even though my printer cost less than any other printer on the market (at the time that I made it).

Originally, I made my own custom driver PCB. And I was writing my own firmware. I wanted to undertake this because of a specific feature that was not yet available in desktop printers: mesh bed leveling. This feature probes the print bed at multiple locations and automatically adjusts the nozzle height to allow perfect prints across the entire bed. About 8 months, and hundreds of pages of code into my custom firmware, a version of the open source firmware Marlin was released. This new version contained this mesh bed leveling feature that I wanted. So I abandoned my custom code, and switched to using the very common RAMPS driver board. This has been working flawlessly for multiple years now. You can see the original PCB I etched myself below. I keep it only as a novelty.

Although I spent a lot of time trying to get the design perfect on the first try, there are things that I still would change. The low Z height of this printer (7 inches) is often a limitation. I knew that it would be when I designed it. However I prioritized print quality over Z height. Ideally the linear rods would be increased in size from 8 mm to 10 or even 12 mm. This would add quite a bit of stiffness to each axis, allowing them to be longer while maintaining the good performance. 8 mm rods are common in cheap 3D printers, and when I built this printer, I couldn't afford to spend three or four times as much on the less common large diameter rods.

Additionally, a heated enclosure would benefit the print quality. It's not a huge issue when printing with PLA, as PLA doesn't shrink much as it cools. However when printing in ABS or nylon, the prints warp quite a bit as the layers cool. A heated enclosure would help to minimize this effect.