mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-27 13:56:24 +00:00
Tower angles
Adding '7-point' tower angle correction calibration
This commit is contained in:
parent
76ec7a0f80
commit
004928148c
@ -5021,7 +5021,9 @@ inline void gcode_G28() {
|
|||||||
|
|
||||||
float e_old[XYZ],
|
float e_old[XYZ],
|
||||||
dr_old = delta_radius,
|
dr_old = delta_radius,
|
||||||
zh_old = home_offset[Z_AXIS];
|
zh_old = home_offset[Z_AXIS],
|
||||||
|
alpha_old = delta_tower_angle_trim[A_AXIS],
|
||||||
|
beta_old = delta_tower_angle_trim[B_AXIS];
|
||||||
COPY(e_old,endstop_adj);
|
COPY(e_old,endstop_adj);
|
||||||
|
|
||||||
// print settings
|
// print settings
|
||||||
@ -5032,7 +5034,7 @@ inline void gcode_G28() {
|
|||||||
SERIAL_EOL;
|
SERIAL_EOL;
|
||||||
LCD_MESSAGEPGM("Checking... AC");
|
LCD_MESSAGEPGM("Checking... AC");
|
||||||
|
|
||||||
SERIAL_PROTOCOLPAIR("Height:", DELTA_HEIGHT + home_offset[Z_AXIS]);
|
SERIAL_PROTOCOLPAIR(".Height:", DELTA_HEIGHT + home_offset[Z_AXIS]);
|
||||||
if (abs(probe_points) > 1) {
|
if (abs(probe_points) > 1) {
|
||||||
SERIAL_PROTOCOLPGM(" Ex:");
|
SERIAL_PROTOCOLPGM(" Ex:");
|
||||||
if (endstop_adj[A_AXIS] >= 0) SERIAL_CHAR('+');
|
if (endstop_adj[A_AXIS] >= 0) SERIAL_CHAR('+');
|
||||||
@ -5046,6 +5048,16 @@ inline void gcode_G28() {
|
|||||||
SERIAL_PROTOCOLPAIR(" Radius:", delta_radius);
|
SERIAL_PROTOCOLPAIR(" Radius:", delta_radius);
|
||||||
}
|
}
|
||||||
SERIAL_EOL;
|
SERIAL_EOL;
|
||||||
|
if (probe_points > 2) {
|
||||||
|
SERIAL_PROTOCOLPGM(".Tower angle : Tx:");
|
||||||
|
if (delta_tower_angle_trim[A_AXIS] >= 0) SERIAL_CHAR('+');
|
||||||
|
SERIAL_PROTOCOL_F(delta_tower_angle_trim[A_AXIS], 2);
|
||||||
|
SERIAL_PROTOCOLPGM(" Ty:");
|
||||||
|
if (delta_tower_angle_trim[B_AXIS] >= 0) SERIAL_CHAR('+');
|
||||||
|
SERIAL_PROTOCOL_F(delta_tower_angle_trim[B_AXIS], 2);
|
||||||
|
SERIAL_PROTOCOLPGM(" Tz:+0.00");
|
||||||
|
SERIAL_EOL;
|
||||||
|
}
|
||||||
|
|
||||||
#if ENABLED(Z_PROBE_SLED)
|
#if ENABLED(Z_PROBE_SLED)
|
||||||
DEPLOY_PROBE();
|
DEPLOY_PROBE();
|
||||||
@ -5121,11 +5133,15 @@ inline void gcode_G28() {
|
|||||||
COPY(e_old, endstop_adj);
|
COPY(e_old, endstop_adj);
|
||||||
dr_old = delta_radius;
|
dr_old = delta_radius;
|
||||||
zh_old = home_offset[Z_AXIS];
|
zh_old = home_offset[Z_AXIS];
|
||||||
|
alpha_old = delta_tower_angle_trim[A_AXIS];
|
||||||
|
beta_old = delta_tower_angle_trim[B_AXIS];
|
||||||
|
|
||||||
float e_delta[XYZ] = { 0.0 }, r_delta = 0.0;
|
float e_delta[XYZ] = { 0.0 }, r_delta = 0.0,
|
||||||
|
t_alpha = 0.0, t_beta = 0.0;
|
||||||
const float r_diff = delta_radius - delta_calibration_radius,
|
const float r_diff = delta_radius - delta_calibration_radius,
|
||||||
h_factor = 1.00 + r_diff * 0.001,
|
h_factor = 1.00 + r_diff * 0.001,
|
||||||
r_factor = -(1.75 + 0.005 * r_diff + 0.001 * sq(r_diff)); //2.25 for r_diff = 20mm
|
r_factor = -(1.75 + 0.005 * r_diff + 0.001 * sq(r_diff)), //2.25 for r_diff = 20mm
|
||||||
|
a_factor = 100.0 / delta_calibration_radius;
|
||||||
|
|
||||||
#define ZP(N,I) ((N) * z_at_pt[I])
|
#define ZP(N,I) ((N) * z_at_pt[I])
|
||||||
#define Z1000(I) ZP(1.00, I)
|
#define Z1000(I) ZP(1.00, I)
|
||||||
@ -5136,6 +5152,8 @@ inline void gcode_G28() {
|
|||||||
#define Z2250(I) ZP(r_factor, I)
|
#define Z2250(I) ZP(r_factor, I)
|
||||||
#define Z0750(I) ZP(r_factor / 3.00, I)
|
#define Z0750(I) ZP(r_factor / 3.00, I)
|
||||||
#define Z0375(I) ZP(r_factor / 6.00, I)
|
#define Z0375(I) ZP(r_factor / 6.00, I)
|
||||||
|
#define Z0444(I) ZP(a_factor * 4.0 / 9.0, I)
|
||||||
|
#define Z0888(I) ZP(a_factor * 8.0 / 9.0, I)
|
||||||
|
|
||||||
switch (probe_points) {
|
switch (probe_points) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -5151,10 +5169,10 @@ inline void gcode_G28() {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case -2:
|
case -2:
|
||||||
e_delta[X_AXIS] = Z1050(0) - Z0700(7) + Z0350(11) + Z0350(3);
|
e_delta[X_AXIS] = Z1050(0) - Z0700(7) + Z0350(11) + Z0350(3);
|
||||||
e_delta[Y_AXIS] = Z1050(0) + Z0350(7) - Z0700(11) + Z0350(3);
|
e_delta[Y_AXIS] = Z1050(0) + Z0350(7) - Z0700(11) + Z0350(3);
|
||||||
e_delta[Z_AXIS] = Z1050(0) + Z0350(7) + Z0350(11) - Z0700(3);
|
e_delta[Z_AXIS] = Z1050(0) + Z0350(7) + Z0350(11) - Z0700(3);
|
||||||
r_delta = Z2250(0) - Z0750(7) - Z0750(11) - Z0750(3);
|
r_delta = Z2250(0) - Z0750(7) - Z0750(11) - Z0750(3);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -5162,6 +5180,8 @@ inline void gcode_G28() {
|
|||||||
e_delta[Y_AXIS] = Z1050(0) - Z0175(1) + Z0350(5) - Z0175(9) + Z0175(7) - Z0350(11) + Z0175(3);
|
e_delta[Y_AXIS] = Z1050(0) - Z0175(1) + Z0350(5) - Z0175(9) + Z0175(7) - Z0350(11) + Z0175(3);
|
||||||
e_delta[Z_AXIS] = Z1050(0) - Z0175(1) - Z0175(5) + Z0350(9) + Z0175(7) + Z0175(11) - Z0350(3);
|
e_delta[Z_AXIS] = Z1050(0) - Z0175(1) - Z0175(5) + Z0350(9) + Z0175(7) + Z0175(11) - Z0350(3);
|
||||||
r_delta = Z2250(0) - Z0375(1) - Z0375(5) - Z0375(9) - Z0375(7) - Z0375(11) - Z0375(3);
|
r_delta = Z2250(0) - Z0375(1) - Z0375(5) - Z0375(9) - Z0375(7) - Z0375(11) - Z0375(3);
|
||||||
|
t_alpha = + Z0444(1) - Z0888(5) + Z0444(9) + Z0444(7) - Z0888(11) + Z0444(3);
|
||||||
|
t_beta = - Z0888(1) + Z0444(5) + Z0444(9) - Z0888(7) + Z0444(11) + Z0444(3);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5173,6 +5193,9 @@ inline void gcode_G28() {
|
|||||||
home_offset[Z_AXIS] -= z_temp;
|
home_offset[Z_AXIS] -= z_temp;
|
||||||
LOOP_XYZ(i) endstop_adj[i] -= z_temp;
|
LOOP_XYZ(i) endstop_adj[i] -= z_temp;
|
||||||
|
|
||||||
|
delta_tower_angle_trim[A_AXIS] += t_alpha;
|
||||||
|
delta_tower_angle_trim[B_AXIS] -= t_beta;
|
||||||
|
|
||||||
recalc_delta_settings(delta_radius, delta_diagonal_rod);
|
recalc_delta_settings(delta_radius, delta_diagonal_rod);
|
||||||
}
|
}
|
||||||
else { // !iterate
|
else { // !iterate
|
||||||
@ -5180,6 +5203,8 @@ inline void gcode_G28() {
|
|||||||
COPY(endstop_adj, e_old);
|
COPY(endstop_adj, e_old);
|
||||||
delta_radius = dr_old;
|
delta_radius = dr_old;
|
||||||
home_offset[Z_AXIS] = zh_old;
|
home_offset[Z_AXIS] = zh_old;
|
||||||
|
delta_tower_angle_trim[A_AXIS] = alpha_old;
|
||||||
|
delta_tower_angle_trim[B_AXIS] = beta_old;
|
||||||
|
|
||||||
recalc_delta_settings(delta_radius, delta_diagonal_rod);
|
recalc_delta_settings(delta_radius, delta_diagonal_rod);
|
||||||
}
|
}
|
||||||
@ -5219,7 +5244,7 @@ inline void gcode_G28() {
|
|||||||
if (test_precision != 0.0) { // !forced end
|
if (test_precision != 0.0) { // !forced end
|
||||||
if (zero_std_dev >= test_precision) { // end iterations
|
if (zero_std_dev >= test_precision) { // end iterations
|
||||||
SERIAL_PROTOCOLPGM("Calibration OK");
|
SERIAL_PROTOCOLPGM("Calibration OK");
|
||||||
SERIAL_PROTOCOLLNPGM(" rolling back 1");
|
SERIAL_PROTOCOLLNPGM(" rolling back.");
|
||||||
LCD_MESSAGEPGM("Calibration OK");
|
LCD_MESSAGEPGM("Calibration OK");
|
||||||
SERIAL_EOL;
|
SERIAL_EOL;
|
||||||
}
|
}
|
||||||
@ -5228,12 +5253,12 @@ inline void gcode_G28() {
|
|||||||
if (iterations < 31)
|
if (iterations < 31)
|
||||||
sprintf_P(mess, PSTR("Iteration : %02i"), (int)iterations);
|
sprintf_P(mess, PSTR("Iteration : %02i"), (int)iterations);
|
||||||
SERIAL_PROTOCOL(mess);
|
SERIAL_PROTOCOL(mess);
|
||||||
SERIAL_PROTOCOLPGM(" std dev:");
|
SERIAL_PROTOCOLPGM(" std dev:");
|
||||||
SERIAL_PROTOCOL_F(zero_std_dev, 3);
|
SERIAL_PROTOCOL_F(zero_std_dev, 3);
|
||||||
SERIAL_EOL;
|
SERIAL_EOL;
|
||||||
lcd_setstatus(mess);
|
lcd_setstatus(mess);
|
||||||
}
|
}
|
||||||
SERIAL_PROTOCOLPAIR("Height:", DELTA_HEIGHT + home_offset[Z_AXIS]);
|
SERIAL_PROTOCOLPAIR(".Height:", DELTA_HEIGHT + home_offset[Z_AXIS]);
|
||||||
if (abs(probe_points) > 1) {
|
if (abs(probe_points) > 1) {
|
||||||
SERIAL_PROTOCOLPGM(" Ex:");
|
SERIAL_PROTOCOLPGM(" Ex:");
|
||||||
if (endstop_adj[A_AXIS] >= 0) SERIAL_CHAR('+');
|
if (endstop_adj[A_AXIS] >= 0) SERIAL_CHAR('+');
|
||||||
@ -5247,6 +5272,16 @@ inline void gcode_G28() {
|
|||||||
SERIAL_PROTOCOLPAIR(" Radius:", delta_radius);
|
SERIAL_PROTOCOLPAIR(" Radius:", delta_radius);
|
||||||
}
|
}
|
||||||
SERIAL_EOL;
|
SERIAL_EOL;
|
||||||
|
if (probe_points > 2) {
|
||||||
|
SERIAL_PROTOCOLPGM(".Tower angle : Tx:");
|
||||||
|
if (delta_tower_angle_trim[A_AXIS] >= 0) SERIAL_CHAR('+');
|
||||||
|
SERIAL_PROTOCOL_F(delta_tower_angle_trim[A_AXIS], 2);
|
||||||
|
SERIAL_PROTOCOLPGM(" Ty:");
|
||||||
|
if (delta_tower_angle_trim[B_AXIS] >= 0) SERIAL_CHAR('+');
|
||||||
|
SERIAL_PROTOCOL_F(delta_tower_angle_trim[B_AXIS], 2);
|
||||||
|
SERIAL_PROTOCOLPGM(" Tz:+0.00");
|
||||||
|
SERIAL_EOL;
|
||||||
|
}
|
||||||
if (zero_std_dev >= test_precision)
|
if (zero_std_dev >= test_precision)
|
||||||
SERIAL_PROTOCOLLNPGM("save with M500 and/or copy to configuration.h");
|
SERIAL_PROTOCOLLNPGM("save with M500 and/or copy to configuration.h");
|
||||||
}
|
}
|
||||||
|
@ -1477,7 +1477,7 @@ void MarlinSettings::reset() {
|
|||||||
SERIAL_ECHOPAIR(" R", LINEAR_UNIT(delta_radius));
|
SERIAL_ECHOPAIR(" R", LINEAR_UNIT(delta_radius));
|
||||||
SERIAL_ECHOPAIR(" H", LINEAR_UNIT(DELTA_HEIGHT + home_offset[Z_AXIS]));
|
SERIAL_ECHOPAIR(" H", LINEAR_UNIT(DELTA_HEIGHT + home_offset[Z_AXIS]));
|
||||||
SERIAL_ECHOPAIR(" S", delta_segments_per_second);
|
SERIAL_ECHOPAIR(" S", delta_segments_per_second);
|
||||||
SERIAL_ECHOPAIR(" B", LINEAR_UNIT(delta_calibration_radius);
|
SERIAL_ECHOPAIR(" B", LINEAR_UNIT(delta_calibration_radius));
|
||||||
SERIAL_ECHOPAIR(" X", LINEAR_UNIT(delta_tower_angle_trim[A_AXIS]));
|
SERIAL_ECHOPAIR(" X", LINEAR_UNIT(delta_tower_angle_trim[A_AXIS]));
|
||||||
SERIAL_ECHOPAIR(" Y", LINEAR_UNIT(delta_tower_angle_trim[B_AXIS]));
|
SERIAL_ECHOPAIR(" Y", LINEAR_UNIT(delta_tower_angle_trim[B_AXIS]));
|
||||||
SERIAL_ECHOPAIR(" Z", 0.00);
|
SERIAL_ECHOPAIR(" Z", 0.00);
|
||||||
|
Loading…
Reference in New Issue
Block a user