Skip to content

Commit bfa42f7

Browse files
committed
DEFECTIVE: Hangprinter: Allow Hangprinter to be configured with 7 anchors
The response messages in M669 and M666 when sent empty won't fit The solution is started here: Duet3D#585 (comment)
1 parent 9158112 commit bfa42f7

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

src/Movement/Kinematics/HangprinterKinematics.cpp

Lines changed: 11 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;
@@ -183,6 +184,7 @@ bool HangprinterKinematics::Configure(unsigned int mCode, GCodeBuffer& gb, const
183184
{
184185
Kinematics::Configure(mCode, gb, reply, error);
185186
reply.lcatf("P:Print radius: %.1f", (double)printRadius);
187+
// TODO FIX messages are too long if there are 7 anchors or more
186188
for (size_t i = 0; i < numAnchors; ++i)
187189
{
188190
reply.lcatf("%c:%.2f, %.2f, %.2f",
@@ -675,8 +677,8 @@ void HangprinterKinematics::PrintParameters(const StringRef& reply) const noexce
675677
HangprinterKinematics::ODriveAnswer HangprinterKinematics::GetODrive3EncoderEstimate(DriverId const driver, bool const makeReference, const StringRef& reply, bool const subtractReference) THROWS(GCodeException)
676678
{
677679
const uint8_t cmd = CANSimple::MSG_GET_ENCODER_ESTIMATES;
678-
static CanAddress seenDrives[HANGPRINTER_MAX_AXES] = { 0, 0, 0, 0, 0, 0 };
679-
static float referencePositions[HANGPRINTER_MAX_AXES] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
680+
static CanAddress seenDrives[HANGPRINTER_MAX_AXES] = { 0, 0, 0, 0, 0, 0, 0 };
681+
static float referencePositions[HANGPRINTER_MAX_AXES] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
680682
static size_t numSeenDrives = 0;
681683
size_t thisDriveIdx = 0;
682684

src/Movement/Kinematics/HangprinterKinematics.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ class HangprinterKinematics : public RoundBedKinematics
5252

5353
private:
5454
// Basic facts about movement system
55-
const char* ANCHOR_CHARS = "ABCDEF";
56-
static constexpr size_t HANGPRINTER_MAX_AXES = 6;
55+
const char* ANCHOR_CHARS = "ABCDEFH"; // Skip the G, since it is reserved in G-code
56+
static constexpr size_t HANGPRINTER_MAX_AXES = 7;
5757
static constexpr size_t A_AXIS = 0;
5858
static constexpr size_t B_AXIS = 1;
5959
static constexpr size_t C_AXIS = 2;

0 commit comments

Comments
 (0)