Implement TMC2130 constant torque algorithm for improved stepper motor performance
- Add tmc2130_calc_constant_torque_value() function implementing advanced constant torque algorithm - Maintain |A|² + |B|² = constant throughout microstep cycle for consistent motor torque - Use full range utilization (SIN0=0, AMP=248) with natural mirroring approach - Add EEPROM settings for wave algorithm selection - Include menu integration for runtime algorithm switching - Add complete internationalization support for TMC2130 stepper configuration strings References: - Analog Devices AN-026 application note
This commit is contained in:
parent
7731024edb
commit
5251bfed23
|
|
@ -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 !!!!!
|
||||
// !!!!!
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 [];
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
#include "language.h"
|
||||
#include "spi.h"
|
||||
#include "Timer.h"
|
||||
#include "eeprom.h"
|
||||
#include <math.h>
|
||||
|
||||
#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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
#include "stepper.h"
|
||||
#include "ConfigurationStore.h"
|
||||
#include "printers.h"
|
||||
#include "eeprom.h"
|
||||
#include <string.h>
|
||||
#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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue