Replacing Stock Melzi Firmware on MMS V2.1

Posted on May 02, 2019

Back in 2016, I got a 3d printer, the moniprice maker select v2.1. But not until years later did I realize that the firmware on the stock "Melzi" board did not have thermal runaway protection. This meant that if the thermistor in the hotend ever died, it would report 0 degrees, and the hotend would get hotter and hotter until it would very likely catch fire. I set out to fix it before I printed anything else.

New Firmware
I decided to install the marlin firmware found here, and while it was not built exactly for my printer, it only took a few modifications (shown below) till it was ready to be uploaded.

Line 122: #define MOTHERBOARD BOARD_MELZI

Line 140: #define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

Line ~290: 
#define TEMP_SENSOR_0 1    |
#define TEMP_SENSOR_1 0    |
#define TEMP_SENSOR_2 0    | I only have one thermister, so we only need SENSOR_0
#define TEMP_SENSOR_3 0    |
#define TEMP_SENSOR_4 0    |
#define TEMP_SENSOR_BED 1  |

Line ~517:
#define X_MIN_ENDSTOP_INVERTING true  // true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING true  
#define Z_MIN_ENDSTOP_INVERTING true 
#define X_MAX_ENDSTOP_INVERTING false // false, this one was fine
#define Y_MAX_ENDSTOP_INVERTING false 
#define Z_MAX_ENDSTOP_INVERTING false
#define Z_MIN_PROBE_ENDSTOP_INVERTING // I don't have a probe for my printer. 

Line ~550:
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 400, 94 } //settings found in my printer documentation
#define DEFAULT_MAX_FEEDRATE          { 300, 300, 5, 25 }
#define DEFAULT_MAX_ACCELERATION      { 1500, 1500, 100, 10000 }
#define DEFAULT_ACCELERATION          700   
#define DEFAULT_RETRACT_ACCELERATION  2000 // I wanted it relatively slow to avoid extrusion problems. 
#define DEFAULT_TRAVEL_ACCELERATION   700  // Slow to avoid ghosting.  
#define DEFAULT_XJERK                  8.0
#define DEFAULT_YJERK                  8.0
#define DEFAULT_ZJERK                  0.4
#define DEFAULT_EJERK                  5.0

Line  ~773:
#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true
#define INVERT_E0_DIR true
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false

Line ~814: #define Z_MAX_POS 190 //with z supports reducing my z height, 190 is my new max height

Unfortunately, the Melzi board does not have a bootloader, and therefore you cannot simply flash any firmware you want.

Bootloader

The Melzi board seems to be a derivative of the sanguino, which makes it pretty easy to use an arduino uno as a middle man using this library to flash a firmware to the Melzi.

Melzi.jpg

Here is a picture of the main board. You can see the heatsinks for the stepper drivers across the top. I have plans to replace the drivers with TMC2226 stepper drivers in the future as I've wanted to mess with those for a while. That's something for another post though.