From e7dca8614be5cac516c0d7989a28abdf21d412d8 Mon Sep 17 00:00:00 2001 From: Erik van der Zalm Date: Fri, 18 Nov 2011 18:59:17 +0100 Subject: [PATCH] Advance experiments. Not working yet. --- Marlin/Configuration.h | 45 ++++++++++++-------------- Marlin/Marlin.pde | 3 +- Marlin/stepper.cpp | 72 ++++++++++++++++++++++-------------------- Marlin/watchdog.pde | 6 ++-- 4 files changed, 61 insertions(+), 65 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 3b0cfacfeb..7cbb66cf74 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -11,7 +11,7 @@ // Frequency limit // See nophead's blog for more info -// Not working OK +// Not working O //#define XY_FREQUENCY_LIMIT 15 // Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end @@ -31,7 +31,7 @@ // Sanguinololu 1.2 and above = 62 // Ultimaker = 7, // Teensylu = 8 -#define MOTHERBOARD 7 +#define MOTHERBOARD 5 //=========================================================================== //=============================Thermal Settings ============================ @@ -45,9 +45,9 @@ // 5 is ParCan supplied 104GT-2 100K // 6 is EPCOS 100k // 7 is 100k Honeywell thermistor 135-104LAG-J01 -#define THERMISTORHEATER_0 3 -#define THERMISTORHEATER_1 3 -#define THERMISTORBED 3 +//#define THERMISTORHEATER_0 3 +//#define THERMISTORHEATER_1 3 +//#define THERMISTORBED 3 //#define HEATER_0_USES_THERMISTOR //#define HEATER_1_USES_THERMISTOR @@ -120,9 +120,15 @@ // #define DEFAULT_Ki (2*Kp/PID_SWING_AT_CRITIAL*PID_dT) // #define DEFAULT_Kd (PID_SWING_AT_CRITIAL/8./PID_dT) +// Ultitmaker #define DEFAULT_Kp 22.2 #define DEFAULT_Ki (1.25*PID_dT) #define DEFAULT_Kd (99/PID_dT) + +// Mendel Parts V9 on 12V +// #define DEFAULT_Kp 63.0 +// #define DEFAULT_Ki (2.25*PID_dT) +// #define DEFAULT_Kd (440/PID_dT) #endif #ifdef PID_PI @@ -141,13 +147,6 @@ #endif // PIDTEMP - - - - - - - //=========================================================================== //=============================Mechanical Settings=========================== //=========================================================================== @@ -178,10 +177,10 @@ const bool ENDSTOPS_INVERTING = true; // set to true to invert the logic of the //#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true //#define INVERT_E_DIR true // for direct drive extruder v9 set to true, for geared extruder set to false -#define INVERT_X_DIR true // for Mendel set to false, for Orca set to true -#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false -#define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true -#define INVERT_E_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false +//#define INVERT_X_DIR true // for Mendel set to false, for Orca set to true +//#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false +//#define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true +//#define INVERT_E_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false //// ENDSTOP SETTINGS: // Sets direction of endstops when homing; 1=MAX, -1=MIN @@ -243,13 +242,10 @@ const bool ENDSTOPS_INVERTING = true; // set to true to invert the logic of the // The watchdog waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature // this enables the watchdog interrupt. -#define USE_WATCHDOG +//#define USE_WATCHDOG // you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby: -#define RESET_MANUAL -#define WATCHDOG_TIMEOUT 4 //seconds - - - +//#define RESET_MANUAL +//#define WATCHDOG_TIMEOUT 4 //seconds // extruder advance constant (s2/mm3) // @@ -275,7 +271,7 @@ const bool ENDSTOPS_INVERTING = true; // set to true to invert the logic of the //#define ULTRA_LCD //general lcd support, also 16x2 //#define SDSUPPORT // Enable SD Card Support in Hardware Console -#define ULTIPANEL +//#define ULTIPANEL #ifdef ULTIPANEL // #define NEWPANEL //enable this if you have a click-encoder panel #define SDSUPPORT @@ -307,8 +303,7 @@ const bool ENDSTOPS_INVERTING = true; // set to true to invert the logic of the #define AUTOTEMP_FACTOR 1000. //current target temperature= min+largest buffered espeeds)*FACTOR - -const int dropsegments=0; //everything with less than this number of steps will be ignored as move and joined with the next movement +const int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement //=========================================================================== //=============================Buffers ============================ diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 9f84f6c33d..3a6d4e6724 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -232,10 +232,9 @@ void setup() axis_steps_per_sqr_second[i] = max_acceleration_units_per_sq_second[i] * axis_steps_per_unit[i]; } - + tp_init(); // Initialize temperature loop plan_init(); // Initialize planner; st_init(); // Initialize stepper; - tp_init(); // Initialize temperature loop } diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index 2e232201bf..b08e61ae45 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -56,8 +56,8 @@ static unsigned long step_events_completed; // The number of step events execute #ifdef ADVANCE static long advance_rate, advance, final_advance = 0; static short old_advance = 0; - static short e_steps; #endif +static short e_steps; static unsigned char busy = false; // TRUE when SIG_OUTPUT_COMPARE1A is being serviced. Used to avoid retriggering that handler. static long acceleration_time, deceleration_time; //static unsigned long accelerate_until, decelerate_after, acceleration_rate, initial_rate, final_rate, nominal_rate; @@ -156,7 +156,7 @@ asm volatile ( \ #define DISABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 &= ~(1< interrupt out_bits = current_block->direction_bits; - #ifdef ADVANCE - // Calculate E early. - counter_e += current_block->steps_e; - if (counter_e > 0) { - counter_e -= current_block->step_event_count; - if ((out_bits & (1<> 16) - old_advance); - CRITICAL_SECTION_END; - old_advance = advance >> 16; - #endif //ADVANCE - // Set direction en check limit switches if ((out_bits & (1< -1 - if(READ(X_MIN_PIN) != ENDSTOPS_INVERTING) { - // endstops_triggered(step_events_completed); - step_events_completed = current_block->step_event_count; - } + if(READ(X_MIN_PIN) != ENDSTOPS_INVERTING) { + // endstops_triggered(step_events_completed); + step_events_completed = current_block->step_event_count; + } #endif } else { // +direction @@ -355,7 +332,7 @@ ISR(TIMER1_COMPA_vect) // endstops_triggered(step_events_completed); step_events_completed = current_block->step_event_count; } - #endif + #endif } if ((out_bits & (1< -1 if(READ(Y_MIN_PIN) != ENDSTOPS_INVERTING) { - // endstops_triggered(step_events_completed); +// endstops_triggered(step_events_completed); step_events_completed = current_block->step_event_count; } #endif @@ -390,7 +367,7 @@ ISR(TIMER1_COMPA_vect) #endif #if Z_MIN_PIN > -1 if(READ(Z_MIN_PIN) != ENDSTOPS_INVERTING) { - endstops_triggered(step_events_completed); + // endstops_triggered(step_events_completed); step_events_completed = current_block->step_event_count; } #endif @@ -416,6 +393,30 @@ ISR(TIMER1_COMPA_vect) #endif //!ADVANCE for(int8_t i=0; i < step_loops; i++) { // Take multiple steps per interrupt (For high speed moves) + /* + counter_e += current_block->steps_e; + if (counter_e > 0) { + counter_e -= current_block->step_event_count; + if ((out_bits & (1<> 16) - old_advance); + CRITICAL_SECTION_END; + old_advance = advance >> 16; + */ + counter_x += current_block->steps_x; if (counter_x > 0) { WRITE(X_STEP_PIN, HIGH); @@ -649,7 +650,8 @@ void st_init() TCCR1B = (TCCR1B & ~(0x07<