From 00a0ffd9b4a471b8c901a1b1e5c7d4bda3294b81 Mon Sep 17 00:00:00 2001 From: Adrian Bowyer Date: Mon, 25 Nov 2013 11:03:36 +0000 Subject: [PATCH] Homing against max endstop for Y (and X) implemented when there is a top endstop but not a bottom one. --- Configuration.h | 2 +- GCodes.cpp | 71 ++++++++++++++++++++++++++++--------- GCodes.h | 4 +-- Platform.h | 10 ++++-- Release/RepRapFirmware.bin | Bin 165012 -> 165252 bytes 5 files changed, 66 insertions(+), 21 deletions(-) diff --git a/Configuration.h b/Configuration.h index 0a0ed2a..067dab2 100644 --- a/Configuration.h +++ b/Configuration.h @@ -24,7 +24,7 @@ Licence: GPL #define CONFIGURATION_H #define NAME "RepRapFirmware" -#define VERSION "0.21" +#define VERSION "0.22" #define DATE "2013-11-25" #define LAST_AUTHOR "reprappro.com" diff --git a/GCodes.cpp b/GCodes.cpp index 4cada2e..dd99480 100644 --- a/GCodes.cpp +++ b/GCodes.cpp @@ -67,7 +67,7 @@ void GCodes::Init() homeX = false; homeY = false; homeZ = false; - homeZFinalMove = false; + homeAxisFinalMove = false; dwellWaiting = false; stackPointer = 0; selectedHead = -1; @@ -355,12 +355,32 @@ bool GCodes::DoHome() if(homeX) { action[X_AXIS] = true; - moveToDo[X_AXIS] = -2.0*platform->AxisLength(X_AXIS); - moveToDo[DRIVES] = platform->HomeFeedRate(X_AXIS); - if(DoCannedCycleMove(moveToDo, action, true)) + if(platform->HighStopButNotLow(X_AXIS)) { - homeX = false; - return NoHome(); + if(homeAxisFinalMove) + { + moveToDo[X_AXIS] = 0.0; + if(DoCannedCycleMove(moveToDo, action, false)) + { + homeAxisFinalMove = false; + homeX = false; + return NoHome(); + } + }else + { + moveToDo[X_AXIS] = 2.0*platform->AxisLength(X_AXIS); + if(DoCannedCycleMove(moveToDo, action, true)) + homeAxisFinalMove = true; + } + } else + { + moveToDo[X_AXIS] = -2.0*platform->AxisLength(X_AXIS); + moveToDo[DRIVES] = platform->HomeFeedRate(X_AXIS); + if(DoCannedCycleMove(moveToDo, action, true)) + { + homeX = false; + return NoHome(); + } } return false; } @@ -368,12 +388,32 @@ bool GCodes::DoHome() if(homeY) { action[Y_AXIS] = true; - moveToDo[Y_AXIS] = -2.0*platform->AxisLength(Y_AXIS); - moveToDo[DRIVES] = platform->HomeFeedRate(Y_AXIS); - if(DoCannedCycleMove(moveToDo, action, true)) + if(platform->HighStopButNotLow(Y_AXIS)) { - homeY = false; - return NoHome(); + if(homeAxisFinalMove) + { + moveToDo[Y_AXIS] = 0.0; + if(DoCannedCycleMove(moveToDo, action, false)) + { + homeAxisFinalMove = false; + homeY = false; + return NoHome(); + } + }else + { + moveToDo[Y_AXIS] = 2.0*platform->AxisLength(Y_AXIS); + if(DoCannedCycleMove(moveToDo, action, true)) + homeAxisFinalMove = true; + } + } else + { + moveToDo[Y_AXIS] = -2.0*platform->AxisLength(Y_AXIS); + moveToDo[DRIVES] = platform->HomeFeedRate(Y_AXIS); + if(DoCannedCycleMove(moveToDo, action, true)) + { + homeY = false; + return NoHome(); + } } return false; } @@ -382,23 +422,22 @@ bool GCodes::DoHome() { action[Z_AXIS] = true; moveToDo[DRIVES] = platform->HomeFeedRate(Z_AXIS); - if(homeZFinalMove) + if(homeAxisFinalMove) { moveToDo[Z_AXIS] = 0.0; if(DoCannedCycleMove(moveToDo, action, false)) { - homeZFinalMove = false; + homeAxisFinalMove = false; homeZ = false; return NoHome(); } - return false; }else { moveToDo[Z_AXIS] = -2.0*platform->AxisLength(Z_AXIS); if(DoCannedCycleMove(moveToDo, action, true)) - homeZFinalMove = true; - return false; + homeAxisFinalMove = true; } + return false; } // Should never get here diff --git a/GCodes.h b/GCodes.h index e921371..da75f05 100644 --- a/GCodes.h +++ b/GCodes.h @@ -135,7 +135,7 @@ class GCodes bool homeX; bool homeY; bool homeZ; - bool homeZFinalMove; + bool homeAxisFinalMove; float gFeedRate; int probeCount; int8_t cannedCycleMoveCount; @@ -186,7 +186,7 @@ inline bool GCodes::PrintingAFile() inline bool GCodes::NoHome() { - return !(homeX || homeY || homeZ || homeZFinalMove); + return !(homeX || homeY || homeZ || homeAxisFinalMove); } // This function takes care of the fact that the heater and head indices diff --git a/Platform.h b/Platform.h index ced8d55..cb3daa4 100644 --- a/Platform.h +++ b/Platform.h @@ -81,8 +81,8 @@ Licence: GPL #define ENABLE false // What to send to enable... #define DISABLE true // ...and disable a drive #define DISABLE_DRIVES {false, false, true, false} // Set true to disable a drive when it becomes idle -#define LOW_STOP_PINS {11, 28, 60, 31} -#define HIGH_STOP_PINS {-1, -1, -1, -1} +#define LOW_STOP_PINS {11, -1, 60, 31} +#define HIGH_STOP_PINS {-1, 28, -1, -1} #define ENDSTOP_HIT 1 // when a stop == this it is hit #define POT_WIPES {0, 1, 2, 3} // Indices for motor current digipots (if any) #define SENSE_RESISTOR 0.1 // Stepper motor current sense resistor @@ -459,6 +459,7 @@ class Platform EndStopHit Stopped(int8_t drive); float AxisLength(int8_t axis); void SetAxisLength(int8_t axis, float value); + bool HighStopButNotLow(int8_t axis); float ZProbeStopHeight(); void SetZProbeStopHeight(float z); @@ -686,6 +687,11 @@ inline float Platform::InstantDv(int8_t drive) return instantDvs[drive]; } +inline bool Platform::HighStopButNotLow(int8_t axis) +{ + return (lowStopPins[axis] < 0) && (highStopPins[axis] >= 0); +} + inline void Platform::SetDirection(byte drive, bool direction) { if(directionPins[drive] < 0) diff --git a/Release/RepRapFirmware.bin b/Release/RepRapFirmware.bin index 3eacedacd7777c58a70678812c72fb9c992f3066..0627c8762f73cb8ff9fb6475a072d45405ff3d4f 100755 GIT binary patch delta 17496 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 z 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 delta 17256 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