Understanding 3D Printing

This is a discussion of how 3D printers work. This article only covers ‘fused filament’ printers - devices that build a 3D object by melting some kind of plastic filament and depositing layers of this plastic onto a build plate. These layers almost immediately cool and solidify into the printed object.

There are other (very interesting) types of 3D printers, but we’re not going to discuss them in this article.

Motion Control

3D printers and CNC mills work on the same principle; use three-axis control to orient a tool in space relative to a target, and modify that space with the tool [1].

For most mainstream (cartesian) 3D printers [2], this means an X-axis (left-right), a Y-axis (forward-back), and a Z-axis (up-down). The idea is to position the tool very precisely in 3D space by moving it along these three axes.

The easiest way to imagine this being done is by moving a tool along all three axes above a static build plate. For practical reasons, printers are not often designed this way.

One common design is to move the toolhead along the X and Y axes while the build plate is moved up and down along the Z axis.

Another moves the toolhead along the Z and X (or Y) axes while the build plate is moved along the Y (or X) axis.

All motion control systems must make consistent movements. This is relatively easy to do today. Stepper motors are a class of motor that move in discrete steps [3]. Even relatively low-cost stepper motors produce very reliable and repeatable motion in two directions.

Other qualities that we use to evaluate 3D printer motion systems are rigidity (the ability to resist droop/sag), speed, and the amount of vibration (and noise) generated during motion.

Two other real-world factors that strongly influence desktop 3D printer design today are cost and weight.

Popular 3D printers today fall short of an ideal system, but their motion control systems have improved steadily as manufacturers and hobbyists develop new ideas, and as better technology becomes more affordable because of scaling demand.

A good example of this is the migration from laser-cut plywood to metal, or the adoption of linear rails for control.

Even if cost were not a concern, the weight of the motion control system has a relationship with the maximum speed of the device. Speed and rigidity are trade offs that need to be balanced in the design of a printer. There are also practical limits to a hotend’s ability to place material precisely that allow us to call a motion control system good enough.

Hotend and Extruder

While the motion control system used by a printer has a lot in common with other systems, the tool head - hotend and extruder - is specific to 3D printing.

There are a lot of implementation details that differentiate hotend/extruder systems, but the principal behind them are all similar. On a fused filament 3D printer, the extruder pushes filament into the hotend. The hotend melts the filament and guides it through an aperture to produce a uniform line of material.

Printers are typically designed with a specific hotend/extruder in mind, but for many printers, you can upgrade or swap out these components easily.


The extruder is typically a stepper motor connected to a hobbed bolt or geared teeth. The goal is to move the filament very precisely without slipping. A common failure mode when printing is for the filament to slip, or worse, for the teeth moving the filament to carve into the filament and for the filament to stop moving entirely.

One major design decision in a printer is whether the hotend should be directly connected to the extruder (direct drive) or mounted separately from the extruder via a Bowden tube. Direct drive is a simpler design, but non-direct implementations allow the system to mount the extruder elsewhere and make the tool - the hotend that the motion control system needs to position - much lighter.

Most 3D printing filament is rather rigid and moves easily through any extruder. There are a class of filament materials, like Ninjaflex, that are very flexible. To print this material successfully, it is important that the path the filament follows through the extruder is as short and straight as possible, so there is no room for the filament to kink.

When selecting an extruder, key factors are cost, weight and complexity, as well as whether you require support for flexible filament. Heavier or more complicated extruder mechanisms may grip the filament better, but are also more difficult to clear out when they jam.


Looking at a cross-section of a hotend, you’ll see they typically are designed with three zones in mind. The cold zone, where the filament enters the hotend. The melting zone, where the filament is heated, and the nozzle.

The aperture of the printer nozzle determines the width of the filament line the printer lays down. Small apertures result in more detailed, slower prints. As a general rule, apertures that are smaller than 0.4mm are also more likely to clog or jam.

Large apertures result in faster, less detailed prints. It is possible to print at apertures that are larger than the filament size. However, larger apertures require the hotend to melt a much larger volume of material than a smaller aperture in the same time period. Some hotend manufacturers produce high flow hotends for this purpose with stronger heating elements.

The hotend is typically set and maintained at a specific temperature for an entire print. This printing temperature depends on the material used. Each material has a recommended temperature range. Roughly, use PLA at 200C, ABS at 230C and other materials like PEEK require a temperature as high as 400C.

When selecting a hotend, temperature stability, ease of maintenance, the max temperature, and flow rate are important considerations.

