Updated in December 2021.

[The Ender 3 Pro]

Introduction

I recently (March 2020) bought a Creality Ender 3 Pro1 3D printer. It’s one of the original ‘heat up plastic and squirt it out’ sort, but it had good reviews2 and was on offer for about £200. These are my notes on setting it up, and starting to print.

This article was revised in December 2021 because I added a few extra things to the printer: a CR-Touch probe (Crealty’s own take on the BL-Touch) and a new mainboard to facilitate that. I also spent a while tweaking things and fixed the problems I’d had with the first few layers.

Construction

If I were starting now I’d begin by watching some of the third-party build instructions and videos. I think they add useful details beyond the instructions from Creality, particularly if you’re new to all this as I was. Sadly, I only found them after I’d built the machine. Even, so it wasn’t hard to get the printer working acceptably well.

I suspect the best guide changes over time, but I found Maker Steve’s guide3 helpful.

Update: If I were starting now, I’d buy the new S14 instead.

Truing up

Although the printer is made from sturdy aluminium sections, there’s still enough play to make some of the right angles decidedly wrong if you’re not careful. In most cases it’s just a case of squaring things up before tightening bolts though. Getting the gantry parallel to the base of the unit involves getting the six idler-wheels in place, a couple of which have eccentric tensioning bolts. It’s important that the z-motion is smooth and without play, and I didn’t care enough about that when I started.

In a similar vein, you need to be careful to avoid slack in the x-axis belt, but that seems easy enough. The 3d-bros have a useful discussion5 of the issues, which includes links to designs of printable belt tensioning wheels. Creality include something similar on more recent printers, so perhaps there’s merit in them. Unsurprisingly, you buy such things too: just look on Amazon or eBay.

z-axis Binding

The z-axis on the Ender 3 is driven by a vertical lead-screw. Sadly though that bar is often not quite vertical, and so the nut tends to bind. You can print a little shim to improve matters, but I found that a couple of washers did the job for me. Maker Steve discusses the issue6.

Update: I only worked out the problem below after trying to fix the first few print layers by changing temperatures.

You also get problems if the wheels that run on uprights are too tight. For me they led to elephant’s foot: squished layers for the bottom few millimetres of the print. I don’t quite understand the mechanism, but if the wheels are too tight the z-axis has a significant amount of hysteresis: if you move the z-axis down then up it doesn‘t return to the same place.

One way to check the z-axis is with a dial indicator7. Rest the indicator’s lever on the cross-bar, jog down 0.1mm a few times and check that the bar does indeed move down the right amount. Then jog up and see if you return to the same place. If not, try loosening the eccentric nuts.

This tweaking is simple to do and wholly independent of anything related to temperatures, bed-levelling or extrusion settings. If you have a dial indicator I recommend you try it.

Operation

The discussions below all refer to printing 1.75mm PLA at a bed temperature of 50°C, and a nozzle temperature of 200°C. I tried varying these temperatures a bit, and not much changed. It was hardly a scientific study though. I’ve tried Amazon Basics and SUNLU filament, and there didn’t seem to be any difference.

Update: I’ve settled on a bed temperature of 60°C now, just because that’s the default in Cura. Having spent a fair while messing around with temperatures, I reckon that if you are printing simple objects with PLA then they don’t matter that much: ±10°C is fine. If you are printing more challenging objects perhaps you need to be more careful though.

The bed and leveling it

Almost all the reviews of the Ender (and indeed most similar machines) talk about the importance of bed-leveling i.e. making sure that the print bed is a surface of constant z. You achieve this by twiddling four little adjustments in the corners of the bed, which pull the bed down against springs.

At first this straightforward if a little tedious, but at some point it became a bit tricky. I’m not sure what changed, but I wonder if I managed to deform the bed in a way which couldn’t be trimmed by the corner adjustments. In the end I had a glass build plate on hand, and the problem went away when I switched to that. I suspect I could have managed without the glass plate, but it was there and an easy solution.

Although there are firmware upgrades to the printer which semi-automate the leveling process, I didn’t try them.

The CR Touch probe

I only installed this in the December 2021 upgrade.

The CR Touch8 probe is Crealty’s own take on the BLTouch9 probe. You can think of the probe as a switch which triggers when it gets a certain distance from the bed: in other words it is a fancy push-button. I think it’s important to realise that the probe doesn’t measure distance per se, rather you move the z-axis up far enough that the probe is not triggered then slowly move it down until it is.

Besides this probing, it seems common practice to use the probe as a z-limit switch too. I was a bit reluctant to do this, because it seemed more prone to failure than the existing microswitch, but I don’t think you can just leave the z-stop microswitch in place without it getting in the way. It might be possible to move it lower, and use it as a switch of last resort, but I didn’t try that.

The Marlin firmware lets you probe a grid of xy-locations, then display the z-offsets for each point. This is doubly useful:

  1. You can use the offsets to level the bed by twiddling the four adjustments in the corners. I found this much easier to do when I could see objective measurements of the offsets.

  2. The Marlin firmware can try to compensate for any remaining offsets during printing by tweaking the print. I am not sure how it does this.

One final twist: the probe origin is displaced from the nozzle in all three dimensions. The xy-displacement is easy to measure and only needs to be accurate to a few millimetres. The z-displacement is basically a return to the old paper-sliding trick, though given that it’s a single parameter, getting close and then just trying different values is perfectly possible. I think an accuracy of about 0.1mm is plenty. Once you know what the offsets are, use M851 to set them:

M851 X-45.0000 Y-5.0000 Z-1.6500

