Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Firmware/eeprom.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new variable should also be documented in the large table near the top of this file. Between lines 100-400 :)

//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 !!!!!
// !!!!!
Expand Down
3 changes: 3 additions & 0 deletions Firmware/messages.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions Firmware/messages.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 [];
Expand Down
141 changes: 134 additions & 7 deletions Firmware/tmc2130.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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])
Expand Down Expand Up @@ -883,14 +885,115 @@ 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);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suspect the compiler doesnt calculate M_PI / 512.f constant at build time.

If I'm right this will consume less memory and drop one division operation:

constexpr float sin_gain = M_PI / 512.f;
float sin_val = sin(sin_gain * i);

I may be wrong but I think I have seen this happen before.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As this is only calculated upon startup or changing of the value, I did not spend too much time optimizing, but I can certainly investigate further.

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);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the floor function required? It treats positive and negative numbers differently.

Would it work for slope to be int8_t instead of float if we are truncating the value anyway? I don't see slope being used anywhere after this line.


// 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;
Copy link
Collaborator

@gudnimg gudnimg Jun 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes we can save some memory by using the constrain macro. https://docs.arduino.cc/language-reference/en/functions/math/constrain/

min_delta = constrain(min_delta, -1, 2);

It wouldnt save much but perhaps some.

}

// 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
// optimized for minimal memory requirements
// 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
Expand All @@ -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;
Expand Down
6 changes: 5 additions & 1 deletion Firmware/tmc2130.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
39 changes: 35 additions & 4 deletions Firmware/ultralcd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "stepper.h"
#include "ConfigurationStore.h"
#include "printers.h"
#include "eeprom.h"
#include <string.h>
#include "stopwatch.h"

Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand Down
17 changes: 16 additions & 1 deletion lang/po/Firmware_cs.po
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
msgid "Auto"
msgstr "Auto"

#. MSG_AUTO_HOME c=18

Check notice on line 86 in lang/po/Firmware_cs.po

View workflow job for this annotation

GitHub Actions / check-lang

Translation same as original text
#: ../../Firmware/Marlin_main.cpp:2942 ../../Firmware/messages.cpp:12
#: ../../Firmware/ultralcd.cpp:4533 ../../Firmware/ultralcd.cpp:5500
msgid "Auto home"
Expand Down Expand Up @@ -460,10 +460,25 @@
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
Expand Down Expand Up @@ -544,7 +559,7 @@
msgid "F. jam detect"
msgstr "Det. záseku"

#. MSG_FSENSOR_RUNOUT c=13

Check notice on line 562 in lang/po/Firmware_cs.po

View workflow job for this annotation

GitHub Actions / check-lang

Translation same as original text
#: ../../Firmware/messages.cpp:48 ../../Firmware/ultralcd.cpp:4067
#: ../../Firmware/ultralcd.cpp:4074
msgid "F. runout"
Expand All @@ -569,7 +584,7 @@
"Při vyjmutí filamentu se nevypnula FINDA. Zkuste ruční vyjmutí. Ujistěte se,"
" že se filament nezasekl a FINDA funguje."

#. MSG_DESC_FINDA_DIDNT_TRIGGER c=20 r=8

Check notice on line 587 in lang/po/Firmware_cs.po

View workflow job for this annotation

GitHub Actions / check-lang

Differing last punctuation character: (. => ?)
#: ../../Firmware/mmu2/errors_list.h:242 ../../Firmware/mmu2/errors_list.h:298
msgid ""
"FINDA didn't trigger while loading the filament. Ensure the filament can "
Expand Down Expand Up @@ -794,7 +809,7 @@
msgid "G-code sliced for a different level. Please re-slice the model again."
msgstr "G-code je připraven pro jinou verzi. Vyslicujte model znovu."

#. MSG_GCODE_DIFF_PRINTER_CONTINUE c=20 r=3

Check notice on line 812 in lang/po/Firmware_cs.po

View workflow job for this annotation

GitHub Actions / check-lang

Differing last punctuation character: (. => ?)
#: ../../Firmware/messages.cpp:152 ../../Firmware/util.cpp:319
#: ../../Firmware/util.cpp:436
msgid "G-code sliced for a different printer type."
Expand Down Expand Up @@ -1161,7 +1176,7 @@
msgid "Mesh"
msgstr "Mesh"

#. MSG_MESH_BED_LEVELING c=18

Check notice on line 1179 in lang/po/Firmware_cs.po

View workflow job for this annotation

GitHub Actions / check-lang

Translation same as original text
#: ../../Firmware/messages.cpp:174 ../../Firmware/ultralcd.cpp:4455
#: ../../Firmware/ultralcd.cpp:4543
msgid "Mesh Bed Leveling"
Expand Down Expand Up @@ -1680,7 +1695,7 @@
msgid "QUEUE FULL"
msgstr "FRONTA PLNA"

#. MSG_RPI_PORT c=13

Check notice on line 1698 in lang/po/Firmware_cs.po

View workflow job for this annotation

GitHub Actions / check-lang

Translation same as original text
#: ../../Firmware/messages.cpp:168 ../../Firmware/ultralcd.cpp:4465
msgid "RPi port"
msgstr "RPi port"
Expand Down Expand Up @@ -1835,7 +1850,7 @@
msgid "Selecting fil. slot"
msgstr "Výběr fil. slot"

#. MSG_SELFTEST_OK c=20

Check notice on line 1853 in lang/po/Firmware_cs.po

View workflow job for this annotation

GitHub Actions / check-lang

Translation same as original text
#: ../../Firmware/messages.cpp:353 ../../Firmware/ultralcd.cpp:6253
msgid "Selftest OK"
msgstr "Selftest OK"
Expand Down Expand Up @@ -2202,7 +2217,7 @@
msgid "Voltages"
msgstr "Napětí"

#. MSG_TITLE_TMC_WARNING_TMC_TOO_HOT c=20

Check notice on line 2220 in lang/po/Firmware_cs.po

View workflow job for this annotation

GitHub Actions / check-lang

Differing last punctuation character: (T => !)
#: ../../Firmware/mmu2/errors_list.h:151 ../../Firmware/mmu2/errors_list.h:205
#: ../../Firmware/mmu2/errors_list.h:206 ../../Firmware/mmu2/errors_list.h:207
msgid "WARNING TMC TOO HOT"
Expand Down
17 changes: 16 additions & 1 deletion lang/po/Firmware_de.po
Original file line number Diff line number Diff line change
Expand Up @@ -462,10 +462,25 @@
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
Expand Down Expand Up @@ -562,7 +577,7 @@
msgid "FINDA DIDNT TRIGGER"
msgstr "FINDA N. AUSGELÖST"

#. MSG_DESC_FINDA_FILAMENT_STUCK c=20 r=8

Check notice on line 580 in lang/po/Firmware_de.po

View workflow job for this annotation

GitHub Actions / check-lang

Differing last punctuation character: (. => ?)
#: ../../Firmware/mmu2/errors_list.h:243 ../../Firmware/mmu2/errors_list.h:299
msgid ""
"FINDA didn't switch off while unloading filament. Try unloading manually. "
Expand Down Expand Up @@ -699,7 +714,7 @@
msgid "Filament sensor"
msgstr "Filament-Sensor"

#. MSG_DESC_FSENSOR_FILAMENT_STUCK c=20 r=8

Check notice on line 717 in lang/po/Firmware_de.po

View workflow job for this annotation

GitHub Actions / check-lang

Differing last punctuation character: (. => ?)
#: ../../Firmware/mmu2/errors_list.h:245 ../../Firmware/mmu2/errors_list.h:301
msgid ""
"Filament sensor didn't switch off while unloading filament. Ensure filament "
Expand Down
17 changes: 16 additions & 1 deletion lang/po/Firmware_es.po
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
17 changes: 16 additions & 1 deletion lang/po/Firmware_fr.po
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading