Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@ -359,11 +359,6 @@
|
||||
// pwm = scaled value. settings.rpm_min scales to SPINDLE_PWM_MIN_VALUE. settings.rpm_max
|
||||
// scales to SPINDLE_PWM_MAX_VALUE.
|
||||
|
||||
//#define SPINDLE_PWM_PERIOD (SystemCoreClock / 40000) // SystemCoreClock / frequency
|
||||
#define SPINDLE_PWM_OFF_VALUE 0.0 // SPINDLE_PWM_PERIOD * fraction
|
||||
//#define SPINDLE_PWM_MIN_VALUE (SPINDLE_PWM_PERIOD * 0.0) // SPINDLE_PWM_PERIOD * fraction
|
||||
//#define SPINDLE_PWM_MAX_VALUE (SPINDLE_PWM_PERIOD * 1.0) // SPINDLE_PWM_PERIOD * fraction
|
||||
|
||||
// Used by variable spindle output only. This forces the PWM output to a minimum duty cycle when enabled.
|
||||
// The PWM pin will still read 0V when the spindle is disabled. Most users will not need this option, but
|
||||
// it may be useful in certain scenarios. This minimum PWM settings coincides with the spindle rpm minimum
|
||||
@ -664,7 +659,7 @@
|
||||
#define LIMIT_PIN LPC_GPIO1->FIOPIN
|
||||
#define LIMIT_PORT LPC_GPIO1->FIOPIN
|
||||
#define X_LIMIT_BIT 24 // X-MIN=24, X-MAX=25
|
||||
#define Y_LIMIT_BIT 27 // Y-MIN=26, Y-MAX=27
|
||||
#define Y_LIMIT_BIT 26 // Y-MIN=26, Y-MAX=27
|
||||
#define Z_LIMIT_BIT 29 // Z-MIN=28, Z-MAX=29
|
||||
#define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)) //|(1<<Z_LIMIT_BIT)) // All limit bits
|
||||
// hard limits not ported #define LIMIT_INT PCIE0 // Pin change interrupt enable pin
|
||||
@ -754,14 +749,17 @@
|
||||
#define DEFAULT_A_CURRENT 0.0 // amps
|
||||
#define DEFAULT_X_MAX_TRAVEL 300.0 // mm
|
||||
#define DEFAULT_Y_MAX_TRAVEL 200.0 // mm
|
||||
#define DEFAULT_Z_MAX_TRAVEL 50.0 // mm
|
||||
#define DEFAULT_SPINDLE_PWM_FREQ 5000 // Hz
|
||||
#define DEFAULT_Z_MAX_TRAVEL 200.0 // mm
|
||||
#define DEFAULT_SPINDLE_PWM_FREQ 5000 // Hz
|
||||
#define DEFAULT_SPINDLE_PWM_OFF_VALUE 0.0 // Percent
|
||||
#define DEFAULT_SPINDLE_PWM_MIN_VALUE 0.0 // Percent
|
||||
#define DEFAULT_SPINDLE_PWM_MAX_VALUE 100.0 // Percent
|
||||
#define DEFAULT_SPINDLE_RPM_MAX 1000.0 // rpm
|
||||
#define DEFAULT_SPINDLE_RPM_MIN 0.0 // rpm
|
||||
#define DEFAULT_STEP_PULSE_MICROSECONDS 10
|
||||
#define DEFAULT_STEPPING_INVERT_MASK 0
|
||||
#define DEFAULT_DIRECTION_INVERT_MASK 0
|
||||
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // msec (0-254, 255 keeps steppers enabled)
|
||||
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 255 // msec (0-254, 255 keeps steppers enabled)
|
||||
#define DEFAULT_STATUS_REPORT_MASK 0 // WPos enabled
|
||||
#define DEFAULT_JUNCTION_DEVIATION 0.01 // mm
|
||||
#define DEFAULT_ARC_TOLERANCE 0.002 // mm
|
||||
|
@ -214,7 +214,10 @@ void report_grbl_settings() {
|
||||
#else
|
||||
report_util_uint8_setting(32,0);
|
||||
#endif
|
||||
report_util_uint32_setting(33,settings.spindle_pwm_freq);
|
||||
report_util_float_setting(33,settings.spindle_pwm_freq,N_DECIMAL_SETTINGVALUE);
|
||||
report_util_float_setting(34,settings.spindle_pwm_off_value,N_DECIMAL_SETTINGVALUE);
|
||||
report_util_float_setting(35,settings.spindle_pwm_min_value,N_DECIMAL_SETTINGVALUE);
|
||||
report_util_float_setting(36,settings.spindle_pwm_max_value,N_DECIMAL_SETTINGVALUE);
|
||||
// Print axis settings
|
||||
uint8_t idx, set_idx;
|
||||
uint8_t val = AXIS_SETTINGS_START_VAL;
|
||||
|
@ -87,6 +87,9 @@ void settings_restore(uint8_t restore_flag) {
|
||||
settings.arc_tolerance = DEFAULT_ARC_TOLERANCE;
|
||||
|
||||
settings.spindle_pwm_freq = DEFAULT_SPINDLE_PWM_FREQ;
|
||||
settings.spindle_pwm_off_value = DEFAULT_SPINDLE_PWM_OFF_VALUE;
|
||||
settings.spindle_pwm_min_value = DEFAULT_SPINDLE_PWM_MIN_VALUE;
|
||||
settings.spindle_pwm_max_value = DEFAULT_SPINDLE_PWM_MAX_VALUE;
|
||||
settings.rpm_max = DEFAULT_SPINDLE_RPM_MAX;
|
||||
settings.rpm_min = DEFAULT_SPINDLE_RPM_MIN;
|
||||
|
||||
@ -319,6 +322,9 @@ uint8_t settings_store_global_setting(uint8_t parameter, float value) {
|
||||
#endif
|
||||
break;
|
||||
case 33: settings.spindle_pwm_freq = value; spindle_init(); break; // Re-initialize spindle pwm calibration
|
||||
case 34: settings.spindle_pwm_off_value = value; spindle_init(); break; // Re-initialize spindle pwm calibration
|
||||
case 35: settings.spindle_pwm_min_value = value; spindle_init(); break; // Re-initialize spindle pwm calibration
|
||||
case 36: settings.spindle_pwm_max_value = value; spindle_init(); break; // Re-initialize spindle pwm calibration
|
||||
default:
|
||||
return(STATUS_INVALID_STATEMENT);
|
||||
}
|
||||
|
@ -92,7 +92,10 @@ typedef struct {
|
||||
float junction_deviation;
|
||||
float arc_tolerance;
|
||||
|
||||
uint16_t spindle_pwm_freq;
|
||||
float spindle_pwm_freq; // Hz
|
||||
float spindle_pwm_off_value; // Percent
|
||||
float spindle_pwm_min_value; // Percent
|
||||
float spindle_pwm_max_value; // Percent
|
||||
float rpm_max;
|
||||
float rpm_min;
|
||||
|
||||
|
@ -25,10 +25,10 @@
|
||||
|
||||
#ifdef VARIABLE_SPINDLE
|
||||
static float pwm_gradient; // Precalulated value to speed up rpm to PWM conversions.
|
||||
static float spindle_pwm_period;
|
||||
static float spindle_pwm_off_value;
|
||||
static float spindle_pwm_min_value;
|
||||
static float spindle_pwm_max_value;
|
||||
float spindle_pwm_period;
|
||||
float spindle_pwm_off_value;
|
||||
float spindle_pwm_min_value;
|
||||
float spindle_pwm_max_value;
|
||||
#endif
|
||||
|
||||
|
||||
@ -36,12 +36,10 @@ void spindle_init()
|
||||
{
|
||||
#ifdef VARIABLE_SPINDLE
|
||||
spindle_pwm_period = (SystemCoreClock / settings.spindle_pwm_freq);
|
||||
spindle_pwm_off_value = (spindle_pwm_period * 0.0); // SPINDLE_PWM_PERIOD * fraction
|
||||
spindle_pwm_min_value = (spindle_pwm_period * 0.0); // SPINDLE_PWM_PERIOD * fraction
|
||||
spindle_pwm_max_value = (spindle_pwm_period * 1.0); // SPINDLE_PWM_PERIOD * fraction
|
||||
|
||||
//pwm_init(&SPINDLE_PWM_CHANNEL, SPINDLE_PWM_USE_PRIMARY_PIN, SPINDLE_PWM_USE_SECONDARY_PIN, SPINDLE_PWM_PERIOD, 0);
|
||||
pwm_init(&SPINDLE_PWM_CHANNEL, SPINDLE_PWM_USE_PRIMARY_PIN, SPINDLE_PWM_USE_SECONDARY_PIN, spindle_pwm_period, 0); //SPINDLE_PWM_PERIOD
|
||||
spindle_pwm_off_value = (spindle_pwm_period * settings.spindle_pwm_off_value / 100);
|
||||
spindle_pwm_min_value = (spindle_pwm_period * settings.spindle_pwm_min_value / 100);
|
||||
spindle_pwm_max_value = (spindle_pwm_period * settings.spindle_pwm_max_value / 100);
|
||||
pwm_init(&SPINDLE_PWM_CHANNEL, SPINDLE_PWM_USE_PRIMARY_PIN, SPINDLE_PWM_USE_SECONDARY_PIN, spindle_pwm_period, 0);
|
||||
pwm_enable(&SPINDLE_PWM_CHANNEL);
|
||||
|
||||
/* not ported
|
||||
@ -54,7 +52,6 @@ void spindle_init()
|
||||
#endif
|
||||
*/
|
||||
|
||||
//pwm_gradient = (SPINDLE_PWM_MAX_VALUE-SPINDLE_PWM_MIN_VALUE)/(settings.rpm_max-settings.rpm_min);
|
||||
pwm_gradient = (spindle_pwm_max_value-spindle_pwm_min_value)/(settings.rpm_max-settings.rpm_min);
|
||||
|
||||
#else
|
||||
@ -145,21 +142,21 @@ void spindle_stop()
|
||||
rpm *= (0.010*sys.spindle_speed_ovr); // Scale by spindle speed override value.
|
||||
if (rpm <= 0) {
|
||||
sys.spindle_speed = 0;
|
||||
pwm_value = spindle_pwm_off_value; //SPINDLE_PWM_OFF_VALUE
|
||||
pwm_value = spindle_pwm_off_value;
|
||||
}
|
||||
else if (rpm <= settings.rpm_min) {
|
||||
sys.spindle_speed = settings.rpm_min;
|
||||
pwm_value = spindle_pwm_min_value; //SPINDLE_PWM_MIN_VALUE
|
||||
pwm_value = spindle_pwm_min_value;
|
||||
}
|
||||
else if (rpm >= settings.rpm_max) {
|
||||
sys.spindle_speed = settings.rpm_max;
|
||||
pwm_value = spindle_pwm_max_value - 1; //SPINDLE_PWM_MAX_VALUE
|
||||
pwm_value = spindle_pwm_max_value - 1;
|
||||
}
|
||||
else {
|
||||
sys.spindle_speed = rpm;
|
||||
pwm_value = floor((rpm - settings.rpm_min) * pwm_gradient) + spindle_pwm_min_value; //SPINDLE_PWM_MIN_VALUE
|
||||
if(pwm_value >= spindle_pwm_max_value) //SPINDLE_PWM_MAX_VALUE
|
||||
pwm_value = spindle_pwm_max_value - 1; //SPINDLE_PWM_MAX_VALUE
|
||||
pwm_value = floor((rpm - settings.rpm_min) * pwm_gradient) + spindle_pwm_min_value;
|
||||
if(pwm_value >= spindle_pwm_max_value)
|
||||
pwm_value = spindle_pwm_max_value - 1;
|
||||
}
|
||||
return(pwm_value);
|
||||
}
|
||||
|
@ -40,6 +40,10 @@ uint8_t spindle_get_state();
|
||||
// Immediately sets spindle running state with direction and spindle rpm via PWM, if enabled.
|
||||
// Called by spindle_sync() after sync and parking motion/spindle stop override during restore.
|
||||
#ifdef VARIABLE_SPINDLE
|
||||
extern float spindle_pwm_period;
|
||||
extern float spindle_pwm_off_value;
|
||||
extern float spindle_pwm_min_value;
|
||||
extern float spindle_pwm_max_value;
|
||||
|
||||
// Called by g-code parser when setting spindle state and requires a buffer sync.
|
||||
void spindle_sync(uint8_t state, float rpm);
|
||||
|
@ -385,7 +385,7 @@ extern "C" void TIMER1_IRQHandler()
|
||||
st_go_idle();
|
||||
#ifdef VARIABLE_SPINDLE
|
||||
// Ensure pwm is set properly upon completion of rate-controlled motion.
|
||||
if (st.exec_block->is_pwm_rate_adjusted) { spindle_set_speed(SPINDLE_PWM_OFF_VALUE); }
|
||||
if (st.exec_block->is_pwm_rate_adjusted) { spindle_set_speed(spindle_pwm_off_value); }
|
||||
#endif
|
||||
system_set_exec_state_flag(EXEC_CYCLE_STOP); // Flag main program for cycle end
|
||||
return; // Nothing to do but exit.
|
||||
@ -907,7 +907,7 @@ void st_prep_buffer()
|
||||
prep.current_spindle_pwm = spindle_compute_pwm_value(rpm);
|
||||
} else {
|
||||
sys.spindle_speed = 0.0;
|
||||
prep.current_spindle_pwm = SPINDLE_PWM_OFF_VALUE;
|
||||
prep.current_spindle_pwm = spindle_pwm_off_value;
|
||||
}
|
||||
bit_false(sys.step_control,STEP_CONTROL_UPDATE_SPINDLE_PWM);
|
||||
}
|
||||
|
Reference in New Issue
Block a user