From 55e8caa0542886f6cf2cca162710635acf420a64 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Mon, 10 Oct 2022 12:14:11 +0200 Subject: [PATCH] Always check for tmc errors --- src/modules/idler.cpp | 6 ++++-- src/modules/movable_base.cpp | 10 ++-------- src/modules/movable_base.h | 2 +- src/modules/pulley.cpp | 6 ++++-- src/modules/selector.cpp | 6 ++++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/modules/idler.cpp b/src/modules/idler.cpp index dc670dd..288597c 100644 --- a/src/modules/idler.cpp +++ b/src/modules/idler.cpp @@ -121,6 +121,10 @@ Idler::OperationResult Idler::PlanMoveInner(uint8_t slot, Operation plannedOp) { } bool Idler::Step() { + if (state != TMCFailed) { + CheckTMC(); + } + switch (state) { case Moving: // dbg_logic_P(PSTR("Moving Idler")); @@ -142,9 +146,7 @@ bool Idler::Step() { return true; case TMCFailed: dbg_logic_P(PSTR("Idler Failed")); - return true; default: - IdleChecks(); return true; } } diff --git a/src/modules/movable_base.cpp b/src/modules/movable_base.cpp index 7dca222..420e2c6 100644 --- a/src/modules/movable_base.cpp +++ b/src/modules/movable_base.cpp @@ -36,12 +36,7 @@ MovableBase::OperationResult MovableBase::InitMovement() { } void MovableBase::PerformMove() { - if (mm::motion.DriverForAxis(axis).CheckForErrors(axisParams[axis].params)) { - // TMC2130 entered some error state, the planned move couldn't have been finished - result of operation is Failed - tmcErrorFlags = mm::motion.DriverForAxis(axis).GetErrorFlags(); // save the failed state - mm::motion.AbortPlannedMoves(axis, true); - state = TMCFailed; - } else if (mm::motion.QueueEmpty(axis)) { + if (mm::motion.QueueEmpty(axis)) { // move finished currentSlot = plannedSlot; FinishMove(); @@ -87,8 +82,7 @@ void MovableBase::HomeFailed() { state = HomingFailed; } -void MovableBase::IdleChecks() { - // perform maintenance tasks while no motion is happening +void MovableBase::CheckTMC() { if (mm::motion.DriverForAxis(axis).CheckForErrors(axisParams[axis].params)) { // TMC2130 entered some error state, the planned move couldn't have been finished - result of operation is Failed tmcErrorFlags = mm::motion.DriverForAxis(axis).GetErrorFlags(); // save the failed state diff --git a/src/modules/movable_base.h b/src/modules/movable_base.h index 12b5fb5..e258b47 100644 --- a/src/modules/movable_base.h +++ b/src/modules/movable_base.h @@ -104,7 +104,7 @@ protected: void HomeFailed(); - void IdleChecks(); + void CheckTMC(); }; } // namespace motion diff --git a/src/modules/pulley.cpp b/src/modules/pulley.cpp index 4661084..669e781 100644 --- a/src/modules/pulley.cpp +++ b/src/modules/pulley.cpp @@ -17,6 +17,10 @@ bool Pulley::FinishHomingAndPlanMoveToParkPos() { } bool Pulley::Step() { + if (state != TMCFailed) { + CheckTMC(); + } + switch (state) { case Moving: PerformMove(); @@ -28,9 +32,7 @@ bool Pulley::Step() { case Ready: return true; case TMCFailed: - return true; default: - IdleChecks(); return true; } } diff --git a/src/modules/selector.cpp b/src/modules/selector.cpp index 1a9a521..d3bb2ae 100644 --- a/src/modules/selector.cpp +++ b/src/modules/selector.cpp @@ -90,6 +90,10 @@ Selector::OperationResult Selector::MoveToSlot(uint8_t slot) { } bool Selector::Step() { + if (state != TMCFailed) { + CheckTMC(); + } + switch (state) { case Moving: PerformMove(); @@ -122,9 +126,7 @@ bool Selector::Step() { return true; case TMCFailed: dbg_logic_P(PSTR("Selector Failed")); - return true; default: - IdleChecks(); return true; } }