En­der 3 Pro

October 20 2025Daniel Tompkins

Archive KB 3d-printing

The Cre­ality Ender 3 Pro is a pop­ular and af­ford­able FDM (fused de­po­si­tion mod­eling, also called fused fil­a­ment fab­ri­ca­tion, or FFF) 3D printer that has gained a strong fol­lowing among hob­by­ists and makers. Known for its re­li­a­bility, ease of use, and up­grade-ability, the Ender 3 Pro is a great choice for both be­gin­ners and ex­pe­ri­enced users.

My best man gifted my wife and me (mostly me) an Ender 3 Pro for our wed­ding. So far, most of the printing I've done has only served to im­prove the printer... I've made sev­eral up­grades and mod­i­fi­ca­tions to en­hance its per­for­mance and us­ability.

Up­grades

Ex­truder

One thing al­most every Ender owner will end up doing is re­placing the stock, plastic ex­truder mech­a­nism with a more ro­bust alu­minum model (such as this ). A de­sign flaw with the orig­inal often leads to the plastic snap­ping with some con­tin­uous usage— causing under-ex­tru­sion or pre­venting fil­a­ment from trav­eling through the Bowden tube al­to­gether.

Screenshot showing an example of the aluminum version of the Ender 3 extruder that often fails.

This was one of the first up­grades I made to the printer, and it sig­nif­i­cantly im­proved print re­li­a­bility.

Print­able Up­grades

There are many print­able up­grades avail­able for the Ender 3 Pro that can en­hance its per­for­mance and us­ability. Some of the ad­di­tions I've found par­tic­u­larly useful:

  • Cable Chains
    Cable chains help manage and pro­tect the print­er's wiring— re­ducing wear and tear, and keeping wires or­ga­nized during op­er­a­tion.

  • Fil­a­ment Guides
    A fil­a­ment guide helps en­sure smooth feeding of the fil­a­ment into the ex­truder, re­ducing the risk of jams and tan­gles.

  • Spool Holder
    An up­graded spool holder with smooth bear­ings can ac­com­mo­date larger spools and pro­vide better sup­port, re­ducing strain on the fil­a­ment during printing.

  • Camera Mount
    A camera mount al­lows for easy in­stal­la­tion of a we­bcam or Rasp­berry Pi camera module, en­abling re­mote mon­i­toring and time-lapse recording of prints.

Con­trol Soft­ware

Klipper Firmware

One of the most sig­nif­i­cant up­grades I've made to my Ender 3 Pro is in­stalling Klipper firmware . Klipper is an open-source firmware that runs on a host com­puter (like a Rasp­berry Pi) and com­mu­ni­cates with the print­er's mi­cro­con­troller (MCU).

This of­fers sev­eral ad­van­tages over tra­di­tional firmware, in­cluding:

  • Im­proved print quality and speed
  • Ad­vanced fea­tures like pres­sure ad­vance and input shaping
  • Easier con­fig­u­ra­tion and up­dates via a web in­ter­face
  • Sup­port for mul­tiple MCUs and com­plex printer se­tups

To in­stall Klipper, I fol­lowed the of­fi­cial in­stal­la­tion guide . I used the printer.cfg spe­cific to my model after opening the con­troller en­clo­sure and in­specting the MCU on the print­er's main­board. My model uses the STM32F103 chip with a v4.2.2 con­troller.

You'll need to format a mi­croSD card with the Klipper firmware bi­nary and in­sert it into the print­er's main­board. When you power on the printer, it will flash the new firmware au­to­mat­i­cally. You can then re­move the mi­croSD card and finish the host soft­ware setup on your Rasp­berry Pi.

Reducing default limits

On my first homing after flashing the Klipper firmware, the ho­tend gantry was over­run­ning the avail­able track and causing the belt to skip and grind as it tried to push be­yond the avail­able space. To pre­vent this, I needed to up­date the de­fault printer.cfg from Moon­sail to pro­vide a lower (-1cm) limit for X, Y, and Z travel. Here's the diff:

