robot

Dependencies:   FastPWM3 mbed

Revision:
204:74714d52a936
Parent:
203:cb2a3ea31dce
Child:
205:5cfe6d7e08a3
--- a/main.cpp	Mon Feb 12 03:41:12 2018 +0000
+++ b/main.cpp	Mon Feb 12 04:12:07 2018 +0000
@@ -87,6 +87,16 @@
         
     /*set outputs*/
     float va, vb, vc, voff;
+    
+    invclarke(foc.valpha, foc.vbeta, &va, &vb);
+    vc = -va - vb;
+    
+    /*SVPWM*/
+    voff = (fminf(va, fminf(vb, vc)) + fmaxf(va, fmaxf(vb, vc)))/2.0f;//don't think about it
+    va = va - voff;
+    vb = vb - voff;
+    vc = vc - voff;
+        
     switch (BREMS_mode) {
     case MODE_CFG:
         va = 0.0f;
@@ -94,13 +104,6 @@
         vc = 0.0f;
         break;
     case MODE_RUN:
-        invclarke(foc.valpha, foc.vbeta, &va, &vb);
-        vc = -va - vb;
-        /*SVPWM*/
-        voff = (fminf(va, fminf(vb, vc)) + fmaxf(va, fmaxf(vb, vc)))/2.0f;//don't think about it
-        va = va - voff;
-        vb = vb - voff;
-        vc = vc - voff;
         break;
     case MODE_ZERO:
         va = 0.9f;
@@ -113,27 +116,12 @@
     }
     
     /*safety checks, reset integral*/
-    if (!checks_passed()) {
-        /*do this even in disabled state, to keep integral down*/
-        go_disabled();
-    }
-    
-    /*some modes disable output*/
-    switch (BREMS_mode) {
-    case MODE_CFG:
+    if (!checks_passed() || !mode_enables_output()) {
         go_disabled();
-        break;
-    case MODE_RUN:
-    case MODE_ZERO:
-    case MODE_CHR:
-        break;
-    default:
-        go_disabled();
-        break;
     }
         
     /*log data*/
-    if (_ENABLE_LOGGING) log();
+    if (_ENABLE_LOGGING && mode_enables_logging()) log();
     
     /*disable outputs if necessary*/
     if (!control.enabled) {
@@ -171,19 +159,6 @@
 }
 
 void log() {
-    switch (BREMS_mode) {
-    case MODE_RUN:
-        send_packet();
-        break;
-    case MODE_CFG:
-    case MODE_ZERO:
-    case MODE_CHR:
-    default:
-        break;
-    }
-}
-
-void send_packet() {
     float packet[8];
     packet[0] = read.w / 8.0f;
     packet[1] = control.d_ref / 2.0f + 128.0f;