Merge pull request #87 from PavelSindler/wizard
Wizard: improved axis selftest code readability and no sg crash triggered
This commit is contained in:
commit
27a63eeb0f
|
|
@ -46,7 +46,7 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
|
|||
#define MANUAL_Z_HOME_POS 0.2
|
||||
|
||||
// Travel limits after homing
|
||||
#define X_MAX_POS 250
|
||||
#define X_MAX_POS 255
|
||||
#define X_MIN_POS 0
|
||||
#define Y_MAX_POS 210
|
||||
#define Y_MIN_POS -12 //orig -4
|
||||
|
|
|
|||
|
|
@ -219,7 +219,7 @@ uint8_t tmc2130_sample_diag()
|
|||
|
||||
void tmc2130_st_isr(uint8_t last_step_mask)
|
||||
{
|
||||
if (tmc2130_mode == TMC2130_MODE_SILENT) return;
|
||||
if (tmc2130_mode == TMC2130_MODE_SILENT || tmc2130_sg_stop_on_crash == false) return;
|
||||
bool crash = false;
|
||||
uint8_t diag_mask = tmc2130_sample_diag();
|
||||
// for (uint8_t axis = X_AXIS; axis <= E_AXIS; axis++)
|
||||
|
|
|
|||
|
|
@ -3689,7 +3689,7 @@ static void lcd_calibration_menu()
|
|||
if (!isPrintPaused)
|
||||
{
|
||||
MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28 W"));
|
||||
MENU_ITEM(function, MSG_SELFTEST, lcd_selftest_);
|
||||
MENU_ITEM(function, MSG_SELFTEST, lcd_selftest_v);
|
||||
#ifdef MK1BP
|
||||
// MK1
|
||||
// "Calibrate Z"
|
||||
|
|
@ -5309,6 +5309,11 @@ menu_edit_type(float, float51, ftostr51, 10)
|
|||
menu_edit_type(float, float52, ftostr52, 100)
|
||||
menu_edit_type(unsigned long, long5, ftostr5, 0.01)
|
||||
|
||||
static void lcd_selftest_v()
|
||||
{
|
||||
(void)lcd_selftest();
|
||||
}
|
||||
|
||||
static bool lcd_selftest()
|
||||
{
|
||||
int _progress = 0;
|
||||
|
|
@ -5344,29 +5349,39 @@ static bool lcd_selftest()
|
|||
{
|
||||
//current_position[Z_AXIS] += 15; //move Z axis higher to avoid false triggering of Z end stop in case that we are very low - just above heatbed
|
||||
_progress = lcd_selftest_screen(4, _progress, 3, true, 2000);
|
||||
_result = lcd_selfcheck_axis_sg(X_AXIS);//, X_MAX_POS);
|
||||
#ifdef TMC2130
|
||||
_result = lcd_selfcheck_axis_sg(X_AXIS);
|
||||
#else
|
||||
_result = lcd_selfcheck_axis(X_AXIS, X_MAX_POS);
|
||||
#endif //TMC2130
|
||||
}
|
||||
|
||||
if (_result)
|
||||
{
|
||||
_progress = lcd_selftest_screen(4, _progress, 3, true, 0);
|
||||
|
||||
|
||||
//_result = lcd_selfcheck_pulleys(X_AXIS);
|
||||
#ifndef TMC2130
|
||||
_result = lcd_selfcheck_pulleys(X_AXIS);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
if (_result)
|
||||
{
|
||||
_progress = lcd_selftest_screen(5, _progress, 3, true, 1500);
|
||||
#ifdef TMC2130
|
||||
_result = lcd_selfcheck_axis_sg(Y_AXIS);
|
||||
//_result = lcd_selfcheck_axis(Y_AXIS, Y_MAX_POS);
|
||||
#else
|
||||
_result = lcd_selfcheck_axis(Y_AXIS, Y_MAX_POS);
|
||||
#endif // TMC2130
|
||||
}
|
||||
|
||||
if (_result)
|
||||
{
|
||||
_progress = lcd_selftest_screen(5, _progress, 3, true, 0);
|
||||
//_result = lcd_selfcheck_pulleys(Y_AXIS);
|
||||
#ifndef TMC2130
|
||||
_result = lcd_selfcheck_pulleys(Y_AXIS);
|
||||
#endif // TMC2130
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -5421,74 +5436,80 @@ static bool lcd_selftest()
|
|||
return(_result);
|
||||
}
|
||||
|
||||
#ifdef TMC2130
|
||||
|
||||
static void reset_crash_det(char axis) {
|
||||
current_position[axis] += 10;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
|
||||
st_synchronize();
|
||||
if (eeprom_read_byte((uint8_t*)EEPROM_CRASH_DET)) tmc2130_sg_stop_on_crash = true;
|
||||
}
|
||||
|
||||
static bool lcd_selfcheck_axis_sg(char axis) {
|
||||
|
||||
// each axis length is measured twice
|
||||
float axis_length, current_position_init, current_position_final;
|
||||
float measured_axis_length[2];
|
||||
float margin = 100;
|
||||
float margin = 60;
|
||||
float max_error_mm = 10;
|
||||
switch (axis) {
|
||||
case 0: axis_length = X_MAX_POS; break;
|
||||
case 1: axis_length = Y_MAX_POS + 8; break;
|
||||
default: axis_length = 210; break;
|
||||
}
|
||||
//tmc2130_sg_stop_on_crash = false;
|
||||
crashdet_disable();
|
||||
#ifdef TMC2130
|
||||
|
||||
|
||||
tmc2130_sg_stop_on_crash = false;
|
||||
tmc2130_home_exit();
|
||||
enable_endstops(true);
|
||||
#endif
|
||||
// first axis length measurement begin
|
||||
tmc2130_home_enter(X_AXIS_MASK << axis);
|
||||
current_position[axis] -= (axis_length + margin);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
|
||||
|
||||
for (char i = 0; i < 2; i++) {
|
||||
|
||||
st_synchronize();
|
||||
tmc2130_home_exit();
|
||||
|
||||
#ifdef TMC2130
|
||||
tmc2130_home_enter(X_AXIS_MASK << axis);
|
||||
#endif
|
||||
current_position[axis] -= (axis_length + margin);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
|
||||
current_position_init = st_get_position_mm(axis);
|
||||
|
||||
st_synchronize();
|
||||
current_position[axis] += 2 * margin;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
|
||||
st_synchronize();
|
||||
current_position[axis] += axis_length;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
|
||||
|
||||
#ifdef TMC2130
|
||||
tmc2130_home_exit();
|
||||
#endif
|
||||
//current_position[axis] = st_get_position_mm(axis);
|
||||
//plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
tmc2130_home_enter(X_AXIS_MASK << axis);
|
||||
st_synchronize();
|
||||
tmc2130_home_exit();
|
||||
|
||||
current_position_final = st_get_position_mm(axis);
|
||||
measured_axis_length[0] = abs(current_position_final - current_position_init);
|
||||
|
||||
current_position_init = st_get_position_mm(axis);
|
||||
if (i < 1) {
|
||||
current_position[axis] += 2 * margin;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
|
||||
st_synchronize();
|
||||
current_position[axis] += axis_length;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
|
||||
#ifdef TMC2130
|
||||
tmc2130_home_enter(X_AXIS_MASK << axis);
|
||||
#endif
|
||||
st_synchronize();
|
||||
#ifdef TMC2130
|
||||
tmc2130_home_exit();
|
||||
#endif
|
||||
//current_position[axis] = st_get_position_mm(axis);
|
||||
//plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
// first measurement end and second measurement begin
|
||||
|
||||
current_position[axis] -= margin;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
current_position_final = st_get_position_mm(axis);
|
||||
tmc2130_home_enter(X_AXIS_MASK << axis);
|
||||
current_position[axis] -= (axis_length + margin);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
|
||||
|
||||
st_synchronize();
|
||||
tmc2130_home_exit();
|
||||
|
||||
current_position[axis] -= margin;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder);
|
||||
st_synchronize();
|
||||
}
|
||||
measured_axis_length[i] = abs(current_position_final - current_position_init);
|
||||
current_position_init = st_get_position_mm(axis);
|
||||
|
||||
measured_axis_length[1] = abs(current_position_final - current_position_init);
|
||||
|
||||
//end of second measurement, now check for possible errors:
|
||||
|
||||
for(int i = 0; i < 2; i++){ //check if measured axis length corresponds to expected length
|
||||
SERIAL_ECHOPGM("Measured axis length:");
|
||||
MYSERIAL.println(measured_axis_length[i]);
|
||||
if (abs(measured_axis_length[i] - axis_length) > max_error_mm) {
|
||||
//axis length
|
||||
#ifdef TMC2130
|
||||
tmc2130_home_exit();
|
||||
enable_endstops(false);
|
||||
#endif
|
||||
|
||||
const char *_error_1;
|
||||
const char *_error_2;
|
||||
|
||||
|
|
@ -5497,8 +5518,7 @@ static bool lcd_selfcheck_axis_sg(char axis) {
|
|||
if (axis == Z_AXIS) _error_1 = "Z";
|
||||
|
||||
lcd_selftest_error(9, _error_1, _error_2);
|
||||
//crashdet_enable();
|
||||
//uint8_t crashdet = eeprom_read_byte((uint8_t*)EEPROM_CRASH_DET);
|
||||
reset_crash_det(axis);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -5506,7 +5526,7 @@ static bool lcd_selfcheck_axis_sg(char axis) {
|
|||
SERIAL_ECHOPGM("Axis length difference:");
|
||||
MYSERIAL.println(abs(measured_axis_length[0] - measured_axis_length[1]));
|
||||
|
||||
if (abs(measured_axis_length[0] - measured_axis_length[1]) > 1) {
|
||||
if (abs(measured_axis_length[0] - measured_axis_length[1]) > 1) { //check if difference between first and second measurement is low
|
||||
//loose pulleys
|
||||
const char *_error_1;
|
||||
const char *_error_2;
|
||||
|
|
@ -5516,12 +5536,16 @@ static bool lcd_selfcheck_axis_sg(char axis) {
|
|||
if (axis == Z_AXIS) _error_1 = "Z";
|
||||
|
||||
lcd_selftest_error(8, _error_1, _error_2);
|
||||
//crashdet_enable();
|
||||
|
||||
reset_crash_det(axis);
|
||||
|
||||
return false;
|
||||
}
|
||||
//crashdet_enable();
|
||||
|
||||
reset_crash_det(axis);
|
||||
return true;
|
||||
}
|
||||
#endif //TMC2130
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -34,11 +34,15 @@
|
|||
void lcd_mylang();
|
||||
bool lcd_detected(void);
|
||||
|
||||
|
||||
static void lcd_selftest_v();
|
||||
static bool lcd_selftest();
|
||||
static bool lcd_selfcheck_endstops();
|
||||
static bool lcd_selfcheck_axis(int _axis, int _travel);
|
||||
|
||||
#ifdef TMC2130
|
||||
static void reset_crash_det(char axis);
|
||||
static bool lcd_selfcheck_axis_sg(char axis);
|
||||
#endif //TMC2130
|
||||
static bool lcd_selfcheck_axis(int _axis, int _travel);
|
||||
static bool lcd_selfcheck_check_heater(bool _isbed);
|
||||
static int lcd_selftest_screen(int _step, int _progress, int _progress_scale, bool _clear, int _delay);
|
||||
static void lcd_selftest_screen_step(int _row, int _col, int _state, const char *_name, const char *_indicator);
|
||||
|
|
|
|||
Loading…
Reference in New Issue