Notifications
Clear all

[Closed] MK3 Kit - mysterious Z calibration failure  

  RSS
giles.p
(@giles-p)
Eminent Member
MK3 Kit - mysterious Z calibration failure

MK3 kit, assembled and passes self-test.

Calibrate XYZ (or just Z) has the following behaviour:
- Auto homes X/Y
- Z moves to the very top, both motors rattle, each side of the X carriage is hard up against its plastic top bracket
- Asks if steel plate is on bed, I say no
- Reminds me to put a sheet of paper on bed
- Message says calibration failed, check axes. At this point the Z has not moved down at all.

Checked blockages in Z, and both Z screws turn freely.
Also checked Z rods are seated in motor brackets at bottom, and top brackets are square to alu frame without strain (holes in motor brackets needed reaming a little).
Manually moving Z axis (either from LCD or turn by hand) works fine both up and down.
What obvious thing am I missing?

Posted : 11/03/2018 7:31 am
Olef
 Olef
(@olef)
Prominent Member
Re: MK3 Kit - mysterious Z calibration failure

Most peculiar. Is your extruder assembled correctly i.e. is the E3DV6 in the correct position and not too low? This catches a few out. Compare the pics Step 17 onwards with your assembly http://manual.prusa3d.com/Guide/5.+E-axis+assembly/510?lang=en . Good luck!

Posted : 11/03/2018 10:13 am
giles.p
(@giles-p)
Eminent Member
Topic starter answered:
Re: MK3 Kit - mysterious Z calibration failure

No it's flush at the bottom just like the photos - in any event, the failure happens at the top of of the Z-travel, the hotend or PINDA probe is not involved. The carriage has not yet started to move down towards the bed. There is no interference that I can see from cables, zip ties, etc. at the top of the frame.

I will dig out the source from github and try and find what routine prints that message: any pointers from those who know it better than me?

EDIT: spelling.

Posted : 11/03/2018 10:01 pm
giles.p
(@giles-p)
Eminent Member
Topic starter answered:
Re: MK3 Kit - mysterious Z calibration failure

OK, I've looked at the source, and this is what I am seeing:

In routine gcode_M45 (Marlin_main.cpp, line 2164) the calibration:
- initially sets the Z position to 0 (by calling calibrate_z_auto or lcd_calibrate_z_end_stop_manual, either way)
- attempts to move up MESH_HOME_Z_SEARCH (= 5) mm
- tests if the current Z position is in fact 5 (line 2241: if (st_get_position_mm(Z_AXIS) == MESH_HOME_Z_SEARCH))
- this then fails and the message is output "Calibration failed! Check the axes and run again." (curiously, hardcoded in English. This is the only time this message appears in the code)

So what I would expect to see is from wherever the Z axis is, the Z would move up 5mm. Instead, it keeps going up until it hits the stops.
Is it possible that pulses are not being counted correctly?

The relevant routine is here:
bool gcode_M45(bool onlyZ)
{
bool final_result = false;
#ifdef TMC2130
FORCE_HIGH_POWER_START;
#endif // TMC2130
// Only Z calibration?
if (!onlyZ)
{
setTargetBed(0);
setTargetHotend(0, 0);
setTargetHotend(0, 1);
setTargetHotend(0, 2);
adjust_bed_reset(); //reset bed level correction
}

// Disable the default update procedure of the display. We will do a modal dialog.
lcd_update_enable(false);
// Let the planner use the uncorrected coordinates.
mbl.reset();
// Reset world2machine_rotation_and_skew and world2machine_shift, therefore
// the planner will not perform any adjustments in the XY plane.
// Wait for the motors to stop and update the current position with the absolute values.
world2machine_revert_to_uncorrected();
// Reset the baby step value applied without moving the axes.
babystep_reset();
// Mark all axes as in a need for homing.
memset(axis_known_position, 0, sizeof(axis_known_position));

// Home in the XY plane.
//set_destination_to_current();
setup_for_endstop_move();
lcd_display_message_fullscreen_P(MSG_AUTO_HOME);
home_xy();

enable_endstops(false);
current_position[X_AXIS] += 5;
current_position[Y_AXIS] += 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder);
st_synchronize();

// Let the user move the Z axes up to the end stoppers.
#ifdef TMC2130
if (calibrate_z_auto())
{
#else //TMC2130
if (lcd_calibrate_z_end_stop_manual(onlyZ))
{
#endif //TMC2130
refresh_cmd_timeout();
//if (((degHotend(0) > MAX_HOTEND_TEMP_CALIBRATION) || (degBed() > MAX_BED_TEMP_CALIBRATION)) && (!onlyZ))
//{
// lcd_wait_for_cool_down();
//}
if(!onlyZ)
{
KEEPALIVE_STATE(PAUSED_FOR_USER);
bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_STEEL_SHEET_CHECK, false, false);
if(result) lcd_show_fullscreen_message_and_wait_P(MSG_REMOVE_STEEL_SHEET);
lcd_show_fullscreen_message_and_wait_P(MSG_CONFIRM_NOZZLE_CLEAN);
lcd_show_fullscreen_message_and_wait_P(MSG_PAPER);
KEEPALIVE_STATE(IN_HANDLER);
lcd_display_message_fullscreen_P(MSG_FIND_BED_OFFSET_AND_SKEW_LINE1);
lcd_implementation_print_at(0, 2, 1);
lcd_printPGM(MSG_FIND_BED_OFFSET_AND_SKEW_LINE2);
}
// Move the print head close to the bed.
current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;

bool endstops_enabled = enable_endstops(true);
tmc2130_home_enter(Z_AXIS_MASK);
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder);

st_synchronize();
tmc2130_home_exit();
enable_endstops(endstops_enabled);

if (st_get_position_mm(Z_AXIS) == MESH_HOME_Z_SEARCH)
{

//#ifdef TMC2130
// tmc2130_home_enter(X_AXIS_MASK | Y_AXIS_MASK);
//#endif

int8_t verbosity_level = 0;
if (code_seen('V'))
{
// Just 'V' without a number counts as V1.
char c = strchr_pointer[1];
verbosity_level = (c == ' ' || c == '\t' || c == 0) ? 1 : code_value_short();
}

if (onlyZ)
{
clean_up_after_endstop_move();
// Z only calibration.
// Load the machine correction matrix
world2machine_initialize();
// and correct the current_position to match the transformed coordinate system.
world2machine_update_current();
//FIXME
bool result = sample_mesh_and_store_reference();
if (result)
{
if (calibration_status() == CALIBRATION_STATUS_Z_CALIBRATION)
// Shipped, the nozzle height has been set already. The user can start printing now.
calibration_status_store(CALIBRATION_STATUS_CALIBRATED);
final_result = true;
// babystep_apply();
}
}
else
{
// Reset the baby step value and the baby step applied flag.
calibration_status_store(CALIBRATION_STATUS_XYZ_CALIBRATION);
eeprom_update_word((uint16_t*)EEPROM_BABYSTEP_Z, 0);
// Complete XYZ calibration.
uint8_t point_too_far_mask = 0;
BedSkewOffsetDetectionResultType result = find_bed_offset_and_skew(verbosity_level, point_too_far_mask);
clean_up_after_endstop_move();
// Print head up.
current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder);
st_synchronize();
if (result >= 0)
{
point_too_far_mask = 0;
// Second half: The fine adjustment.
// Let the planner use the uncorrected coordinates.
mbl.reset();
world2machine_reset();
// Home in the XY plane.
setup_for_endstop_move();
home_xy();
result = improve_bed_offset_and_skew(1, verbosity_level, point_too_far_mask);
clean_up_after_endstop_move();
// Print head up.
current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder);
st_synchronize();
// if (result >= 0) babystep_apply();
}
lcd_bed_calibration_show_result(result, point_too_far_mask);
if (result >= 0)
{
// Calibration valid, the machine should be able to print. Advise the user to run the V2Calibration.gcode.
calibration_status_store(CALIBRATION_STATUS_LIVE_ADJUST);
if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) != 1) lcd_show_fullscreen_message_and_wait_P(MSG_BABYSTEP_Z_NOT_SET);
final_result = true;
}
}
#ifdef TMC2130
tmc2130_home_exit();
#endif
}
else
{
lcd_show_fullscreen_message_and_wait_P(PSTR("Calibration failed! Check the axes and run again."));
final_result = false;
}
}
else
{
// Timeouted.
}
lcd_update_enable(true);
#ifdef TMC2130
FORCE_HIGH_POWER_END;
#endif // TMC2130
return final_result;
}

Posted : 12/03/2018 5:10 am
reid.b
(@reid-b)
Reputable Member
Re: MK3 Kit - mysterious Z calibration failure

I'm gonna guess something is wrong with your Pinda or pinda wiring. It may sense that it is already near the bed due to the pinda probe, even though it is at the very top. The error you are seeing is the exact same error that is thrown if it moves down and then senses that it has not moved far enough down before the pinda fires.

Posted : 12/03/2018 5:19 am
giles.p
(@giles-p)
Eminent Member
Topic starter answered:
Re: MK3 Kit - mysterious Z calibration failure

There's the problem 🙂 a loose PINDA cable in the (very crowded) electronics box. Now have calibration. 😀
Getting from the symptom to the diagnosis relying on that error message was never going to happen, though - and the self-test told me the PINDA was OK... thanks for all help.

Posted : 12/03/2018 11:29 am
Shinohara
(@shinohara)
New Member
Re: MK3 Kit - mysterious Z calibration failure

I'm having this same issue, but the pinda probe connection seems fine. I've disconnected and reconnected it. The kinda probe itself is lit up, and the light goes out when I bring the spring steel sheet into proximity with it. Any other ideas as to what may be causing the issue?

Posted : 12/05/2018 4:24 am
Share: