diff --git a/src/hal/tmc2130.h b/src/hal/tmc2130.h index 7624e57..d54ebbe 100644 --- a/src/hal/tmc2130.h +++ b/src/hal/tmc2130.h @@ -143,7 +143,7 @@ public: sg_filter_counter = sg_filter_threshold; } - /// Should be called periodically from main loop. Maybe not all the time. Once every 10 ms is probably enough + /// Should be called periodically. Maybe not all the time. Once every 10 ms is probably enough bool CheckForErrors(const MotorParams ¶ms); inline ErrorFlags GetErrorFlags() const { diff --git a/src/modules/idler.cpp b/src/modules/idler.cpp index dab4cb3..dc670dd 100644 --- a/src/modules/idler.cpp +++ b/src/modules/idler.cpp @@ -142,7 +142,9 @@ 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 6949ccd..cf76329 100644 --- a/src/modules/movable_base.cpp +++ b/src/modules/movable_base.cpp @@ -36,7 +36,7 @@ MovableBase::OperationResult MovableBase::InitMovement() { } void MovableBase::PerformMove() { - if (!mm::motion.DriverForAxis(axis).GetErrorFlags().Good()) { // @@TODO check occasionally, i.e. not every time? + 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 state = TMCFailed; @@ -86,5 +86,14 @@ void MovableBase::HomeFailed() { state = HomingFailed; } +void MovableBase::IdleChecks() { + // perform maintenance tasks while no motion is happening + 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 + state = TMCFailed; + } +} + } // namespace motion } // namespace modules diff --git a/src/modules/movable_base.h b/src/modules/movable_base.h index f95794c..12b5fb5 100644 --- a/src/modules/movable_base.h +++ b/src/modules/movable_base.h @@ -103,6 +103,8 @@ protected: void PerformHomeBack(); void HomeFailed(); + + void IdleChecks(); }; } // namespace motion diff --git a/src/modules/pulley.cpp b/src/modules/pulley.cpp index 3fe0eb9..4661084 100644 --- a/src/modules/pulley.cpp +++ b/src/modules/pulley.cpp @@ -28,7 +28,9 @@ 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 0b7fbdc..1a9a521 100644 --- a/src/modules/selector.cpp +++ b/src/modules/selector.cpp @@ -122,7 +122,9 @@ bool Selector::Step() { return true; case TMCFailed: dbg_logic_P(PSTR("Selector Failed")); + return true; default: + IdleChecks(); return true; } }