Multiple Filaments

Most 3D printing is done with a single filament type for the whole print. However, some printers have multiple hotend+extrusion heads and can print several materials at once. This can be done to print in multiple colors, or make an object out of materials with different properties.

Advanced printers are also experimenting with hardware and techniques that allow multiple filaments to be used through the same extruder.

3D Printing Toolchain

Aside from the mechanics and tool head that drive a 3D printer, software is needed to create a design and export that design in a format that the 3D printer can use.

While some 3D printers have software tailored specifically for their hardware, many printers can use a range of software. In order to get from print to final product, the process is to create a design in a CAD tool, export a 3D model, and then convert the model to machine code for printing.

Model Creation

It is not necessary to create your own designs. Sites like YouMagine and Thingiverse host an incredible number of files you can use to get started. You should learn how to do this anyway!

Part design is typically done with CAD software. There are a range of programs you can use that are free or low cost; this includes TinkerCAD, Autodesk Fusion 360, or for something completely different, OpenSCAD.

This software can be used to design parts for ‘traditional’ manufacture (milling, routing) or 3D printing.

It is also possible use with software that is more focused on 3D modeling; tools like Cheetah3D and Blender are used by artists and animators. This software is generally better at ‘sculpting’ digitally but less efficient at making precise mechanical parts.

If you want to experiment with 3D design on an iPad, there are a range of interesting tools available; the list includes Shapr3D and uMake.

Model Export

Data files are commonly shared via the .STL format. All of the programs listed above can export objects in STL. STL is a mesh format that describes the shape of the file you’d like to build. It is important to note that a lot of information is “lost” when a CAD file is exported to .STL.

While .STL files preserve the shape of the object you have created (with a degree of fidelity you can specify), it does not describe design intent or the steps followed to create a shape. While you can import an STL into a CAD program, it is often easier to start over from scratch if you do not have the original CAD file.


before it can be printed. Slicing turns the geometric ‘mesh’ file into machine code, a list of instructions that tells the printer where to move the tool head, when to extrude material, and the right temperature for the hotend.

The most common format for these instructions is called “gcode”... because many of the commands (the ones that relate to moving the toolhead) are prefixed with the letter G. gcode is the same format that CNC mills and router use, and unlike a .STL file, you can read (and edit) gCODE in a text editor.

Here's an example of what gcode looks like:

G0 F3600 X108.179 Y61.217 Z0.3
G1 F1500 E0
G1 F1800 X108.597 Y60.546 E0.03944
G1 X109.08 Y59.922 E0.07881
G1 X109.623 Y59.349 E0.11819
G1 X110.222 Y58.834 E0.1576
G1 X110.87 Y58.383 E0.19699
G1 X111.561 Y57.999 E0.23643
G1 X112.286 Y57.687 E0.27581
G1 X113.039 Y57.45 E0.31519
G1 X113.813 Y57.291 E0.35461

There are a range of slicers out there that allow you to import a STL file, place the object on your print bed, and generate gcode for the printer. Leading free and open source applications include Cura and Slic3r.

While an STL file can be used on any printer, the gcode file you generate takes the specifics of your printer into account and may not be usable on another make/model of printer (and in the most extreme case, could actually damage your printer if configured improperly).

Troubleshooting Prints

It is common when you first start printing to have difficulty getting your prints to succeed. Some designs are much harder to print than others (or impossible to print), so start with something simple, like a cube.

In my experience, getting the first few layers of a print to stick successfully to the print bed is one of the biggest hurdles for newcomers. Many people use blue tape and hairspray (any kind) or a gluestick, or dedicated substancesto get their prints to stick. There is no shame in this.

The easiest way to get help is to talk to someone who has more experience with printing than you do. This site is also a great resource for diagnosing failed prints.

[1] - Laser cutters and inkjet printers also work the same way except they only provide x-y axis control.

[2] - https://makezine.com/2015/03/10/cartesian-delta-polar-common-3d-printers/

[3] - Think of a step as the tick of a second hand on a clock, if it helps.

Direct Printing to Cura with Printrbot Simple Pro

You can easily print with Simple Pro from Cura running on your computer. You can also use Octoprint (I do this with my printer connected to a Raspberry Pi).

When you are printing direct via USB, just ignore the touchscreen. It won't be aware of what the printer is doing, and interacting with the touchscreen can interfere with a print in progress.

Here are the steps:

