1
0
mirror of https://github.com/MarlinFirmware/Marlin.git synced 2024-11-23 12:04:19 +00:00

Add float suffix in G33

This commit is contained in:
Scott Lahteine 2019-09-17 23:10:19 -05:00
parent c353eaa146
commit b71a755a30

View File

@ -179,10 +179,10 @@ static float std_dev_points(float z_pt[NPP + 1], const bool _0p_cal, const bool
S2 += sq(z_pt[rad]); S2 += sq(z_pt[rad]);
N++; N++;
} }
return LROUND(SQRT(S2 / N) * 1000.0) / 1000.0 + 0.00001; return LROUND(SQRT(S2 / N) * 1000.0f) / 1000.0f + 0.00001f;
} }
} }
return 0.00001; return 0.00001f;
} }
/** /**
@ -218,7 +218,7 @@ static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_poi
_7p_6_center = probe_points >= 5 && probe_points <= 7, _7p_6_center = probe_points >= 5 && probe_points <= 7,
_7p_9_center = probe_points >= 8; _7p_9_center = probe_points >= 8;
LOOP_CAL_ALL(rad) z_pt[rad] = 0.0; LOOP_CAL_ALL(rad) z_pt[rad] = 0.0f;
if (!_0p_calibration) { if (!_0p_calibration) {
@ -228,8 +228,8 @@ static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_poi
} }
if (_7p_calibration) { // probe extra center points if (_7p_calibration) { // probe extra center points
const float start = _7p_9_center ? float(_CA) + _7P_STEP / 3.0 : _7p_6_center ? float(_CA) : float(__C), const float start = _7p_9_center ? float(_CA) + _7P_STEP / 3.0f : _7p_6_center ? float(_CA) : float(__C),
steps = _7p_9_center ? _4P_STEP / 3.0 : _7p_6_center ? _7P_STEP : _4P_STEP; steps = _7p_9_center ? _4P_STEP / 3.0f : _7p_6_center ? _7P_STEP : _4P_STEP;
I_LOOP_CAL_PT(rad, start, steps) { I_LOOP_CAL_PT(rad, start, steps) {
const float a = RADIANS(210 + (360 / NPP) * (rad - 1)), const float a = RADIANS(210 + (360 / NPP) * (rad - 1)),
r = delta_calibration_radius * 0.1; r = delta_calibration_radius * 0.1;
@ -241,13 +241,13 @@ static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_poi
if (!_1p_calibration) { // probe the radius if (!_1p_calibration) { // probe the radius
const CalEnum start = _4p_opposite_points ? _AB : __A; const CalEnum start = _4p_opposite_points ? _AB : __A;
const float steps = _7p_14_intermediates ? _7P_STEP / 15.0 : // 15r * 6 + 10c = 100 const float steps = _7p_14_intermediates ? _7P_STEP / 15.0f : // 15r * 6 + 10c = 100
_7p_11_intermediates ? _7P_STEP / 12.0 : // 12r * 6 + 9c = 81 _7p_11_intermediates ? _7P_STEP / 12.0f : // 12r * 6 + 9c = 81
_7p_8_intermediates ? _7P_STEP / 9.0 : // 9r * 6 + 10c = 64 _7p_8_intermediates ? _7P_STEP / 9.0f : // 9r * 6 + 10c = 64
_7p_6_intermediates ? _7P_STEP / 7.0 : // 7r * 6 + 7c = 49 _7p_6_intermediates ? _7P_STEP / 7.0f : // 7r * 6 + 7c = 49
_7p_4_intermediates ? _7P_STEP / 5.0 : // 5r * 6 + 6c = 36 _7p_4_intermediates ? _7P_STEP / 5.0f : // 5r * 6 + 6c = 36
_7p_2_intermediates ? _7P_STEP / 3.0 : // 3r * 6 + 7c = 25 _7p_2_intermediates ? _7P_STEP / 3.0f : // 3r * 6 + 7c = 25
_7p_1_intermediates ? _7P_STEP / 2.0 : // 2r * 6 + 4c = 16 _7p_1_intermediates ? _7P_STEP / 2.0f : // 2r * 6 + 4c = 16
_7p_no_intermediates ? _7P_STEP : // 1r * 6 + 3c = 9 _7p_no_intermediates ? _7P_STEP : // 1r * 6 + 3c = 9
_4P_STEP; // .5r * 6 + 1c = 4 _4P_STEP; // .5r * 6 + 1c = 4
bool zig_zag = true; bool zig_zag = true;
@ -269,7 +269,7 @@ static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_poi
LOOP_CAL_RAD(rad) LOOP_CAL_RAD(rad)
z_pt[rad] /= _7P_STEP / steps; z_pt[rad] /= _7P_STEP / steps;
do_blocking_move_to_xy(0.0, 0.0); do_blocking_move_to_xy(0.0f, 0.0f);
} }
} }
return true; return true;
@ -286,7 +286,7 @@ static void reverse_kinematics_probe_points(float z_pt[NPP + 1], float mm_at_pt_
LOOP_CAL_ALL(rad) { LOOP_CAL_ALL(rad) {
const float a = RADIANS(210 + (360 / NPP) * (rad - 1)), const float a = RADIANS(210 + (360 / NPP) * (rad - 1)),
r = (rad == CEN ? 0.0 : delta_calibration_radius); r = (rad == CEN ? 0.0f : delta_calibration_radius);
pos[X_AXIS] = cos(a) * r; pos[X_AXIS] = cos(a) * r;
pos[Y_AXIS] = sin(a) * r; pos[Y_AXIS] = sin(a) * r;
pos[Z_AXIS] = z_pt[rad]; pos[Z_AXIS] = z_pt[rad];
@ -298,7 +298,7 @@ static void reverse_kinematics_probe_points(float z_pt[NPP + 1], float mm_at_pt_
static void forward_kinematics_probe_points(float mm_at_pt_axis[NPP + 1][ABC], float z_pt[NPP + 1]) { static void forward_kinematics_probe_points(float mm_at_pt_axis[NPP + 1][ABC], float z_pt[NPP + 1]) {
const float r_quot = delta_calibration_radius / delta_radius; const float r_quot = delta_calibration_radius / delta_radius;
#define ZPP(N,I,A) ((1 / 3.0 + r_quot * (N) / 3.0 ) * mm_at_pt_axis[I][A]) #define ZPP(N,I,A) ((1 / 3.0f + r_quot * (N) / 3.0f ) * mm_at_pt_axis[I][A])
#define Z00(I, A) ZPP( 0, I, A) #define Z00(I, A) ZPP( 0, I, A)
#define Zp1(I, A) ZPP(+1, I, A) #define Zp1(I, A) ZPP(+1, I, A)
#define Zm1(I, A) ZPP(-1, I, A) #define Zm1(I, A) ZPP(-1, I, A)
@ -339,45 +339,45 @@ static void calc_kinematics_diff_probe_points(float z_pt[NPP + 1], float delta_e
static float auto_tune_h() { static float auto_tune_h() {
const float r_quot = delta_calibration_radius / delta_radius; const float r_quot = delta_calibration_radius / delta_radius;
float h_fac = 0.0; float h_fac = 0.0f;
h_fac = r_quot / (2.0 / 3.0); h_fac = r_quot / (2.0f / 3.0f);
h_fac = 1.0f / h_fac; // (2/3)/CR h_fac = 1.0f / h_fac; // (2/3)/CR
return h_fac; return h_fac;
} }
static float auto_tune_r() { static float auto_tune_r() {
const float diff = 0.01; const float diff = 0.01f;
float r_fac = 0.0, float r_fac = 0.0f,
z_pt[NPP + 1] = { 0.0 }, z_pt[NPP + 1] = { 0.0f },
delta_e[ABC] = {0.0}, delta_e[ABC] = { 0.0f },
delta_r = {0.0}, delta_r = { 0.0f },
delta_t[ABC] = {0.0}; delta_t[ABC] = { 0.0f };
delta_r = diff; delta_r = diff;
calc_kinematics_diff_probe_points(z_pt, delta_e, delta_r, delta_t); calc_kinematics_diff_probe_points(z_pt, delta_e, delta_r, delta_t);
r_fac = -(z_pt[__A] + z_pt[__B] + z_pt[__C] + z_pt[_BC] + z_pt[_CA] + z_pt[_AB]) / 6.0; r_fac = -(z_pt[__A] + z_pt[__B] + z_pt[__C] + z_pt[_BC] + z_pt[_CA] + z_pt[_AB]) / 6.0f;
r_fac = diff / r_fac / 3.0; // 1/(3*delta_Z) r_fac = diff / r_fac / 3.0f; // 1/(3*delta_Z)
return r_fac; return r_fac;
} }
static float auto_tune_a() { static float auto_tune_a() {
const float diff = 0.01; const float diff = 0.01f;
float a_fac = 0.0, float a_fac = 0.0f,
z_pt[NPP + 1] = { 0.0 }, z_pt[NPP + 1] = { 0.0f },
delta_e[ABC] = {0.0}, delta_e[ABC] = { 0.0f },
delta_r = {0.0}, delta_r = { 0.0f },
delta_t[ABC] = {0.0}; delta_t[ABC] = { 0.0f };
ZERO(delta_t); ZERO(delta_t);
LOOP_XYZ(axis) { LOOP_XYZ(axis) {
delta_t[axis] = diff; delta_t[axis] = diff;
calc_kinematics_diff_probe_points(z_pt, delta_e, delta_r, delta_t); calc_kinematics_diff_probe_points(z_pt, delta_e, delta_r, delta_t);
delta_t[axis] = 0; delta_t[axis] = 0;
a_fac += z_pt[uint8_t((axis * _4P_STEP) - _7P_STEP + NPP) % NPP + 1] / 6.0; a_fac += z_pt[uint8_t((axis * _4P_STEP) - _7P_STEP + NPP) % NPP + 1] / 6.0f;
a_fac -= z_pt[uint8_t((axis * _4P_STEP) + 1 + _7P_STEP)] / 6.0; a_fac -= z_pt[uint8_t((axis * _4P_STEP) + 1 + _7P_STEP)] / 6.0f;
} }
a_fac = diff / a_fac / 3.0; // 1/(3*delta_Z) a_fac = diff / a_fac / 3.0f; // 1/(3*delta_Z)
return a_fac; return a_fac;
} }
@ -418,7 +418,7 @@ void GcodeSuite::G33() {
const bool towers_set = !parser.seen('T'); const bool towers_set = !parser.seen('T');
const float calibration_precision = parser.floatval('C', 0.0); const float calibration_precision = parser.floatval('C', 0.0f);
if (calibration_precision < 0) { if (calibration_precision < 0) {
SERIAL_ECHOLNPGM("?(C)alibration precision implausible (>=0)."); SERIAL_ECHOLNPGM("?(C)alibration precision implausible (>=0).");
return; return;
@ -450,7 +450,7 @@ void GcodeSuite::G33() {
static const char save_message[] PROGMEM = "Save with M500 and/or copy to Configuration.h"; static const char save_message[] PROGMEM = "Save with M500 and/or copy to Configuration.h";
int8_t iterations = 0; int8_t iterations = 0;
float test_precision, float test_precision,
zero_std_dev = (verbose_level ? 999.0 : 0.0), // 0.0 in dry-run mode : forced end zero_std_dev = (verbose_level ? 999.0f : 0.0f), // 0.0 in dry-run mode : forced end
zero_std_dev_min = zero_std_dev, zero_std_dev_min = zero_std_dev,
zero_std_dev_old = zero_std_dev, zero_std_dev_old = zero_std_dev,
h_factor, h_factor,
@ -497,9 +497,9 @@ void GcodeSuite::G33() {
do { // start iterations do { // start iterations
float z_at_pt[NPP + 1] = { 0.0 }; float z_at_pt[NPP + 1] = { 0.0f };
test_precision = zero_std_dev_old != 999.0 ? (zero_std_dev + zero_std_dev_old) / 2 : zero_std_dev; test_precision = zero_std_dev_old != 999.0f ? (zero_std_dev + zero_std_dev_old) / 2.0f : zero_std_dev;
iterations++; iterations++;
// Probe the points // Probe the points
@ -515,7 +515,7 @@ void GcodeSuite::G33() {
if ((zero_std_dev < test_precision || iterations <= force_iterations) && zero_std_dev > calibration_precision) { if ((zero_std_dev < test_precision || iterations <= force_iterations) && zero_std_dev > calibration_precision) {
#if !HAS_BED_PROBE #if !HAS_BED_PROBE
test_precision = 0.00; // forced end test_precision = 0.0f; // forced end
#endif #endif
if (zero_std_dev < zero_std_dev_min) { if (zero_std_dev < zero_std_dev_min) {
@ -526,9 +526,9 @@ void GcodeSuite::G33() {
COPY(a_old, delta_tower_angle_trim); COPY(a_old, delta_tower_angle_trim);
} }
float e_delta[ABC] = { 0.0 }, float e_delta[ABC] = { 0.0f },
r_delta = 0.0, r_delta = 0.0f,
t_delta[ABC] = { 0.0 }; t_delta[ABC] = { 0.0f };
/** /**
* convergence matrices: * convergence matrices:
@ -536,7 +536,7 @@ void GcodeSuite::G33() {
* - definition of the matrix scaling parameters * - definition of the matrix scaling parameters
* - matrices for 4 and 7 point calibration * - matrices for 4 and 7 point calibration
*/ */
#define ZP(N,I) ((N) * z_at_pt[I] / 4.0) // 4.0 = divider to normalize to integers #define ZP(N,I) ((N) * z_at_pt[I] / 4.0f) // 4.0 = divider to normalize to integers
#define Z12(I) ZP(12, I) #define Z12(I) ZP(12, I)
#define Z4(I) ZP(4, I) #define Z4(I) ZP(4, I)
#define Z2(I) ZP(2, I) #define Z2(I) ZP(2, I)
@ -545,7 +545,7 @@ void GcodeSuite::G33() {
// calculate factors // calculate factors
const float cr_old = delta_calibration_radius; const float cr_old = delta_calibration_radius;
if (_7p_9_center) delta_calibration_radius *= 0.9; if (_7p_9_center) delta_calibration_radius *= 0.9f;
h_factor = auto_tune_h(); h_factor = auto_tune_h();
r_factor = auto_tune_r(); r_factor = auto_tune_r();
a_factor = auto_tune_a(); a_factor = auto_tune_a();
@ -553,11 +553,11 @@ void GcodeSuite::G33() {
switch (probe_points) { switch (probe_points) {
case 0: case 0:
test_precision = 0.00; // forced end test_precision = 0.0f; // forced end
break; break;
case 1: case 1:
test_precision = 0.00; // forced end test_precision = 0.0f; // forced end
LOOP_XYZ(axis) e_delta[axis] = +Z4(CEN); LOOP_XYZ(axis) e_delta[axis] = +Z4(CEN);
break; break;
@ -605,9 +605,9 @@ void GcodeSuite::G33() {
// Normalize angles to least-squares // Normalize angles to least-squares
if (_angle_results) { if (_angle_results) {
float a_sum = 0.0; float a_sum = 0.0f;
LOOP_XYZ(axis) a_sum += delta_tower_angle_trim[axis]; LOOP_XYZ(axis) a_sum += delta_tower_angle_trim[axis];
LOOP_XYZ(axis) delta_tower_angle_trim[axis] -= a_sum / 3.0; LOOP_XYZ(axis) delta_tower_angle_trim[axis] -= a_sum / 3.0f;
} }
// adjust delta_height and endstops by the max amount // adjust delta_height and endstops by the max amount
@ -639,7 +639,7 @@ void GcodeSuite::G33() {
char mess[21]; char mess[21];
strcpy_P(mess, PSTR("Calibration sd:")); strcpy_P(mess, PSTR("Calibration sd:"));
if (zero_std_dev_min < 1) if (zero_std_dev_min < 1)
sprintf_P(&mess[15], PSTR("0.%03i"), (int)LROUND(zero_std_dev_min * 1000.0)); sprintf_P(&mess[15], PSTR("0.%03i"), (int)LROUND(zero_std_dev_min * 1000.0f));
else else
sprintf_P(&mess[15], PSTR("%03i.x"), (int)LROUND(zero_std_dev_min)); sprintf_P(&mess[15], PSTR("%03i.x"), (int)LROUND(zero_std_dev_min));
ui.set_status(mess); ui.set_status(mess);
@ -671,7 +671,7 @@ void GcodeSuite::G33() {
strcpy_P(mess, enddryrun); strcpy_P(mess, enddryrun);
strcpy_P(&mess[11], PSTR(" sd:")); strcpy_P(&mess[11], PSTR(" sd:"));
if (zero_std_dev < 1) if (zero_std_dev < 1)
sprintf_P(&mess[15], PSTR("0.%03i"), (int)LROUND(zero_std_dev * 1000.0)); sprintf_P(&mess[15], PSTR("0.%03i"), (int)LROUND(zero_std_dev * 1000.0f));
else else
sprintf_P(&mess[15], PSTR("%03i.x"), (int)LROUND(zero_std_dev)); sprintf_P(&mess[15], PSTR("%03i.x"), (int)LROUND(zero_std_dev));
ui.set_status(mess); ui.set_status(mess);