Two years ago I made the unfortunate mistake of pledging for the Obsidian 3D printer campaign on Kickstarter. It turned out to be a really lousy investment, seeing that as of this point, more than two years later, nothing has been delivered and no real prospect of delivery of any sort of product is in sight by the creator, Kodama. In spring 2018, already one year after the campaign ended and with no product in sight, I decided to go on and buy a 3D printer to get going with some pressing prototyping work I had in queue. I ended up getting the cheap Wanhao Duplicator i3 Mini, regarding which I have written two blog posts [1, 2]. Long story short, the Wanhao machine was usable but performance and usability was far from ideal.
As I was using, repairing and upgrading the printer, I started developing a few ideas on what a good 3D printer should be like. Finally, a couple months ago I took the bait and decided to start on building my own machine.
This is the first blog post about it.
Disclaimer: This post includes affiliate links to product listings on eBay and other online stores. Please read our Affiliate Link Policy for more information.
One of the main design goals of this build was to come up with a frame design that would be as stiff as possible given the properties of the materials used.
Just to be perfectly clear: I shrug when I see machines that have a heavy, stiff frame while the print head and bed is supported by some half-assed 8mm-ish steel rods. Stiffness has no meaning whatsoever unless it translates specifically to minimization of displacement between print head and print bed under loads induced while printing. This is the important measure. You can have as stiff a frame as it goes; nudge the print head back and forth with your hand and feel how much it displaces over the print bed. Does it feel flexible? If so, I’m sorry but your setup is not structurally sound.
Why are steel rods bad for stiffness, you ask. It is steel after all. Hard stuff. Well, yes, however, the main loading mode in cartesian printers is bending, and resistance to bending is proportional to the second moment of area of a cross-section. Very roughly speaking: for a constant thickness annulus, a two-fold increase of the radius will result in an eight-fold increase of the bending resistance, against just a two-fold increase in mass, considering the same material. This is why an aluminum rail like a 60mm x 20mm V-Slot blows any 8mm steel rod out of the water in terms of bending stiffness, even though aluminum has more elasticity than steel.
It’s not just the linear elements though. The mechanical joints between them are also of importance, since the main aim of the joint is to restrict degrees of freedom, and how effective this is being done is proportional to the geometry of the joint. In the case of cartesian 3d-printers (Deltas are a totally different beast) we deal almost exclusively with translational joints, which means that you’ll have an element rolling on a rail or similar. The size of the overall joint, as well as the location of the rollers relative to each other plays a key role on the stiffness of the overall frame.
A second design goal concerns electronics and control. Here I wanted a printer that, on one hand is easy to use, probably through remote interface rather than local HMI on the machine, and on the other hand exhibits good motion control to enable fast and error-free printing. It is noteworthy that a well-tuned controller is able to address shortcomings of the physical structure so that the printer appears to be well built, even if it is not. For instance, a well tuned acceleration profile may allow fast printing speeds while at the same time cancelling any oscillations that the structure may demonstrate.
Finally, I wanted a printer that didn’t cost an arm and a leg, and where I could use components that I had already available in the workshop, minimizing having to buy new stuff.
Design, Materials & Assembly
I chose to build the printer chassis using V-Slot elements. These elements are well-built, stiff, widely available and modular enough to allow alternations without radical re-design. They also offer mounting solutions for common components such as stepper motors, while a slew of niche accessories are available to print on Thingiverse. This modular system allowed extensive experimentation while building the physical machine, to the degree that I have found no need for actually designing the printer in a CAD program.
For the overall form I chose a typical C-shape, where the print head moves in the X- and Z-axis, and the print bed in the Y-axis. This is the same as the Duplicator i3 Mini that I used previously. The key element in this design was to keep the bed rail, vertical column and horizontal print head rail as thick as the available V-slot rail sections would allow. In fact, for the print head rail I could have used an even thicker cross-section but that’s for another design.
All rolling joints slide on four polycarbonate rollers on 5mm twin bearings, two on each side. The rollers are held on stock 4mm thick aluminum plates, spaced out as far as the plate allows for maximizing bending moment resistance. The two horizontal axes, X and Y, use a belt-and-pinion arrangement. In this arrangement, a belt runs on one side of the rail and is fixed on both ends. The belt passes under the two carriage guiding rollers, and over the pinion of the motor, meshing, the motor being mounted on the carriage. The belt-and-pinion setup offers several advantages among which are the use of an overall shorter stretch of belt that increases positioning precision, as well as easy service and replacement. A drawback is that for a moving carriage the motor needs to be placed on the carriage, increasing it’s mass.
The extruder assembly is of the bowden type and uses a MK8 extruder head, an aluminum extrusion clamp with a Zaribo motor and a Capricorn PTFE tube. The extruder head along with head and part cooling fans are custom mounted on a short piece of V-Slot rail.
The printing bed is an Orballo Printing MK42 24x20cm heated bed that is essentially a thick fiberglass PCB with embedded resistor. The advantage of being manufactured with PCB techniques is that it stays perfectly flat irrespective of heat or loads. The bed is mounted on a DIY screw adjustment system using two 2×2 V-Slot rails.
Electronics & Software
I like the approach that Klipper takes: A high-level processor generates a motion plan consisting of step timings offline, which is then transmitted and executed in real-time by a microcontroller. Klipper runs on a Raspberry Pi 2 and combines Octoprint as a high-level interface for ease of use. A SKR v1.3 board has the role of a low-level controller, connected to the Pi via USB. The SKR is quite affordable at a price point of around $25 on eBay, and can accommodate a good range of printer features, including dual extruders and heated bed with thermistor. In addition, four DRV8825 stepper motor drivers are responsible for driving the XYZ and Extruder motors. The setup is powered by a 200W mains power supply. All the electronics fit in a plastic box which is mounted on the rear of the printer.
The printer performs surprisingly well. I tuned printing parameters using a series of Benchy test prints. Below you can see a Benchy printed after tuning. Note that this model has not been post-processed at all.
Printing speed is quite good as well, much better than it’s predecessor. On average prints come out with full detail at 65mm/sec, while at 80mm/sec some detail is lost. Non-print moves go as high as 170mm/sec without an issue.
There is lot of room for upgrades on this machine, being pretty much as modular as it gets. The first major upgrade that I’m planning is the replacement of the Polycarbonate rollers with MGN linear guides. This should further increase stiffness and therefore precision. In addition, a high-end nozzle such as a Mosquito is next up on the upgrade list, as well as a direct drive extruder system such as a Bondtech. Finally, the ultimate upgrade to the motion system would be the replacement of stepper motors with brushless servomotors and closed-loop control through G-Code, completely bypassing the step/dir interface that is common with stepper motors.
This post summarized the principles and building of a custom-built FDM 3D printer build that is aimed to be affordable, robust, easy to use and produce good prints. Printing results indicate that this design has succeeded in most of these goals, although there is definitely room for improvement.
What are your thoughts on this design? Be sure to share your comments below!