1) Download and install the latest version of Cura from this link. (You can elect not to share personal information from the drop down that pops up.)

2) Launch Cura and add a printer. Expand "Other" and select Printrbot Simple. If you like, you can override the Printer Name to "Printrbot Simple Pro".

Printer Selection (1)
Printer Selection (2)

3) Open up Settings:Printers:Manage Printers and select the printer you just added. Click on "Machine Settings".

Machine Settings Printer

4) Update the print bed to 200x150x200mm. Erase the existing start/end gcode.

Screen Shot 2018-08-21 at 8.08.13 PM.png

5) Paste the following lines into the "start gcode" text box.

(==Configuration Settings==)
G21 ;set metric mode - use mm as units
M100 ({{ysv:1000}}) ;slow y-axis homing velocity
so it doesn't slam
;skipping all other configuration. The stock
settings should be correct
(==Home Printer==)
M100 ({{_leds:3}}) ;turn LED on, blue color
G92.1 X0 Y0 Z0 A0 B0 ;reset origin offsets on
all axes -clean slate
G28.2 X0 Y0 Z0 ;home the x, y and z axes.
(==Level Bed==)
M100 ({{_leds:5}}) ;turn LED on, yellow color
;probe first point
G0 X0 Y145 Z6 F6000 ;travel to X=0, Y=145mm, Z=
G38.2 Z-10 F200 ;slowly travel down until the z-
probe activates
G0 Z5 ;travel back up to Z=5mm
;probe second point
G0 X210 Y65 ;travel to X=210mm Y=65mm
G38.2 Z-10 F200 ;slowly travel down until the z-
probe activates
G0 Z5 ;travel back up to Z=5mm
;probe third point
G0 X=0 Y=10 ;travel to X=0mm, Y=10mm
G38.2 Z-10 F200 ;slowly travel down until the z-
probe activates
G0 Z5 ;travel back up to Z=5mm
M100 ({{tram:1}}) ;set the bed height based on
the probe values from the three previous G38.2
(==Z Offset==)
G0 Z5 ;make sure we are at a decent Z height
G92 Z-0.1 ;set Z-axis offset ;** REPLACE THIS
M100 ({{_leds:2}}) ;turn LED on, red color
M109 S{material_print_temperature} ;start
heating hotend, wait until temperature hit
M100 ({{_leds:1}}) ;turn LED on, white color
G92 A0 ;reset extruder origin
G0 X10 Y10 Z0.3 ;travel to X=10mm, Y=10mm, Z=
G1 X200 A12 F1200 ;extrude 12mm of filament
while moving to X=200mm
G0 Y0.4 ;travel to Y=0.4
G1 X110 A18 ;extrude 6mm more filament while
moving back to X=110mm
G0 Z1 ;raise to Z=1mm
G92 A0 ;reset extruder origin
(==Print Gcode Starts Below==)

6) Add the following gcode into the "end gcode" text box.

M104 S0     ;extruder heater off
G91         ;relative positioning
G1 E-1 F300 ;retract the filament a bit
G1 Z+1 E-5 F9000 ;move Z up a bit and retract even more
G28 X0 Y0   ;home X/Y, so the head is out of the way
M84         ;steppers off
G90         ;absolute positioning

7) Click on the Extruder tab and change the nozzle to 0.3mm.

Machine Settings Nozzle

8) In the main Cura window, change your wall width to a multiple of the nozzle size. I used 0.9mm, but 0.6mm is also a very good choice.

Screen Shot 2018-08-21 at 8.18.30 PM.png

9) You will probably want to run your first few prints at "low" or "draft" quality. Despite what the presets say, the quality when printing in Draft is very good, and will save a lot of time on your prints.

10) Load a file in Cura and print. To print from Cura, plug in the printer to your computer via the USB port on the side. Cura should recognize it, and you can change the "save to file" button to "print from USB".

11) You'll find that your first print is probably way above the print bed. You'll need to calibrate your z-offset. To do this, open up Settings:Printers:Manage Printers and click Machine Settings again (see step 3). In the 'start gcode' section,change this line:

G92 Z0.1 ;set Z-axis offset ;** REPLACE THIS WITH YOUR OFFSET **

For my Simple Metal with a heated bed, I use this:

G92 Z9.6 ;set Z-axis offset;

If you don't have a heated bed, your height adjustment may need a much smaller value. The easiest way to calibrate this is to start a test print, stop the print once it starts printing the first line, and measure the height of the print nozzle from the bed.