Marlin 2.0 firmware for M2 Rev E, latest bugfix

Have questions or comments about Simplify3D, Slic3r, Cura, Reptier, etc? Or wondering about which CAD software to use...discuss it here...
Post Reply
djw
Posts: 2
Joined: Thu Nov 23, 2017 10:19 pm

Marlin 2.0 firmware for M2 Rev E, latest bugfix

Post by djw » Sun Apr 04, 2021 1:00 am

I recently upgraded my M2 Firmware to Marlin V2 Bugfix to get my Makergear M2 Rev E up and running 4/3/2021

I have these features enabled :
250,000 Baud serial rate Enabled- ive also had working up to 1 million baud - but I tuned it down until I know more
PID Tuned Hot end, and BED
Linear Advance Enabled
S Curve Enabled
ARC support enabled
Geetech LCD
SD Card
Serial buffer tuned size expanded to 32 commands with smaller command size width of 45 <- seems to work fine with cura and simplify3d
Custom Accelerations that I like - you need to change these
New default feedrates - you need to change these
Custom Steps per MM on several axis based on what Ive seen on my single M2 machine ive tested on.

ketil
Posts: 45
Joined: Wed Apr 09, 2014 9:58 pm

Re: Marlin 2.0 firmware for M2 Rev E, latest bugfix

Post by ketil » Tue May 11, 2021 12:29 am

I've just worked my way through the details. I've tried to be conservative to avoid too many changes, so I may not have all possible options enabled. Below is the complete diff of what I've ended up with, relative to the 2.0.x branch of stock Marlin. I guess it's possible to experiment more from here. I had to work out some issues with inverted motors, inverted endstops, some weirdness that appeared to force Z homing (or probing, perhaps) before X and Y were homed, amongst other things.

Like you, I've updated the BAUD_RATE to 250000. I've also dropped support for the old custom M108 command to set the system fan speed. If you didn't use it, no worries, but now you have to use something like M42 I1 P6 S155 to adjust system fan speeds, with the S<value> setting the speed from 0 (off) to 255 (max). Fortunately I found the STARTUP_COMMANDS that let me start the sysfans at startup. Would be interested to know if you have a different solution for the system fans.

For reference, I have an M2 from 2012 (19V/12V PSUs), with a RAMBo rev 1.3L. And I don't use the heated bed at all, but the bed temperature reading appears to be correct.

Code: Select all

diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 442f502c3e..2e64b544b4 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -127,7 +127,7 @@
 
 // Choose the name from boards.h that matches your setup
 #ifndef MOTHERBOARD
-  #define MOTHERBOARD BOARD_RAMPS_14_EFB
+  #define MOTHERBOARD BOARD_RAMBO
 #endif
 
 // Name displayed in the LCD "Ready" message and Info menu
@@ -417,7 +417,7 @@
 #define TEMP_SENSOR_5 0
 #define TEMP_SENSOR_6 0
 #define TEMP_SENSOR_7 0
-#define TEMP_SENSOR_BED 0
+#define TEMP_SENSOR_BED 1
 #define TEMP_SENSOR_PROBE 0
 #define TEMP_SENSOR_CHAMBER 0
 #define TEMP_SENSOR_COOLER 0
@@ -510,9 +510,9 @@
     #define DEFAULT_Ki_LIST {   1.08,   1.08 }
     #define DEFAULT_Kd_LIST { 114.00, 114.00 }
   #else
-    #define DEFAULT_Kp  22.20
-    #define DEFAULT_Ki   1.08
-    #define DEFAULT_Kd 114.00
+    #define DEFAULT_Kp   7.0
+    #define DEFAULT_Ki   0.1
+    #define DEFAULT_Kd  12.00
   #endif
 #endif // PIDTEMP
 
@@ -710,13 +710,13 @@
 #endif
 
 // Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
-#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
+#define X_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
+#define Y_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
+#define Z_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
 #define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
 #define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
 #define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe.
+#define Z_MIN_PROBE_ENDSTOP_INVERTING true // Set to true to invert the logic of the probe.
 
 /**
  * Stepper Drivers
@@ -799,14 +799,14 @@
  * Override with M92
  *                                      X, Y, Z, E0 [, E1[, E2...]]
  */
-#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 400, 500 }
+#define DEFAULT_AXIS_STEPS_PER_UNIT   { 88.88, 88.88, 400, 471.5 } // Defaults for MakerGear M2
 
 /**
  * Default Max Feed Rate (mm/s)
  * Override with M203
  *                                      X, Y, Z, E0 [, E1[, E2...]]
  */
-#define DEFAULT_MAX_FEEDRATE          { 300, 300, 5, 25 }
+#define DEFAULT_MAX_FEEDRATE          { 500, 500, 10, 25 } // was 500, 500, 250, 200000 - but I'd like to be more cautious
 
 //#define LIMITED_MAX_FR_EDITING        // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
 #if ENABLED(LIMITED_MAX_FR_EDITING)
@@ -819,7 +819,7 @@
  * Override with M201
  *                                      X, Y, Z, E0 [, E1[, E2...]]
  */
-#define DEFAULT_MAX_ACCELERATION      { 3000, 3000, 100, 10000 }
+#define DEFAULT_MAX_ACCELERATION      { 9000, 9000, 30, 10000 }
 
 //#define LIMITED_MAX_ACCEL_EDITING     // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
 #if ENABLED(LIMITED_MAX_ACCEL_EDITING)
@@ -1117,7 +1117,7 @@
  *     But: `M851 Z+1` with a CLEARANCE of 2  =>  2mm from bed to nozzle.
  */
 #define Z_CLEARANCE_DEPLOY_PROBE   10 // Z Clearance for Deploy/Stow
-#define Z_CLEARANCE_BETWEEN_PROBES  5 // Z Clearance between probe points
+#define Z_CLEARANCE_BETWEEN_PROBES  0 // Z Clearance between probe points
 #define Z_CLEARANCE_MULTI_PROBE     5 // Z Clearance between multiple probes
 //#define Z_AFTER_PROBING           5 // Z position after probing is done
 
@@ -1183,9 +1183,9 @@
 // @section machine
 
 // Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR false
-#define INVERT_Y_DIR true
-#define INVERT_Z_DIR false
+#define INVERT_X_DIR true
+#define INVERT_Y_DIR false
+#define INVERT_Z_DIR true
 
 // @section extruder
 
@@ -1226,15 +1226,15 @@
 
 // The size of the printable area
 #define X_BED_SIZE 200
-#define Y_BED_SIZE 200
+#define Y_BED_SIZE 250
 
 // Travel limits (mm) after homing, corresponding to endstop positions.
 #define X_MIN_POS 0
 #define Y_MIN_POS 0
 #define Z_MIN_POS 0
-#define X_MAX_POS X_BED_SIZE
-#define Y_MAX_POS Y_BED_SIZE
-#define Z_MAX_POS 200
+#define X_MAX_POS (X_BED_SIZE + 5)
+#define Y_MAX_POS (Y_BED_SIZE + 5)
+#define Z_MAX_POS 205
 
 /**
  * Software Endstops
@@ -1663,7 +1663,7 @@
  *   M501 - Read settings from EEPROM. (i.e., Throw away unsaved changes)
  *   M502 - Revert settings to "factory" defaults. (Follow with M500 to init the EEPROM.)
  */
-//#define EEPROM_SETTINGS     // Persistent storage with M500 and M501
+#define EEPROM_SETTINGS     // Persistent storage with M500 and M501
 //#define DISABLE_M503        // Saves ~2700 bytes of PROGMEM. Disable for release!
 #define EEPROM_CHITCHAT       // Give feedback on EEPROM commands. Disable to save PROGMEM.
 #define EEPROM_BOOT_SILENT    // Keep M503 quiet and only give errors during first load
@@ -1927,7 +1927,7 @@
  * SD Card support is disabled by default. If your controller has an SD slot,
  * you must uncomment the following option or it won't work.
  */
-//#define SDSUPPORT
+#define SDSUPPORT
 
 /**
  * SD CARD: ENABLE CRC
@@ -2603,7 +2603,7 @@
 //#define NUM_M106_FANS 1
 
 // Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-//#define FAST_PWM_FAN
+#define FAST_PWM_FAN
 
 // Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
 // which is not as annoying as with the hardware PWM. On the other hand, if this frequency
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 7d89cf5205..698bc72f75 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -736,7 +736,7 @@
 
 //#define SENSORLESS_BACKOFF_MM  { 2, 2 }     // (mm) Backoff from endstops before sensorless homing
 
-#define HOMING_BUMP_MM      { 5, 5, 2 }       // (mm) Backoff from endstops after first bump
+#define HOMING_BUMP_MM      { 5, 5, 1 }       // (mm) Backoff from endstops after first bump
 #define HOMING_BUMP_DIVISOR { 2, 2, 4 }       // Re-Bump Speed Divisor (Divides the Homing Feedrate)
 
 //#define HOMING_BACKOFF_POST_MM { 2, 2, 2 }  // (mm) Backoff from endstops after homing
@@ -1096,7 +1096,7 @@
  *    M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2
  */
 //#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 }          // Values in milliamps
-//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 }   // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
+#define DIGIPOT_MOTOR_CURRENT { 135,135,125,135,125 }   // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 }    // Default drive percent - X, Y, Z, E axis
 
 /**
@@ -3520,7 +3520,7 @@
  *
  * Execute certain G-code commands immediately after power-on.
  */
-//#define STARTUP_COMMANDS "M17 Z"
+#define STARTUP_COMMANDS "M42 I1 P6 S155"
 
 /**
  * G-code Macros
@@ -3981,7 +3981,7 @@
 //
 // M42 - Set pin states
 //
-//#define DIRECT_PIN_CONTROL
+#define DIRECT_PIN_CONTROL
 
 //
 // M43 - display pin status, toggle pins, watch pins, watch endstops & toggle LED, test servo probe

ibash
Posts: 9
Joined: Wed Sep 08, 2021 8:37 am

Re: Marlin 2.0 firmware for M2 Rev E, latest bugfix

Post by ibash » Mon Sep 13, 2021 7:52 pm

I started working on a port, no timeline yet, but maybe the diff in the first pr could be useful: https://forum.makergear.com/viewtopic.php?f=9&t=10131

Gwhite
Posts: 372
Joined: Tue Jul 11, 2017 3:38 pm

Re: Marlin 2.0 firmware for M2 Rev E, latest bugfix

Post by Gwhite » Sat Jul 01, 2023 2:46 pm

I realize the forum has gone very quite, but I hope it's because everyone is just chugging along with their printers, and not having any serious issues.

I'm still interested in updating my M2E firmware to support linear advance. I've never been through the firmware update process, and I'm a bit nervous about "bricking" my printer. From previous posts in this thread, there are at least one or two folks out there who have done this successfully.

I've looked over the update procedure, and it looks pretty straightforward IF you have the bundled Makergear Zip file with the firmware and the Arduino IDE. The IDE is easy enough to get (assuming the latest version is backward compatible). I looked in the factory firmware Zip file, and there's a "Scripts" folder, and over 170 other files. There are a bunch of ".h" (header) files ".C" files and ".cpp" (C++) files. I'm still learning what all that means... The instructions imply that the Arduino IDE is included, but I don't see it.

Is there a well tested set of files someone can share?

Also, does anyone know of a good tutorial on the generic Marlin firmware update process? Even if someone can provide me with a canned set of files, I'd like to understand what is going on under the hood a bit more.

Thanks!

Post Reply