Browse Source

Fix VerifyFilamentEnteredPTFE

Test should push filament first and then retract.
Guðni Már Gilbert 2 years ago
parent
commit
ef51b5778d
2 changed files with 11 additions and 10 deletions
  1. 7 5
      Firmware/mmu2.cpp
  2. 4 5
      Firmware/mmu2.h

+ 7 - 5
Firmware/mmu2.cpp

@@ -44,6 +44,9 @@ static constexpr float MMU2_LOAD_TO_NOZZLE_LENGTH = 87.0F + 5.0F;
 // The printer intercepts such a call and sets its extra load distance to match the new value as well.
 static constexpr uint8_t MMU2_TOOL_CHANGE_LOAD_LENGTH = 5; // mm
 
+static constexpr uint8_t MMU2_EXTRUDER_PTFE_LENGTH = 42.3f; // mm
+static constexpr uint8_t MMU2_EXTRUDER_HEATBREAK_LENGTH  = 17.7f; // mm
+
 static constexpr float MMU2_LOAD_TO_NOZZLE_FEED_RATE = 20.0F; // mm/s
 static constexpr float MMU2_UNLOAD_TO_FINDA_FEED_RATE = 120.0F; // mm/s
 
@@ -313,15 +316,14 @@ bool MMU2::VerifyFilamentEnteredPTFE()
     if (!fsensor.getFilamentPresent()) return false;
 
     uint8_t fsensorState = 0;
-    // MMU has finished its load, move filament back by ExtraLoadDistance
-    // If Fsensor reads 0 at any moment, then report FAILURE
-    current_position[E_AXIS] -= logic.ExtraLoadDistance();
+    // MMU has finished its load, push the filament further by some defined constant length
+    // If the filament sensor reads 0 at any moment, then report FAILURE
+    current_position[E_AXIS] += MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH;
     plan_buffer_line_curposXYZE(MMU2_LOAD_TO_NOZZLE_FEED_RATE);
 
     while(blocks_queued())
     {
         // Wait for move to finish and monitor the fsensor the entire time
-        // a single 0 (1) reading is enough to fail the test
         fsensorState |= !fsensor.getFilamentPresent();
     }
 
@@ -332,7 +334,7 @@ bool MMU2::VerifyFilamentEnteredPTFE()
     } else {
         // else, happy printing! :)
         // Revert the movements
-        current_position[E_AXIS] += logic.ExtraLoadDistance();
+        current_position[E_AXIS] -= MMU2_EXTRUDER_PTFE_LENGTH + MMU2_EXTRUDER_HEATBREAK_LENGTH;
         plan_buffer_line_curposXYZE(MMU2_LOAD_TO_NOZZLE_FEED_RATE);
         st_synchronize();
         return true;

+ 4 - 5
Firmware/mmu2.h

@@ -280,11 +280,10 @@ private:
     /// @returns false if the MMU is not ready to perform the command (for whatever reason)
     bool WaitForMMUReady();
 
-    /// Redundancy test. After MMU completes a tool-change command
-    /// the printer will retract the filament by a distance set by the
-    //  Extra Loading Distance MMU register. If the Fsensor untriggers
-    /// at any moment the test fails. Else test passes, and the E-motor retraction
-    /// is reverted.
+    /// After MMU completes a tool-change command
+    /// the printer will push the filament by a constant distance. If the Fsensor untriggers
+    /// at any moment the test fails. Else the test passes, and the E-motor retracts the
+    /// filament back to its original position.
     /// @returns false if test fails, true otherwise
     bool VerifyFilamentEnteredPTFE();