From 99729c898d34254e01add50646e5e1be450e00cb Mon Sep 17 00:00:00 2001 From: Joseph Coffland Date: Sat, 13 May 2017 00:35:43 -0700 Subject: [PATCH] Fixed estop handling and spindle stop --- avr/src/estop.c | 6 ++---- avr/src/hardware.c | 2 +- avr/src/huanyang.c | 11 ++--------- avr/src/huanyang.h | 3 +-- avr/src/plan/state.c | 4 ++++ avr/src/pwm_spindle.c | 24 +++++++++++++----------- avr/src/pwm_spindle.h | 2 +- avr/src/spindle.c | 6 +++--- avr/src/spindle.h | 2 +- src/py/bbctrl/AVR.py | 7 ++++--- 10 files changed, 32 insertions(+), 35 deletions(-) diff --git a/avr/src/estop.c b/avr/src/estop.c index d8887af..d0a9613 100644 --- a/avr/src/estop.c +++ b/avr/src/estop.c @@ -82,9 +82,7 @@ void estop_init() { } -bool estop_triggered() { - return estop.triggered || switch_is_active(SW_ESTOP); -} +bool estop_triggered() {return estop.triggered || switch_is_active(SW_ESTOP);} void estop_trigger(stat_t reason) { @@ -93,7 +91,7 @@ void estop_trigger(stat_t reason) { // Hard stop the motors and the spindle st_shutdown(); - spindle_estop(); + spindle_stop(); // Set machine state mp_state_estop(); diff --git a/avr/src/hardware.c b/avr/src/hardware.c index ec652f8..4b905be 100644 --- a/avr/src/hardware.c +++ b/avr/src/hardware.c @@ -130,7 +130,7 @@ void hw_hard_reset() { /// Controller's rest handler void hw_reset_handler() { if (hw.hard_reset) { - while (huanyang_stopping() || !usart_tx_empty() || !eeprom_is_ready()) + while (!usart_tx_empty() || !eeprom_is_ready()) continue; hw_hard_reset(); diff --git a/avr/src/huanyang.c b/avr/src/huanyang.c index 0defd37..f43bf11 100644 --- a/avr/src/huanyang.c +++ b/avr/src/huanyang.c @@ -111,7 +111,6 @@ typedef struct { bool connected; bool changed; - bool estop; spindle_mode_t mode; float speed; @@ -432,7 +431,7 @@ void huanyang_init() { void huanyang_set(spindle_mode_t mode, float speed) { - if ((ha.mode != mode || ha.speed != speed) && !ha.estop) { + if (ha.mode != mode || ha.speed != speed) { if (ha.debug) STATUS_DEBUG("huanyang: mode=%d, speed=%0.2f", mode, speed); ha.mode = mode; @@ -503,15 +502,9 @@ void huanyang_rtc_callback() { } -void huanyang_estop() { +void huanyang_stop() { huanyang_set(SPINDLE_OFF, 0); huanyang_reset(); - ha.estop = true; -} - - -bool huanyang_stopping() { - return ha.estop && (ha.changed || ha.next_command_cb == _update); } diff --git a/avr/src/huanyang.h b/avr/src/huanyang.h index 7a84c80..1e52258 100644 --- a/avr/src/huanyang.h +++ b/avr/src/huanyang.h @@ -34,5 +34,4 @@ void huanyang_init(); void huanyang_set(spindle_mode_t mode, float speed); void huanyang_reset(); void huanyang_rtc_callback(); -void huanyang_estop(); -bool huanyang_stopping(); +void huanyang_stop(); diff --git a/avr/src/plan/state.c b/avr/src/plan/state.c index 9c6437c..a8abd2b 100644 --- a/avr/src/plan/state.c +++ b/avr/src/plan/state.c @@ -34,6 +34,7 @@ #include "buffer.h" #include "arc.h" #include "stepper.h" +#include "spindle.h" #include "report.h" @@ -236,6 +237,9 @@ void mp_state_callback() { mach_set_axis_position(axis, mp_runtime_get_axis_position(axis)); } + // Stop spindle + spindle_stop(); + // Resume if (ps.resume_requested) { ps.flush_requested = ps.resume_requested = false; diff --git a/avr/src/pwm_spindle.c b/avr/src/pwm_spindle.c index 98e25e5..144da67 100644 --- a/avr/src/pwm_spindle.c +++ b/avr/src/pwm_spindle.c @@ -47,9 +47,21 @@ typedef struct { static pwm_spindle_t spindle = {0}; +static void _spindle_set_enable(bool enable) { + SET_PIN(SPIN_ENABLE_PIN, enable ^ spindle.enable_invert); +} + + +static void _spindle_set_dir(bool forward) { + SET_PIN(SPIN_DIR_PIN, !(forward ^ spindle.reverse)); +} + + static void _spindle_set_pwm(spindle_mode_t mode, float speed) { if (mode == SPINDLE_OFF || speed < spindle.min_rpm || estop_triggered()) { TIMER_PWM.CTRLA = 0; + OUTCLR_PIN(SPIN_PWM_PIN); + _spindle_set_enable(false); return; } @@ -102,16 +114,6 @@ static void _spindle_set_pwm(spindle_mode_t mode, float speed) { } -static void _spindle_set_enable(bool enable) { - SET_PIN(SPIN_ENABLE_PIN, enable ^ spindle.enable_invert); -} - - -static void _spindle_set_dir(bool forward) { - SET_PIN(SPIN_DIR_PIN, !(forward ^ spindle.reverse)); -} - - void pwm_spindle_init() { // Configure IO _spindle_set_dir(true); @@ -130,7 +132,7 @@ void pwm_spindle_set(spindle_mode_t mode, float speed) { } -void pwm_spindle_estop() {_spindle_set_pwm(SPINDLE_OFF, 0);} +void pwm_spindle_stop() {_spindle_set_pwm(SPINDLE_OFF, 0);} // TODO these need more effort and should work with the huanyang spindle too diff --git a/avr/src/pwm_spindle.h b/avr/src/pwm_spindle.h index 969fbaf..10006a6 100644 --- a/avr/src/pwm_spindle.h +++ b/avr/src/pwm_spindle.h @@ -32,4 +32,4 @@ void pwm_spindle_init(); void pwm_spindle_set(spindle_mode_t mode, float speed); -void pwm_spindle_estop(); +void pwm_spindle_stop(); diff --git a/avr/src/spindle.c b/avr/src/spindle.c index d39e51b..899c7ae 100644 --- a/avr/src/spindle.c +++ b/avr/src/spindle.c @@ -91,10 +91,10 @@ spindle_mode_t spindle_get_mode() {return spindle.mode;} float spindle_get_speed() {return spindle.speed;} -void spindle_estop() { +void spindle_stop() { switch (spindle.type) { - case SPINDLE_TYPE_PWM: pwm_spindle_estop(); break; - case SPINDLE_TYPE_HUANYANG: huanyang_estop(); break; + case SPINDLE_TYPE_PWM: pwm_spindle_stop(); break; + case SPINDLE_TYPE_HUANYANG: huanyang_stop(); break; } } diff --git a/avr/src/spindle.h b/avr/src/spindle.h index f7686e4..1da23c2 100644 --- a/avr/src/spindle.h +++ b/avr/src/spindle.h @@ -36,4 +36,4 @@ void spindle_set_mode(spindle_mode_t mode); void spindle_set_speed(float speed); spindle_mode_t spindle_get_mode(); float spindle_get_speed(); -void spindle_estop(); +void spindle_stop(); diff --git a/src/py/bbctrl/AVR.py b/src/py/bbctrl/AVR.py index 99af743..824093b 100644 --- a/src/py/bbctrl/AVR.py +++ b/src/py/bbctrl/AVR.py @@ -201,14 +201,14 @@ class AVR(): update.update(msg) log.debug(line) - if 'msg' in update: break + if 'msg' in msg: break if update: - if 'firmware' in msg: + if 'firmware' in update: log.error('AVR rebooted') self.connect() - if 'x' in msg and msg['x'] == 'ESTOPPED': + if 'x' in update and update['x'] == 'ESTOPPED': self._stop_sending_gcode() self.vars.update(update) @@ -223,6 +223,7 @@ class AVR(): except Exception as e: log.error('Updating Web: %s', e) + def queue_command(self, cmd): self.queue.append(cmd) self.set_write(True) -- 2.27.0