Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2021-12-01 15:20:16 +0300
committerDavid Crocker <dcrocker@eschertech.com>2021-12-01 15:20:16 +0300
commit3773af01bfe0375cc883eedb2bf559b0b268bb60 (patch)
treeb42af887e1a2388e0178d48faedba514c75f68db
parentc98e1b9b64c537f5445566d9a95b2ab3cdcd34c3 (diff)
Fixed issue with reversal at zero distance on delta printers
-rw-r--r--src/Movement/DriveMovement.cpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/Movement/DriveMovement.cpp b/src/Movement/DriveMovement.cpp
index e110adb1..ba3b4dbc 100644
--- a/src/Movement/DriveMovement.cpp
+++ b/src/Movement/DriveMovement.cpp
@@ -470,7 +470,19 @@ bool DriveMovement::PrepareDeltaAxis(const DDA& dda, const PrepParams& params) n
const float drev = ((dda.directionVector[Z_AXIS] * fastSqrtf(params.a2plusb2 * params.dparams->GetDiagonalSquared(drive) - fsquare(A * dda.directionVector[Y_AXIS] - B * dda.directionVector[X_AXIS])))
- aAplusbB)/params.a2plusb2;
mp.delta.reverseStartDistance = drev;
- if (drev > 0.0 && drev < dda.totalDistance) // if the reversal point is within range
+ if (drev <= 0.0)
+ {
+ // No reversal, going down
+ reverseStartStep = totalSteps + 1;
+ direction = false;
+ }
+ else if (drev >= dda.totalDistance)
+ {
+ // No reversal, going up
+ reverseStartStep = totalSteps + 1;
+ direction = true;
+ }
+ else // the reversal point is within range
{
// Calculate how many steps we need to move up before reversing
const float hrev = dda.directionVector[Z_AXIS] * drev + fastSqrtf(dSquaredMinusAsquaredMinusBsquared - 2 * drev * aAplusbB - params.a2plusb2 * fsquare(drev));
@@ -517,12 +529,6 @@ bool DriveMovement::PrepareDeltaAxis(const DDA& dda, const PrepParams& params) n
}
}
}
- else
- {
- // No reversal
- reverseStartStep = totalSteps + 1;
- direction = (drev >= 0.0);
- }
}
distanceSoFar = 0.0;