diff --git a/Marlin/src/module/ft_motion.cpp b/Marlin/src/module/ft_motion.cpp index b7677df99f..af6b24b5c4 100644 --- a/Marlin/src/module/ft_motion.cpp +++ b/Marlin/src/module/ft_motion.cpp @@ -389,8 +389,11 @@ bool FTMotion::plan_next_block() { stepper.last_direction_bits.hz = current_block->direction_bits.hz; #endif - // Cache the extruder index for this block - TERN_(DISTINCT_E_FACTORS, block_extruder_axis = E_AXIS_N(current_block->extruder)); + // Cache the extruder index / axis for this block + #if ENABLED(DISTINCT_E_FACTORS) + stepper_extruder = current_block->extruder; + block_extruder_axis = E_AXIS_N(current_block->extruder); + #endif const float totalLength = current_block->millimeters; diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 86ad562e8c..82ba8d84f9 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -3623,7 +3623,24 @@ void Stepper::report_positions() { DIR_WAIT_AFTER(); } - // Start step pulses. Edge stepping will toggle the STEP pin. + /** + * - For every axis drive STEP pins + * - If any axes lack DEDGE stepping: + * - Wait for the longest required Pulse Delay + * - Reset state of all non-DEDGE STEP pins + * + * The stepper_extruder must be pre-filled at this point. + * + * Emits macros of the form: [XYZEIJKUVW]_APPLY_STEP(state, ?always?) + * For the standard E axis this expands to: E_STEP_WRITE(stepper_extruder, state) + * + * TODO: For MIXING_EXTRUDER stepping distribute the steps proportionally to the + * E stepper drivers' STEP pins according to pre-calculated Bresenham factors. + * So the events are timed just like normal E stepping; only the STEP pin varies. + */ + + // Start step pulses on all axes including the active Extruder. + // Edge stepping will simply toggle the STEP pin. #define _FTM_STEP_START(A) A##_APPLY_STEP(step_bits.A, false); LOGICAL_AXIS_MAP(_FTM_STEP_START);