Added support for delta tower angle corrections.
This commit is contained in:
parent
7c9e2e2a1a
commit
00b6b3da79
4 changed files with 48 additions and 15 deletions
|
@ -630,7 +630,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delta radius/rod trimmers
|
* Delta radius/rod trimmers/angle trimmers
|
||||||
*/
|
*/
|
||||||
#if ENABLED(DELTA)
|
#if ENABLED(DELTA)
|
||||||
#ifndef DELTA_RADIUS_TRIM_TOWER_1
|
#ifndef DELTA_RADIUS_TRIM_TOWER_1
|
||||||
|
@ -651,6 +651,15 @@
|
||||||
#ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER_3
|
#ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER_3
|
||||||
#define DELTA_DIAGONAL_ROD_TRIM_TOWER_3 0.0
|
#define DELTA_DIAGONAL_ROD_TRIM_TOWER_3 0.0
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef DELTA_TOWER_ANGLE_TRIM_1
|
||||||
|
#define DELTA_TOWER_ANGLE_TRIM_1 0.0
|
||||||
|
#endif
|
||||||
|
#ifndef DELTA_TOWER_ANGLE_TRIM_2
|
||||||
|
#define DELTA_TOWER_ANGLE_TRIM_2 0.0
|
||||||
|
#endif
|
||||||
|
#ifndef DELTA_TOWER_ANGLE_TRIM_3
|
||||||
|
#define DELTA_TOWER_ANGLE_TRIM_3 0.0
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -335,6 +335,9 @@ float code_value_temp_diff();
|
||||||
delta_diagonal_rod_trim_tower_1,
|
delta_diagonal_rod_trim_tower_1,
|
||||||
delta_diagonal_rod_trim_tower_2,
|
delta_diagonal_rod_trim_tower_2,
|
||||||
delta_diagonal_rod_trim_tower_3,
|
delta_diagonal_rod_trim_tower_3,
|
||||||
|
delta_tower_angle_trim_1,
|
||||||
|
delta_tower_angle_trim_2,
|
||||||
|
delta_tower_angle_trim_3,
|
||||||
delta_clip_start_height;
|
delta_clip_start_height;
|
||||||
void recalc_delta_settings(float radius, float diagonal_rod);
|
void recalc_delta_settings(float radius, float diagonal_rod);
|
||||||
#elif IS_SCARA
|
#elif IS_SCARA
|
||||||
|
|
30
Marlin/Marlin_main.cpp
Executable file → Normal file
30
Marlin/Marlin_main.cpp
Executable file → Normal file
|
@ -564,12 +564,15 @@ static uint8_t target_extruder;
|
||||||
|
|
||||||
// these are the default values, can be overriden with M665
|
// these are the default values, can be overriden with M665
|
||||||
float delta_radius = DELTA_RADIUS,
|
float delta_radius = DELTA_RADIUS,
|
||||||
delta_tower1_x = -SIN_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1), // front left tower
|
delta_tower_angle_trim_1 = DELTA_TOWER_ANGLE_TRIM_1,
|
||||||
delta_tower1_y = -COS_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1),
|
delta_tower_angle_trim_2 = DELTA_TOWER_ANGLE_TRIM_2,
|
||||||
delta_tower2_x = SIN_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2), // front right tower
|
delta_tower_angle_trim_3 = DELTA_TOWER_ANGLE_TRIM_3,
|
||||||
delta_tower2_y = -COS_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2),
|
delta_tower1_x = -sin( (60 - delta_tower_angle_trim_1) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1), // front left tower
|
||||||
delta_tower3_x = 0, // back middle tower
|
delta_tower1_y = -cos( (60 - delta_tower_angle_trim_1) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1),
|
||||||
delta_tower3_y = (delta_radius + DELTA_RADIUS_TRIM_TOWER_3),
|
delta_tower2_x = sin( (60 + delta_tower_angle_trim_2) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2), // front right tower
|
||||||
|
delta_tower2_y = -cos( (60 + delta_tower_angle_trim_2) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2),
|
||||||
|
delta_tower3_x = -sin( ( delta_tower_angle_trim_3) * PI/180), // back middle tower
|
||||||
|
delta_tower3_y = cos( ( delta_tower_angle_trim_3) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_3),
|
||||||
delta_diagonal_rod = DELTA_DIAGONAL_ROD,
|
delta_diagonal_rod = DELTA_DIAGONAL_ROD,
|
||||||
delta_diagonal_rod_trim_tower_1 = DELTA_DIAGONAL_ROD_TRIM_TOWER_1,
|
delta_diagonal_rod_trim_tower_1 = DELTA_DIAGONAL_ROD_TRIM_TOWER_1,
|
||||||
delta_diagonal_rod_trim_tower_2 = DELTA_DIAGONAL_ROD_TRIM_TOWER_2,
|
delta_diagonal_rod_trim_tower_2 = DELTA_DIAGONAL_ROD_TRIM_TOWER_2,
|
||||||
|
@ -6337,6 +6340,9 @@ inline void gcode_M205() {
|
||||||
if (code_seen('A')) delta_diagonal_rod_trim_tower_1 = code_value_linear_units();
|
if (code_seen('A')) delta_diagonal_rod_trim_tower_1 = code_value_linear_units();
|
||||||
if (code_seen('B')) delta_diagonal_rod_trim_tower_2 = code_value_linear_units();
|
if (code_seen('B')) delta_diagonal_rod_trim_tower_2 = code_value_linear_units();
|
||||||
if (code_seen('C')) delta_diagonal_rod_trim_tower_3 = code_value_linear_units();
|
if (code_seen('C')) delta_diagonal_rod_trim_tower_3 = code_value_linear_units();
|
||||||
|
if (code_seen('I')) delta_tower_angle_trim_1 = code_value_linear_units();
|
||||||
|
if (code_seen('J')) delta_tower_angle_trim_2 = code_value_linear_units();
|
||||||
|
if (code_seen('K')) delta_tower_angle_trim_3 = code_value_linear_units();
|
||||||
recalc_delta_settings(delta_radius, delta_diagonal_rod);
|
recalc_delta_settings(delta_radius, delta_diagonal_rod);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -9140,12 +9146,12 @@ void ok_to_send() {
|
||||||
* settings have been changed (e.g., by M665).
|
* settings have been changed (e.g., by M665).
|
||||||
*/
|
*/
|
||||||
void recalc_delta_settings(float radius, float diagonal_rod) {
|
void recalc_delta_settings(float radius, float diagonal_rod) {
|
||||||
delta_tower1_x = -SIN_60 * (radius + DELTA_RADIUS_TRIM_TOWER_1); // front left tower
|
delta_tower1_x = -sin( (60 - delta_tower_angle_trim_1) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1), // front left tower
|
||||||
delta_tower1_y = -COS_60 * (radius + DELTA_RADIUS_TRIM_TOWER_1);
|
delta_tower1_y = -cos( (60 - delta_tower_angle_trim_1) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1),
|
||||||
delta_tower2_x = SIN_60 * (radius + DELTA_RADIUS_TRIM_TOWER_2); // front right tower
|
delta_tower2_x = sin( (60 + delta_tower_angle_trim_2) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2), // front right tower
|
||||||
delta_tower2_y = -COS_60 * (radius + DELTA_RADIUS_TRIM_TOWER_2);
|
delta_tower2_y = -cos( (60 + delta_tower_angle_trim_2) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2),
|
||||||
delta_tower3_x = 0.0; // back middle tower
|
delta_tower3_x = -sin( ( delta_tower_angle_trim_3) * PI/180), // back middle tower
|
||||||
delta_tower3_y = (radius + DELTA_RADIUS_TRIM_TOWER_3);
|
delta_tower3_y = cos( ( delta_tower_angle_trim_3) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_3),
|
||||||
delta_diagonal_rod_2_tower_1 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_1);
|
delta_diagonal_rod_2_tower_1 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_1);
|
||||||
delta_diagonal_rod_2_tower_2 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_2);
|
delta_diagonal_rod_2_tower_2 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_2);
|
||||||
delta_diagonal_rod_2_tower_3 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_3);
|
delta_diagonal_rod_2_tower_3 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_3);
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
* 308 G29 L F bilinear_start (int x2)
|
* 308 G29 L F bilinear_start (int x2)
|
||||||
* 312 bed_level_grid[][] (float x9, up to float x256) +988
|
* 312 bed_level_grid[][] (float x9, up to float x256) +988
|
||||||
*
|
*
|
||||||
* DELTA (if deltabot): 36 bytes
|
* DELTA (if deltabot): 48 bytes
|
||||||
* 348 M666 XYZ endstop_adj (float x3)
|
* 348 M666 XYZ endstop_adj (float x3)
|
||||||
* 360 M665 R delta_radius (float)
|
* 360 M665 R delta_radius (float)
|
||||||
* 364 M665 L delta_diagonal_rod (float)
|
* 364 M665 L delta_diagonal_rod (float)
|
||||||
|
@ -92,6 +92,9 @@
|
||||||
* 372 M665 A delta_diagonal_rod_trim_tower_1 (float)
|
* 372 M665 A delta_diagonal_rod_trim_tower_1 (float)
|
||||||
* 376 M665 B delta_diagonal_rod_trim_tower_2 (float)
|
* 376 M665 B delta_diagonal_rod_trim_tower_2 (float)
|
||||||
* 380 M665 C delta_diagonal_rod_trim_tower_3 (float)
|
* 380 M665 C delta_diagonal_rod_trim_tower_3 (float)
|
||||||
|
* 384 M665 I delta_tower_angle_trim_1 (float)
|
||||||
|
* 388 M665 J delta_tower_angle_trim_2 (float)
|
||||||
|
* 392 M665 K delta_tower_angle_trim_3 (float)
|
||||||
*
|
*
|
||||||
* Z_DUAL_ENDSTOPS: 4 bytes
|
* Z_DUAL_ENDSTOPS: 4 bytes
|
||||||
* 384 M666 Z z_endstop_adj (float)
|
* 384 M666 Z z_endstop_adj (float)
|
||||||
|
@ -356,6 +359,9 @@ void Config_Postprocess() {
|
||||||
EEPROM_WRITE(delta_diagonal_rod_trim_tower_1); // 1 float
|
EEPROM_WRITE(delta_diagonal_rod_trim_tower_1); // 1 float
|
||||||
EEPROM_WRITE(delta_diagonal_rod_trim_tower_2); // 1 float
|
EEPROM_WRITE(delta_diagonal_rod_trim_tower_2); // 1 float
|
||||||
EEPROM_WRITE(delta_diagonal_rod_trim_tower_3); // 1 float
|
EEPROM_WRITE(delta_diagonal_rod_trim_tower_3); // 1 float
|
||||||
|
EEPROM_WRITE(delta_tower_angle_trim_1); // 1 float
|
||||||
|
EEPROM_WRITE(delta_tower_angle_trim_2); // 1 float
|
||||||
|
EEPROM_WRITE(delta_tower_angle_trim_3); // 1 float
|
||||||
#elif ENABLED(Z_DUAL_ENDSTOPS)
|
#elif ENABLED(Z_DUAL_ENDSTOPS)
|
||||||
EEPROM_WRITE(z_endstop_adj); // 1 float
|
EEPROM_WRITE(z_endstop_adj); // 1 float
|
||||||
dummy = 0.0f;
|
dummy = 0.0f;
|
||||||
|
@ -681,6 +687,9 @@ void Config_Postprocess() {
|
||||||
EEPROM_READ(delta_diagonal_rod_trim_tower_1); // 1 float
|
EEPROM_READ(delta_diagonal_rod_trim_tower_1); // 1 float
|
||||||
EEPROM_READ(delta_diagonal_rod_trim_tower_2); // 1 float
|
EEPROM_READ(delta_diagonal_rod_trim_tower_2); // 1 float
|
||||||
EEPROM_READ(delta_diagonal_rod_trim_tower_3); // 1 float
|
EEPROM_READ(delta_diagonal_rod_trim_tower_3); // 1 float
|
||||||
|
EEPROM_READ(delta_tower_angle_trim_1); // 1 float
|
||||||
|
EEPROM_READ(delta_tower_angle_trim_2); // 1 float
|
||||||
|
EEPROM_READ(delta_tower_angle_trim_3); // 1 float
|
||||||
#elif ENABLED(Z_DUAL_ENDSTOPS)
|
#elif ENABLED(Z_DUAL_ENDSTOPS)
|
||||||
EEPROM_READ(z_endstop_adj);
|
EEPROM_READ(z_endstop_adj);
|
||||||
dummy = 0.0f;
|
dummy = 0.0f;
|
||||||
|
@ -909,6 +918,9 @@ void Config_ResetDefault() {
|
||||||
delta_diagonal_rod_trim_tower_1 = DELTA_DIAGONAL_ROD_TRIM_TOWER_1;
|
delta_diagonal_rod_trim_tower_1 = DELTA_DIAGONAL_ROD_TRIM_TOWER_1;
|
||||||
delta_diagonal_rod_trim_tower_2 = DELTA_DIAGONAL_ROD_TRIM_TOWER_2;
|
delta_diagonal_rod_trim_tower_2 = DELTA_DIAGONAL_ROD_TRIM_TOWER_2;
|
||||||
delta_diagonal_rod_trim_tower_3 = DELTA_DIAGONAL_ROD_TRIM_TOWER_3;
|
delta_diagonal_rod_trim_tower_3 = DELTA_DIAGONAL_ROD_TRIM_TOWER_3;
|
||||||
|
delta_tower_angle_trim_1 = DELTA_TOWER_ANGLE_TRIM_1;
|
||||||
|
delta_tower_angle_trim_2 = DELTA_TOWER_ANGLE_TRIM_2;
|
||||||
|
delta_tower_angle_trim_3 = DELTA_TOWER_ANGLE_TRIM_3;
|
||||||
#elif ENABLED(Z_DUAL_ENDSTOPS)
|
#elif ENABLED(Z_DUAL_ENDSTOPS)
|
||||||
z_endstop_adj = 0;
|
z_endstop_adj = 0;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1179,7 +1191,7 @@ void Config_ResetDefault() {
|
||||||
SERIAL_EOL;
|
SERIAL_EOL;
|
||||||
CONFIG_ECHO_START;
|
CONFIG_ECHO_START;
|
||||||
if (!forReplay) {
|
if (!forReplay) {
|
||||||
SERIAL_ECHOLNPGM("Delta settings: L=diagonal_rod, R=radius, S=segments_per_second, ABC=diagonal_rod_trim_tower_[123]");
|
SERIAL_ECHOLNPGM("Delta settings: L=diagonal_rod, R=radius, S=segments_per_second, ABC=diagonal_rod_trim_tower_[123], IJK=tower_angle_trim[123]");
|
||||||
CONFIG_ECHO_START;
|
CONFIG_ECHO_START;
|
||||||
}
|
}
|
||||||
SERIAL_ECHOPAIR(" M665 L", delta_diagonal_rod);
|
SERIAL_ECHOPAIR(" M665 L", delta_diagonal_rod);
|
||||||
|
@ -1188,6 +1200,9 @@ void Config_ResetDefault() {
|
||||||
SERIAL_ECHOPAIR(" A", delta_diagonal_rod_trim_tower_1);
|
SERIAL_ECHOPAIR(" A", delta_diagonal_rod_trim_tower_1);
|
||||||
SERIAL_ECHOPAIR(" B", delta_diagonal_rod_trim_tower_2);
|
SERIAL_ECHOPAIR(" B", delta_diagonal_rod_trim_tower_2);
|
||||||
SERIAL_ECHOPAIR(" C", delta_diagonal_rod_trim_tower_3);
|
SERIAL_ECHOPAIR(" C", delta_diagonal_rod_trim_tower_3);
|
||||||
|
SERIAL_ECHOPAIR(" I", delta_tower_angle_trim_1);
|
||||||
|
SERIAL_ECHOPAIR(" J", delta_tower_angle_trim_2);
|
||||||
|
SERIAL_ECHOPAIR(" K", delta_tower_angle_trim_3);
|
||||||
SERIAL_EOL;
|
SERIAL_EOL;
|
||||||
#elif ENABLED(Z_DUAL_ENDSTOPS)
|
#elif ENABLED(Z_DUAL_ENDSTOPS)
|
||||||
CONFIG_ECHO_START;
|
CONFIG_ECHO_START;
|
||||||
|
|
Reference in a new issue