Flashing Marlin Firmware to the Creality Ender-3 Pro

I decided to try a cheap 3D printer, the Creality Ender-3 Pro. It worked OK after fixing a few problems, but the bed is warped and that seems to be a common problem. It bows in the x axis, so the middle is significantly lower than the two sides. It really needs a bed height sensor. That means a new version of Marlin and the ability to tweak things, so getting a toolpath set up is the first step.

Looking back, this instructable had a pretty good set of directions. The board revision didn’t quire match, mine doesn’t have a REG/USB jumper. That was OK, the board accepts power from USB without the jumper, so just ignore the jumper instructions.

Ender-3 control board definition (hardware core):

This wiki says the Ender-3 motherboard is a "Creality3D V1.1.2 Mainboard". Note it also says the Ender-3 power supply is 24V, which I can confirm.

The choice of hardware core is covered in the instructable above. However I didn’t read carefully, and missed setting “Processor” after selecting board type: “Sanguino”. Eventually I figured it out. You can make “Sanguino” available in your Arduino IDE board selection, by adding the following to your “Additional Boards Manager URLs” setting:

https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json

It helped to see a good picture of the motherboard before disassembling my Ender-3. There are a lot of detailed views in this Banggood link.

Bootloader: The Ender needs a bootloader before firmware can be updated. There are plenty of instructions on how to flash a bootloader using an extra arduino UNO. But the standard “ArduinoISP” example in the Arduino IDE didn’t work for me. I ended up using Nick Gammon's programming software, which is modified to work with the atmega family.

If you’re successful in burning the Bootloader, the Ender-3 will show up in the IDE when plugged into a USB port (see last Port entry). The picture below also shows the Board and Processor selections you’ll need:

unnamed.png


Marlin 1.1.x:

The release notes say that 1.1.9 has bed leveling, so I cloned Marlin from GitHub and tried the default 1.1.x bugfix branch. It compiled using the "Arduino Mega" board (more discussion on that below).

Alternative Firmware:

I tried switching Marlin to the 2.0.x bugfix branch, but it didn't compile. The Marlin docs say that Arduino IDE 1.9 is required for Marlin 2.0.x, but I'm still at 1.8.3. Since the standard IDE release is only 1.8.8, I might hold off on investigating 2.0.x for now. Long term, Marlin appears to be heading for FreeRTOS, which I’d like to try.

Default Configuration for Ender 3:

As an open source vendor, Creality publishes their Ender-3 firmware on GitHub. The Ender-3 Configuration.h file is recognizable when compared with Marlin 1.1.x, but there have been a lot of changes. Fortunately, there are extensive config sets in the Marlin repo, e.g. Ender-3 is at:

…/Documents/GitHub/Marlin/Marlin/example_configurations/Creality/Ender-3

I copied all the files in that folder to …/Documents/GitHub/Marlin/Marlin/

Success: With all above in place, I was able to download the Marlin firmware.

Bootloader wiring:

Note there is a standard ISP connector on the Ender-3 control board. It gets wired one-to-one with the ISP connector on the UNO, except for the “Reset” pin. That goes to the UNO pin 10.

Pinout looking from the top

Pinout looking from the top

Picture1.png

Ended up using a different bootloader: https://github.com/nickgammon/arduino_sketches

Tom Doyle