Fixed estop handling and spindle stop
authorJoseph Coffland <joseph@cauldrondevelopment.com>
Sat, 13 May 2017 07:35:43 +0000 (00:35 -0700)
committerJoseph Coffland <joseph@cauldrondevelopment.com>
Sat, 13 May 2017 07:35:43 +0000 (00:35 -0700)
avr/src/estop.c
avr/src/hardware.c
avr/src/huanyang.c
avr/src/huanyang.h
avr/src/plan/state.c
avr/src/pwm_spindle.c
avr/src/pwm_spindle.h
avr/src/spindle.c
avr/src/spindle.h
src/py/bbctrl/AVR.py

index d8887afa451fddef180868d5a95106e0f76f3c8d..d0a9613cc918ec0928ee72c059d9bd0959da12b0 100644 (file)
@@ -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();
index ec652f8473ab79a213900822e32527b44764a6bf..4b905be80dcf7429436d1a40cd533cc1dfcdb443 100644 (file)
@@ -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();
index 0defd37e214e30ce73b8f2bdd2c024132f2ee578..f43bf11095b5f90091e26941872eefa2e5e1be60 100644 (file)
@@ -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);
 }
 
 
index 7a84c809828fdf3a6cf0147eb169a268f154c795..1e5225807fa07a073ea804b35eaad5e4ed804790 100644 (file)
@@ -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();
index 9c6437cd2f771cb1077a99d7fe6d8ff18a854f00..a8abd2bc81791950b0d3bb48962351e3d37cfcfb 100644 (file)
@@ -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;
index 98e25e5074d01df8eabb491eff6914412a57c809..144da67c6213566cae86b82099bb0e29c59b3f82 100644 (file)
@@ -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
index 969fbaf23e4bf68972c6b65958753015e4549229..10006a6d3f5eaa20dae6ffbdf61cf9db6ab1945e 100644 (file)
@@ -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();
index d39e51b02ca1533a1ec6d2cd1184661e33b87233..899c7ae3c096ecdfed9012cbda7424ce20a4fe95 100644 (file)
@@ -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;
   }
 }
 
index f7686e44b1bf9d869bde86e6397d0eb56060bd4d..1da23c25232adf0b94ead959a2e19aaf710cfa1d 100644 (file)
@@ -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();
index 99af7438555137c0a42f25157ae00f4d3134286d..824093bcc54c74e2c8cb35ceebce0cc4be1762c6 100644 (file)
@@ -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)