Added configuration parameter for delaying steps, STEP_DELAY_RATIO.
This should be manually enabled in configuration.h if you are experiencing missing steps. Please be aware that enabling it may also prevent your motor from reaching the nominal speed.
This commit is contained in:
parent
43f1603922
commit
d22c0fbf36
2 changed files with 29 additions and 2 deletions
|
|
@ -69,6 +69,9 @@ long gcode_N, gcode_LastN;
|
|||
bool relative_mode = false; //Determines Absolute or Relative Coordinates
|
||||
bool relative_mode_e = false; //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode.
|
||||
long timediff=0;
|
||||
#ifdef STEP_DELAY_RATIO
|
||||
long long_step_delay_ratio = STEP_DELAY_RATIO * 100;
|
||||
#endif
|
||||
|
||||
|
||||
// comm variables
|
||||
|
|
@ -908,6 +911,9 @@ void linear_move(unsigned long x_steps_remaining, unsigned long y_steps_remainin
|
|||
do_x_step(); x_steps_remaining--;
|
||||
error_x = error_x + delta_y;
|
||||
}
|
||||
#ifdef STEP_DELAY_RATIO
|
||||
if(timediff >= interval) delayMicroseconds(long_step_delay_ratio * interval / 10000);
|
||||
#endif
|
||||
}
|
||||
} else if (steep_x) {
|
||||
timediff=micros() * 100 - previous_micros_x;
|
||||
|
|
@ -921,6 +927,9 @@ void linear_move(unsigned long x_steps_remaining, unsigned long y_steps_remainin
|
|||
do_y_step(); y_steps_remaining--;
|
||||
error_y = error_y + delta_x;
|
||||
}
|
||||
#ifdef STEP_DELAY_RATIO
|
||||
if(timediff >= interval) delayMicroseconds(long_step_delay_ratio * interval / 10000);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -930,7 +939,14 @@ void linear_move(unsigned long x_steps_remaining, unsigned long y_steps_remainin
|
|||
if(Z_MIN_PIN > -1) if(!direction_z) if(digitalRead(Z_MIN_PIN) != ENDSTOPS_INVERTING) break;
|
||||
if(Z_MAX_PIN > -1) if(direction_z) if(digitalRead(Z_MAX_PIN) != ENDSTOPS_INVERTING) break;
|
||||
timediff=micros() * 100-previous_micros_z;
|
||||
while(timediff >= z_interval && z_steps_remaining) { do_z_step(); z_steps_remaining--; timediff-=z_interval;}
|
||||
while(timediff >= z_interval && z_steps_remaining) {
|
||||
do_z_step();
|
||||
z_steps_remaining--;
|
||||
timediff-=z_interval;
|
||||
#ifdef STEP_DELAY_RATIO
|
||||
if(timediff >= z_interval) delayMicroseconds(long_step_delay_ratio * z_interval / 10000);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
//If there are e steps remaining, check if e steps must be taken
|
||||
|
|
@ -943,7 +959,14 @@ void linear_move(unsigned long x_steps_remaining, unsigned long y_steps_remainin
|
|||
if (final_e_steps_remaining > 0) while(e_steps_remaining > final_e_steps_remaining) { do_e_step(); e_steps_remaining--;}
|
||||
else if (x_steps_to_take + y_steps_to_take > 0) while(e_steps_remaining) { do_e_step(); e_steps_remaining--;}
|
||||
//Else, normally check if e steps must be taken
|
||||
else while (timediff >= e_interval && e_steps_remaining) { do_e_step(); e_steps_remaining--; timediff-=e_interval;}
|
||||
else while (timediff >= e_interval && e_steps_remaining) {
|
||||
do_e_step();
|
||||
e_steps_remaining--;
|
||||
timediff-=e_interval;
|
||||
#ifdef STEP_DELAY_RATIO
|
||||
if(timediff >= e_interval) delayMicroseconds(long_step_delay_ratio * e_interval / 10000);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
//If more that half second is passed since previous heating check, manage it
|
||||
|
|
|
|||
|
|
@ -8,6 +8,10 @@
|
|||
//Comment out to disable SD support
|
||||
#define SDSUPPORT 1
|
||||
|
||||
//Step delay over interval ratio. If you are experiencing missing steps, try to uncomment the following line, but be aware this
|
||||
//may probably prevent the motors to reach the nominal speed
|
||||
//#define STEP_DELAY_RATIO 0.05
|
||||
|
||||
//Acceleration settings
|
||||
float full_velocity_units = 10; // the units between minimum and G1 move feedrate
|
||||
float travel_move_full_velocity_units = 10; // used for travel moves
|
||||
|
|
|
|||
Loading…
Reference in a new issue