Add registers for measured bowden lengths (individual slots)

pull/141/head
D.R.racer 2022-08-17 06:40:40 +02:00
parent 352d39fdfb
commit e8805b543e
4 changed files with 31 additions and 9 deletions

View File

@ -35,7 +35,7 @@ void FeedToBondtech::UpdateBowdenLength(int32_t feedEnd_mm) {
static_assert(config::maximumBowdenLength.v <= 65535, "Max bowden length too long");
int16_t mbl = (int16_t)measuredBowdenLength;
int16_t difference = abs(mbl - mps::BowdenLength::Get(mg::globals.ActiveSlot()));
if (difference > 5) { // @@TODO 5_mm is it good enough?
if (difference > 10) { // @@TODO 10_mm is it good enough?
mps::BowdenLength::Set(mg::globals.ActiveSlot(), mbl);
}
}
@ -63,10 +63,10 @@ bool FeedToBondtech::Step() {
state = PushingFilamentFast;
mpu::pulley.InitAxis();
// plan a fast move while in the safe minimal length
feedStart_mm = mm::motion.CurPosition(mm::Pulley);
feedStart_mm = mpu::pulley.CurrentPosition_mm();
// fast feed in millimeters - if the EEPROM value is incorrect, we'll get the default length
unit::U_mm fastFeedDistance = { (long double)mps::BowdenLength::Get(mg::globals.ActiveSlot()) };
mpu::pulley.PlanMove(fastFeedDistance,
mpu::pulley.PlanMove(fastFeedDistance,
mg::globals.PulleyLoadFeedrate_mm_s(),
mg::globals.PulleySlowFeedrate_mm_s());
// plan additional slow move while waiting for fsensor to trigger
@ -121,9 +121,7 @@ bool FeedToBondtech::Step() {
dbg_logic_P(PSTR("Feed to Bondtech --> Idler disengaged"));
dbg_logic_fP(PSTR("Pulley end steps %u"), mpu::pulley.CurrentPosition_mm());
state = OK;
mpu::pulley.Disable();
UpdateBowdenLength(mm::motion.CurPosition(mm::Pulley));
mm::motion.Disable(mm::Pulley);
UpdateBowdenLength(mpu::pulley.CurrentPosition_mm());
ml::leds.SetMode(mg::globals.ActiveSlot(), ml::green, ml::on);
}
return false;

View File

@ -59,7 +59,7 @@ private:
uint8_t state;
uint8_t maxRetries;
int32_t feedStart_mm; // intentionally trying to avoid using U_mm because it is a float (reps. long double)
int32_t feedStart_mm; // intentionally trying to avoid using U_mm because it is a float (resp. long double)
};
} // namespace logic

View File

@ -51,8 +51,6 @@ constexpr const uint16_t eepromBowdenLenDefault = config::defaultBowdenLength.v;
constexpr const uint16_t eepromBowdenLenMinimum = config::minimumBowdenLength.v; ///< Minimum bowden length (~341 mm)
constexpr const uint16_t eepromBowdenLenMaximum = config::maximumBowdenLength.v; ///< Maximum bowden length (~792 mm)
// static_assert (mm::unitToSteps<mm::P_pos_t>(config::maximumBowdenLength) < 65535U, "");
namespace ee = hal::eeprom;
#define EEOFFSET(x) reinterpret_cast<size_t>(&(x))

View File

@ -13,6 +13,7 @@
#include "modules/globals.h"
#include "modules/idler.h"
#include "modules/pulley.h"
#include "modules/permanent_storage.h"
#include "modules/selector.h"
/** @defgroup register_table Register Table
@ -362,6 +363,31 @@ static const RegisterRec registers[] /*PROGMEM*/ = {
[](uint16_t d) { d >= config::toolCount ? mi::idler.Disengage() : mi::idler.Engage(d); },
1),
// 0x1d Detected bowden length slot 0 RW
RegisterRec(
[]() -> uint16_t { return mps::BowdenLength::Get(0); },
[](uint16_t d) { mps::BowdenLength::Set(0, d); },
2),
// 0x1e Detected bowden length slot 1 RW
RegisterRec(
[]() -> uint16_t { return mps::BowdenLength::Get(1); },
[](uint16_t d) { mps::BowdenLength::Set(1, d); },
2),
// 0x1f Detected bowden length slot 2 RW
RegisterRec(
[]() -> uint16_t { return mps::BowdenLength::Get(2); },
[](uint16_t d) { mps::BowdenLength::Set(2, d); },
2),
// 0x20 Detected bowden length slot 3 RW
RegisterRec(
[]() -> uint16_t { return mps::BowdenLength::Get(3); },
[](uint16_t d) { mps::BowdenLength::Set(3, d); },
2),
// 0x21 Detected bowden length slot 4 RW
RegisterRec(
[]() -> uint16_t { return mps::BowdenLength::Get(4); },
[](uint16_t d) { mps::BowdenLength::Set(4, d); },
2),
};
static constexpr uint8_t registersSize = sizeof(registers) / sizeof(RegisterRec);