From 0ea1b573284f9282208110034347377c5301346a Mon Sep 17 00:00:00 2001 From: Adrian Bowyer Date: Thu, 16 Jan 2014 17:49:59 +0000 Subject: [PATCH] First implementation of the optimised maximum speed in any direction code. This is still buggy. To print with, use the previous release. --- Configuration.h | 4 +- Move.cpp | 195 +++++++++++++----- Move.h | 15 +- Platform.cpp | 2 +- Platform.h | 22 +- ....bin => RepRapFirmware-060-16-01-2014.bin} | Bin 168436 -> 169532 bytes 6 files changed, 173 insertions(+), 65 deletions(-) rename Release/{RepRapFirmware-058-14-01-2014.bin => RepRapFirmware-060-16-01-2014.bin} (68%) diff --git a/Configuration.h b/Configuration.h index 899a0a1..4ef8a62 100644 --- a/Configuration.h +++ b/Configuration.h @@ -24,8 +24,8 @@ Licence: GPL #define CONFIGURATION_H #define NAME "RepRapFirmware" -#define VERSION "0.59" -#define DATE "2014-01-15" +#define VERSION "0.60" +#define DATE "2014-01-16" #define LAST_AUTHOR "reprappro.com" // Other firmware that we might switch to be compatible with. diff --git a/Move.cpp b/Move.cpp index 2cc3147..11b1458 100644 --- a/Move.cpp +++ b/Move.cpp @@ -179,15 +179,34 @@ void Move::Spin() for(int8_t drive = 0; drive < DRIVES; drive++) nextMachineEndPoints[drive] = LookAhead::EndPointToMachine(drive, nextMove[drive]); - int8_t movementType = GetMovementType(lastMove->MachineEndPoints(), nextMachineEndPoints); + float minS, maxS, maxA, steps; + int8_t axis; + + //int8_t movementType = GetMovementType(lastMove->MachineEndPoints(), nextMachineEndPoints); // Throw it away if there's no real movement. - if(movementType == noMove) + if(!MaxTruncatedProjection(lastMove->MachineEndPoints(), nextMachineEndPoints, platform->MaxFeedrate(), maxS, axis)) { platform->ClassReport("Move", longWait); return; } + + MaxTruncatedProjection(lastMove->MachineEndPoints(), nextMachineEndPoints, platform->InstantDv(), minS, axis); + + MaxTruncatedProjection(lastMove->MachineEndPoints(), nextMachineEndPoints, platform->Acceleration(), maxA, axis); + + steps = platform->DriveStepsPerUnit(axis); + + SerialUSB.print("min, max, a and s: "); + SerialUSB.print(minS); + SerialUSB.print(" "); + SerialUSB.print(maxS); + SerialUSB.print(" "); + SerialUSB.print(maxA); + SerialUSB.print(" "); + SerialUSB.print(steps); + SerialUSB.print("\n"); // Real move - record its feedrate with it, not here. @@ -195,30 +214,30 @@ void Move::Spin() // Promote minimum feedrates and restrict maximum feedrates; assumes xy overrides e overrides z FIXME?? - float minS, maxS, maxA, steps; - - if(movementType & xyMove) - { - minS = platform->InstantDv(X_AXIS); - maxS = platform->MaxFeedrate(X_AXIS); // Assumes X and Y are equal. FIXME? - maxA = platform->Acceleration(X_AXIS); - steps = platform->DriveStepsPerUnit(X_AXIS); - //platform->Message(HOST_MESSAGE, " xyMove\n"); - } else if(movementType & eMove) - { - minS = platform->InstantDv(AXES); - maxS = platform->MaxFeedrate(AXES); // Picks up the value for the first extruder. FIXME? - maxA = platform->Acceleration(AXES); - steps = platform->DriveStepsPerUnit(AXES); - //platform->Message(HOST_MESSAGE, " eMove\n"); - } else // Must be z - { - minS = platform->InstantDv(Z_AXIS); - maxS = platform->MaxFeedrate(Z_AXIS); - maxA = platform->Acceleration(Z_AXIS); - steps = platform->DriveStepsPerUnit(Z_AXIS); - //platform->Message(HOST_MESSAGE, " zMove\n"); - } +// +// +// if(movementType & xyMove) +// { +// minS = platform->InstantDv(X_AXIS); +// maxS = platform->MaxFeedrate(X_AXIS); // Assumes X and Y are equal. FIXME? +// maxA = platform->Acceleration(X_AXIS); +// +// //platform->Message(HOST_MESSAGE, " xyMove\n"); +// } else if(movementType & eMove) +// { +// minS = platform->InstantDv(AXES); +// maxS = platform->MaxFeedrate(AXES); // Picks up the value for the first extruder. FIXME? +// maxA = platform->Acceleration(AXES); +// steps = platform->DriveStepsPerUnit(AXES); +// //platform->Message(HOST_MESSAGE, " eMove\n"); +// } else // Must be z +// { +// minS = platform->InstantDv(Z_AXIS); +// maxS = platform->MaxFeedrate(Z_AXIS); +// maxA = platform->Acceleration(Z_AXIS); +// steps = platform->DriveStepsPerUnit(Z_AXIS); +// //platform->Message(HOST_MESSAGE, " zMove\n"); +// } nextMove[DRIVES] = fmax(fmin(nextMove[DRIVES], maxS), minS); @@ -271,6 +290,70 @@ void Move::Diagnostics() */ } +/* + * Box[] is a constraint on a vector - say a list of maximum speeds for + * each axis. sp[] and ep[] are the start and end points of that vector. + * This finds the length of that vector such that it extends to the surface + * of the box. It then sets the length of the resulting vector. It also + * returns the axis corresponding to the longest component of vector. + * + * If the machine moves along the vector at that speed, then all the speeds along + * all the other directions are guaranteed not to lie outside the box. + * + * Note that this means that for, say, a diagonal move in X and Y with equal + * maxima along each axis, then the maximum speed returned will be sqrt(2) times + * that speed. + * + * The function returns true if input vector is not of 0 length. + */ +bool Move::MaxTruncatedProjection(long sp[], long ep[], float box[], float& length, int8_t& axis) +{ + float vector[DRIVES]; + long lVector; + float s; + float t = FLT_MAX; // Slight hack + int8_t drive; + + for(drive = 0; drive < DRIVES; drive++) + { + lVector = labs(ep[drive] - sp[drive]); + if(lVector) + { + vector[drive] = MachineToPoint(lVector, drive); + s = box[drive]/vector[drive]; + if(s < t) + t = s; + } else + vector[drive] = 0.0; + } + + if(t == FLT_MAX) // No movement, so result doesn't matter. But safest not to set it to 0. + { + length = box[0]; + return false; + } + + length = 0.0; + + s = vector[0]; + axis = 0; + + for(drive = 0; drive < DRIVES; drive++) + { + length += vector[drive]*vector[drive]; + + if(vector[drive] > s) + { + s = vector[drive]; + axis = drive; + } + } + + length = sqrt(length)*t; + + return true; +} + // This returns false if it is not possible // to use the result as the basis for the // next move because the look ahead ring @@ -307,36 +390,36 @@ bool Move::GetCurrentState(float m[]) // for the bed's plane, which means that a move is MAINLY and XY move, or MAINLY a Z move. It // is the main type of move that is returned. -int8_t Move::GetMovementType(long p0[], long p1[]) -{ - int8_t result = noMove; - long dxy = 0; - long dz = 0; - long d; - - for(int8_t drive = 0; drive < DRIVES; drive++) - { - if(drive < AXES) - { - d = llabs(p1[drive] - p0[drive]); - if(drive == Z_AXIS) - dz = d; - else if(d > dxy) - dxy = d; - } else - { - if( p1[drive] ) - result |= eMove; - } - } - dxy *= (long)roundf(platform->DriveStepsPerUnit(Z_AXIS)/platform->DriveStepsPerUnit(X_AXIS)); - if(dxy > dz) - result |= xyMove; - else if(dz) - result |= zMove; - - return result; -} +//int8_t Move::GetMovementType(long p0[], long p1[]) +//{ +// int8_t result = noMove; +// long dxy = 0; +// long dz = 0; +// long d; +// +// for(int8_t drive = 0; drive < DRIVES; drive++) +// { +// if(drive < AXES) +// { +// d = llabs(p1[drive] - p0[drive]); +// if(drive == Z_AXIS) +// dz = d; +// else if(d > dxy) +// dxy = d; +// } else +// { +// if( p1[drive] ) +// result |= eMove; +// } +// } +// dxy *= (long)roundf(platform->DriveStepsPerUnit(Z_AXIS)/platform->DriveStepsPerUnit(X_AXIS)); +// if(dxy > dz) +// result |= xyMove; +// else if(dz) +// result |= zMove; +// +// return result; +//} void Move::SetStepHypotenuse() { diff --git a/Move.h b/Move.h index 123fcbe..f9b2884 100644 --- a/Move.h +++ b/Move.h @@ -194,7 +194,7 @@ class Move void Diagnostics(); float ComputeCurrentCoordinate(int8_t drive, LookAhead* la, DDA* runningDDA); void SetStepHypotenuse(); - + float MachineToPoint(long steps, int8_t drive); friend class DDA; @@ -211,7 +211,7 @@ class Move bool LookAheadRingFull(); bool LookAheadRingAdd(long ep[], float feedRate, float vv, bool ce, float minS, float maxS, float maxA, float s); LookAhead* LookAheadRingGet(); - int8_t GetMovementType(long sp[], long ep[]); + bool MaxTruncatedProjection(long sp[], long ep[], float box[], float& length, int8_t& axis); float liveCoordinates[DRIVES + 1]; @@ -276,9 +276,7 @@ inline float LookAhead::V() inline float LookAhead::MachineToEndPoint(int8_t drive) { - if(drive >= DRIVES) - platform->Message(HOST_MESSAGE, "MachineToEndPoint() called for feedrate!\n"); - return ((float)(endPoint[drive]))/platform->DriveStepsPerUnit(drive); + return move->MachineToPoint(endPoint[drive], drive); } @@ -425,6 +423,13 @@ inline void Move::LiveCoordinates(float m[]) InverseTransform(m); } +inline float Move::MachineToPoint(long steps, int8_t drive) +{ + if(drive >= DRIVES) + platform->Message(HOST_MESSAGE, "MachineToPoint() called for feedrate!\n"); + return ((float)(steps))/platform->DriveStepsPerUnit(drive); +} + // These are the actual numbers that we want to be the coordinates, so // don't transform them. diff --git a/Platform.cpp b/Platform.cpp index d03b82b..ac28853 100644 --- a/Platform.cpp +++ b/Platform.cpp @@ -407,7 +407,7 @@ void MassStorage::Init() hsmciPinsinit(); // Initialize SD MMC stack sd_mmc_init(); - delay(20); + delay(5); int sdPresentCount = 0; while ((CTRL_NO_PRESENT == sd_mmc_check(0)) && (sdPresentCount < 5)) { diff --git a/Platform.h b/Platform.h index a274225..0962afc 100644 --- a/Platform.h +++ b/Platform.h @@ -507,10 +507,15 @@ class Platform void CoolingFan(float speed); //void SetHeatOn(int8_t ho); //TEMPORARY - this will go away... + friend class Move; + //------------------------------------------------------------------------------------------------------- protected: - void ReturnFileStore(FileStore* f); + void ReturnFileStore(FileStore* f); + float* Acceleration(); + float* MaxFeedrate(); + float* InstantDv(); private: @@ -720,6 +725,21 @@ inline float Platform::InstantDv(int8_t drive) return instantDvs[drive]; } +inline float* Platform::Acceleration() +{ + return accelerations; +} + +inline float* Platform::MaxFeedrate() +{ + return maxFeedrates; +} + +inline float* Platform::InstantDv() +{ + return instantDvs; +} + inline bool Platform::HighStopButNotLow(int8_t axis) { return (lowStopPins[axis] < 0) && (highStopPins[axis] >= 0); diff --git a/Release/RepRapFirmware-058-14-01-2014.bin b/Release/RepRapFirmware-060-16-01-2014.bin similarity index 68% rename from Release/RepRapFirmware-058-14-01-2014.bin rename to Release/RepRapFirmware-060-16-01-2014.bin index fa59e765eb6be3ed76a2e1611fdfd9e202dacf57..9cdaedbece55b7e82081ecb1d3c56df2b8256425 100755 GIT binary patch delta 31433 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%0D(46EGL+-4@|H$x?O_k`+&P_~Yr? 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 Ga^T-eh;v*3 delta 30459 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
@eCg8Lyc8ix
zR`^b3;Vu@?>e-tWnJRscq>Eu(11tdOpoD2CFtSB#-NEP1rI8wgP6t(D%0?Mr20#b-
zEj8lo4!&U~$@Sq_^36xC$%tD8EWm@ET7Lfnl)n}+luJ7*VB7VRNNFFSYhbW_`|rn-
zCtx{zbWr&kz*;TN)bh-kZIDmH_aX3>F6I*KtE)xSv-~qTSSM!9g8e8Rjga>(!H
zU>kS^So3X$To;Zz0M3AZ0UQISwb>W;4TXJHT*S#&4y1==8#ohs4VW6|`z6&SYXU4d
z+F+y)gAQ;6n9vor^@JHFsTZ5eMlHU{
z5aVE@A=a2dPK1p{>uxZW<07Mq-?<_kDz#f4yv^sR1_fX-%Wljj-W;+?z~8X~nQm
zvo(e&`NL&3CR=;RCTjxOq%Ig~Of@FkCD^Ee8q;v~!KP=58w}etCYuL~qz>Sa3H6X0
z0Ga~QUwa;f8qi`b-~gPB;Q$Ics?#Z^4yQ{KY+Ae*vM(G@Hb3OnuukRMAh!crd3Sh4L~xX7V=JjI>hLM
z!wtm)Xg#WfT(8q5j7|e|Doio2K|Y}KH$pzD^EW~E0@{fAAo~HW1Fev?c!v6=HW=E&
z0Tk2$xf7rYDM=UP3p#%f5IUXG6f+E2(`S)k1cos{
zTa`v!L~iQz$&{e@+`P#gMOT?bIC14%{~}*Fldd+CtFdnYw5ytSmD#^ldE-Ss!57wJ
ze@jca!t=kN{PiXNTXxs1BNK8nzFHt4#W0ICy@;(x!!S@szX@&xC3ZyYuE*ZzqIjpC
z&tuKvay?IFzY^E$`4eoBSi6^}@|eS7`(FNv{Kbexddq-4mMK!YO#3ZtlT7zT(*F-R
zH`Z=xKeEEL@+vwWeP}{Xn+V92V87q%_6OPL&S{*GvtjrAA!NS*E`mPPG$GT_S&vP~
zmC(Il54Z!|2<`$O1qX#D2t6=RflFY&kGU`WF_bX-%?Y^y{-faFJ83gaRtS)Wdo(B_<|)>hTHLii(@S
zl&BNzf7|FT@PScr4Kd;x!BlP#9EW)8iIAQG_BV5PDKX;e$WF_<=&O*SG{`=8M_3;R
z2YY5lZ;{9a_P-tF_C|vJ{veaTiF72cj3T?&eF1!8&PjLW9Ra!jhk#rc9SG)m4ea-~
zxZABiShN>3ajsn?}Lj|k}DBv}?)4>#%2KK_A1NMP)$$!G&&P@u)
zlE>&S6>A#!@hp~u<%A_fMOvi@D@f|6Z5P(J75MQ{;E56$`}p4#{tC}DS{C3|dOq-P
DBhBb#