home.c: adaptive homing feedrates for all axes.

This commit is contained in:
Markus Hitter 2014-05-25 18:55:31 +02:00
parent a7adc66ae5
commit dc84e4dfe0
1 changed files with 38 additions and 50 deletions

88
home.c
View File

@ -44,6 +44,14 @@
#define SEARCH_FAST_X (uint32_t)((double)60. * \ #define SEARCH_FAST_X (uint32_t)((double)60. * \
sqrt((double)2 * ACCELERATION * ENDSTOP_CLEARANCE_X / 1000.)) sqrt((double)2 * ACCELERATION * ENDSTOP_CLEARANCE_X / 1000.))
#endif #endif
#ifdef ENDSTOP_CLEARANCE_Y
#define SEARCH_FAST_Y (uint32_t)((double)60. * \
sqrt((double)2 * ACCELERATION * ENDSTOP_CLEARANCE_Y / 1000.))
#endif
#ifdef ENDSTOP_CLEARANCE_Z
#define SEARCH_FAST_Z (uint32_t)((double)60. * \
sqrt((double)2 * ACCELERATION * ENDSTOP_CLEARANCE_Z / 1000.))
#endif
/// home all 3 axes /// home all 3 axes
@ -106,21 +114,17 @@ void home_x_positive() {
TARGET t = startpoint; TARGET t = startpoint;
t.X = +1000000; t.X = +1000000;
#ifdef SLOW_HOMING if (SEARCH_FAST_X > SEARCH_FEEDRATE_X)
// hit home soft t.F = SEARCH_FAST_X;
t.F = SEARCH_FEEDRATE_X; else
#else t.F = SEARCH_FEEDRATE_X;
// hit home hard
t.F = MAXIMUM_FEEDRATE_X;
#endif
enqueue_home(&t, 0x1, 1); enqueue_home(&t, 0x1, 1);
#ifndef SLOW_HOMING if (SEARCH_FAST_X > SEARCH_FEEDRATE_X) {
// back off slowly
t.X = -1000000; t.X = -1000000;
t.F = SEARCH_FEEDRATE_X; t.F = SEARCH_FEEDRATE_X;
enqueue_home(&t, 0x1, 0); enqueue_home(&t, 0x1, 0);
#endif }
// set X home // set X home
queue_wait(); queue_wait();
@ -140,21 +144,17 @@ void home_y_negative() {
TARGET t = startpoint; TARGET t = startpoint;
t.Y = -1000000; t.Y = -1000000;
#ifdef SLOW_HOMING if (SEARCH_FAST_Y > SEARCH_FEEDRATE_Y)
// hit home soft t.F = SEARCH_FAST_Y;
t.F = SEARCH_FEEDRATE_Y; else
#else t.F = SEARCH_FEEDRATE_Y;
// hit home hard
t.F = MAXIMUM_FEEDRATE_Y;
#endif
enqueue_home(&t, 0x2, 1); enqueue_home(&t, 0x2, 1);
#ifndef SLOW_HOMING if (SEARCH_FAST_Y > SEARCH_FEEDRATE_Y) {
// back off slowly
t.Y = +1000000; t.Y = +1000000;
t.F = SEARCH_FEEDRATE_Y; t.F = SEARCH_FEEDRATE_Y;
enqueue_home(&t, 0x2, 0); enqueue_home(&t, 0x2, 0);
#endif }
// set Y home // set Y home
queue_wait(); queue_wait();
@ -176,21 +176,17 @@ void home_y_positive() {
TARGET t = startpoint; TARGET t = startpoint;
t.Y = +1000000; t.Y = +1000000;
#ifdef SLOW_HOMING if (SEARCH_FAST_Y > SEARCH_FEEDRATE_Y)
// hit home soft t.F = SEARCH_FAST_Y;
t.F = SEARCH_FEEDRATE_Y; else
#else t.F = SEARCH_FEEDRATE_Y;
// hit home hard
t.F = MAXIMUM_FEEDRATE_Y;
#endif
enqueue_home(&t, 0x2, 1); enqueue_home(&t, 0x2, 1);
#ifndef SLOW_HOMING if (SEARCH_FAST_Y > SEARCH_FEEDRATE_Y) {
// back off slowly
t.Y = -1000000; t.Y = -1000000;
t.F = SEARCH_FEEDRATE_Y; t.F = SEARCH_FEEDRATE_Y;
enqueue_home(&t, 0x2, 0); enqueue_home(&t, 0x2, 0);
#endif }
// set Y home // set Y home
queue_wait(); queue_wait();
@ -210,21 +206,17 @@ void home_z_negative() {
TARGET t = startpoint; TARGET t = startpoint;
t.Z = -1000000; t.Z = -1000000;
#ifdef SLOW_HOMING if (SEARCH_FAST_Z > SEARCH_FEEDRATE_Z)
// hit home soft t.F = SEARCH_FAST_Z;
t.F = SEARCH_FEEDRATE_Z; else
#else t.F = SEARCH_FEEDRATE_Z;
// hit home hard
t.F = MAXIMUM_FEEDRATE_Z;
#endif
enqueue_home(&t, 0x4, 1); enqueue_home(&t, 0x4, 1);
#ifndef SLOW_HOMING if (SEARCH_FAST_Z > SEARCH_FEEDRATE_Z) {
// back off slowly
t.Z = +1000000; t.Z = +1000000;
t.F = SEARCH_FEEDRATE_Z; t.F = SEARCH_FEEDRATE_Z;
enqueue_home(&t, 0x4, 0); enqueue_home(&t, 0x4, 0);
#endif }
// set Z home // set Z home
queue_wait(); queue_wait();
@ -247,21 +239,17 @@ void home_z_positive() {
TARGET t = startpoint; TARGET t = startpoint;
t.Z = +1000000; t.Z = +1000000;
#ifdef SLOW_HOMING if (SEARCH_FAST_Z > SEARCH_FEEDRATE_Z)
// hit home soft t.F = SEARCH_FAST_Z;
t.F = SEARCH_FEEDRATE_Z; else
#else t.F = SEARCH_FEEDRATE_Z;
// hit home hard
t.F = MAXIMUM_FEEDRATE_Z;
#endif
enqueue_home(&t, 0x4, 1); enqueue_home(&t, 0x4, 1);
#ifndef SLOW_HOMING if (SEARCH_FAST_Z > SEARCH_FEEDRATE_Z) {
// back off slowly
t.Z = -1000000; t.Z = -1000000;
t.F = SEARCH_FEEDRATE_Z; t.F = SEARCH_FEEDRATE_Z;
enqueue_home(&t, 0x4, 0); enqueue_home(&t, 0x4, 0);
#endif }
// set Z home // set Z home
queue_wait(); queue_wait();