Finish pwm soft-start

fixes #5
This commit is contained in:
Rob Giseburt
2020-01-10 19:25:11 -06:00
parent c2051d9e41
commit 65860065dd
2 changed files with 7 additions and 12 deletions
+1 -6
View File
@@ -45,13 +45,8 @@
#define SPINDLE_ENABLE_POLARITY 1 // 0=active low, 1=active high
#define SPINDLE_DIR_POLARITY 0 // 0=clockwise is low, 1=clockwise is high
#define SPINDLE_PAUSE_ON_HOLD true
#define SPINDLE_SPINUP_DELAY 1.5 // after unpausing and turning the spindle on, dwell for 1.5s
#define SPINDLE_SPINUP_DELAY 0.1 // after unpausing and turning the spindle on, dwell for 1.5s
#define SPINDLE_SPEED_CHANGE_PER_MS 7.0
// #define SPINDLE_SPEED_CHANGE_PER_MS 1.0 // testing absurdly low setting
// OLD CODE:
// // PWM soft-start: original estimate 13ms/100RPM, but tweaked for slipping
// #define SP_RPM_INCREMENT 500.0 // RPM
// #define SP_DLY_PER_RPM_INCR 75 // ms per RPM increment (above)
#define ESC_BOOT_TIME 5000 // how long the ESC takes to boot, in milliseconds
#define ESC_LOCKOUT_TIME 900 // how long the interlock needs to be engaged before killing power... actually 1s, but be conservative
+6 -6
View File
@@ -137,15 +137,15 @@ void _actually_set_spindle_speed() {
return;
}
if (fp_ZERO(spindle.speed_change_per_tick)) {
if (fp_ZERO(spindle.speed_change_per_tick)) { // || (spindle.speed <= spindle.speed_actual)
spindle.speed_actual = spindle.speed;
}
pwm_set_duty(PWM_1, _get_spindle_pwm(spindle, pwm));
if (fp_NE(spindle.speed_actual, spindle.speed)) {
if (fp_NE(spindle.speed_actual, spindle.speed)) { // && (spindle.speed > spindle.speed_actual)
// use the larger of: spindup_delay setting, or the time it'll take to ramp to the new speed, converted to seconds
if (fp_NOT_ZERO(spindle.speed_change_per_tick)) {
mp_request_out_of_band_dwell(std::max(spindle.spinup_delay, std::abs(spindle.speed_actual-spindle.speed)/spindle.speed_change_per_tick)/1000.0);
mp_request_out_of_band_dwell(spindle.spinup_delay + 0.001*std::abs(spindle.speed-spindle.speed_actual)/spindle.speed_change_per_tick);
} else {
mp_request_out_of_band_dwell(spindle.spinup_delay);
}
@@ -446,9 +446,9 @@ static float _get_spindle_pwm (spSpindle_t &_spindle, pwmControl_t &_pwm)
if ((_spindle.state == SPINDLE_CW) || (_spindle.state == SPINDLE_CCW)) {
// clamp spindle speed to lo/hi range
if (_spindle.speed_actual < speed_lo) {
_spindle.speed_actual = speed_lo;
}
// if (_spindle.speed_actual < speed_lo) {
// _spindle.speed_actual = speed_lo;
// }
if (_spindle.speed_actual > speed_hi) {
_spindle.speed_actual = speed_hi;
}