Skip to content

Commit 5251bfe

Browse files
committed
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
1 parent 7731024 commit 5251bfe

19 files changed

+390
-26
lines changed

Firmware/eeprom.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,8 +668,9 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE);
668668
#define EEPROM_UVLO_MIN_SEGMENT_TIME_US (EEPROM_UVLO_MIN_TRAVEL_FEEDRATE-4) //uint32_t
669669
#define EEPROM_UVLO_MAX_JERK (EEPROM_UVLO_MIN_SEGMENT_TIME_US-4*4) // 4 x float
670670
#define EEPROM_CHECK_FILAMENT (EEPROM_UVLO_MAX_JERK-1) // uint8_t
671+
#define EEPROM_TMC2130_WAVE_ALGORITHM (EEPROM_CHECK_FILAMENT - 1) // uint8
671672
//This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items.
672-
#define EEPROM_LAST_ITEM EEPROM_CHECK_FILAMENT
673+
#define EEPROM_LAST_ITEM EEPROM_TMC2130_WAVE_ALGORITHM
673674
// !!!!!
674675
// !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!!
675676
// !!!!!

Firmware/messages.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,9 @@ extern const char MSG_X_CORRECTION [] PROGMEM_I1 = ISTR("X-correct"); ////MSG_X_
318318
extern const char MSG_Y_CORRECTION [] PROGMEM_I1 = ISTR("Y-correct"); ////MSG_Y_CORRECTION c=13
319319
extern const char MSG_Z_CORRECTION [] PROGMEM_I1 = ISTR("Z-correct"); ////MSG_Z_CORRECTION c=13
320320
extern const char MSG_EXTRUDER_CORRECTION [] PROGMEM_I1 = ISTR("E-correct"); ////MSG_EXTRUDER_CORRECTION c=13
321+
extern const char MSG_WAVE_ALGORITHM [] PROGMEM_I1 = ISTR("Algorithm"); ////MSG_WAVE_ALGORITHM c=13
322+
extern const char MSG_ALGORITHM_DEFAULT [] PROGMEM_I1 = ISTR("Default"); ////MSG_ALGORITHM_DEFAULT c=13
323+
extern const char MSG_ALGORITHM_CONST_TQ [] PROGMEM_I1 = ISTR("Const tq"); ////MSG_ALGORITHM_CONST_TQ c=13
321324
extern const char MSG_CHECKS [] PROGMEM_I1 = ISTR("Checks"); ////MSG_CHECKS c=18
322325
extern const char MSG_TEMPERATURE [] PROGMEM_I1 = ISTR("Temperature"); ////MSG_TEMPERATURE c=18
323326
extern const char MSG_MOVE_AXIS [] PROGMEM_I1 = ISTR("Move axis"); ////MSG_MOVE_AXIS c=18

Firmware/messages.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,9 @@ extern const char MSG_X_CORRECTION [];
317317
extern const char MSG_Y_CORRECTION [];
318318
extern const char MSG_Z_CORRECTION [];
319319
extern const char MSG_EXTRUDER_CORRECTION [];
320+
extern const char MSG_WAVE_ALGORITHM [];
321+
extern const char MSG_ALGORITHM_DEFAULT [];
322+
extern const char MSG_ALGORITHM_CONST_TQ [];
320323
extern const char MSG_CHECKS [];
321324
extern const char MSG_TEMPERATURE [];
322325
extern const char MSG_MOVE_AXIS [];

Firmware/tmc2130.cpp

Lines changed: 134 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include "language.h"
99
#include "spi.h"
1010
#include "Timer.h"
11+
#include "eeprom.h"
12+
#include <math.h>
1113

1214
#define TMC2130_GCONF_NORMAL 0x00000000 // spreadCycle
1315
#define TMC2130_GCONF_SGSENS 0x00000180 // spreadCycle with stallguard (stall activates DIAG0 and DIAG1 [open collector])
@@ -883,14 +885,115 @@ void tmc2130_get_wave(uint8_t axis, uint8_t* data)
883885
tmc2130_set_pwr(axis, pwr);
884886
}
885887

888+
// Calculate constant torque value for a given microstep positionAdd commentMore actions
889+
//
890+
// Maintains |A|² + |B|² = constant throughout the microstep cycle, where A and B are the two motor phases.
891+
// Uses a two-phase approach: positions 0-127 follow a power-corrected sine curve,
892+
// while positions 128-255 are calculated using the constant torque constraint equation.
893+
//
894+
// Creates only deltas achievable by TMC2130 in at most four segments. It relies on the fact,
895+
// that for power corrected sine curve with fac [1, 1.2] the slope stays in the range [0, 2]
896+
// and fits at most three segments.
897+
//
898+
// Parameters:
899+
// - i: microstep position (0-255)
900+
// - va: previous amplitude value for delta calculation
901+
// - fac: power factor for linearity correction
902+
// - tcorr: pre-calculated torque correction factor
903+
// - carry: quantization error carry-forward (modified by reference)
904+
// - prev_theoretical_value: previous theoretical value for slope calculation (modified by reference)
905+
//
906+
// Returns: 8-bit amplitude value clamped to [SIN0, AMP] range
907+
//
908+
// References:
909+
// - Prusa Forum: "TMC2130 constant torque algorithm" discussion
910+
// 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/
911+
// - Analog Devices AN-026: "Stepper Motor Control Using TMC2130"
912+
// https://www.analog.com/en/resources/app-notes/an-026.html
913+
uint8_t tmc2130_calc_constant_torque_value(uint8_t i, uint8_t va, float fac, float tcorr,
914+
float& prev_theoretical_value) {
915+
constexpr uint8_t SIN0 = 0;
916+
constexpr uint8_t AMP = 248; // Amplitude limit as per AN-026 recommendation
917+
constexpr float TARGET_MAGNITUDE_SQUARED = (float)AMP * AMP + (float)SIN0 * SIN0;
918+
919+
// Theoretical constant torque value at microstep position i
920+
float theoretical_value;
921+
922+
if (i < 128) {
923+
// Phase 1 (positions 0-127): Power-corrected sine curve
924+
// Calculate theoretical value using sine function with power factor
925+
// correction and tcorr adjustment for midpoint matching
926+
float sin_val = sin(M_PI * (float)i / 512.0f);
927+
theoretical_value = (AMP - SIN0) * pow(sin_val, fac) * tcorr + SIN0;
928+
} else {
929+
// Phase 2 (positions 128-255): Constant torque constraint solving
930+
// For constant torque: |A(i)|² + |B(i)|² = TARGET_MAGNITUDE_SQUARED
931+
// Since B(i) = A(255-i), solve: |A(i)|² + |A(255-i)|² = TARGET_MAGNITUDE_SQUARED
932+
// Therefore: A(i) = sqrt(TARGET_MAGNITUDE_SQUARED - A(255-i)²)
933+
934+
// Calculate mirror position value from Phase 1 curve
935+
uint8_t mirror_i = 255 - i;
936+
float sin_val = sin(M_PI * (float)mirror_i / 512.0f);
937+
float mirror_theoretical = (AMP - SIN0) * pow(sin_val, fac) * tcorr + SIN0;
938+
939+
// Apply constant torque constraint
940+
theoretical_value = sqrt(TARGET_MAGNITUDE_SQUARED - mirror_theoretical * mirror_theoretical);
941+
}
942+
943+
// Step 1: Initial quantization using simple rounding
944+
uint8_t candidate_value = (uint8_t)(theoretical_value + 0.5);
945+
946+
// Step 2: Slope-based delta limiting for TMC2130 compression
947+
// Calculate slope between current and previous theoretical values
948+
float slope = theoretical_value - prev_theoretical_value;
949+
950+
// Determine allowed delta range
951+
// This ensures delta ranges match slope ranges for optimal compression:
952+
// slope ∈ [0,1) → deltas ∈ [0,1], slope ∈ [1,2) → deltas ∈ [1,2], etc.
953+
int8_t min_delta = (int8_t)floor(slope);
954+
955+
// Clamp to TMC2130 hardware delta limits [-1, 3]
956+
// Max delta is 2 because we need range [min_delta, min_delta+1]
957+
if (min_delta < -1) {
958+
min_delta = -1;
959+
} else if (min_delta > 2) {
960+
min_delta = 2;
961+
}
962+
963+
// Enforce delta limits: constrain actual delta to [min_delta, min_delta+1]
964+
int8_t delta = candidate_value - va;
965+
if (delta < min_delta) {
966+
candidate_value = va + min_delta;
967+
} else if (delta > min_delta + 1) {
968+
candidate_value = va + min_delta + 1;
969+
}
970+
971+
// Step 3: Final amplitude clamping to valid TMC2130 range
972+
if (candidate_value < SIN0) {
973+
candidate_value = SIN0;
974+
} else if (candidate_value > AMP) {
975+
candidate_value = AMP;
976+
}
977+
978+
// Update previous theoretical value for next slope calculation
979+
prev_theoretical_value = theoretical_value;
980+
981+
return candidate_value;
982+
}
983+
984+
// TMC2130 Wave Generation with Algorithm Selection
985+
//
986+
// Algorithm Overview:
987+
// - Original: Simple sine wave with power factor adjustment
988+
// - Constant Torque: Maintains |A|² + |B|² = constant throughout microstep cycle
886989
void tmc2130_set_wave(uint8_t axis, uint8_t amp, uint8_t fac1000)
887990
{
888991
// TMC2130 wave compression algorithm
889992
// optimized for minimal memory requirements
890993
// printf_P(PSTR("tmc2130_set_wave %d %d\n"), axis, fac1000);
891994
if (fac1000 < TMC2130_WAVE_FAC1000_MIN) fac1000 = 0;
892995
if (fac1000 > TMC2130_WAVE_FAC1000_MAX) fac1000 = TMC2130_WAVE_FAC1000_MAX;
893-
float fac = 0;
996+
float fac = 1;
894997
if (fac1000) fac = ((float)((uint16_t)fac1000 + 1000) / 1000); //correction factor
895998
// printf_P(PSTR(" factor: %s\n"), ftostr43(fac));
896999
uint8_t vA = 0; //value of currentA
@@ -904,16 +1007,40 @@ void tmc2130_set_wave(uint8_t axis, uint8_t amp, uint8_t fac1000)
9041007
int8_t dA; //delta value
9051008
uint8_t i = 0; //microstep index
9061009
uint32_t reg = 0; //tmc2130 register
907-
tmc2130_wr_MSLUTSTART(axis, 0, amp);
1010+
1011+
// Constant torque algorithm parameters (only used if use_constant_torque is true)
1012+
float prev_theoretical_value = 0.0; // Cache previous theoretical value for slope calculation (initialized with SIN0)
1013+
float tcorr = 1.0; // Pre-calculated correction factor for constant torque algorithm
1014+
1015+
uint8_t algorithm = eeprom_read_byte((uint8_t*)EEPROM_TMC2130_WAVE_ALGORITHM);
1016+
bool use_constant_torque = (algorithm == TMC2130_WAVE_ALGORITHM_CONSTANT_TORQUE);
1017+
1018+
// Pre-calculate tcorr for constant torque algorithm to avoid redundant calculations
1019+
if (use_constant_torque) {
1020+
constexpr uint8_t SIN0 = 0;
1021+
constexpr uint8_t AMP = 248; // Amplitude limit as per AD recommendation
1022+
constexpr float MIDPOINT_VALUE = 175.362481734263781f; // sqrt((AMP² + SIN0²) / 2)
1023+
constexpr float SIN_127_5 = 0.704934080375905f; // sin(M_PI * 127.5f / 512.0f)
1024+
1025+
tcorr = (MIDPOINT_VALUE - SIN0) / ((AMP - SIN0) * pow(SIN_127_5, fac));
1026+
tmc2130_wr_MSLUTSTART(axis, SIN0, AMP);
1027+
} else {
1028+
tmc2130_wr_MSLUTSTART(axis, 0, amp);
1029+
}
9081030
do
9091031
{
9101032
if ((i & 0x1f) == 0)
9111033
reg = 0;
912-
// calculate value
913-
if (fac == 0) // default TMC wave
914-
vA = (uint8_t)((amp+1) * sin((2*PI*i + PI)/1024) + 0.5) - 1;
915-
else // corrected wave
916-
vA = (uint8_t)(amp * pow(sin(2*PI*i/1024), fac) + 0.5);
1034+
1035+
if (use_constant_torque) {
1036+
vA = tmc2130_calc_constant_torque_value(i, va, fac, tcorr, prev_theoretical_value);
1037+
} else {
1038+
// calculate value
1039+
if (fac == 1) // default TMC wave
1040+
vA = (uint8_t)((amp+1) * sin((2*PI*i + PI)/1024) + 0.5) - 1;
1041+
else // corrected wave
1042+
vA = (uint8_t)(amp * pow(sin(2*PI*i/1024), fac) + 0.5);
1043+
}
9171044
dA = vA - va; // calculate delta
9181045
va = vA;
9191046
b = -1;

Firmware/tmc2130.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,14 @@ extern const char eMotorCurrentScalingEnabled[];
2222
#define TMC2130_MODE_NORMAL 0
2323
#define TMC2130_MODE_SILENT 1
2424

25-
#define TMC2130_WAVE_FAC1000_MIN 30
25+
#define TMC2130_WAVE_FAC1000_MIN 0
2626
#define TMC2130_WAVE_FAC1000_MAX 200
2727
#define TMC2130_WAVE_FAC1000_STP 1
2828

29+
// Wave algorithm selection
30+
#define TMC2130_WAVE_ALGORITHM_DEFAULT 0xFF // Default Prusa algorithm (0xFF = uninitialized EEPROM)
31+
#define TMC2130_WAVE_ALGORITHM_CONSTANT_TORQUE 1 // Constant torque algorithm
32+
2933
#define TMC2130_MINIMUM_PULSE 0 // minimum pulse width in uS
3034
#define TMC2130_SET_DIR_DELAY 20 // minimum delay after setting direction in uS
3135
#define TMC2130_SET_PWR_DELAY 0 // minimum delay after changing pwr mode in uS

Firmware/ultralcd.cpp

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "stepper.h"
1313
#include "ConfigurationStore.h"
1414
#include "printers.h"
15+
#include "eeprom.h"
1516
#include <string.h>
1617
#include "stopwatch.h"
1718

@@ -102,6 +103,7 @@ static void lcd_settings_menu();
102103
static void lcd_control_temperature_menu();
103104
#ifdef TMC2130
104105
static void lcd_settings_linearity_correction_menu_save();
106+
static void lcd_tmc2130_wave_algorithm_toggle();
105107
#endif
106108
static void lcd_menu_xyz_y_min();
107109
static void lcd_menu_xyz_skew();
@@ -4030,12 +4032,23 @@ void lcd_settings_linearity_correction_menu(void)
40304032
lcd_settings_linearity_correction_menu_save();
40314033
);
40324034
MENU_ITEM_BACK_P(_T(MSG_SETTINGS));
4035+
4036+
// Algorithm selection toggle (read from EEPROM to support runtime changes)
4037+
uint8_t current_algorithm = eeprom_read_byte((uint8_t*)EEPROM_TMC2130_WAVE_ALGORITHM);
4038+
4039+
if (current_algorithm == TMC2130_WAVE_ALGORITHM_CONSTANT_TORQUE) {
4040+
MENU_ITEM_TOGGLE_P(_T(MSG_WAVE_ALGORITHM), _T(MSG_ALGORITHM_CONST_TQ), lcd_tmc2130_wave_algorithm_toggle);
4041+
} else {
4042+
MENU_ITEM_TOGGLE_P(_T(MSG_WAVE_ALGORITHM), _T(MSG_ALGORITHM_DEFAULT), lcd_tmc2130_wave_algorithm_toggle);
4043+
}
4044+
4045+
// Unified parameter range (0-200 maps to power factors 1.0-1.2 for both algorithms)
40334046
#ifdef TMC2130_LINEARITY_CORRECTION_XYZ
4034-
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);
4035-
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);
4036-
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);
4047+
MENU_ITEM_EDIT_int3_P(_T(MSG_X_CORRECTION), &tmc2130_wave_fac[X_AXIS], TMC2130_WAVE_FAC1000_MIN, TMC2130_WAVE_FAC1000_MAX);
4048+
MENU_ITEM_EDIT_int3_P(_T(MSG_Y_CORRECTION), &tmc2130_wave_fac[Y_AXIS], TMC2130_WAVE_FAC1000_MIN, TMC2130_WAVE_FAC1000_MAX);
4049+
MENU_ITEM_EDIT_int3_P(_T(MSG_Z_CORRECTION), &tmc2130_wave_fac[Z_AXIS], TMC2130_WAVE_FAC1000_MIN, TMC2130_WAVE_FAC1000_MAX);
40374050
#endif //TMC2130_LINEARITY_CORRECTION_XYZ
4038-
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);
4051+
MENU_ITEM_EDIT_int3_P(_T(MSG_EXTRUDER_CORRECTION), &tmc2130_wave_fac[E_AXIS], TMC2130_WAVE_FAC1000_MIN, TMC2130_WAVE_FAC1000_MAX);
40394052
MENU_END();
40404053
}
40414054
#endif // TMC2130
@@ -4543,6 +4556,24 @@ static void lcd_settings_linearity_correction_menu_save() {
45434556
// Re-init the TMC2130 driver to apply changes, if any
45444557
tmc2130_init(TMCInitParams(false, FarmOrUserECool()));
45454558
}
4559+
4560+
// Toggle between Default and Constant Torque algorithms
4561+
static void lcd_tmc2130_wave_algorithm_toggle() {
4562+
// Read current algorithm from EEPROM
4563+
uint8_t current_algorithm = eeprom_read_byte((uint8_t*)EEPROM_TMC2130_WAVE_ALGORITHM);
4564+
4565+
// Toggle to the other algorithm
4566+
uint8_t new_algorithm = (current_algorithm == TMC2130_WAVE_ALGORITHM_CONSTANT_TORQUE) ?
4567+
TMC2130_WAVE_ALGORITHM_DEFAULT : TMC2130_WAVE_ALGORITHM_CONSTANT_TORQUE;
4568+
4569+
// Save new algorithm to EEPROM
4570+
eeprom_update_byte_notify((uint8_t*)EEPROM_TMC2130_WAVE_ALGORITHM, new_algorithm);
4571+
4572+
// Immediately reapply wave settings on all axes to enable runtime changes
4573+
for (uint8_t axis = 0; axis < NUM_AXIS; axis++) {
4574+
tmc2130_set_wave(axis, 247, tmc2130_wave_fac[axis]);
4575+
}
4576+
}
45464577
#endif //TMC2130
45474578

45484579
static void lcd_calibration_menu()

lang/po/Firmware_cs.po

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,10 +460,25 @@ msgid "Done"
460460
msgstr "Konec"
461461

462462
#. MSG_EXTRUDER_CORRECTION c=13
463-
#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014
463+
#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047
464464
msgid "E-correct"
465465
msgstr "Korekce E"
466466

467+
#. MSG_WAVE_ALGORITHM c=13
468+
#: ../../Firmware/messages.cpp:321
469+
msgid "Algorithm"
470+
msgstr "Algoritmus"
471+
472+
#. MSG_ALGORITHM_DEFAULT c=13
473+
#: ../../Firmware/messages.cpp:322
474+
msgid "Default"
475+
msgstr "Vychozi"
476+
477+
#. MSG_ALGORITHM_CONST_TQ c=13
478+
#: ../../Firmware/messages.cpp:323
479+
msgid "Const tq"
480+
msgstr "Konst. mom"
481+
467482
#. MSG_PROGRESS_ERR_HELP_FIL c=20
468483
#: ../../Firmware/mmu2_progress_converter.cpp:19
469484
#: ../../Firmware/mmu2_progress_converter.cpp:48

lang/po/Firmware_de.po

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,10 +462,25 @@ msgid "Done"
462462
msgstr "Klar"
463463

