From a2e0a0a02d3a43a5f244287f5ee6188417361682 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Wed, 24 Jan 2018 09:45:23 +0100 Subject: [PATCH] Hyperfine Bed Tuning for MK3 Changed Bed correction from 4 points to 8 to get better results as we got on the MK2/s Changed langtool.pl to have EN as default Added tiem and credentials to support info --- Firmware/Configuration.h | 9 ++- Firmware/Marlin_main.cpp | 148 +++++++++++++++++++++++++++++--------- Firmware/langtool.pl | 2 +- Firmware/language_all.cpp | 40 +++++++++++ Firmware/language_all.h | 18 ++++- Firmware/language_en.h | 13 ++++ Firmware/ultralcd.cpp | 146 ++++++++++++++++++++++++------------- 7 files changed, 290 insertions(+), 86 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 7db9a5399..127f60155 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -120,6 +120,13 @@ #define EEPROM_FSENS_AUTOLOAD_ENABLED (EEPROM_SECOND_SERIAL_ACTIVE - 1) +// Hyperfine Bed Tuning +#define EEPROM_BED_CORRECTION_FRONT_LEFT (EEPROM_FSENS_AUTOLOAD_ENABLED - 1) +#define EEPROM_BED_CORRECTION_FRONT_RIGHT (EEPROM_BED_CORRECTION_FRONT_LEFT - 1) +#define EEPROM_BED_CORRECTION_REAR_RIGHT (EEPROM_BED_CORRECTION_FRONT_RIGHT - 1) +#define EEPROM_BED_CORRECTION_REAR_LEFT (EEPROM_BED_CORRECTION_REAR_RIGHT - 1) +// End Hyperfine Bed Tuning + //TMC2130 configuration #define EEPROM_TMC_AXIS_SIZE //axis configuration block size #define EEPROM_TMC_X (EEPROM_TMC + 0 * EEPROM_TMC_AXIS_SIZE) //X axis configuration blok @@ -166,7 +173,7 @@ //#define STRING_VERSION "1.0.2" #define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time -#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes. +#define STRING_CONFIG_H_AUTHOR "(3d-gussner,H)" // Who made the changes. // SERIAL_PORT selects which serial port should be used for communication with the host. // This allows the connection of wireless adapters (for instance) to non-default port pins. diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 7a0abb71f..167ee7d78 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3636,55 +3636,135 @@ void process_commands() } #endif // SUPPORT_VERBOSITY - for (uint8_t i = 0; i < 4; ++i) { - unsigned char codes[4] = { 'L', 'R', 'F', 'B' }; +// Hyperfine Bed Tuning + for (uint8_t i = 0; i < 8; ++i) { + unsigned char codes[8] = { 'a', 'b', 'c', 'd' , 'e' , 'f', 'g', 'h'}; long correction = 0; if (code_seen(codes[i])) correction = code_value_long(); else if (eeprom_bed_correction_valid) { - unsigned char *addr = (i < 2) ? - ((i == 0) ? (unsigned char*)EEPROM_BED_CORRECTION_LEFT : (unsigned char*)EEPROM_BED_CORRECTION_RIGHT) : - ((i == 2) ? (unsigned char*)EEPROM_BED_CORRECTION_FRONT : (unsigned char*)EEPROM_BED_CORRECTION_REAR); - correction = eeprom_read_int8(addr); + switch (i) { + case 0: + {unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT; + correction = eeprom_read_int8(addr); + } + break; + case 1: + {unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT; + correction = eeprom_read_int8(addr); + } + break; + case 2: + {unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT; + correction = eeprom_read_int8(addr); + } + break; + case 3: + {unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_RIGHT; + correction = eeprom_read_int8(addr); + } + break; + case 4: + {unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT; + correction = eeprom_read_int8(addr); + } + break; + case 5: + {unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR; + correction = eeprom_read_int8(addr); + } + break; + case 6: + {unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT; + correction = eeprom_read_int8(addr); + } + break; + case 7: + {unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_LEFT; + correction = eeprom_read_int8(addr); + } + break; } - if (correction == 0) - continue; + } + if (correction == 0) + continue; float offset = float(correction) * 0.001f; - if (fabs(offset) > 0.101f) { + if (fabs(offset) > 0.201f) { SERIAL_ERROR_START; SERIAL_ECHOPGM("Excessive bed leveling correction: "); SERIAL_ECHO(offset); SERIAL_ECHOLNPGM(" microns"); } else { - switch (i) { - case 0: - for (uint8_t row = 0; row < 3; ++row) { - mbl.z_values[row][1] += 0.5f * offset; - mbl.z_values[row][0] += offset; - } - break; - case 1: - for (uint8_t row = 0; row < 3; ++row) { - mbl.z_values[row][1] += 0.5f * offset; - mbl.z_values[row][2] += offset; - } - break; - case 2: - for (uint8_t col = 0; col < 3; ++col) { - mbl.z_values[1][col] += 0.5f * offset; - mbl.z_values[0][col] += offset; - } - break; - case 3: - for (uint8_t col = 0; col < 3; ++col) { - mbl.z_values[1][col] += 0.5f * offset; - mbl.z_values[2][col] += offset; - } - break; + switch (i) { + case 0: + { + mbl.z_values[0][0] += offset; + SERIAL_ECHOPGM("FrontLeft a ="); + SERIAL_ECHO(correction+0); + SERIAL_ECHOLNPGM(" microns."); } + break; + case 1: + { + mbl.z_values[0][1] += offset; + SERIAL_ECHOPGM("FrontCentr b ="); + SERIAL_ECHO(correction+0); + SERIAL_ECHOLNPGM(" microns."); + } + break; + case 2: + { + mbl.z_values[0][2] += offset; + SERIAL_ECHOPGM("FrontRight c ="); + SERIAL_ECHO(correction+0); + SERIAL_ECHOLNPGM(" microns."); + } + break; + case 3: + { + mbl.z_values[1][2] += offset; + SERIAL_ECHOPGM("MidRight d ="); + SERIAL_ECHO(correction+0); + SERIAL_ECHOLNPGM(" microns."); + } + break; + case 4: + { + mbl.z_values[2][2] += offset; + SERIAL_ECHOPGM("RearRight e ="); + SERIAL_ECHO(correction+0); + SERIAL_ECHOLNPGM(" microns."); + } + break; + case 5: + { + mbl.z_values[2][1] += offset; + SERIAL_ECHOPGM("RearCentr f ="); + SERIAL_ECHO(correction+0); + SERIAL_ECHOLNPGM(" microns."); + } + break; + case 6: + { + mbl.z_values[2][0] += offset; + SERIAL_ECHOPGM("RearLeft g ="); + SERIAL_ECHO(correction+0); + SERIAL_ECHOLNPGM(" microns."); + } + break; + case 7: + { + mbl.z_values[1][0] += offset; + SERIAL_ECHOPGM("MidLeft h ="); + SERIAL_ECHO(correction+0); + SERIAL_ECHOLNPGM(" microns."); + } + break; } } + } +// End Hyperfine Bed Tuning // SERIAL_ECHOLNPGM("Bed leveling correction finished"); mbl.upsample_3x3(); //bilinear interpolation from 3x3 to 7x7 points while using the same array z_values[iy][ix] for storing (just coppying measured data to new destination and interpolating between them) // SERIAL_ECHOLNPGM("Upsample finished"); diff --git a/Firmware/langtool.pl b/Firmware/langtool.pl index a91af44de..1dd898e07 100644 --- a/Firmware/langtool.pl +++ b/Firmware/langtool.pl @@ -199,7 +199,7 @@ print $fh <= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.left <= BED_ADJUSTMENT_UM_MAX && - menuData.adjustBed.right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.right <= BED_ADJUSTMENT_UM_MAX && - menuData.adjustBed.front >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front <= BED_ADJUSTMENT_UM_MAX && - menuData.adjustBed.rear >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear <= BED_ADJUSTMENT_UM_MAX) + menuData.adjustBed.front_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_left <= BED_ADJUSTMENT_UM_MAX && + menuData.adjustBed.front_centr >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_centr <= BED_ADJUSTMENT_UM_MAX && + menuData.adjustBed.front_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_right <= BED_ADJUSTMENT_UM_MAX && + menuData.adjustBed.mid_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.mid_right <= BED_ADJUSTMENT_UM_MAX && + menuData.adjustBed.rear_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_right <= BED_ADJUSTMENT_UM_MAX && + menuData.adjustBed.rear_centr >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_centr <= BED_ADJUSTMENT_UM_MAX && + menuData.adjustBed.rear_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_left <= BED_ADJUSTMENT_UM_MAX && + menuData.adjustBed.mid_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.mid_left <= BED_ADJUSTMENT_UM_MAX) valid = true; if (! valid) { // Reset the values: simulate an edit. - menuData.adjustBed.left2 = 0; - menuData.adjustBed.right2 = 0; - menuData.adjustBed.front2 = 0; - menuData.adjustBed.rear2 = 0; + menuData.adjustBed.front_left2 = 0; + menuData.adjustBed.front_centr2 = 0; + menuData.adjustBed.front_right2 = 0; + menuData.adjustBed.mid_right2 = 0; + menuData.adjustBed.rear_right2 = 0; + menuData.adjustBed.rear_centr2 = 0; + menuData.adjustBed.rear_left2 = 0; + menuData.adjustBed.mid_left2 = 0; } lcdDrawUpdate = 1; eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1); } - if (menuData.adjustBed.left != menuData.adjustBed.left2) - eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT, menuData.adjustBed.left = menuData.adjustBed.left2); - if (menuData.adjustBed.right != menuData.adjustBed.right2) - eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, menuData.adjustBed.right = menuData.adjustBed.right2); - if (menuData.adjustBed.front != menuData.adjustBed.front2) - eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT, menuData.adjustBed.front = menuData.adjustBed.front2); - if (menuData.adjustBed.rear != menuData.adjustBed.rear2) - eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR, menuData.adjustBed.rear = menuData.adjustBed.rear2); + if (menuData.adjustBed.front_left != menuData.adjustBed.front_left2) + eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT, menuData.adjustBed.front_left = menuData.adjustBed.front_left2); + if (menuData.adjustBed.front_centr != menuData.adjustBed.front_centr2) + eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT, menuData.adjustBed.front_centr = menuData.adjustBed.front_centr2); + if (menuData.adjustBed.front_right != menuData.adjustBed.front_right2) + eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT, menuData.adjustBed.front_right = menuData.adjustBed.front_right2); + if (menuData.adjustBed.mid_right != menuData.adjustBed.mid_right2) + eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, menuData.adjustBed.mid_right = menuData.adjustBed.mid_right2); + if (menuData.adjustBed.rear_right != menuData.adjustBed.rear_right2) + eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT, menuData.adjustBed.rear_right = menuData.adjustBed.rear_right2); + if (menuData.adjustBed.rear_centr != menuData.adjustBed.rear_centr2) + eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR, menuData.adjustBed.rear_centr = menuData.adjustBed.rear_centr2); + if (menuData.adjustBed.rear_left != menuData.adjustBed.rear_left2) + eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT, menuData.adjustBed.rear_left = menuData.adjustBed.rear_left2); + if (menuData.adjustBed.mid_left != menuData.adjustBed.mid_left2) + eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT, menuData.adjustBed.mid_left = menuData.adjustBed.mid_left2); START_MENU(); - MENU_ITEM(back, MSG_SETTINGS, lcd_calibration_menu); - MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_LEFT, &menuData.adjustBed.left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); - MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_RIGHT, &menuData.adjustBed.right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); - MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT, &menuData.adjustBed.front2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); - MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR, &menuData.adjustBed.rear2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); - MENU_ITEM(function, MSG_BED_CORRECTION_RESET, lcd_adjust_bed_reset); + MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_LEFT, &menuData.adjustBed.front_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); + MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_CENTR, &menuData.adjustBed.front_centr2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); + MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_RIGHT, &menuData.adjustBed.front_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); + MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_MID_RIGHT, &menuData.adjustBed.mid_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); + MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_RIGHT, &menuData.adjustBed.rear_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); + MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_CENTR, &menuData.adjustBed.rear_centr2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); + MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_LEFT, &menuData.adjustBed.rear_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); + MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_MID_LEFT, &menuData.adjustBed.mid_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); END_MENU(); } +// End Hyperfine Bed Tuning void pid_extruder() {