0.92.8 Z-probe hits the bed with G32 command (Github 2 Feb 2016 dev version)

I've just tried to move from 92.6 to 92.8 and found strange G32 behavior. Previously in 92.6 G32 worked as expected, taking care about Z-probe height and z-probe bed height in Eeprom, but in 92.8 it looks like G32 command doesn't care about z-probe height and hits the bed. Any suggestions? I double checked all values in Eeprom - everything looks OK.

Comments

  • edited February 2016
    PS: Commands.cpp looks different for Case G32 procedure:

    #if FEATURE_AUTOLEVEL
            case 32: // G32 Auto-Bed leveling
            {
    #if defined(Z_PROBE_MIN_TEMPERATURE) && Z_PROBE_MIN_TEMPERATURE
                float actTemp[NUM_EXTRUDER];
                for(int i = 0; i < NUM_EXTRUDER; i++)
                    actTemp[i] = extruder[i].tempControl.targetTemperatureC;
                Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,ZHOME_HEAT_HEIGHT,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
                Commands::waitUntilEndOfAllMoves();
    #if ZHOME_HEAT_ALL
                for(int i = 0; i < NUM_EXTRUDER; i++) {
                    Extruder::setTemperatureForExtruder(RMath::max(actTemp[i],static_cast<float>(ZPROBE_MIN_TEMPERATURE)),i,false,false);
                }
                for(int i = 0; i < NUM_EXTRUDER; i++) {
                    if(extruder[i].tempControl.currentTemperatureC < ZPROBE_MIN_TEMPERATURE)
                        Extruder::setTemperatureForExtruder(RMath::max(actTemp[i],static_cast<float>(ZPROBE_MIN_TEMPERATURE)),i,false,true);
                }
    #else
                if(extruder[Extruder::current->id].tempControl.currentTemperatureC < ZPROBE_MIN_TEMPERATURE)
                    Extruder::setTemperatureForExtruder(RMath::max(actTemp[Extruder::current->id],static_cast<float>(ZPROBE_MIN_TEMPERATURE)),Extruder::current->id,false,true);
    #endif
    #endif
                runBedLeveling(com);
    #if defined(Z_PROBE_MIN_TEMPERATURE) && Z_PROBE_MIN_TEMPERATURE
    #if ZHOME_HEAT_ALL
                for(int i = 0; i < NUM_EXTRUDER; i++) {
                    Extruder::setTemperatureForExtruder(RMath::max(actTemp[i],static_cast<float>(ZPROBE_MIN_TEMPERATURE)),i,false,false);
                }
                for(int i = 0; i < NUM_EXTRUDER; i++) {
                    if(extruder[i].tempControl.currentTemperatureC < ZPROBE_MIN_TEMPERATURE)
                        Extruder::setTemperatureForExtruder(RMath::max(actTemp[i],static_cast<float>(ZPROBE_MIN_TEMPERATURE)),i,false,true);
                }
    #else
                if(extruder[Extruder::current->id].tempControl.currentTemperatureC < ZPROBE_MIN_TEMPERATURE)
                    Extruder::setTemperatureForExtruder(RMath::max(actTemp[Extruder::current->id],static_cast<float>(ZPROBE_MIN_TEMPERATURE)),Extruder::current->id,false,true);
    #endif
    #endif
                }
                break;
  • edited February 2016
    I've found the problem - it's #define ZHOME_HEAT_HEIGHT 20. My probe is much lower :)
    It's good to make a check if ZHOME_HEAT_HEIGHT is not less than z-probe height + z-probe bed height. Or just calculate it automatically.

    Also we need to check for Z_PROBE_REQUIRES_HEATING at:
            case 32: // G32 Auto-Bed leveling
            {
    #if defined(Z_PROBE_MIN_TEMPERATURE) && Z_PROBE_MIN_TEMPERATURE

    because it moves to heat position even if Z_PROBE_REQUIRES_HEATING = 0 and makes it twice :)


  • I see. I have now modified it to heat only when enabled and then go to max(probe height, heat height) so that it should work in any case. This all came originally for sensor inside nozzle so zprobeheight was 0 and the problems never appeared (ok and I needed to heat anyway).
Sign In or Register to comment.