diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index e2775d157..94c8ee541 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -668,8 +668,9 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE); #define EEPROM_UVLO_MIN_SEGMENT_TIME_US (EEPROM_UVLO_MIN_TRAVEL_FEEDRATE-4) //uint32_t #define EEPROM_UVLO_MAX_JERK (EEPROM_UVLO_MIN_SEGMENT_TIME_US-4*4) // 4 x float #define EEPROM_CHECK_FILAMENT (EEPROM_UVLO_MAX_JERK-1) // uint8_t +#define EEPROM_TMC2130_WAVE_ALGORITHM (EEPROM_CHECK_FILAMENT - 1) // uint8 //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items. -#define EEPROM_LAST_ITEM EEPROM_CHECK_FILAMENT +#define EEPROM_LAST_ITEM EEPROM_TMC2130_WAVE_ALGORITHM // !!!!! // !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!! // !!!!! diff --git a/Firmware/messages.cpp b/Firmware/messages.cpp index d68aca79f..f63ee0f19 100644 --- a/Firmware/messages.cpp +++ b/Firmware/messages.cpp @@ -318,6 +318,9 @@ extern const char MSG_X_CORRECTION [] PROGMEM_I1 = ISTR("X-correct"); ////MSG_X_ extern const char MSG_Y_CORRECTION [] PROGMEM_I1 = ISTR("Y-correct"); ////MSG_Y_CORRECTION c=13 extern const char MSG_Z_CORRECTION [] PROGMEM_I1 = ISTR("Z-correct"); ////MSG_Z_CORRECTION c=13 extern const char MSG_EXTRUDER_CORRECTION [] PROGMEM_I1 = ISTR("E-correct"); ////MSG_EXTRUDER_CORRECTION c=13 +extern const char MSG_WAVE_ALGORITHM [] PROGMEM_I1 = ISTR("Algorithm"); ////MSG_WAVE_ALGORITHM c=13 +extern const char MSG_ALGORITHM_DEFAULT [] PROGMEM_I1 = ISTR("Default"); ////MSG_ALGORITHM_DEFAULT c=13 +extern const char MSG_ALGORITHM_CONST_TQ [] PROGMEM_I1 = ISTR("Const tq"); ////MSG_ALGORITHM_CONST_TQ c=13 extern const char MSG_CHECKS [] PROGMEM_I1 = ISTR("Checks"); ////MSG_CHECKS c=18 extern const char MSG_TEMPERATURE [] PROGMEM_I1 = ISTR("Temperature"); ////MSG_TEMPERATURE c=18 extern const char MSG_MOVE_AXIS [] PROGMEM_I1 = ISTR("Move axis"); ////MSG_MOVE_AXIS c=18 diff --git a/Firmware/messages.h b/Firmware/messages.h index 52adb82c4..5c5836089 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -317,6 +317,9 @@ extern const char MSG_X_CORRECTION []; extern const char MSG_Y_CORRECTION []; extern const char MSG_Z_CORRECTION []; extern const char MSG_EXTRUDER_CORRECTION []; +extern const char MSG_WAVE_ALGORITHM []; +extern const char MSG_ALGORITHM_DEFAULT []; +extern const char MSG_ALGORITHM_CONST_TQ []; extern const char MSG_CHECKS []; extern const char MSG_TEMPERATURE []; extern const char MSG_MOVE_AXIS []; diff --git a/Firmware/tmc2130.cpp b/Firmware/tmc2130.cpp index 464ca6ed0..1084f6be1 100755 --- a/Firmware/tmc2130.cpp +++ b/Firmware/tmc2130.cpp @@ -8,6 +8,8 @@ #include "language.h" #include "spi.h" #include "Timer.h" +#include "eeprom.h" +#include #define TMC2130_GCONF_NORMAL 0x00000000 // spreadCycle #define TMC2130_GCONF_SGSENS 0x00000180 // spreadCycle with stallguard (stall activates DIAG0 and DIAG1 [open collector]) @@ -883,6 +885,107 @@ void tmc2130_get_wave(uint8_t axis, uint8_t* data) tmc2130_set_pwr(axis, pwr); } +// Calculate constant torque value for a given microstep positionAdd commentMore actions +// +// Maintains |A|² + |B|² = constant throughout the microstep cycle, where A and B are the two motor phases. +// Uses a two-phase approach: positions 0-127 follow a power-corrected sine curve, +// while positions 128-255 are calculated using the constant torque constraint equation. +// +// Creates only deltas achievable by TMC2130 in at most four segments. It relies on the fact, +// that for power corrected sine curve with fac [1, 1.2] the slope stays in the range [0, 2] +// and fits at most three segments. +// +// Parameters: +// - i: microstep position (0-255) +// - va: previous amplitude value for delta calculation +// - fac: power factor for linearity correction +// - tcorr: pre-calculated torque correction factor +// - carry: quantization error carry-forward (modified by reference) +// - prev_theoretical_value: previous theoretical value for slope calculation (modified by reference) +// +// Returns: 8-bit amplitude value clamped to [SIN0, AMP] range +// +// References: +// - Prusa Forum: "TMC2130 constant torque algorithm" discussion +// https://forum.prusa3d.com/forum/original-prusa-i3-mk3s-mk3-user-mods-octoprint-enclosures-nozzles/stepper-motor-upgrades-to-eliminate-vfa-s-vertical-fine-artifacts/paged/2/ +// - Analog Devices AN-026: "Stepper Motor Control Using TMC2130" +// https://www.analog.com/en/resources/app-notes/an-026.html +uint8_t tmc2130_calc_constant_torque_value(uint8_t i, uint8_t va, float fac, float tcorr, + float& prev_theoretical_value) { + constexpr uint8_t SIN0 = 0; + constexpr uint8_t AMP = 248; // Amplitude limit as per AN-026 recommendation + constexpr float TARGET_MAGNITUDE_SQUARED = (float)AMP * AMP + (float)SIN0 * SIN0; + + // Theoretical constant torque value at microstep position i + float theoretical_value; + + if (i < 128) { + // Phase 1 (positions 0-127): Power-corrected sine curve + // Calculate theoretical value using sine function with power factor + // correction and tcorr adjustment for midpoint matching + float sin_val = sin(M_PI * (float)i / 512.0f); + theoretical_value = (AMP - SIN0) * pow(sin_val, fac) * tcorr + SIN0; + } else { + // Phase 2 (positions 128-255): Constant torque constraint solving + // For constant torque: |A(i)|² + |B(i)|² = TARGET_MAGNITUDE_SQUARED + // Since B(i) = A(255-i), solve: |A(i)|² + |A(255-i)|² = TARGET_MAGNITUDE_SQUARED + // Therefore: A(i) = sqrt(TARGET_MAGNITUDE_SQUARED - A(255-i)²) + + // Calculate mirror position value from Phase 1 curve + uint8_t mirror_i = 255 - i; + float sin_val = sin(M_PI * (float)mirror_i / 512.0f); + float mirror_theoretical = (AMP - SIN0) * pow(sin_val, fac) * tcorr + SIN0; + + // Apply constant torque constraint + theoretical_value = sqrt(TARGET_MAGNITUDE_SQUARED - mirror_theoretical * mirror_theoretical); + } + + // Step 1: Initial quantization using simple rounding + uint8_t candidate_value = (uint8_t)(theoretical_value + 0.5); + + // Step 2: Slope-based delta limiting for TMC2130 compression + // Calculate slope between current and previous theoretical values + float slope = theoretical_value - prev_theoretical_value; + + // Determine allowed delta range + // This ensures delta ranges match slope ranges for optimal compression: + // slope ∈ [0,1) → deltas ∈ [0,1], slope ∈ [1,2) → deltas ∈ [1,2], etc. + int8_t min_delta = (int8_t)floor(slope); + + // Clamp to TMC2130 hardware delta limits [-1, 3] + // Max delta is 2 because we need range [min_delta, min_delta+1] + if (min_delta < -1) { + min_delta = -1; + } else if (min_delta > 2) { + min_delta = 2; + } + + // Enforce delta limits: constrain actual delta to [min_delta, min_delta+1] + int8_t delta = candidate_value - va; + if (delta < min_delta) { + candidate_value = va + min_delta; + } else if (delta > min_delta + 1) { + candidate_value = va + min_delta + 1; + } + + // Step 3: Final amplitude clamping to valid TMC2130 range + if (candidate_value < SIN0) { + candidate_value = SIN0; + } else if (candidate_value > AMP) { + candidate_value = AMP; + } + + // Update previous theoretical value for next slope calculation + prev_theoretical_value = theoretical_value; + + return candidate_value; +} + +// TMC2130 Wave Generation with Algorithm Selection +// +// Algorithm Overview: +// - Original: Simple sine wave with power factor adjustment +// - Constant Torque: Maintains |A|² + |B|² = constant throughout microstep cycle void tmc2130_set_wave(uint8_t axis, uint8_t amp, uint8_t fac1000) { // TMC2130 wave compression algorithm @@ -890,7 +993,7 @@ void tmc2130_set_wave(uint8_t axis, uint8_t amp, uint8_t fac1000) // printf_P(PSTR("tmc2130_set_wave %d %d\n"), axis, fac1000); if (fac1000 < TMC2130_WAVE_FAC1000_MIN) fac1000 = 0; if (fac1000 > TMC2130_WAVE_FAC1000_MAX) fac1000 = TMC2130_WAVE_FAC1000_MAX; - float fac = 0; + float fac = 1; if (fac1000) fac = ((float)((uint16_t)fac1000 + 1000) / 1000); //correction factor // printf_P(PSTR(" factor: %s\n"), ftostr43(fac)); uint8_t vA = 0; //value of currentA @@ -904,16 +1007,40 @@ void tmc2130_set_wave(uint8_t axis, uint8_t amp, uint8_t fac1000) int8_t dA; //delta value uint8_t i = 0; //microstep index uint32_t reg = 0; //tmc2130 register - tmc2130_wr_MSLUTSTART(axis, 0, amp); + + // Constant torque algorithm parameters (only used if use_constant_torque is true) + float prev_theoretical_value = 0.0; // Cache previous theoretical value for slope calculation (initialized with SIN0) + float tcorr = 1.0; // Pre-calculated correction factor for constant torque algorithm + + uint8_t algorithm = eeprom_read_byte((uint8_t*)EEPROM_TMC2130_WAVE_ALGORITHM); + bool use_constant_torque = (algorithm == TMC2130_WAVE_ALGORITHM_CONSTANT_TORQUE); + + // Pre-calculate tcorr for constant torque algorithm to avoid redundant calculations + if (use_constant_torque) { + constexpr uint8_t SIN0 = 0; + constexpr uint8_t AMP = 248; // Amplitude limit as per AD recommendation + constexpr float MIDPOINT_VALUE = 175.362481734263781f; // sqrt((AMP² + SIN0²) / 2) + constexpr float SIN_127_5 = 0.704934080375905f; // sin(M_PI * 127.5f / 512.0f) + + tcorr = (MIDPOINT_VALUE - SIN0) / ((AMP - SIN0) * pow(SIN_127_5, fac)); + tmc2130_wr_MSLUTSTART(axis, SIN0, AMP); + } else { + tmc2130_wr_MSLUTSTART(axis, 0, amp); + } do { if ((i & 0x1f) == 0) reg = 0; - // calculate value - if (fac == 0) // default TMC wave - vA = (uint8_t)((amp+1) * sin((2*PI*i + PI)/1024) + 0.5) - 1; - else // corrected wave - vA = (uint8_t)(amp * pow(sin(2*PI*i/1024), fac) + 0.5); + + if (use_constant_torque) { + vA = tmc2130_calc_constant_torque_value(i, va, fac, tcorr, prev_theoretical_value); + } else { + // calculate value + if (fac == 1) // default TMC wave + vA = (uint8_t)((amp+1) * sin((2*PI*i + PI)/1024) + 0.5) - 1; + else // corrected wave + vA = (uint8_t)(amp * pow(sin(2*PI*i/1024), fac) + 0.5); + } dA = vA - va; // calculate delta va = vA; b = -1; diff --git a/Firmware/tmc2130.h b/Firmware/tmc2130.h index 6c1308113..74198fa95 100644 --- a/Firmware/tmc2130.h +++ b/Firmware/tmc2130.h @@ -22,10 +22,14 @@ extern const char eMotorCurrentScalingEnabled[]; #define TMC2130_MODE_NORMAL 0 #define TMC2130_MODE_SILENT 1 -#define TMC2130_WAVE_FAC1000_MIN 30 +#define TMC2130_WAVE_FAC1000_MIN 0 #define TMC2130_WAVE_FAC1000_MAX 200 #define TMC2130_WAVE_FAC1000_STP 1 +// Wave algorithm selection +#define TMC2130_WAVE_ALGORITHM_DEFAULT 0xFF // Default Prusa algorithm (0xFF = uninitialized EEPROM) +#define TMC2130_WAVE_ALGORITHM_CONSTANT_TORQUE 1 // Constant torque algorithm + #define TMC2130_MINIMUM_PULSE 0 // minimum pulse width in uS #define TMC2130_SET_DIR_DELAY 20 // minimum delay after setting direction in uS #define TMC2130_SET_PWR_DELAY 0 // minimum delay after changing pwr mode in uS diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 2b3001dee..3d0b7769c 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -12,6 +12,7 @@ #include "stepper.h" #include "ConfigurationStore.h" #include "printers.h" +#include "eeprom.h" #include #include "stopwatch.h" @@ -102,6 +103,7 @@ static void lcd_settings_menu(); static void lcd_control_temperature_menu(); #ifdef TMC2130 static void lcd_settings_linearity_correction_menu_save(); +static void lcd_tmc2130_wave_algorithm_toggle(); #endif static void lcd_menu_xyz_y_min(); static void lcd_menu_xyz_skew(); @@ -4030,12 +4032,23 @@ void lcd_settings_linearity_correction_menu(void) lcd_settings_linearity_correction_menu_save(); ); MENU_ITEM_BACK_P(_T(MSG_SETTINGS)); + + // Algorithm selection toggle (read from EEPROM to support runtime changes) + uint8_t current_algorithm = eeprom_read_byte((uint8_t*)EEPROM_TMC2130_WAVE_ALGORITHM); + + if (current_algorithm == TMC2130_WAVE_ALGORITHM_CONSTANT_TORQUE) { + MENU_ITEM_TOGGLE_P(_T(MSG_WAVE_ALGORITHM), _T(MSG_ALGORITHM_CONST_TQ), lcd_tmc2130_wave_algorithm_toggle); + } else { + MENU_ITEM_TOGGLE_P(_T(MSG_WAVE_ALGORITHM), _T(MSG_ALGORITHM_DEFAULT), lcd_tmc2130_wave_algorithm_toggle); + } + + // Unified parameter range (0-200 maps to power factors 1.0-1.2 for both algorithms) #ifdef TMC2130_LINEARITY_CORRECTION_XYZ - MENU_ITEM_EDIT_int3_P(_T(MSG_X_CORRECTION), &tmc2130_wave_fac[X_AXIS], TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX); - MENU_ITEM_EDIT_int3_P(_T(MSG_Y_CORRECTION), &tmc2130_wave_fac[Y_AXIS], TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX); - MENU_ITEM_EDIT_int3_P(_T(MSG_Z_CORRECTION), &tmc2130_wave_fac[Z_AXIS], TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX); + MENU_ITEM_EDIT_int3_P(_T(MSG_X_CORRECTION), &tmc2130_wave_fac[X_AXIS], TMC2130_WAVE_FAC1000_MIN, TMC2130_WAVE_FAC1000_MAX); + MENU_ITEM_EDIT_int3_P(_T(MSG_Y_CORRECTION), &tmc2130_wave_fac[Y_AXIS], TMC2130_WAVE_FAC1000_MIN, TMC2130_WAVE_FAC1000_MAX); + MENU_ITEM_EDIT_int3_P(_T(MSG_Z_CORRECTION), &tmc2130_wave_fac[Z_AXIS], TMC2130_WAVE_FAC1000_MIN, TMC2130_WAVE_FAC1000_MAX); #endif //TMC2130_LINEARITY_CORRECTION_XYZ - MENU_ITEM_EDIT_int3_P(_T(MSG_EXTRUDER_CORRECTION), &tmc2130_wave_fac[E_AXIS], TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX); + MENU_ITEM_EDIT_int3_P(_T(MSG_EXTRUDER_CORRECTION), &tmc2130_wave_fac[E_AXIS], TMC2130_WAVE_FAC1000_MIN, TMC2130_WAVE_FAC1000_MAX); MENU_END(); } #endif // TMC2130 @@ -4543,6 +4556,24 @@ static void lcd_settings_linearity_correction_menu_save() { // Re-init the TMC2130 driver to apply changes, if any tmc2130_init(TMCInitParams(false, FarmOrUserECool())); } + +// Toggle between Default and Constant Torque algorithms +static void lcd_tmc2130_wave_algorithm_toggle() { + // Read current algorithm from EEPROM + uint8_t current_algorithm = eeprom_read_byte((uint8_t*)EEPROM_TMC2130_WAVE_ALGORITHM); + + // Toggle to the other algorithm + uint8_t new_algorithm = (current_algorithm == TMC2130_WAVE_ALGORITHM_CONSTANT_TORQUE) ? + TMC2130_WAVE_ALGORITHM_DEFAULT : TMC2130_WAVE_ALGORITHM_CONSTANT_TORQUE; + + // Save new algorithm to EEPROM + eeprom_update_byte_notify((uint8_t*)EEPROM_TMC2130_WAVE_ALGORITHM, new_algorithm); + + // Immediately reapply wave settings on all axes to enable runtime changes + for (uint8_t axis = 0; axis < NUM_AXIS; axis++) { + tmc2130_set_wave(axis, 247, tmc2130_wave_fac[axis]); + } +} #endif //TMC2130 static void lcd_calibration_menu() diff --git a/lang/po/Firmware_cs.po b/lang/po/Firmware_cs.po index ae6ed0964..0a821ebd2 100644 --- a/lang/po/Firmware_cs.po +++ b/lang/po/Firmware_cs.po @@ -460,10 +460,25 @@ msgid "Done" msgstr "Konec" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "Korekce E" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algoritmus" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Vychozi" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Konst. mom" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_de.po b/lang/po/Firmware_de.po index 74be2eaea..733e0818c 100644 --- a/lang/po/Firmware_de.po +++ b/lang/po/Firmware_de.po @@ -462,10 +462,25 @@ msgid "Done" msgstr "Klar" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "E-Korrektur" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algorithmus" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Standard" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Konst. Dreh" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_es.po b/lang/po/Firmware_es.po index cbf04c9bb..741db9ef4 100644 --- a/lang/po/Firmware_es.po +++ b/lang/po/Firmware_es.po @@ -460,10 +460,25 @@ msgid "Done" msgstr "Listo" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "Corregir-E" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algoritmo" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Por defecto" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Par const" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_fr.po b/lang/po/Firmware_fr.po index 599526a3d..cf19bfea4 100644 --- a/lang/po/Firmware_fr.po +++ b/lang/po/Firmware_fr.po @@ -463,10 +463,25 @@ msgid "Done" msgstr "Fait" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "Correct-E" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algorithme" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Defaut" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Couple cst" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_hr.po b/lang/po/Firmware_hr.po index 02b27a9fa..763d99174 100644 --- a/lang/po/Firmware_hr.po +++ b/lang/po/Firmware_hr.po @@ -458,10 +458,25 @@ msgid "Done" msgstr "Gotov" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "E-ispravan" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algoritam" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Zadano" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Konst. mom" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_hu.po b/lang/po/Firmware_hu.po index 04294cc5e..29fbe7ba7 100644 --- a/lang/po/Firmware_hu.po +++ b/lang/po/Firmware_hu.po @@ -461,10 +461,25 @@ msgid "Done" msgstr "Kesz" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "E-korrekcio" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algoritmus" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Alapertelmez" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Allando nyom" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_it.po b/lang/po/Firmware_it.po index 68f368afd..5fef4761b 100644 --- a/lang/po/Firmware_it.po +++ b/lang/po/Firmware_it.po @@ -462,10 +462,25 @@ msgid "Done" msgstr "Fatto" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "Correzione-E" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algoritmo" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Predefinito" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Coppia cost" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_nl.po b/lang/po/Firmware_nl.po index 53f13d97e..6830fc889 100644 --- a/lang/po/Firmware_nl.po +++ b/lang/po/Firmware_nl.po @@ -463,10 +463,25 @@ msgid "Done" msgstr "Klaar" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "E-correctie" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algoritme" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Standaard" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Const koppel" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_no.po b/lang/po/Firmware_no.po index 49e21ab2e..5c6c95325 100644 --- a/lang/po/Firmware_no.po +++ b/lang/po/Firmware_no.po @@ -461,10 +461,25 @@ msgid "Done" msgstr "Ferdig" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "E-korreksjon" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algoritme" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Standard" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Konst moment" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_pl.po b/lang/po/Firmware_pl.po index 1383110b2..ea57902eb 100644 --- a/lang/po/Firmware_pl.po +++ b/lang/po/Firmware_pl.po @@ -463,10 +463,25 @@ msgid "Done" msgstr "Gotowe" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "Korekcja-E" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algorytm" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Domyslny" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Staly moment" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_ro.po b/lang/po/Firmware_ro.po index 2d498aa02..d3026b6a8 100644 --- a/lang/po/Firmware_ro.po +++ b/lang/po/Firmware_ro.po @@ -463,10 +463,25 @@ msgid "Done" msgstr "Gata" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "E-corecție" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algoritm" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Implicit" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Cuplu const" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_sk.po b/lang/po/Firmware_sk.po index d03fcaa2a..7edd67ebf 100644 --- a/lang/po/Firmware_sk.po +++ b/lang/po/Firmware_sk.po @@ -460,10 +460,25 @@ msgid "Done" msgstr "Hotov" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "Korekcia E" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algoritmus" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Predvoleny" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Konst. mom" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48 diff --git a/lang/po/Firmware_sv.po b/lang/po/Firmware_sv.po index c2e626c88..4b79dfde8 100644 --- a/lang/po/Firmware_sv.po +++ b/lang/po/Firmware_sv.po @@ -461,10 +461,25 @@ msgid "Done" msgstr "Klar" #. MSG_EXTRUDER_CORRECTION c=13 -#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014 +#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047 msgid "E-correct" msgstr "E-korrektion" +#. MSG_WAVE_ALGORITHM c=13 +#: ../../Firmware/messages.cpp:321 +msgid "Algorithm" +msgstr "Algoritm" + +#. MSG_ALGORITHM_DEFAULT c=13 +#: ../../Firmware/messages.cpp:322 +msgid "Default" +msgstr "Standard" + +#. MSG_ALGORITHM_CONST_TQ c=13 +#: ../../Firmware/messages.cpp:323 +msgid "Const tq" +msgstr "Konst moment" + #. MSG_PROGRESS_ERR_HELP_FIL c=20 #: ../../Firmware/mmu2_progress_converter.cpp:19 #: ../../Firmware/mmu2_progress_converter.cpp:48