Skip to content

Commit 6f235a0

Browse files
committed
Hangprinter: Allow Hangprinter to be configured with 7 anchors
1 parent 17f1ba1 commit 6f235a0

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

src/Movement/Kinematics/HangprinterKinematics.cpp

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@
2020
constexpr size_t DefaultNumAnchors = 4;
2121
// Default anchor coordinates
2222
// These are only placeholders. Each machine must have these values calibrated in order to work correctly.
23-
constexpr float DefaultAnchors[6][3] = {{ 0.0, -2000.0, -100.0},
23+
constexpr float DefaultAnchors[7][3] = {{ 0.0, -2000.0, -100.0},
2424
{ 2000.0, 1000.0, -100.0},
2525
{-2000.0, 1000.0, -100.0},
2626
{ 0.0, 0.0, 3000.0},
2727
{ 0.0, 0.0, 0.0},
28+
{ 0.0, 0.0, 0.0},
2829
{ 0.0, 0.0, 0.0}};
2930
constexpr float DefaultPrintRadius = 1500.0;
3031

@@ -84,13 +85,13 @@ void HangprinterKinematics::Init() noexcept
8485
* In practice you might want to compensate a bit more or a bit less */
8586
constexpr float DefaultSpoolBuildupFactor = 0.007;
8687
/* Measure and set spool radii with M669 to achieve better accuracy */
87-
constexpr float DefaultSpoolRadii[HANGPRINTER_MAX_AXES] = { 75.0, 75.0, 75.0, 75.0, 75.0, 75.0}; // HP4 default
88+
constexpr float DefaultSpoolRadii[HANGPRINTER_MAX_AXES] = { 75.0, 75.0, 75.0, 75.0, 75.0, 75.0, 75.0}; // HP4 default
8889
/* If axis runs lines back through pulley system, set mechanical advantage accordingly with M669 */
89-
constexpr uint32_t DefaultMechanicalAdvantage[HANGPRINTER_MAX_AXES] = { 2, 2, 2, 2, 2, 4}; // HP4 default
90-
constexpr uint32_t DefaultLinesPerSpool[HANGPRINTER_MAX_AXES] = { 1, 1, 1, 1, 1, 1}; // HP4 default
91-
constexpr uint32_t DefaultMotorGearTeeth[HANGPRINTER_MAX_AXES] = { 20, 20, 20, 20, 20, 20}; // HP4 default
92-
constexpr uint32_t DefaultSpoolGearTeeth[HANGPRINTER_MAX_AXES] = { 255, 255, 255, 255, 255, 255}; // HP4 default
93-
constexpr uint32_t DefaultFullStepsPerMotorRev[HANGPRINTER_MAX_AXES] = { 25, 25, 25, 25, 25, 25};
90+
constexpr uint32_t DefaultMechanicalAdvantage[HANGPRINTER_MAX_AXES] = { 2, 2, 2, 2, 2, 2, 4}; // HP4 default
91+
constexpr uint32_t DefaultLinesPerSpool[HANGPRINTER_MAX_AXES] = { 1, 1, 1, 1, 1, 1, 1}; // HP4 default
92+
constexpr uint32_t DefaultMotorGearTeeth[HANGPRINTER_MAX_AXES] = { 20, 20, 20, 20, 20, 20, 20}; // HP4 default
93+
constexpr uint32_t DefaultSpoolGearTeeth[HANGPRINTER_MAX_AXES] = { 255, 255, 255, 255, 255, 255, 255}; // HP4 default
94+
constexpr uint32_t DefaultFullStepsPerMotorRev[HANGPRINTER_MAX_AXES] = { 25, 25, 25, 25, 25, 25, 25};
9495
ARRAY_INIT(anchors, DefaultAnchors);
9596
numAnchors = DefaultNumAnchors;
9697
printRadius = DefaultPrintRadius;
@@ -196,6 +197,14 @@ bool HangprinterKinematics::Configure(unsigned int mCode, GCodeBuffer& gb, const
196197
return true;
197198
}
198199
}
200+
if (numAnchors > 6)
201+
{
202+
if (gb.TryGetFloatArray('G', 3, anchors[G_AXIS], reply, seen))
203+
{
204+
error = true;
205+
return true;
206+
}
207+
}
199208

200209
if (gb.Seen('P'))
201210
{
@@ -232,6 +241,11 @@ bool HangprinterKinematics::Configure(unsigned int mCode, GCodeBuffer& gb, const
232241
reply.lcatf("F:%.2f, %.2f, %.2f\n",
233242
(double)anchors[F_AXIS][X_AXIS], (double)anchors[F_AXIS][Y_AXIS], (double)anchors[F_AXIS][Z_AXIS]);
234243
}
244+
if (numAnchors > 6)
245+
{
246+
reply.lcatf("G:%.2f, %.2f, %.2f\n",
247+
(double)anchors[G_AXIS][X_AXIS], (double)anchors[G_AXIS][Y_AXIS], (double)anchors[G_AXIS][Z_AXIS]);
248+
}
235249
}
236250
}
237251
else if (mCode == 666)
@@ -557,6 +571,16 @@ bool HangprinterKinematics::WriteCalibrationParameters(FileStore *f) const noexc
557571
}
558572
}
559573

574+
if (numAnchors > 6)
575+
{
576+
scratchString.printf(" G%.3f:%.3f:%.3f",
577+
(double)anchors[G_AXIS][X_AXIS], (double)anchors[G_AXIS][Y_AXIS], (double)anchors[G_AXIS][Z_AXIS]);
578+
if (!f->Write(scratchString.c_str()))
579+
{
580+
return false;
581+
}
582+
}
583+
560584
scratchString.printf(" P%.1f\n", (double)printRadius);
561585
if (!f->Write(scratchString.c_str()))
562586
{
@@ -773,8 +797,8 @@ void HangprinterKinematics::PrintParameters(const StringRef& reply) const noexce
773797
HangprinterKinematics::ODriveAnswer HangprinterKinematics::GetODrive3EncoderEstimate(DriverId const driver, bool const makeReference, const StringRef& reply, bool const subtractReference) THROWS(GCodeException)
774798
{
775799
const uint8_t cmd = CANSimple::MSG_GET_ENCODER_ESTIMATES;
776-
static CanAddress seenDrives[HANGPRINTER_MAX_AXES] = { 0, 0, 0, 0, 0, 0 };
777-
static float referencePositions[HANGPRINTER_MAX_AXES] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
800+
static CanAddress seenDrives[HANGPRINTER_MAX_AXES] = { 0, 0, 0, 0, 0, 0, 0 };
801+
static float referencePositions[HANGPRINTER_MAX_AXES] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
778802
static size_t numSeenDrives = 0;
779803
size_t thisDriveIdx = 0;
780804

src/Movement/Kinematics/HangprinterKinematics.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,14 @@ class HangprinterKinematics : public RoundBedKinematics
5252

5353
private:
5454
// Basic facts about movement system
55-
static constexpr size_t HANGPRINTER_MAX_AXES = 6;
55+
static constexpr size_t HANGPRINTER_MAX_AXES = 7;
5656
static constexpr size_t A_AXIS = 0;
5757
static constexpr size_t B_AXIS = 1;
5858
static constexpr size_t C_AXIS = 2;
5959
static constexpr size_t D_AXIS = 3;
6060
static constexpr size_t E_AXIS = 4;
6161
static constexpr size_t F_AXIS = 5;
62+
static constexpr size_t G_AXIS = 6;
6263

6364
void Init() noexcept;
6465
void Recalc() noexcept;

0 commit comments

Comments
 (0)