464464
#. MSG_EXTRUDER_CORRECTION c=13
465-
#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014
465+
#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047
466466
msgid "E-correct"
467467
msgstr "E-Korrektur"
468468

469+
#. MSG_WAVE_ALGORITHM c=13
470+
#: ../../Firmware/messages.cpp:321
471+
msgid "Algorithm"
472+
msgstr "Algorithmus"
473+
474+
#. MSG_ALGORITHM_DEFAULT c=13
475+
#: ../../Firmware/messages.cpp:322
476+
msgid "Default"
477+
msgstr "Standard"
478+
479+
#. MSG_ALGORITHM_CONST_TQ c=13
480+
#: ../../Firmware/messages.cpp:323
481+
msgid "Const tq"
482+
msgstr "Konst. Dreh"
483+
469484
#. MSG_PROGRESS_ERR_HELP_FIL c=20
470485
#: ../../Firmware/mmu2_progress_converter.cpp:19
471486
#: ../../Firmware/mmu2_progress_converter.cpp:48

lang/po/Firmware_es.po

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,10 +460,25 @@ msgid "Done"
460460
msgstr "Listo"
461461

462462
#. MSG_EXTRUDER_CORRECTION c=13
463-
#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014
463+
#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047
464464
msgid "E-correct"
465465
msgstr "Corregir-E"
466466

