Disable bed PWM while probing bed.

This commit is contained in:
leptun 2019-10-06 10:50:11 +03:00
parent 3aa380e348
commit 570b5989f4
2 changed files with 10 additions and 0 deletions

View file

@ -61,6 +61,8 @@ enum class States : uint8_t {
///! Inner states of the finite automaton
static States state = States::ZERO_START;
bool bedPWMDisabled = 0;
///! Fast PWM counter is used in the RISE and FALL states (62.5kHz)
static uint8_t slowCounter = 0;
///! Slow PWM counter is used in the ZERO and ONE states (62.5kHz/8 or 64)
@ -93,6 +95,7 @@ ISR(TIMER0_OVF_vect) // timer compare interrupt service routine
{
switch(state){
case States::ZERO_START:
if (bedPWMDisabled) break;
pwm = soft_pwm_bed << 1;// expecting soft_pwm_bed to be 7bit!
if( pwm != 0 ){
state = States::ZERO; // do nothing, let it tick once again after the 30Hz period
@ -144,6 +147,9 @@ ISR(TIMER0_OVF_vect) // timer compare interrupt service routine
// if slowInc==2, soft_pwm == 251 will be the first to do short drops to zero. 252 will keep full heating
return; // want full duty for the next ONE cycle again - so keep on heating and just wait for the next timer ovf
}
if (bedPWMDisabled){
return;
}
// otherwise moving towards FALL
// @@TODO it looks like ONE_TO_FALL isn't necessary, there are no artefacts at all
state = States::ONE;//_TO_FALL;

View file

@ -23,6 +23,7 @@ float world2machine_shift[2];
#define WEIGHT_FIRST_ROW_Y_HIGH (0.3f)
#define WEIGHT_FIRST_ROW_Y_LOW (0.0f)
extern bool bedPWMDisabled;
// Scaling of the real machine axes against the programmed dimensions in the firmware.
@ -946,6 +947,7 @@ inline bool find_bed_induction_sensor_point_z(float minimum_z, uint8_t n_iter, i
)
{
bool high_deviation_occured = false;
bedPWMDisabled = 1;
#ifdef TMC2130
FORCE_HIGH_POWER_START;
#endif
@ -1044,6 +1046,7 @@ inline bool find_bed_induction_sensor_point_z(float minimum_z, uint8_t n_iter, i
#ifdef TMC2130
FORCE_HIGH_POWER_END;
#endif
bedPWMDisabled = 0;
return true;
error:
@ -1053,6 +1056,7 @@ error:
#ifdef TMC2130
FORCE_HIGH_POWER_END;
#endif
bedPWMDisabled = 0;
return false;
}