From 82efa28c815d00b710a817513a21c6cfd27bf8b6 Mon Sep 17 00:00:00 2001 From: Adrian Bowyer Date: Tue, 21 May 2013 21:22:12 +0100 Subject: [PATCH] First crude hack at acceleration code. Timer claims that the interrupt routine executes in 6.5 microseconds, so we shouldn't have any trouble driving the steppers fast... --- .~lock.acceleration-aprx-simulation.ods# | 1 + GCodes.ino | 2 +- LeibRamp.pdf | Bin 0 -> 28015 bytes Move.h | 23 ++-- Move.ino | 139 ++++++++++++++++++++--- Platform.h | 29 +++-- Platform.ino | 5 +- RepRapFirmware.h | 3 + RepRapFirmware.ino | 18 +++ Reprap.h | 1 + acceleration-aprx-simulation.ods | Bin 0 -> 11994 bytes 11 files changed, 184 insertions(+), 37 deletions(-) create mode 100644 .~lock.acceleration-aprx-simulation.ods# create mode 100644 LeibRamp.pdf create mode 100644 acceleration-aprx-simulation.ods diff --git a/.~lock.acceleration-aprx-simulation.ods# b/.~lock.acceleration-aprx-simulation.ods# new file mode 100644 index 0000000..a697bcf --- /dev/null +++ b/.~lock.acceleration-aprx-simulation.ods# @@ -0,0 +1 @@ +Adrian Bowyer,ensab,Charles,21.05.2013 15:01,file:///home/ensab/.config/libreoffice/3; \ No newline at end of file diff --git a/GCodes.ino b/GCodes.ino index 9840e74..8482a60 100644 --- a/GCodes.ino +++ b/GCodes.ino @@ -88,7 +88,7 @@ void GCodes::SetUpMove(GCodeBuffer *gb) // Deal with feedrate if(gb->Seen(gCodeLetters[DRIVES])) - moveBuffer[DRIVES] = gb->GetFValue()*distanceScale; + moveBuffer[DRIVES] = gb->GetFValue()*distanceScale/60.0; // Feedrates are in mm/minute; we need mm/sec // Remember for next time if we are switched // to absolute drive moves diff --git a/LeibRamp.pdf b/LeibRamp.pdf new file mode 100644 index 0000000000000000000000000000000000000000..03a150027001ec939a410dd0a5d844b7b9d9d994 GIT binary patch literal 28015 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 dx, dy, dz <- msb }; inline boolean DDA::Active() @@ -76,7 +81,7 @@ inline boolean DDA::Active() inline void Move::Interrupt() { - dda->Step(); + dda->Step(true); } diff --git a/Move.ino b/Move.ino index a3732d2..a459f18 100644 --- a/Move.ino +++ b/Move.ino @@ -30,13 +30,26 @@ Move::Move(Platform* p, GCodes* g) void Move::Init() { - lastTime = platform->Time(); - for(char i = 0; i < DRIVES; i++) + char i; + + for(i = 0; i < DRIVES; i++) platform->SetDirection(i, FORWARDS); - for(char i = 0; i <= AXES; i++) + for(i = 0; i <= AXES; i++) currentPosition[i] = 0.0; lastTime = platform->Time(); currentFeedrate = START_FEED_RATE; + float dx = 1.0/platform->DriveStepsPerUnit(X_AXIS); + float dy = 1.0/platform->DriveStepsPerUnit(Y_AXIS); + float dz = 1.0/platform->DriveStepsPerUnit(Z_AXIS); + stepDistances[0] = dx; // Should never be used. Wrong, but safer than 0.0... + stepDistances[1] = dx; + stepDistances[2] = dy; + stepDistances[3] = sqrt(dx*dx + dy*dy); + stepDistances[4] = dz; + stepDistances[5] = sqrt(dx*dx + dz*dz); + stepDistances[6] = sqrt(dy*dy + dz*dz); + stepDistances[7] = sqrt(dx*dx + dy*dy + dz*dz); + active = true; } @@ -73,7 +86,7 @@ void Move::Qmove() currentPosition[i] = nextMove[i]; if(work) - dda->Start(); + dda->Start(true); } void Move::GetCurrentState(float m[]) @@ -102,14 +115,29 @@ boolean DDA::Init(float currentPosition[], float targetPosition[]) char drive; active = false; totalSteps = -1; + float dist = 0; // X+Y+Z + float d; + char axesMoving = 0; for(drive = 0; drive < DRIVES; drive++) { if(drive < AXES) - delta[drive] = (long)((targetPosition[drive] - currentPosition[drive])*platform->DriveStepsPerUnit(drive)); //Absolute - else + { + d = targetPosition[drive] - currentPosition[drive]; + delta[drive] = (long)(d*platform->DriveStepsPerUnit(drive)); //Absolute + dist += d*d; + } else delta[drive] = (long)(targetPosition[drive]*platform->DriveStepsPerUnit(drive)); // Relative - directions[drive] = (delta[drive] >= 0); + if(delta[drive] >= 0) + directions[drive] = FORWARDS; + else + directions[drive] = BACKWARDS; delta[drive] = abs(delta[drive]); + if(drive == X_AXIS && delta[drive] > 0) + axesMoving |= 1; + if(drive == Y_AXIS && delta[drive] > 0) + axesMoving |= 2; + if(drive == Z_AXIS && delta[drive] > 0) + axesMoving |= 4; if(delta[drive] > totalSteps) totalSteps = delta[drive]; } @@ -118,35 +146,112 @@ boolean DDA::Init(float currentPosition[], float targetPosition[]) counter[0] = totalSteps/2; for(drive = 1; drive < DRIVES; drive++) counter[drive] = counter[0]; - stepCountDown = totalSteps; + dist = sqrt(dist); + float acc; + if(axesMoving|4) + { + acc = platform->Acceleration(Z_AXIS); + velocity = platform->Jerk(Z_AXIS); + } else + { + acc = platform->Acceleration(X_AXIS); + velocity = platform->Jerk(X_AXIS); + } + + timeStep = move->stepDistances[1]/velocity; + d = 0.5*(targetPosition[DRIVES]*targetPosition[DRIVES] - velocity*velocity)/acc; // d = (v^2 - u^2)/2a + stopAStep = (long)((d*totalSteps)/dist); + startDStep = totalSteps - stopAStep; + if(stopAStep > startDStep) + { + stopAStep = totalSteps/2; + startDStep = stopAStep + 1; + } + stepCount = 0; return true; } -void DDA::Start() +void DDA::Start(boolean noTest) { for(char drive = 0; drive < DRIVES; drive++) platform->SetDirection(drive, directions[drive]); - platform->SetInterrupt(300); + if(noTest) + platform->SetInterrupt((long)(1.0e6*timeStep)); active = true; } -void DDA::Step() +void DDA::Step(boolean noTest) { - if(!active) + if(!active && noTest) return; + + char axesMoving = 0; + + counter[X_AXIS] += delta[X_AXIS]; + if(counter[X_AXIS] > 0) + { + if(noTest) + platform->Step(X_AXIS); + axesMoving |= 1; + counter[X_AXIS] -= totalSteps; + } + + counter[Y_AXIS] += delta[Y_AXIS]; + if(counter[Y_AXIS] > 0) + { + if(noTest) + platform->Step(Y_AXIS); + axesMoving |= 2; + counter[Y_AXIS] -= totalSteps; + } + + counter[Z_AXIS] += delta[Z_AXIS]; + if(counter[Z_AXIS] > 0) + { + if(noTest) + platform->Step(Z_AXIS); + axesMoving |= 4; + counter[Z_AXIS] -= totalSteps; + } + - for(char drive = 0; drive < DRIVES; drive++) + for(char drive = AXES; drive < DRIVES; drive++) { counter[drive] += delta[drive]; if(counter[drive] > 0) { - platform->Step(drive); + if(noTest) + platform->Step(drive); counter[drive] -= totalSteps; } } - // Deal with feedrates here + if(axesMoving) + { + if(stepCount < stopAStep) + { + timeStep = move->stepDistances[axesMoving]/velocity; + if(axesMoving & 4) + velocity += platform->Acceleration(Z_AXIS)*timeStep; + else + velocity += platform->Acceleration(X_AXIS)*timeStep; + if(noTest) + platform->SetInterrupt((long)(1.0e6*timeStep)); + } + if(stepCount >= startDStep) + { + timeStep = move->stepDistances[axesMoving]/velocity; + if(axesMoving & 4) + velocity -= platform->Acceleration(Z_AXIS)*timeStep; + else + velocity -= platform->Acceleration(X_AXIS)*timeStep; + if(noTest) + platform->SetInterrupt((long)(1.0e6*timeStep)); + } + } - stepCountDown--; - active = stepCountDown > 0; + stepCount++; + active = stepCount < totalSteps; + if(!active && noTest) + platform->SetInterrupt(-1); } diff --git a/Platform.h b/Platform.h index 0a94dfc..709f5ae 100644 --- a/Platform.h +++ b/Platform.h @@ -69,10 +69,11 @@ Licence: GPL #define HIGH_STOP_PINS {-1, -1, -1, -1} #define ENDSTOP_HIT 1 // when a stop == this it is hit #define MAX_FEEDRATES {300, 300, 3, 45} // mm/sec -#define MAX_ACCELERATIONS {800, 800, 30, 250} // mm/sec^2?? Maximum start speed for accelerated moves. +#define ACCELERATIONS {800, 800, 30, 250} // mm/sec^2?? +//#define ACCELERATIONS {80, 80, 3, 25} #define DRIVE_STEPS_PER_UNIT {91.4286, 91.4286, 4000, 929} #define JERKS {15.0, 15.0, 0.4, 15.0} // (mm/sec) - +//#define JERKS {5.0, 5.0, 0.1, 5.0} // (mm/sec) // AXES @@ -219,6 +220,8 @@ class Platform void Disable(byte drive); // There is no drive enable; drives get enabled automatically the first time they are used. void Home(byte axis); float DriveStepsPerUnit(char drive); + float Acceleration(char drive); + float Jerk(char drive); float ZProbe(); // Return the height above the bed. Returned value is negative if probing isn't implemented void ZProbe(float h); // Move to height h above the bed using the probe (if there is one). h should be non-negative. @@ -255,7 +258,7 @@ class Platform char lowStopPins[DRIVES]; char highStopPins[DRIVES]; float maxFeedrates[DRIVES]; - float maxAccelerations[DRIVES]; + float accelerations[DRIVES]; float driveStepsPerUnit[DRIVES]; float jerks[DRIVES]; @@ -304,11 +307,6 @@ inline unsigned long Platform::Time() return micros(); } -inline float Platform::DriveStepsPerUnit(char drive) -{ - return driveStepsPerUnit[drive]; -} - inline void Platform::Exit() { active = false; @@ -346,6 +344,21 @@ inline char* Platform::GetTempDir() // Drive the RepRap machine +inline float Platform::DriveStepsPerUnit(char drive) +{ + return driveStepsPerUnit[drive]; +} + +inline float Platform::Acceleration(char drive) +{ + return accelerations[drive]; +} + +inline float Platform::Jerk(char drive) +{ + return jerks[drive]; +} + inline void Platform::SetDirection(byte drive, bool direction) { digitalWrite(directionPins[drive], direction); diff --git a/Platform.ino b/Platform.ino index 851d5df..baf12a3 100644 --- a/Platform.ino +++ b/Platform.ino @@ -26,7 +26,8 @@ Licence: GPL void setup() { - reprap.Init(); + reprap.Init(); + //reprap.InterruptTime(); // Uncomment this line to time the interrupt routine on startup } void loop() @@ -99,7 +100,7 @@ void Platform::Init() lowStopPins = LOW_STOP_PINS; highStopPins = HIGH_STOP_PINS; maxFeedrates = MAX_FEEDRATES; - maxAccelerations = MAX_ACCELERATIONS; + accelerations = ACCELERATIONS; driveStepsPerUnit = DRIVE_STEPS_PER_UNIT; jerks = JERKS; diff --git a/RepRapFirmware.h b/RepRapFirmware.h index 2e971d2..eec8fb7 100644 --- a/RepRapFirmware.h +++ b/RepRapFirmware.h @@ -41,6 +41,9 @@ boolean StringStartsWith(char* string, char* starting); boolean StringEquals(char* s1, char* s2); int StringContains(char* string, char* match); +//#include +//#include + #include "Configuration.h" #include "Platform.h" #include "Webserver.h" diff --git a/RepRapFirmware.ino b/RepRapFirmware.ino index 99d60cd..fbecff1 100644 --- a/RepRapFirmware.ino +++ b/RepRapFirmware.ino @@ -100,6 +100,24 @@ void RepRap::Spin() heat->Spin(); } +void RepRap::InterruptTime() +{ + char buffer[50]; + DDA* dda = new DDA(move, platform); + float a[] = {1.0, 2.0, 3.0, 4.0, 5.0}; + float b[] = {2.0, 3.0, 4.0, 5.0, 6.0}; + dda->Init(a, b); + dda->Start(false); + unsigned long t = platform->Time(); + for(long i = 0; i < 100000; i++) + dda->Step(false); + t = platform->Time() - t; + platform->Message(HOST_MESSAGE, "Time for 100000 calls of the interrupt function: "); + sprintf(buffer, "%ld", t); + platform->Message(HOST_MESSAGE, buffer); + platform->Message(HOST_MESSAGE, " microseconds.\n"); +} + //************************************************************************************************* diff --git a/Reprap.h b/Reprap.h index 1a5b4bc..73a8e6d 100644 --- a/Reprap.h +++ b/Reprap.h @@ -30,6 +30,7 @@ class RepRap void Spin(); void Exit(); void Interrupt(); + void InterruptTime(); boolean debug(); void debug(boolean d); Platform* GetPlatform(); diff --git a/acceleration-aprx-simulation.ods b/acceleration-aprx-simulation.ods new file mode 100644 index 0000000000000000000000000000000000000000..666cdbac6bf4951af096d825bdd6368f9e4393fd GIT binary patch literal 11994 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 literal 0 HcmV?d00001