Introduction: How to Design and Build a 3D Printer
This Instructable summarises the design, build, and calibration phases of creating a custom 3D printer by outlining the key design decisions I made throughout the process. It is written to aid you in the design and build of your own printer. I have included config files and macros for Reprap firmware and STEP files for the various printer parts to allow you to draw inspiration from and be able to build my machine. Due to the broad number of topics and depth of knowledge required to build a reliable and high-quality printer this Instructable assumes a prior understanding of 3D printers and their operation.
This Instructables takes a very linear approach to the design process which is one of the caveats of writing an article formed of steps. In reality the design process is much more cyclic and involves no end of iteration and repetition of the steps below. What you see here is the design that I settled on and ended up building at the end of an almost two-year long project and is iteration 52 of the original design (and will likely not be its final form). My advice to the budding printer designer is to not take lightly the challenge you are taking on; it will take many hours and many failed ideas but push on!
As with any project, safety should come first. This project involves working with several tools, mains electricity, and heaters that reach over 250 ºC. When working with mains electricity ensure that the workpiece is isolated from the supply and that your breaker has an RCD. Ensure that cables are well connected and do not expose any conductor. Avoid handling heaters while under power and remember that heaters will remain hot long after the machine has been shut down. Take care when working with tools and always use the right tool for the job. It is your responsibility to make sure that you are working safely and understand the dangers present. Follow this Instructable at your own risk.
Step 1: Printer Specification
Speed, Quality, and Cost - Pick two.
It's a famous saying (cliché?) but it holds a lot of truth. You can’t set out to achieve all three and so some sacrifices must be made along the way. Setting a clear specification for what you want and where you are willing to make sacrifices is essential to keeping you on track and working towards consistent goals. Without a specification you run the risk of entering a never-ending design cycle or suffering from moving goal posts.
Quality & Cost
For me quality comes first. This printer build is focused on delivering high quality 3D prints that are dimensionally accurate and reliable at the expense of print speed, and cost.
Another key requirement was reliability. I wanted to build a machine that I could confidently rely on to create in spec parts, that look great, and wouldn’t burn my house down. That means that this machine wasn’t designed to cut costs wherever possible and so some of the parts could be sourced cheaper but at a lower quality or with a lower factor-of-safety.
Most parts that I print are engineering prototypes and typically fall into a small build volume. Having owned both a 300 mm^3 and 220 mm^3 printer for several years and never having printed anything larger than 100 mm^3 it seemed obvious to build a smaller printer and take advantage of some of the benefits this can deliver such as shorter belt runs, a more rigid frame, and most importantly a smaller footprint! For that reason, the printer will be made around a 200 x 200 x 200 mm build volume.
Desk real estate is a hugely valuable commodity in offices and workshops. With that in mind I want to minimise the footprint of the printer. A maximum size requirement is 450 x 450 mm. I also wanted the electronics to be attached to the printer and safely contained to prevent damage to them and to keep the machine tidy.
Step 2: Chassis
The chassis is the fundamental structure that holds the printer together, mounts all of the sub systems, and gives it the much-needed rigidity that is intrinsically tied into good quality prints.
I wanted to create something easy to build with relatively limited tools and equipment but without incurring high sub-contract costs for contract machining / fabrication. The obvious answer to this was aluminium extrusion profiles which are popular among the maker and engineering communities thanks to their ‘lego-like' quick and easy assembly with minimal processing cost. Another huge benefit of the aluminium extrusion system is the high number of sub-contractors willing to cut it to length for a competitive price.
Aluminium extrusion can be anodised in a range of colours but clear (silver) and black are the most common and therefore cheapest. I initially ordered clear extrusions but due to a small mix up ended up with black extrusions… queue quick colour scheme overhaul. You can purchase plastic pieces that fit into the gaps of the extrusion which tidies up the look and allow you to use the extrusion channels for running cables.
Despite the small target build volume of the printer I opted to use 3030 extrusions as they offer a significant upgrade in rigidity (especially at the joints) and also make the design scalable up to a much larger size if that is ever required.
Aluminium extrusion can be connected in a huge range of ways including (but not limited to) various angle brackets, hinges, pivots, extenders, and blind joints. Blind joints involve tapping (cutting a thread into) the end of the extrusion and using a button head bolt to clamp the two extrusions together at right angles.
I chose to use the blind joints as they reduce the part count (reducing cost), reduce the number of tolerances to control (meaning you can easily get a square frame with a strong metal-to-metal joint), and allow you to easily connect frame members at almost any point. This type of joint does require a simple cross hole to be drilled to allow Allen key access for tightening the button head bolts but fortunately many sub-contractors will also drill these cross holes for a small fee whilst cutting the extrusions to length. By using blind joints throughout the entire frame there is no plastic that can introduce flex in the frame creating an extremely rigid chassis.
I stuck to a basic cube construction for simplicity and for how it lends itself to the CoreXY belt paths. I lowered the front cross member so that visibility of the print head (and the print in progress) is not obstructed. I avoided removing it entirely as it provides a significant amount of structural rigidity to the frame.
I added an extra space at the bottom of the frame used to store the electronics for the printer. This helps to keep everything neat and tidy and attached to the machine and by placing electronics on the bottom it prevents me from having to increase the footprint of the printer just for the electronics. Once installed the electronics will be covered with laser cut panels to hide the mess of wiring!
Step 3: Motion Platform
The XY motion platform is responsible for the XY movements of the printer and so is fundamental to the printer’s performance. There are several different popular motion schemes each offering pros and cons. The main kinematics are Cartesian, Delta, and CoreXY each with their own subtle variants.
CoreXY is a 2-axis kinematic system that features a coupled X and Y axis. The main focus of the CoreXY design is to reduce the weight that the print head has to carry by placing the motors on the frame instead of on the X and Y axis. This reduced weight allows the head to accelerate much harder whilst still accessing a square bed. The required belt paths are however reasonably long meaning belt stretch becomes an issue at larger build volume sizes (>350 mm sqaure), but this won’t be an issue at our target build size. Many pulleys are required and careful alignment and tensing to prevent gantry racking or irregular movement is essential. The CoreXY belt path also requires a small margin around the bed to house the various idlers, pulley and motors. Since CoreXY only handles the XY axis a third Cartesian axis for the Z axis is required.
A full explanation of the CoreXY kinematics can be found on the CoreXY website.
The X and Y axis require a linear sliding element for smooth motion. Linear bearings running on round rods are the most common setup for 3D printers, but the rods are poorly supported along their length thanks to only being mounted at either end and offer poor rigidity. Linear rails like those available from Misumi, HiWin, etc offer a significantly more rigid joint thanks to being mounted along its entire length and also don’t roll like linear bearings and so I chose to use some reasonably priced linear rails from Aliexpress. While the Chinese manufactured rails are certainly lower quality, they are still more than suitable for a 3D printer and come at a significant (10x) cost reduction over name brand offerings.
X and Y Axis
I opted to mount my linear rails to the underside of the extrusion as it reduces the amount of XY space required, ensures an even loading on the rails, and helps protect them from dust ingress which will extend the rail lifetime.
A piece of 2020 extrusion is used to support the X-axis rail. This provides a lightweight but rigid support with a wide range of mounting options. The X axis is then mounted to the Y axis with two printed pieces that also house the required pulleys to align the belts. This is the only structural plastic part in the entire motion platform.
In place of the typical cartesian X and Y motors a CoreXY printer has two motors named A and B which are often connected directly into the CoreXY belts. I decided to connect the motors to the CoreXY belts with a belt loop so that the motors could be placed in a more convenient location. The belt loop also has the advantage of allowing a gear ratio to be introduced between the motor and the CoreXY belts by varying the pulleys used. A ratio between 2.5:1 and 1:2.5 can be achieved. I initially chose a ratio of 1:0.8 to slightly reduce speed and increase resolution but this can easily be changed at any time to fine tune to the type of printing you want to achieve.
For this machine I opted to use a GT2 belts which are ubiquitous in 3D printers thanks to their low cost, easy sourcing, and good control. Implementing the CoreXY belting successfully requires careful placement of the pulleys to ensure parallelism of the belt. Any errors in belt alignment will result in poor motion platform performance.
The original CoreXY belt path requires the two belts to cross to cancel a twisting force but this can cause some odd pulley alignment and uneven wear on the belts. Since the linear rails are capable of handling the twisting forces, I instead opted for a stacked belt style that makes the belt routing much simpler. Since the motors are not being mounted to the CoreXY belt path I was able to run the belts along the inside of the frame, keeping them compact and out of the way. Another pulley was added to the front idlers of the machine pinching the return path closer to the frame of the printer increasing the X-axis length without having to make the machine bigger. Belt tensioners were added to the front of the machine for easy tensioning of the belts.
The tool head holds the hotend, Z probe and part cooling fans together. I wanted the printer to be adaptable and open to other hotend and cooling options and so wanted to use a quick-change head. Instead of reinventing the wheel here and introducing another competing standard I opted to use the Voron quick change tool head since it offers quick tool changes (2 screws) and already has heads available for the E3D V6 (in both regular and volcano configuration), Slice Mosquito, and the TL Dragon. The mounting plate only required minor edits to suit my belt paths and to mount to a PINDA probe.
Step 4: Z Axis
The Z axis is responsible for the fine positioning of the bed to create the layers of the 3D print. One of the key concerns here is the infamous “Z Wobble” effect where the axis wobbles from side to side as it travels creating significant and repeated rippling patterns on the surface of prints. Key to overcoming this is careful design of the Z axis so that it is not over constrained but is properly supported.
A lot of popular printers have a cantilevered bed where the bed is only supported and driven on one side. While this makes the mounting, assembly, and alignment much simpler it also doesn't fully support the bed and so you get inaccurate movement the further away from the support column thanks to the bed drooping. Other machines support the bed at all four corners which ends up over-constraining it and requiring challenging rail alignment.
I opted for a hybrid cantilevered design which supports the bed at the back to control X, Y, and pitching movements but then uses three lead screws equally spaced around the bed to control Z, Yaw, and roll movement.
Using three screws makes sense since the three points at which it holds the bed perfectly defines the plane. Implementing independent control of the three screws would allow the printer to level itself but would require 3 independent drivers and motors adding significant cost. For the initial build I instead opted to save the cost and use a single motor and driver and connected all of the lead screws together with a single belt loop. At a later date the machine could be easily updated to include independent control.
Aligning the lead screws to the bed is also essential as otherwise they can apply a force to the bed causing Z wobble. Each screw is mounted to a flexible coupling which will allow for a small amount of angular misalignment making assembly significantly more forgiving. Each screw is mounted through the flexible coupling to a shaft that holds a GT2 pulley and is held in place by two KFL08 bearing blocks mounted to a housing.
To reduce the need for a central vertical column at the back of the machine and to increase the rotational stability I chose to use one rail on either of the back extrusions. As a consequence, these will require alignment, but this is much simpler than aligning 4 rails.
Step 5: Bed
The main construction of the bed is an 8 mm thick aluminium tooling plate that has been machined flat. The thickness of the bed makes it somewhat heavy but gives it significant thermal mass meaning it can maintain a very stable temperature. Its thickness also means that it is resistive to warping as it undergoes heating. A 20 mm margin is added around the build area on the bed so that the additional cooling effect that the edge of the plate will see isn’t within the build volume. The tooling plate sits on a frame made of 2020 aluminium extrusion which mounts it to the linear rails and screws of the Z axis. The bed is mounted to the frame with 3 screws to prevent the screws from over-defining the bed, but this will not scale well to larger machine sizes.
A 200 W DC silicone heater is bonded to the underside of the bed to heat the assembly and improve bed adhesion. The 200 W heater was selected to limit the heating power of the bed to an acceptable max temperature. An AC powered bed would offer a higher heating power but comes with the added risk of having to run mains cabling and a grounding loop through the printer while the increased heating power could cause permanent damage to the printer in the event of thermal runaway.
Aluminium tooling plates and silicone heaters come with a significant cost so save a bit of money they can be replaced with a much cheaper PCB heated bed. These beds often have issues with flatness, but this can be overcome with software mesh compensation and will act as a suitable stopgap.
I wanted to have an easy way to remove large prints from the bed and the ability to quickly switch build plates to enable back to back print jobs. A removable bed is the obvious answer and so I opted for a spring steel sheet held down with magnets. This allows it to be easily removed and reinstalled without the needs for a complex clamping arrangement. A magnetic sheet is bonded to the bed for a quick solution.
The print surface is essential for getting prints to stick to the bed and preventing them from warping. I wanted to avoid surfaces like glass or bare metal that require excessive attention such as the application of hairspray, glue or blue tape for adhesion. The spring steel sheets are instead coated in PEI which creates a very good surface for adhesion when warm but will release the part easily once cooled.
Step 6: Extrusion System
The extrusion system of the printer is responsible for the flow of plastic out of the nozzle and is comprised of the extruder, the hot end, and the connecting parts.
The extruder is the part of the extrusion system that pushes the filament into the hot end. There are many options on the market, but I chose to go with the Bondtech BMG for its duel drive hobbed gears that nearly never slip on filament and the 3:1 gear ratio that gives finer control of the filament flow with less velocity ripple.
The hot end is where the plastic is heated and extruded out of the nozzle and is made of the cold side (typically a large heat sink to dissipate heat), the heat break (responsible for separating the hot and cold sides), and the hot side (formed of a heater block and nozzle). The key factor in hot end design is a sharp hot-to-cold transition to get the best control of the flowing filament.
I chose to use an E3D V6 hot end for its proven track record and ubiquitous mounting solution. I upgraded the standard stainless-steel heatbreak to a titanium one for the reduced thermal transfer. For the nozzle I chose a standard 0.4 mm brass nozzle to start with due to its all-round performance. A big advantage to the E3D system is that it gives the option of upgrading the hot end in the future to allow faster printing with a “Volcano” heater block, support for abrasive materials with hardened nozzles, or a range of nozzle diameters for varying print requirements.
Other options worth looking at are the Hermera from E3D for a compact direct drive solution or the Dragon from TriangleLabs for quick nozzle changes and improved heat break performance.
With both the extruder and hot end selected all that is left is to connect them together. The obvious answer is a direct connection using the groove mount connection, but this means that the weight of the extruder and its motor must be carried by the head. To overcome this a bowden system can be used which places the extruder (and its motor) on the printer frame and feeds the hot end via a bowden tube. Whilst this reduces the amount of control over the filament, it allows the head acceleration to be increased and reduces print artefacts.
Step 7: Electronics
The first obvious question is the supply voltage for the printer of which both 12 V and 24 V are common. 24 V requires lower (half) current to deliver the same amount of power through your wires. This lets you use thinner wires saving a bit of cost and making cable routing easier. It also means you can use higher powered heaters to reduce heat up time and increase top temperature. This is particularly useful for your heated bed. Your motors are a high inductive load on the printer and so having the increased voltage also means you can run them at higher steps per second (useful for 0.9 deg steppers) and at a higher torque which can greatly improve the quality of your prints as the motors can maintain better control.
Overall there is no reason to opt for a 12 V supply at the time of writing this. As the tech develops it is likely we will see the extinction of 12 V printer electronics in favour of 24 V and perhaps even higher voltages. For this reason, I decided to pick up a 400 W 24 V PSU from SteppersOnline. I chose a 400 W PSU as it covered all of the power requirements for my machine with a bit of head room which will reduce electrical strain on it extending its life a little.
The Duet Wiki has a great article on calculating the required power for a 3D printer PSU.
There is a wide range of suitable control boards on the market. 32-bit boards offer a serious improvement in processing power.
The Duet 2 offers a powerful 32-bit processor and the built-in drivers implement excellent passive cooling, but the key benefit is the tight integration with RepRap Firmare (RRF) and its Wi-Fi interface which offers very powerful printer customisation and setup. RRF opens up a lot of possibilities and thanks to its ‘GCode everywhere’ attitude it is easy to implement advanced features and configuration. Duet 2 Wifi also supports 12 V and 24 V input and supports 5 drivers (capable of 256x micro-stepping) and 3 heater channels (2 for hot end tools and another for a heated bed).
I opted to run the printer without a screen since the Duet Web Control interface offers all of the control you need and can be accessed from any PC or mobile on the same network as the printer. I have a PC next to the printer making the PannelDue that is the preferred screen for the duet unnecessary.
Stepper motors are extremely common in 3D printing due to their ease of open-loop control (control without a feedback system), excellent low speed performance, and accurate positioning capability. I selected to use NEMA 17 motors with a step-angle of 0.9º step angle throughout the entire machine. The increased step resolution over typical stepper motors gives finer control and smoother motion but also has reduced torque and top speed. To compensate for this, I chose motors with a 2.0 A rating which allows more current to be used to recover some of the lost torque and the high step rate of the Duet Wifi should allow a reasonable top speed to be maintained.
High flexibility silicone wiring was used throughout the machine as there are a large number of moving parts and the silicone wiring offers a superior life when being constantly flexed. Making the right selection of wire thickness is also essential to ensuring that the load on the wires is safe. I used 20 AWG for all of my low current connections and 14 AWG for my bed connections. This will provide a small safety margin over the expected current.
All wires are fixed at both ends with cable anchors to reduce the chance of them becoming loose and mains wiring is contained within plastic conduiting. This provides essential protection from wires creating shorts or bringing components like the frame live. Drag chains are used to manage the cables on the Z axis to keep the wiring tidy and prevent it getting trapped in the motion system.
Step 8: Building the Machine
With the design finalised its time to order the parts and start building! Before assembly it’s always good practise to run through the assembly process in your CAD package to help iron out any final issues and familiarise yourself with at least a rough plan of what you are going to do, how you will do it and in what order.
Special attention is required in the assembly of the chassis to ensure rails don’t bind, and prints come out square. A critical area is ensuring flatness of the top 3 members so that the linear rails can be installed with minimal issue. I worked from the top down using a table to hold the extrusions flat to a common plane. Ensuring the squareness of the top frame is also essential for good motion (although a small amount of error can be corrected in software). An engineer’s square is an essential tool for this. If blind joints have been cut non square you can correct them by adding small shims into the joint or rotating the extrusion 90 degrees to shift the error to a less critical dimension.
Installing the linear rails that are operating in pairs (Y axis and Z axis) requires careful alignment to ensure smooth running. There are several methods to align the rails but the easiest method I have found is to denote one rail as the master and another as the floating rail. With the master rail securely fixed to the frame the other rail can be aligned using a Dial Test Indicator. If you don’t own a Dial Test Indicator the rails can be aligned “close-enough” by sweeping the axis back and forth ensuring smooth motion as you tighten down the floating rail.
Step 9: Test and Calibration
With the machine built, wired, and powered up all that’s left is to calibrate it! There are quite a few calibrations steps required when setting up a printer but here I will outline a couple of the key ones. These calibration steps consist of brief descriptions of the calibration process and so will require an understanding of GCode and your machine to enable you to carry them out.
XYZ Steps Per mm
The steps per mm define the axis scaling and so accurate setting is required to get parts that are dimensionally accurate. Several methods exist based on the measurement of printed artefacts such as calibration cubes, but these can often introduce inaccuracy due to the inclusion of errors from the printing process such as thermal contraction of the plastic, flow of the plastic, and surface defects like layer misalignment or Z-wobble which aren’t accounted for. Better tests use a stepped artefact that allows multiple measurements to be taken and consistent errors to be detected and removed. While these tests still include an error, they are typically sufficient for printing.
A good stepped axis calibration test along with ready-made excel sheet to calculate your steps per mm can be found here: https://www.thingiverse.com/thing:2484766.
Stall Detect Homing
Stall detect homing is a great feature as it can simplify the amount of wire runs you have to make around your machine and saves you from buying extra homing switches. It does however have the drawback of reduced homing accuracy (especially on CoreXY machines) meaning your ability to locate items on the bed may be limited. Fortunately, I don’t have to accurately locate anything on my bed, so I chose to use it.
The calibration procedure is relatively straight forward but relies on repeated testing to narrow down both the optimal current and stall detection sensitivity.
Step one is to slowly reduce stepper current whilst moving, at the homing speed, around the bed. The aim here is to find the lowest motor current that will reliably allow the motors not to stall during free movement. Make sure you test all of the areas of the XY movement in case one area is stiffer. This lowest motor current that still allows reliable movement will become the motor current used for homing moves.
With the motor current set we next want to set the stall sensitivity to the highest sensitivity that doesn’t cause false positives. We can do this by setting the sensitivity to the highest setting and repeat the previous movements around the bed. The motor will detect a stall as soon as it starts moving so reduce the sensitivity slowly until you find a stable sensitivity that doesn’t cause false positives. You now have the optimal sensitivity and motor current and you can use these to write your homing macros.
The machine uses a PINDA probe which is an inductive probe with a built-in thermistor to allow for measurement temperature compensation. The Z probe requires calibration to get the perfect first layer. Start by fixing the probe to the machine so that it triggers before the nozzle hits the bed but is higher than nozzle itself. You can now use the Z-probe to home the machine. Find the Z probe offset by moving the Z axis up to the nozzle using a piece of paper to set the correct distance and finally set the Z offset for the probe to the current position of the head in the Z axis.
E-Steps per mm and Flow Rate
Correct control of flow through your hot end is essential to consistent layers. First, we can set the E-steps of the extruder which describes the movement of filament through the extruder before the hotend. Start by marking a point on your filament and measure the points distance from the start of your Bowden tube. Extrude or retract the filament by a set amount and then remeasure the distance from the Bowden tube. You can use these two measurements to calculate the correct E-steps using the formula above.
Different filaments often have different hardness and therefore change the effective diameter of the hobbed gears. Setting flow controls the extrusion out of the nozzle allows you to finely adjust the extrusion based on varying filaments to compensate for this effect. Start by printing a single walled cube with no top at 100% flow. This will give you a single wall thickness which you can measure with a set of Vernier callipers or a micrometre. You can then calculate the appropriate flow using the formula above. Adjusted flow should be between 90 % and 110%. If you need to adjust the flow more than this, it suggests other issues are present.
A final test that is useful to complete to characterise your printer’s performance is a tolerance test. This tells you the minimum clearance you can leave between parts before they become bonded together. Several quick and easy to print tests exist online. I personally like this one since it is quick to print and doesn’t use a lot of material: https://www.thingiverse.com/thing:2949885.
Step 10: Conclusion
After building the machine I am very happy with the performance and test prints have come out with excellent quality. Due to COVID19 the delivery of the laser cut panels was delayed and so they were not installed in time for this write up. Hopefully they will arrive soon though!
This machine is far from a ‘final design’ and a version two will likely be made that iterates on some of the lessons learnt from creating this machine. There are a few things I would change about this machine. First, I would opt to use microswitches for axis end stops. Although they require more wiring the configuration is much simpler, they are significantly more reliable and produce less false positives. Another key issue with the machine is the lack of a common datum which makes alignment of rails and screws challenging. Building everything against a common datum plane that can be guaranteed flat would help make assembly much easier. I would also adapt the Z axis to offer more support to the bed by mounting each screw to its own linear rail and mounting the bed through a kinematic coupling.
I hope this article has been interesting and given you some pointers on how to design your own machine. I found the project to be a huge learning experience but one that I enjoyed, and I certainly picked up a lot of new machine design skills. If you build your own printer leave a comment. I’d love to see what you make!
Participated in the
3D Printed Contest