diff
# This file contains pin mappings for the stock 2020 Creality Ender 3 # Pro with the 32-bit Creality 4.2.2 board. To use this config, during # "make menuconfig" select the STM32F103 with a "28KiB bootloader" and # serial (on USART1 PA10/PA9) communication. # It should be noted that newer variations of this printer shipping in # 2022 may have GD32F103 chips installed and not STM32F103. You may # have to inspect the mainboard to ascertain which one you have. If it # is the GD32F103 then please select Disable SWD at startup in the # "make menuconfig" along with the same settings for STM32F103. # If you prefer a direct serial connection, in "make menuconfig" # select "Enable extra low-level configuration options" and select # serial (on USART3 PB11/PB10), which is broken out on the 10 pin IDC # cable used for the LCD module as follows: # 3: Tx, 4: Rx, 9: GND, 10: VCC # Flash this firmware by copying "out/klipper.bin" to a SD card and # turning on the printer with the card inserted. The firmware # filename must end in ".bin" and must not match the last filename # that was flashed. # See docs/Config_Reference.md for a description of parameters. [stepper_x] step_pin: PC2 dir_pin: PB9 enable_pin: !PC3 microsteps: 16 rotation_distance: 40 endstop_pin: ^PA5 # shifted after x-axis linear rail upgrade - position_endstop: 0 + position_endstop: -2 + position_min: -2 # adjusted for Creality Ender 3 Pro IRL limits - position_max: 235 + position_max: 222 homing_speed: 50 [stepper_y] step_pin: PB8 dir_pin: PB7 enable_pin: !PC3 microsteps: 16 rotation_distance: 40 endstop_pin: ^PA6 # shifted after y-axis linear rail upgrade - position_endstop: 0 + position_endstop: -15 + position_min: -15 # adjusted for Creality Ender 3 Pro IRL limits - position_max: 235 + position_max: 225 homing_speed: 50 [stepper_z] step_pin: PB6 dir_pin: !PB5 enable_pin: !PC3 microsteps: 16 rotation_distance: 8 endstop_pin: ^PA7 position_endstop: 0.0 # adjusted for Creality Ender 3 Pro IRL limits - position_max: 250 + position_max: 240 [extruder] max_extrude_only_distance: 100.0 step_pin: PB4 dir_pin: PB3 enable_pin: !PC3 microsteps: 16 rotation_distance: 34.406 nozzle_diameter: 0.400 filament_diameter: 1.750 heater_pin: PA1 sensor_type: EPCOS 100K B57560G104F sensor_pin: PC5 control: pid # tuned for stock hardware with 200 degree Celsius target # run `PID_CALIBRATE HEATER=extruder TARGET=208` to calibrate for PLA pid_Kp: 26.934 pid_Ki: 1.484 pid_Kd: 122.214 min_temp: 0 max_temp: 260 [heater_bed] heater_pin: PA2 sensor_type: EPCOS 100K B57560G104F sensor_pin: PC4 control: pid # tuned for stock hardware with 50 degree Celsius target # run `PID_CALIBRATE HEATER=heater_bed TARGET=60` to calibrate for PLA pid_Kp: 54.027 pid_Ki: 0.770 pid_Kd: 948.182 min_temp: 0 max_temp: 130 [fan] pin: PA0 [include mainsail.cfg] + # Include moonraker-timelapse config + [include timelapse.cfg] [mcu] serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method: command [printer] kinematics: cartesian max_velocity: 300 max_accel: 3000 max_z_velocity: 5 max_z_accel: 100 # Pin mappings for BL_T port #[bltouch] #sensor_pin: ^PB1 #control_pin: PB0 [display] lcd_type: st7920 cs_pin: PB12 sclk_pin: PB13 sid_pin: PB15 encoder_pins: ^PB14, ^PB10 click_pin: ^!PB2