Wiring and configuring the firmware for this was a bit fiddly. See the notes below.

Adhesion

Most of the time, I’ve not had any problems with adhesion, and when there were problems leveling the bed fixed them. This applies to printing PLA on both the original bed with flexible magnetic cover, and the upgraded tempered glass plate.

I think things stuck harder on glass, but they’re easy to remove if you let the glass cool first.

Extrusion calibration

Other people have found that the Ender’s extruder under-extrudes i.e. if you ask it to extrude say 100mm of filament, you only get say 90mm. Happily it’s easy to tweak a parameter in the firmware to fix this: just use the M9210 gcode command. The original firmware set 93 steps to the mm, I found 100 worked better for me.

I found this guide at All3DP11 helpful.

Calibration cubes and Elephant feet

Following general advice, I tried printing some 20mm cubes12 to test the printer’s calibration. Both X- and Y-axes were good, typically well within 0.1mm of the desired 20mm, but the Z-axis was usually about 0.5mm short.

[The Ender 3 Pro]

On inspection some fraction of the bottom millimeter of the cube was squashed, a phenomenon know as “Elephant’s foot”13. Although not listed on that page, for me the problem seemed in large part to come from an overly tight z-axis. After some tuning, I could reliably print cubes about 0.2mm short, but it remains a small issue.

Update: I spent far too long messing around with temperatures here. Were I starting again, I would first check the mechanicals: make sure that the frame was square, and that the z-axis moved properly. I’d then level the bed and find the right z-offset. These were enough to print cubes with 0.1mm accuracy using the standard 200°C/60°C temperatures.

Slicing

I’ve just used Cura, with the default settings.

Upgrades

One of the great joys of open designs is that they’re often easy to improve by tinkering. So I’ve added a few things to the stock printer. This freedom can become a rabbit hole though, so my list is deliberately incomplete.

Controller board

Update: I’ve upgraded this again, and the old words seem obsolete.

Originally the Ender was pretty noisy, but I replaced the controller board with Creality’s “Silent Board”14 upgrade and it got a lot quieter. I think the key is that the newer board has TMC2208 stepper motor drivers.

When I came to install the CR-Touch it seemed sensible to upgrade this again because the Silent Board lacked both connectors and much extra space in the microcontroller. The current Marlin firmware15 (V2) also suggests that it will be happier running on newer hardware.

There are now numerous ARM-based controller boards. When I bought them, the SKR MINI E3 V2.016 mainboard and TFT35-E3 V317 screen from BigTreeTech were well-regarded and inexpensive. The prices seem to have risen, but they’ve worked well for me.

Firmware

At first I used the latest firmware from BIGTREETECH’s GitHub repo18. I upgraded the firmware on both the controller and display boards, and was somewhat surprised to find both use Marlin.

At this point, I was just interested in getting the printer working again and didn’t use the CR-Touch probe.

CR-Touch

There is a dedicated socket on the SKR board for the CR-Touch. In my experience it is electrically compatible with the cable supplied with the probe, though the wires in the cable are coloured in the opposite order to almost all the reports on the Internet.

However, almost all the firmware images on the Internet are not compatible with wiring things up this way. Instead they expect you to split the CR-Touch cable between the CR-Touch socket on the board and the now-unused Z-stop microswitch connection.

In Marlin terms the relevant configuration line is:

#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

I prefer to wire the probe to the dedicated socket, so I configured Marlin thus:

// #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
...
#define Z_MIN_PROBE_PIN PC14

As with the Silent Board, I found Daniel Brooke Peig’s site19 very helpful.

Octoprint

It turns out that putting the printer on a network is most civilized:

Happily Gina Häußge has created OctoPrint20: software which turns a Raspberry Pi into the perfect Ender-network interface.

The software is mature enough that even quite unusual tasks are supported. For example, there’s a module to update the firmware on the driver board.

Camera mount

If you’ve got a camera for OctoPrint, it helps to point it in the right direction. Happily you can print a suitable mount. I used Modmike’s design21 on Thingiverse.

[The Ender 3 Pro]

Filament guide

I found that the filament didn’t feed smoothly into the extruder stepper assembly: it tended to make a very sharp angle at the entrance to the driver, and often sprang off the reel.

Printing a simple pulley solved this. I used a design by Holspeed22 which is based around a skate-board bearing.

[The Ender 3 Pro]

Pending things

Although I’ve got the printer to a state where it prints well enough to be useful, there are still things to be done. I include them here as an aide-mémoire.

Enclosure

Although you can print PLA without worrying unduly about draughts and cold air, these seem to be more of an issue for ABS and PETG. One solution is to put the printer in an enclosure. There’s an official one from Creality23 but it makes the printer’s footprint a lot bigger.

Belt Tighteners

Although I’ve not needed these yet, if I were to take the printer apart it would be prudent to add them.

Replacement idler-wheels

I’m still a bit suspicious of the z-axis motion, and I wonder if I’ve either got some dodgy bearings or deformed wheels. As with the belt tighteners, if I ever take the printer apart it would be worth looking into this.

Conclusions

The Ender Pro 3 is a fine device: inexpensive but capable of making good prints. Although it’s easy to assemble, it’s worth spending more time and taking to build it well.

If I were starting afresh now, I would probably buy the Ender 3 S1.

If I were starting afresh with another Ender 3 Pro, I would install:

As noted above I would also spend more time checking the basic mechanical setup. I found that to get good prints it was enough to get the bed level to ±0.15mm and the z-offset correct to ±0.1mm.