Separate load/unload speeds + faster

Slower loading speed is necessary for precise detection
of filament sensor trigger and starting rotation of the E-motor.
Experimentally it turned out speeds above 80mm/s tend to cause timing issues
(sometimes one can hear a crack as MMU' or the printer's drive gears
slip while pushing the filament).

Such a timing issue then causes blobs in purge towers.

On the other hand - 80mm/s for the fast part of filament load
seems not only absolutely reliable, but also very quiet.
120mm/s for unload is much louder (we may slow it down later)
pull/143/head
D.R.racer 2022-01-12 15:33:15 +01:00 committed by DRracer
parent 7cdb63f07a
commit 8a6d962bd4
5 changed files with 12 additions and 8 deletions

View File

@ -111,7 +111,11 @@ static constexpr PulleyLimits pulleyLimits = {
.jerk = 4.0_mm_s, .jerk = 4.0_mm_s,
.accel = 800.0_mm_s2, .accel = 800.0_mm_s2,
}; };
static constexpr U_mm_s pulleyFeedrate = 40._mm_s;
static constexpr U_mm_s pulleyUnloadFeedrate = 120._mm_s;
/// 120mm_s is too much, the printer cannot send the status of fsensor that fast
/// and false fsensor_not_triggered errors start to occur
static constexpr U_mm_s pulleyLoadFeedrate = 80._mm_s;
static constexpr U_mm_s pulleySlowFeedrate = 20._mm_s; static constexpr U_mm_s pulleySlowFeedrate = 20._mm_s;
/// End: Pulley axis configuration /// End: Pulley axis configuration
@ -160,7 +164,7 @@ static constexpr U_mm selectorSlotPositions[toolCount + 1] = {
// SelectorOffsetFromMin - 1.0_mm - 5 * SelectorSlotDistance ///75.5_mm - 1.0_mm - 5 * 14.0_mm = 4.5_mm // SelectorOffsetFromMin - 1.0_mm - 5 * SelectorSlotDistance ///75.5_mm - 1.0_mm - 5 * 14.0_mm = 4.5_mm
}; };
static constexpr U_mm_s selectorFeedrate = 30._mm_s; static constexpr U_mm_s selectorFeedrate = 45._mm_s;
/// End: Selector configuration /// End: Selector configuration
/// Begin: Idler configuration /// Begin: Idler configuration
@ -198,7 +202,7 @@ static constexpr U_deg idlerSlotPositions[toolCount + 1] = {
static constexpr U_deg idlerParkPositionDelta = -IdlerSlotDistance + 5.0_deg / 2; ///@TODO verify static constexpr U_deg idlerParkPositionDelta = -IdlerSlotDistance + 5.0_deg / 2; ///@TODO verify
static constexpr U_deg_s idlerFeedrate = 200._deg_s; static constexpr U_deg_s idlerFeedrate = 300._deg_s;
/// End: Idler configuration /// End: Idler configuration
// TMC2130 setup // TMC2130 setup

View File

@ -60,7 +60,7 @@ bool CutFilament::StepInner() {
} else { } else {
// unload back to the pulley // unload back to the pulley
state = ProgressCode::UnloadingToPulley; state = ProgressCode::UnloadingToPulley;
mm::motion.PlanMove<mm::Pulley>(-config::cutLength, config::pulleyFeedrate); mm::motion.PlanMove<mm::Pulley>(-config::cutLength, config::pulleyUnloadFeedrate);
} }
} }
break; break;
@ -74,7 +74,7 @@ bool CutFilament::StepInner() {
case ProgressCode::PreparingBlade: case ProgressCode::PreparingBlade:
if (ms::selector.Slot() == cutSlot + 1) { if (ms::selector.Slot() == cutSlot + 1) {
state = ProgressCode::PushingFilament; state = ProgressCode::PushingFilament;
mm::motion.PlanMove<mm::Pulley>(config::cutLength, config::pulleyFeedrate); // mm::motion.PlanMove<mm::Pulley>(config::cutLength, config::pulleyUnloadFeedrate); //
} }
break; break;
case ProgressCode::PushingFilament: case ProgressCode::PushingFilament:

View File

@ -35,7 +35,7 @@ bool FeedToBondtech::Step() {
dbg_logic_fP(PSTR("Pulley start steps %u"), mm::motion.CurPosition(mm::Pulley)); dbg_logic_fP(PSTR("Pulley start steps %u"), mm::motion.CurPosition(mm::Pulley));
state = PushingFilamentToFSensor; state = PushingFilamentToFSensor;
mm::motion.InitAxis(mm::Pulley); mm::motion.InitAxis(mm::Pulley);
mm::motion.PlanMove<mm::Pulley>(config::defaultBowdenLength, config::pulleyFeedrate, config::pulleySlowFeedrate); mm::motion.PlanMove<mm::Pulley>(config::defaultBowdenLength, config::pulleyLoadFeedrate, config::pulleySlowFeedrate);
} }
return false; return false;
case PushingFilamentToFSensor: case PushingFilamentToFSensor:

View File

@ -22,7 +22,7 @@ bool RetractFromFinda::Step() {
if (mi::idler.Engaged()) { if (mi::idler.Engaged()) {
dbg_logic_fP(PSTR("Pulley start steps %u"), mm::motion.CurPosition(mm::Pulley)); dbg_logic_fP(PSTR("Pulley start steps %u"), mm::motion.CurPosition(mm::Pulley));
state = UnloadBackToPTFE; state = UnloadBackToPTFE;
mm::motion.PlanMove<mm::Pulley>(-(config::cuttingEdgeToFindaMidpoint + config::cuttingEdgeRetract), config::pulleyFeedrate); mm::motion.PlanMove<mm::Pulley>(-(config::cuttingEdgeToFindaMidpoint + config::cuttingEdgeRetract), config::pulleyUnloadFeedrate);
} }
return false; return false;
case UnloadBackToPTFE: case UnloadBackToPTFE:

View File

@ -36,7 +36,7 @@ bool UnloadToFinda::Step() {
if (mi::idler.Engaged()) { if (mi::idler.Engaged()) {
state = WaitingForFINDA; state = WaitingForFINDA;
mg::globals.SetFilamentLoaded(mg::globals.ActiveSlot(), mg::FilamentLoadState::InSelector); mg::globals.SetFilamentLoaded(mg::globals.ActiveSlot(), mg::FilamentLoadState::InSelector);
mm::motion.PlanMove<mm::Pulley>(-config::defaultBowdenLength - config::feedToFinda - config::filamentMinLoadedToMMU, config::pulleyFeedrate); mm::motion.PlanMove<mm::Pulley>(-config::defaultBowdenLength - config::feedToFinda - config::filamentMinLoadedToMMU, config::pulleyUnloadFeedrate);
} }
return false; return false;
case WaitingForFINDA: case WaitingForFINDA: