From 632781c4a2a5b8f33eb652324259dccaed73452a Mon Sep 17 00:00:00 2001 From: MRprusa3d Date: Thu, 21 Mar 2019 00:45:15 +0100 Subject: [PATCH 1/4] "disable_z()" for Delta PSU --- Firmware/Marlin.h | 6 +++ Firmware/Marlin_main.cpp | 43 +++++++++++++++++++ .../variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 3 ++ 3 files changed, 52 insertions(+) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 2477d1c2..9ccb81c6 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -172,6 +172,12 @@ void manage_inactivity(bool ignore_stepper_queue=false); #define disable_z() {} #endif +#ifdef PSU_Delta +#undef disable_z() +#define disable_z() disable_force_z() +void disable_force_z(); +#endif // PSU_Delta + diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 7be151f9..303d4693 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -9602,3 +9602,46 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) } #define FIL_LOAD_LENGTH 60 + +#ifdef PSU_Delta +void disable_force_z() +{ +uint16_t z_microsteps=0; + +#ifdef TMC2130 +z_microsteps=tmc2130_rd_MSCNT(Z_TMC2130_CS); +#endif //TMC2130 +/* +//planner_abort_hard(); +//sei(); +plan_buffer_line( + current_position[X_AXIS]+10, + current_position[Y_AXIS]+20, +// current_position[Z_AXIS]+float((1024-z_microsteps+7)>>4)/axis_steps_per_unit[Z_AXIS], +current_position[Z_AXIS]+0.026, //0.025, + current_position[E_AXIS], + 40, active_extruder); +st_synchronize(); + z_microsteps=tmc2130_rd_MSCNT(Z_TMC2130_CS); + MYSERIAL.println(z_microsteps,DEC); + + MYSERIAL.println(current_position[Z_AXIS]+float((1024-z_microsteps+7)>>4)/cs.axis_steps_per_unit[Z_AXIS],DEC); + MYSERIAL.println(current_position[Z_AXIS],DEC); + MYSERIAL.println(z_microsteps,DEC); + MYSERIAL.println(cs.axis_steps_per_unit[Z_AXIS],DEC); + MYSERIAL.println(float((1024-z_microsteps+7)>>4)/cs.axis_steps_per_unit[Z_AXIS],DEC); +*/ +planner_abort_hard(); +sei(); +plan_buffer_line( + current_position[X_AXIS], + current_position[Y_AXIS], + current_position[Z_AXIS]+float((1024-z_microsteps+7)>>4)/cs.axis_steps_per_unit[Z_AXIS], + current_position[E_AXIS], + 40, active_extruder); +st_synchronize(); + +WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); +axis_known_position[Z_AXIS]=false; +} +#endif // PSU_Delta diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index 1c0c6d28..9f82e79d 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -22,6 +22,9 @@ #define STEEL_SHEET #define HAS_SECOND_SERIAL_PORT +// PSU +#define PSU_Delta // uncomment if DeltaElectronics PSU installed + // Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) //#define E3D_PT100_EXTRUDER_WITH_AMP From 17a534e42b91b54673164305faeabb8f8c089f75 Mon Sep 17 00:00:00 2001 From: MRprusa3d Date: Mon, 25 Mar 2019 23:28:25 +0100 Subject: [PATCH 2/4] "disable_z()" for Delta PSU II --- Firmware/Marlin_main.cpp | 4 +++- Firmware/io_atmega2560.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 303d4693..d119fbe4 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1316,7 +1316,7 @@ void setup() } #endif //TMC2130 -#if defined(Z_AXIS_ALWAYS_ON) +#if defined(Z_AXIS_ALWAYS_ON) && !defined(PSU_Delta) enable_z(); #endif farm_mode = eeprom_read_byte((uint8_t*)EEPROM_FARM_MODE); @@ -9608,6 +9608,8 @@ void disable_force_z() { uint16_t z_microsteps=0; +if(PIN_INQ(Z_ENABLE_PIN)!=Z_ENABLE_ON) + return; // motor already disabled (may be ;-p ) #ifdef TMC2130 z_microsteps=tmc2130_rd_MSCNT(Z_TMC2130_CS); #endif //TMC2130 diff --git a/Firmware/io_atmega2560.h b/Firmware/io_atmega2560.h index e8c756ff..e353eb05 100644 --- a/Firmware/io_atmega2560.h +++ b/Firmware/io_atmega2560.h @@ -368,6 +368,7 @@ #define PIN_SET(pin) PORT(pin) |= __MSK(pin) #define PIN_VAL(pin, val) if (val) PIN_SET(pin); else PIN_CLR(pin); #define PIN_GET(pin) (PIN(pin) & __MSK(pin)) +#define PIN_INQ(pin) (PORT(pin) & __MSK(pin)) #endif //_IO_ATMEGA2560 From 4b1fc690888c52ddf4edf3cefaeb41231b423bf2 Mon Sep 17 00:00:00 2001 From: MRprusa3d Date: Tue, 2 Apr 2019 20:04:44 +0200 Subject: [PATCH 3/4] "disable_z()" for Delta PSU III stealthChop set if motor-disable (@ Z) required --- Firmware/Marlin.h | 4 +++ Firmware/Marlin_main.cpp | 61 +++++++++++++++++++++++++--------------- Firmware/stepper.cpp | 5 +++- 3 files changed, 46 insertions(+), 24 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 9ccb81c6..1516941b 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -173,9 +173,13 @@ void manage_inactivity(bool ignore_stepper_queue=false); #endif #ifdef PSU_Delta +void init_force_z(); #undef disable_z() #define disable_z() disable_force_z() void disable_force_z(); +#undef enable_disable_z() +#define enable_z() enable_force_z() +void enable_force_z(); #endif // PSU_Delta diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index d119fbe4..8aa2c6c8 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -9604,35 +9604,27 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) #define FIL_LOAD_LENGTH 60 #ifdef PSU_Delta +bool bEnableForce_z; + +void init_force_z() +{ +WRITE(Z_ENABLE_PIN,Z_ENABLE_ON); +bEnableForce_z=true; // "true"-value enforce "disable_force_z()" executing +disable_force_z(); +} + void disable_force_z() { uint16_t z_microsteps=0; -if(PIN_INQ(Z_ENABLE_PIN)!=Z_ENABLE_ON) +if(!bEnableForce_z) return; // motor already disabled (may be ;-p ) +bEnableForce_z=false; + +// alignment to full-step #ifdef TMC2130 z_microsteps=tmc2130_rd_MSCNT(Z_TMC2130_CS); -#endif //TMC2130 -/* -//planner_abort_hard(); -//sei(); -plan_buffer_line( - current_position[X_AXIS]+10, - current_position[Y_AXIS]+20, -// current_position[Z_AXIS]+float((1024-z_microsteps+7)>>4)/axis_steps_per_unit[Z_AXIS], -current_position[Z_AXIS]+0.026, //0.025, - current_position[E_AXIS], - 40, active_extruder); -st_synchronize(); - z_microsteps=tmc2130_rd_MSCNT(Z_TMC2130_CS); - MYSERIAL.println(z_microsteps,DEC); - - MYSERIAL.println(current_position[Z_AXIS]+float((1024-z_microsteps+7)>>4)/cs.axis_steps_per_unit[Z_AXIS],DEC); - MYSERIAL.println(current_position[Z_AXIS],DEC); - MYSERIAL.println(z_microsteps,DEC); - MYSERIAL.println(cs.axis_steps_per_unit[Z_AXIS],DEC); - MYSERIAL.println(float((1024-z_microsteps+7)>>4)/cs.axis_steps_per_unit[Z_AXIS],DEC); -*/ +#endif // TMC2130 planner_abort_hard(); sei(); plan_buffer_line( @@ -9643,7 +9635,30 @@ plan_buffer_line( 40, active_extruder); st_synchronize(); -WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); +// switching to silent mode +#ifdef TMC2130 +tmc2130_mode=TMC2130_MODE_SILENT; +update_mode_profile(); +tmc2130_init(); +#endif // TMC2130 + axis_known_position[Z_AXIS]=false; } + + +void enable_force_z() +{ +if(bEnableForce_z) + return; // motor already enabled (may be ;-p ) +bEnableForce_z=true; + +// mode recovering +#ifdef TMC2130 +tmc2130_mode=eeprom_read_byte((uint8_t*)EEPROM_SILENT)?TMC2130_MODE_SILENT:TMC2130_MODE_NORMAL; +update_mode_profile(); +tmc2130_init(); +#endif // TMC2130 + +WRITE(Z_ENABLE_PIN,Z_ENABLE_ON); // slightly redundant ;-p +} #endif // PSU_Delta diff --git a/Firmware/stepper.cpp b/Firmware/stepper.cpp index c21a4e9f..dfb2dbe2 100644 --- a/Firmware/stepper.cpp +++ b/Firmware/stepper.cpp @@ -1122,7 +1122,7 @@ void clear_current_adv_vars() { } #endif // LIN_ADVANCE - + void st_init() { #ifdef TMC2130 @@ -1306,6 +1306,9 @@ void st_init() SET_OUTPUT(Z2_STEP_PIN); WRITE(Z2_STEP_PIN,INVERT_Z_STEP_PIN); #endif + #ifdef PSU_Delta + init_force_z(); + #endif // PSU_Delta disable_z(); #endif #if defined(E0_STEP_PIN) && (E0_STEP_PIN > -1) From 1d8c24e8a9877eaf97240b73f53d69650f1093af Mon Sep 17 00:00:00 2001 From: MRprusa3d Date: Wed, 5 Jun 2019 19:22:04 +0200 Subject: [PATCH 4/4] "disable_z()" for Delta PSU IV correction for (motor) mode switching --- Firmware/Marlin.h | 1 + Firmware/Marlin_main.cpp | 13 +++++++++++-- Firmware/tmc2130.cpp | 7 ++++++- Firmware/tmc2130.h | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 1516941b..149d3298 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -174,6 +174,7 @@ void manage_inactivity(bool ignore_stepper_queue=false); #ifdef PSU_Delta void init_force_z(); +void check_force_z(); #undef disable_z() #define disable_z() disable_force_z() void disable_force_z(); diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 8aa2c6c8..2b873354 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1279,6 +1279,9 @@ void setup() update_mode_profile(); tmc2130_init(); #endif //TMC2130 +#ifdef PSU_Delta + init_force_z(); // ! important for correct Z-axis initialization +#endif // PSU_Delta setup_photpin(); @@ -9613,6 +9616,12 @@ bEnableForce_z=true; // "true"-value enforce "disab disable_force_z(); } +void check_force_z() +{ +if(!(bEnableForce_z||eeprom_read_byte((uint8_t*)EEPROM_SILENT))) + init_force_z(); // causes enforced switching into disable-state +} + void disable_force_z() { uint16_t z_microsteps=0; @@ -9639,7 +9648,7 @@ st_synchronize(); #ifdef TMC2130 tmc2130_mode=TMC2130_MODE_SILENT; update_mode_profile(); -tmc2130_init(); +tmc2130_init(true); #endif // TMC2130 axis_known_position[Z_AXIS]=false; @@ -9656,7 +9665,7 @@ bEnableForce_z=true; #ifdef TMC2130 tmc2130_mode=eeprom_read_byte((uint8_t*)EEPROM_SILENT)?TMC2130_MODE_SILENT:TMC2130_MODE_NORMAL; update_mode_profile(); -tmc2130_init(); +tmc2130_init(true); #endif // TMC2130 WRITE(Z_ENABLE_PIN,Z_ENABLE_ON); // slightly redundant ;-p diff --git a/Firmware/tmc2130.cpp b/Firmware/tmc2130.cpp index 8cd3422a..7c35815c 100644 --- a/Firmware/tmc2130.cpp +++ b/Firmware/tmc2130.cpp @@ -143,7 +143,7 @@ uint16_t __tcoolthrs(uint8_t axis) return 0; } -void tmc2130_init() +void tmc2130_init(bool bSupressFlag=false) { // DBG(_n("tmc2130_init(), mode=%S\n"), tmc2130_mode?_n("STEALTH"):_n("NORMAL")); WRITE(X_TMC2130_CS, HIGH); @@ -216,6 +216,11 @@ void tmc2130_init() tmc2130_set_wave(E_AXIS, 247, tmc2130_wave_fac[E_AXIS]); #endif //TMC2130_LINEARITY_CORRECTION +#ifdef PSU_Delta + if(!bSupressFlag) + check_force_z(); +#endif // PSU_Delta + } uint8_t tmc2130_sample_diag() diff --git a/Firmware/tmc2130.h b/Firmware/tmc2130.h index 1c854f79..a1d160f0 100644 --- a/Firmware/tmc2130.h +++ b/Firmware/tmc2130.h @@ -51,7 +51,7 @@ typedef struct extern tmc2130_chopper_config_t tmc2130_chopper_config[4]; //initialize tmc2130 -extern void tmc2130_init(); +extern void tmc2130_init(bool bSupressFlag=false); //check diag pins (called from stepper isr) extern void tmc2130_st_isr(); //update stall guard (called from st_synchronize inside the loop)