Cal­i­brate Ho­tend PID

I no­ticed a re­cur­ring verify_heater error that was causing an mcu con­nec­tion error. After some dig­ging, I found that Klipper of­fers sev­eral GCODE scripts for PID cal­i­bra­tion.

To cal­i­brate the ho­tend PID, I ran the fol­lowing com­mand in the ter­minal with my most common fil­a­ment tem­per­a­ture (208°C, for PLA):

txt
PID_CALIBRATE HEATER=extruder TARGET=208

Once the cal­i­bra­tion process was com­plete, I then ran SAVE_CONFIG to save the new PID values to the printer.cfg file. This re­solved the verify_heater er­rors for a while, and im­proved tem­per­a­ture sta­bility during prints. The same cal­i­bra­tion process can be run on the heated bed by re­placing extruder with heater_bed and ad­justing the target tem­per­a­ture (60-70°C) ac­cord­ingly.

Keep your thermistor screws tight!

After a bit, I no­ticed that the verify_heater error kept coming back! The Klipper tem­per­a­ture graph was showing big up/​down move­ments be­fore ze­roing-in on the target tem­per­a­ture. Fi­nally, I opened up the ho­tend en­clo­sure and checked the screw that se­cures the wiring to the ther­mistor.

Sure enough, the screw was about a half-turn loose. After years of use— all those vi­bra­tions ap­par­ently shook the screw loose enough that it was ab­solutely causing this verify_heater issue. Tight­ening it up, the tem­per­a­ture curves now lock in tight to the target tem­per­a­ture and don't bounce up/​down.

MCU Con­nec­tion Er­rors

Once in a while, I'd see prints sud­denly halting with an mcu con­nec­tion error in Klipper. Some­times this would happen near the start of a print, other times it would happen hours into a print. This can be awful when you've lost hours of print time and ma­te­rial for nothing.

Why does this happen? How can you fix it?

  • Skip using a Wi-Fi en­abled outlet
    I like the con­ve­nience of turning on my printer from the couch, but from my ex­pe­ri­ence these out­lets can be flaky. Plug di­rectly into an outlet, or check that the switch has a good amp-rating that can pro­vide stable power to the printer.
  • Use a good USB cable
    I've had a cable-swap sud­denly fix this mcu error issue— then ran­domly gotten it again after a few months. After the first two ca­bles, I ended up switching to a shielded cable with a fer­rite choke. Hon­estly— I think this was the biggest help in re­solving these er­rors.
  • Pow­ering other heavy de­vices
    Make sure you're not pow­ering other power-hungry de­vices on the same cir­cuit or power-strip.

Main­sail

I'm using Main­sail as the Klipper web in­ter­face for man­aging the printer. It's vir­tu­ally the same as Fluidd — an­other pop­ular Klipper web in­ter­face.

Main­sail pro­vides a very light­weight web in­ter­face for Klipper that makes printer con­trol and mon­i­toring simple and straight­for­ward. It's also mo­bile-re­spon­sive, so I can check prints and ma­nip­u­late the printer from my smart­phone. It of­fers fea­tures like:

  • Real-time tem­per­a­ture mon­i­toring
  • Motor con­trol
  • Print job man­age­ment
  • G-code viewer
  • System status and logs
  • Camera in­te­gra­tion with the Crowsnest plugin

Oc­to­Print

Oc­to­Print is an­other pop­ular web in­ter­face for 3D printers, and it's what I used be­fore flashing the Klipper firmware. Main­sail is specif­i­cally de­signed for Klipper and of­fers a more stream­lined ex­pe­ri­ence. How­ever, Oc­to­Print will also work with Klipper, and it pro­vides sim­ilar func­tion­ality to Main­sail.

Oc­toPi

One of my fa­vorite ways to run Oc­to­Print is using Oc­toPi , a pre-con­fig­ured Rasp­berry Pi image that in­cludes Oc­to­Print and all nec­es­sary de­pen­den­cies. This makes it easy to set up a ded­i­cated print server for the Ender 3 Pro— let­ting you manage prints re­motely and mon­itor the printer in the browser over Wi-Fi.

Tips and Tricks

Here are a few tips and tricks I've learned while using the Ender 3 Pro:

  • Bed Lev­eling
    Reg­u­larly check and ad­just the bed lev­eling to en­sure op­timal print ad­he­sion and quality. I use a piece of paper to gauge the dis­tance be­tween the nozzle and the bed at var­ious points. The paper should just barely slide with slight re­sis­tance.

  • Nozzle Cleaning
    Keep the nozzle clean to pre­vent clogs and en­sure con­sis­tent ex­tru­sion. I use a brass wire brush to gently clean the nozzle after prints, and oc­ca­sion­ally per­form a cold pull to re­move any residual fil­a­ment. Stock up on ad­di­tional noz­zles for when you get a clog that can't be easily re­solved.

  • Smart Plug
    I use a smart plug to con­trol the power to my Ender 3 Pro re­motely. This al­lows me to turn the printer on and off from my phone and schedule print jobs without needing to be phys­i­cally next to the printer.

  • Time­lapse
    If you're using a camera with Main­sail, you can set up time­lapse record­ings of your prints. This is a great way to doc­u­ment your printing process and share your cre­ations with others. Follow in­struc­tions to clone the moon­raker-time­lapse repo and build the plugin. You'll need to add the fol­lowing lines to your moonraker.conf file:

moonraker.conf
conf
[timelapse] output_path: ~/printer_data/timelapse/ frame_path: /tmp/timelapse/printer

You can also allow the Moon­raker up­date man­ager to handle up­dates for the time­lapse plugin by adding this sec­tion to your moonraker.conf:

conf
[update_manager timelapse] type: git_repo primary_branch: main path: ~/moonraker-timelapse origin: https://github.com/mainsail-crew/moonraker-timelapse.git managed_services: klipper moonraker

Micro SD Backup

If your Klipper host (I'm using a Rasp­berry Pi) fails to finish the boot se­quence— re­vealing the dreaded blinking cursor/​black screen of death in­stead of starting up the Moon­sail/​Fluidd in­ter­face— you might have a cor­rupt SD card. Every Rasp­berry Pi en­thu­siast has faced the awful re­ality of a bad micro SD card. It's a le­git­i­mate problem that can de­stroy your morale and make 3D printing much less fun.

In­stead of re­peat­edly flashing Rasp­berry Pi OS, you can mit­i­gate this risk by pe­ri­od­i­cally backing up the con­tents to an­other storage de­vice. I have a 32GB card in the Pi, so I used an­other 32GB card to create an iden­tical copy using bale­naEtcher . In this way, if the pri­mary card fails, I can quickly swap in the other card and get back to printing.

In­sert the source card into your com­puter, launch bale­naEtcher, and se­lect "Clone Drive" from the main menu. You can tell which is which by plug­ging both in then un­plug­ging one and clocking which dis­ap­peared from the clone menu. You'll need to first format the backup as FAT32 be­fore cloning. Choose the source and target, then start the cloning process. Once com­plete, label the backup card with the date so you know when it was cre­ated.

Rasp­berry Pi USB Power Trick

If you're using a Rasp­berry Pi with Klipper or Oc­to­Print to con­trol your Ender 3, you might no­tice that the USB con­nec­tion can power the En­der's TFT screen— even when the main printer PSU is shut off.

To avoid this, I took a small strip of painter's tape and cov­ered the 5V pin (the right­most pin when looking straight into the male USB plug). This pre­vents back-pow­ering the print­er's screen when the Pi is pow­ered on in­de­pen­dently which could po­ten­tially cause screen damage over time.

Image showing a close-up diagram of a USB plug with the +5V pin highlighted.