From 3752f50f35d79d1e7148b37846692593a45d6ab0 Mon Sep 17 00:00:00 2001 From: Patrick Felixberger Date: Tue, 15 May 2018 21:21:32 +0200 Subject: [PATCH] Small timer improvements --- GRBL_Advanced.elay | 12 ++++++------ HAL/TIM/TIM.c | 2 +- grbl/Config.h | 2 +- grbl/Stepper.c | 10 ++++++++-- grbl/defaults.h | 6 +++--- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/GRBL_Advanced.elay b/GRBL_Advanced.elay index ee9435c..4e015b5 100644 --- a/GRBL_Advanced.elay +++ b/GRBL_Advanced.elay @@ -136,7 +136,7 @@ - + @@ -236,9 +236,9 @@ - + - + @@ -256,9 +256,9 @@ - + - + @@ -288,7 +288,7 @@ - + diff --git a/HAL/TIM/TIM.c b/HAL/TIM/TIM.c index 9cd9761..c9ac8fc 100644 --- a/HAL/TIM/TIM.c +++ b/HAL/TIM/TIM.c @@ -90,7 +90,7 @@ void TIM9_Init(void) TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OC1Init(TIM9, &TIM_OCInitStructure); - TIM_OC1PreloadConfig(TIM9, TIM_OCPreload_Disable); + TIM_OC1PreloadConfig(TIM9, TIM_OCPreload_Enable); /* Enable the TIM9 global Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = TIM1_BRK_TIM9_IRQn; diff --git a/grbl/Config.h b/grbl/Config.h index f6aa4e1..7758323 100644 --- a/grbl/Config.h +++ b/grbl/Config.h @@ -281,7 +281,7 @@ // step rate is strictly limited by the CPU speed and will change if something other than an AVR running // at 16MHz is used. // NOTE: For now disabled, will enable if flash space permits. -// #define MAX_STEP_RATE_HZ 30000 // Hz +#define MAX_STEP_RATE_HZ 50000 // Hz // By default, Grbl sets all input pins to normal-high operation with their internal pull-up resistors // enabled. This simplifies the wiring for users by requiring only a switch connected to ground, diff --git a/grbl/Stepper.c b/grbl/Stepper.c index f01d8b1..e6957ce 100644 --- a/grbl/Stepper.c +++ b/grbl/Stepper.c @@ -66,6 +66,12 @@ error "AMASS must have 1 or more levels to operate correctly." #endif +#ifdef MAX_STEP_RATE_HZ + #define STEP_TIMER_MIN (uint16_t)(24000000UL / MAX_STEP_RATE_HZ) +#else + #define STEP_TIMER_MIN (uint16_t)(50000) +#endif + // Stores the planner block Bresenham algorithm execution data for the segments in the segment // buffer. Normally, this buffer is partially in-use, but, for the worst case scenario, it will @@ -358,8 +364,8 @@ void Stepper_MainISR(void) // Initialize step segment timing per step and load number of steps to execute. // Limit ISR to 30 KHz - if(st.exec_segment->cycles_per_tick < 667) { - st.exec_segment->cycles_per_tick = 667; + if(st.exec_segment->cycles_per_tick < STEP_TIMER_MIN) { + st.exec_segment->cycles_per_tick = STEP_TIMER_MIN; } TIM9->ARR = st.exec_segment->cycles_per_tick; diff --git a/grbl/defaults.h b/grbl/defaults.h index fe94c32..5902c49 100644 --- a/grbl/defaults.h +++ b/grbl/defaults.h @@ -33,9 +33,9 @@ #define DEFAULT_X_STEPS_PER_MM 400.0 #define DEFAULT_Y_STEPS_PER_MM 400.0 #define DEFAULT_Z_STEPS_PER_MM 400.0 - #define DEFAULT_X_MAX_RATE 600.0 // mm/min - #define DEFAULT_Y_MAX_RATE 600.0 // mm/min - #define DEFAULT_Z_MAX_RATE 600.0 // mm/min + #define DEFAULT_X_MAX_RATE 900.0 // mm/min + #define DEFAULT_Y_MAX_RATE 900.0 // mm/min + #define DEFAULT_Z_MAX_RATE 900.0 // mm/min #define DEFAULT_X_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 #define DEFAULT_Y_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 #define DEFAULT_Z_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2