467+
#. MSG_WAVE_ALGORITHM c=13
468+
#: ../../Firmware/messages.cpp:321
469+
msgid "Algorithm"
470+
msgstr "Algoritmo"
471+
472+
#. MSG_ALGORITHM_DEFAULT c=13
473+
#: ../../Firmware/messages.cpp:322
474+
msgid "Default"
475+
msgstr "Por defecto"
476+
477+
#. MSG_ALGORITHM_CONST_TQ c=13
478+
#: ../../Firmware/messages.cpp:323
479+
msgid "Const tq"
480+
msgstr "Par const"
481+
467482
#. MSG_PROGRESS_ERR_HELP_FIL c=20
468483
#: ../../Firmware/mmu2_progress_converter.cpp:19
469484
#: ../../Firmware/mmu2_progress_converter.cpp:48

lang/po/Firmware_fr.po

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,10 +463,25 @@ msgid "Done"
463463
msgstr "Fait"
464464

465465
#. MSG_EXTRUDER_CORRECTION c=13
466-
#: ../../Firmware/messages.cpp:319 ../../Firmware/ultralcd.cpp:4014
466+
#: ../../Firmware/messages.cpp:320 ../../Firmware/ultralcd.cpp:4047
467467
msgid "E-correct"
468468
msgstr "Correct-E"
469469

470+
#. MSG_WAVE_ALGORITHM c=13
471+
#: ../../Firmware/messages.cpp:321
472+
msgid "Algorithm"
473+
msgstr "Algorithme"
474+
475+
#. MSG_ALGORITHM_DEFAULT c=13
476+
#: ../../Firmware/messages.cpp:322
477+
msgid "Default"
478+
msgstr "Defaut"
479+
480+
#. MSG_ALGORITHM_CONST_TQ c=13
481+
#: ../../Firmware/messages.cpp:323
482+
msgid "Const tq"
483+
msgstr "Couple cst"
484+
470485
#. MSG_PROGRESS_ERR_HELP_FIL c=20
471486
#: ../../Firmware/mmu2_progress_converter.cpp:19
472487
#: ../../Firmware/mmu2_progress_converter.cpp:48

0 commit comments

Comments
 (0)